프로그래머를 위한 동의보감

The Pragmatic Programmer : From Journeyman to Master

저자들이 우리에게 일깨워주고자 하는 것은 ‘균형 감각’이다. “월간 마이크로소프트웨어, 기획 연재, 고전을 찾아서, 2003년 8월 호"에 실린 글을 옮겼다. 이 책의 저자들은 자신들의 풍부한 실무 경험을 바탕으로, 실용주의 엔지니어의 가장 중요한 자격은 ‘폭넓은 사고와 굳건한 이론을 바탕으로하는 균형 잡힌 경험’이라는 사실을 가슴에 와닿게 일깨워주고자 했을 따름이다. 겉멋 부리던 시절이다. 부끄러운 기억도 추억이라 그대로 옮기려고 했는데 너무 낯 뜨거운 글귀가 많아서 …로 뺐다. (2026년 1월)

이 책을 처음 본 것이 재작년이었지 싶다. … The Pragmatic Programmer Book Cover Kizoo signat호re 글 말미에 붙였던 서명 이미지 Image 모(?) 잡지에 기고했던 글을 동명정보기술원 홈피에 올렸을 때 제목 이미지

… 이 책을 처음 펼쳐 서문을 읽어내려 갈 때 받았던 첫 느낌만은 확실하게 기억한다. … 늦게까지 사무실에 죽치고 앉아 숨죽여 이 책을 훑어 내렸다. …

알찬 경험을 통해 실용주의에 바탕을 두고 프로그래밍의 기본 원리를 상기시키는 책 - 이 책은 고전이다. 여기에 올라온 서평을 훑어보고, 이 책을 샀다. 나는 20년이 넘는 세월 동안 여러 가지 언어로, 다양한 운영체제에서 프로그램을 개발했다. (중략) 나에게 프로그래밍은 언제나 크래프트(craft) 이 단어를 기술이라고 번역해 버리면 곤란하다. 우리말의 ‘기술’과는 전혀 다른 뜻이다. 필자 생각에는 가장 비슷한 단어가 ‘공예’인데, 이 분야 서적에서 잘 쓰지 않는 단어라서 일부러 영어 발음을 그대로 우리말로 옮겼다. 였다. 그래서 언제나 간단한 용어만으로, 깔끔하게 크래프트를 설명할 수 있는 사람을 (인정하고) 좋아했다. 왜냐하면 각자가 하는 일에 자긍심을 불러 일으켜서, 모두 제 일에 최선을 다하게 만들기 때문이다. 이 책을 읽어 동안 몇 번이나, “그래, 이게 제대로지, 당연히 이래야 옳지 - 정말 속 시원하게 설명하는구나!” 하고 생각했다. 이 책이 강조하는 바는, 프로그래밍 분야에서 경력을 쌓은 사람이라면 당연히 알고 있어야 할 만한 내용이다 (역자주: 나중에도 다시 얘기하겠지만 이 책의 내용은 전혀 새로울 게 없다). 그러나 다른 분야의 사람도 그 내용을 이해하여 응용할 수 있을 만큼 쉽고도 시원스럽게 설명한다. (중략) 이 책은 알찬 경험을 바탕으로 프로그래밍 크래프트를 개선하는 방법에 대해 실용주의적 관점에서 반드시 필요한 것이 무엇인가를 되새기게 만든다.

Mark W Mitchell, Roswell, GA USA, 2000년 12월 22일

여기서 이 책 서문의 한 구절을 맛보기로 하자.

프로그래밍은 어려운 작업이다. 그래서 그 일을 도와주는 이도 많다. 툴을 만드는 회사는 자기네 제품이 기적같이 일을 처리해줄 것이라 뽐낸다. 방법론 전문가들은 자기네가 고안한 기법을 쓰면 결과가 보장될 것이라 장담한다. 모두가 이 프로그래밍 언어가 가장 좋고, 저 운영체제가 만병통치약이라고 입을 모은다.

당연히 모두 거짓말이다. 원하는 답을 쉽게 얻어낼 수 있는 방법이란 세상에 없다. 다시 말해, 완벽한 해결책 같은 것은 존재하지도 않는다. 그것이 툴이든 언어든 운영체제든 마찬가지다. 그저 어떤 특정한 상황에서 좀 더 적당한 시스템이 있을 뿐이다. 바로 여기에 실용주의가 자리한다. 특정 기술만 고집하지 말고 주어진 상황에서 좋은 해결책을 자유롭게 선택할 수 있도록 폭넓고 충분한 바탕과 경험을 가지고 있어야 한다. 컴퓨터 과학의 기본 원리를 배워가면서 그와 같은 바탕이 마련되고 다양한 프로젝트를 통해 경험이 쌓여간다. 그렇게 이론과 실제를 하나로 합쳐야 튼튼한 엔지니어가 될 수 있다.

Andrew Hunt, David Thomas, The Pragmatic Programmer: From Journeyman to Master, 1st ed. 1999

늙은 개와 새로운 재주 #

실의에 잠겨있던 시절에 이 책을 알게 됐다. 12년이 넘도록 소프트웨어 분야에서 일하다 보니 언제부턴가 나 자신이 ‘요즘’ 코딩 기법에 대해 전혀 아는 것이 없는 화석 같은 존재처럼 느껴졌다. 그런 나에게 이 책은 자신감을 되찾아 주었다. 나는 여전히 잘 알고 있었다. 내가 무엇을 얘기해 왔으며 그 동안의 경험이 오늘날의 소프트웨어 환경과도 관련이 있다는 사실을. 저자들에게 어떻게 감사해야 좋을지 모르겠다.

이 책에서 가장 마음에 드는 부분은 실세계를 바탕으로 하고 있다는 점이다. 그저 그렇게 되어야 옳다는 이유만으로 뜬구름 잡는 공상을 써내려 간 것이 아니라 저자 스스로가 경험으로부터 그 가치를 깨닫게 된 것만을 다루고 있다. 이 책에 많은 부분 - 특히 나 자신이 취약한 분야에서 크게 공감하지 않을 수 없었다.

여러 가지로 이 책은 내 오랜 신념(예를 들어 커맨드라인도 개발자에게 여전히 쓸모 있는 것이라는 사실)에 확신을 더해 주었다. 그러나 문서화나 메타프로그래밍에 대해 더 많은 생각을 하도록 부추기는 역할도 했다. 예전에도 그런 논제를 가끔씩 생각해 보기는 했지만 Andy와 Dave는 그런 기법을 내가 하는 일에도 적용할 수 있으며, 전반적으로 주어진 업무량을 줄일 수 있다는 점을 깨우쳐 주었다. 당시에는 맡은 작업을 즉각 마무리는 것이 무엇보다 중요하게 보였기 때문에 언제나 메타프로그래밍과 같은 기법을 피했다.

이 책을 어떻게 더 칭찬해야 좋을까. 이 책은 Steve McConnell의 『Code Complete』과 다른 방식으로 소프트웨어 작업의 실용성을 논한다. 내 생각에는 수다스런 문체에 차이점이 있다고 생각한다. 『Code Complete』은 여러 면에서 탄복할 역작이지만, 『The Pragmatic Programmer』에 비하면 훨씬 무뚝뚝하다. 그래서 엔지니어라면 두 권의 책을 모두 읽어보라 권하고 싶다. 『Code Complete』은 결점을 찾기 어려울 만치 기본적인 논제(C 코드에서 괄호 위치에 대한 얘기를 제외하면)를 다루는 반면, TPP는 무엇을 하고 무엇을 하지 말아야 하는지, 좀 더 폭넓은 환경에서 업무의 실용성에 뿌리를 두고 얘기를 풀어간다.

진심으로 TPP를 누구에게나 권하고 싶다. 특히, 수년간 소프트웨어 개발에 몸담아 왔던 이 들에게 이 책을 권한다.

Gordon J Milne, 뉴질랜드, 웰링톤, 2002년 1월 15일

이 책의 첫 장에서는 프로그래머로서 우리 ‘자신이 매일 매일 작업하는 방식을 다시 꼼꼼히 훑어보라.‘는 충고를 아끼지 않는다. 어떤 부분은 너무 당연하고 어떤 부분은 받아들이기에 너무 억지스럽다. 그러나 어느 한 가지도 현실을 벗어나서 말하기 좋으라고 지어낸 얘기가 없다.

프로그래밍에는 (그런 것이 있다손 치면) 법칙이랄 만한 것이 거의 없다. 그래서 보통 ‘그랬으면 싶은 법칙’에 맞추어 이런 저런 방법론을 그려낸다. 그렇게 하면 글쓰기에 좋을지는 몰라도 실제로 잘 적용되지는 않는다. 그 많은 방법론 서적에서 계속 잘못하고 있는 부분이 바로 그것이다.(중략)

이 책의 철학은 독자의 의식 속으로 서서히 스며들어 독자가 가진 것과 하나가 된다. 훈계하거나 설교하지 않는다. 그저 무엇이 잘 돌아가는지만 말해줄 뿐이다. 그러나 그렇게 해서 더 많은 목적을 이루어낸다. 이 책은 아름답다. 철학을 내포하고 있지만, 겉멋을 부리지 않기 때문에.

워드 커닝엄

고전 아닌 고전 #

TPP는 출판된 지 채 3년이 못된 책이니 나이로만 치자면 고전이라 할 수 없다. 그러나 내용만큼은 아주 케케묵은 고전이다. 사실 여러 방법론 책을 한 데 모아다 비교해 봐도 이 책만큼 새로운 용어나 이론을 소개하지 않는 책도 드물다. 이런 단점을 꼬집어 이 책의 가치를 부정하는 사람도 더러 있다(필자가 이 빳빳한 새 책을 ‘고전을 찾아서’란 기획에 버젓이 소개하는 이유가 이 때문이다. Milne 씨처럼 해묵은 기술자가 이 책 속에서 자신감을 되찾게 된 것도 비슷한 맥락이라 하겠다).

나는 서문을 읽은 후에 서문과 첫 장에 담긴 좋은 주제를 찾아볼 목적으로 이 책을 샀다. 사실 그 다음에 이어지는 모든 내용은 다른 입문 서적에서 쉽게 찾아볼 수 있는 것이었는데, 저자들은 마치 5분 전에 처음 그런 이치를 발견한 사람처럼 난리 법석을 띤다. 결국 이 책의 분위기는 지나치게 현학적이고, 다루는 내용은 새로울 게 전혀 없다.

Paul Epps, Irvine, CA USA, 2003년 2월 4일

사실이다. TPP에서 참신하고 혁신적인 내용이라고는 찾아볼 수가 없다. 그러나 이 책은 경험의 진실을 말하는 책이지, 결코 저명한 학자가 주창하는 이론을 엄밀하게 논하는 책이 아니다. 어떤 이론이 제 아무리 정교하고 신선하다고 해도 경험의 증거가 뒷받침되지 않으면 설득력이 없는 법이다. 만일 비슷한 내용을 어느 연구실의 젊은 학자가 썼다면 이토록 호응이 대단할 수 있었을까?

솔직히 말해 TPP에서 언급하는 프로그래밍 이론은 전문 연구기관의 초보 연구원 수준에도 미치지 못할 만큼 얄팍하다. 그러므로, 필자가 생각하기에, 이 책을 선택한 독자는 새로운 이론이나 기법을 배우고자 하는 것이 아니라 이미 귀에 못이 박히도록 들어온 교과서 속의 이론들이 실제로도 진정 살아 숨쉬고 있는지 확인하고 싶어서 기꺼이 시간을 투자하는 것이다.

굳이 TPP의 고루한 내용을 비판하고 들자면 맘에 들지 않는 부분이 한두 가지가 아니다. 특히, 3장은 곰팡내가 풀풀 날 정도다. 여기서는 난데없이 ‘텍스트’ 데이터와 유닉스 커맨드라인이 실제로 소프트웨어 개발 과정의 생산성을 보장하는 프로그래밍 도구라고 설명한다. 심지어 윈도우에서도 유닉스 호환 환경을 쓸 수 있도록 Cygwin과 같은 툴을 써보는 것이 어떠냐고 제안하기까지 한다. 그러나 셸(shell)을 가지고 놀아본 적도 없고 한 프로그램에서 필요한 모든 기능을 끌어다 쓸 수 있는 통합 개발 환경이 개발 경험의 전부인 독자들에게는 선뜻 받아들이기 어려운 내용일 가능성이 높다. 아니, 왜 만지기 쉬운 환경을 마다하고, 덜떨어져 보이는 인터프리터 환경을 다시 배워야 하는가? 저자들은 자신들이 유닉스 프로그래밍 환경에 익숙해져 있기 때문에 독자들도 그 유산을 이어받아야 한다고 고집을 부리는 것이 아닌가? 그렇다면 저자들이 말하는 실용주의란 그저 고루하고 편협한 경험을 되씹어 내보이는 넋두리에 불과한 것이 아닌가?

그런 오해가 아무래도 풀어지지 않는다면 잠시 책을 덮고 저자들의 본심이 무엇인지 골똘히 생각해 봐야 한다. 얼마나 다양한 환경에서 얼마나 많은 프로젝트를 수행했는지 따지자면, 아마 대부분의 독자들은 그 경험의 양과 질이 TPP 저자들에 미치지 못할 것이다. 현 시대의 프로그래밍 도구가 생산성을 향해 어떻게 진보해왔는지는 저자들이 더 잘 알고 있다(그들이 오히려 산 증인이다). 그리고 지금이 ‘셸과 텍스트’의 시대가 아니라는 것은 이 분야의 누구라도 모를 리 없는 사실인데, 프로그래밍의 실용주의를 논하는 이들이 시대를 역행하는 철학을 우겨댈 만큼 어리석을까? 저자들이 우리에게 일깨워주고자 하는 것은 ‘균형 감각’이다. 지금이 ‘GUI와 멀티미디어’의 시대이기 때문에 오해를 감수하고서라도 ‘셸과 텍스트’의 가치를 설명하고자 하는 것이다. ‘폭넓은 사고에서 비롯된 균형 잡힌 경험’이야말로 실용주의 엔지니어의 가장 중요한 자격이란 사실을 가슴에 와닿게 일깨워 주고자 했을 따름이다.