본문 바로가기

[ IT Column ]/Self Trainning

Oneself training for Programmer - Books


[ 프로그래머의 자기 수련 - 서적 ]


 다음의 서적들은 프레드 브룩스, 팀 버너스리, 앨런 쿠퍼, 제임스 고슬링, 브라이언 커니건, 스티브 맥코넬, 앤드류 타넨바움, 윌리엄 스톨링, 제럴드 웨인버그 등과 같은 컴퓨터 역사에 이름이 남을 만한 유명인으로부터 실전에서 20년 이상을 구르고 베테랑으로 알려진 프로그래밍의 노장과 달인들이 공통적으로 "자신에게 가장 많은 영향을 준 컴퓨터 관련 책"으로 꼽은 것을 필자가 몇 년에 걸쳐 수집하고 추려낸 것이다. 재밌게도 컴퓨터와는 별 관련 없어 보이는 책들도 몇 권 있다. 역시 유행과 동떨어졌기에 유행에서 살아남을 수 있었던 것이리라. 여기 나열된 책들은 대부분 처음 출판된 지 10년이 넘은 것이고 어떤 것은 30년이 넘은 것도 있다. 이런 고생대의 화석이 아직까지도 우리 시대에 유효할 수 있다는 것 자체가 경이로울 뿐이다. 정말 좋은 책이란 읽을 때마다 새로운 맛이 소록소록 나오고, 자신이 가진 문제에 늘 다양한 매듭을 제공해 주는 것이다. 수천 년을 면면히 이어 내려온 노자 도덕경이 인류 곁을 아직 떠나지 않는 이유일지도 모르겠다. 전문 프로그래머라면 항상 기술 중심적이고 구체적인 책을 한 손에 들고 공부하면서도, 이런 일반적이고 유행과 상관없는 책을 다른 손에서 놓치지 않아야 할 것이다.

◆The Art Of Computer Programming (TAOCP), Knuth, Donald
  알고리즘과 자료 구조에 관한 최고의 책이다. 프로그래머서로 정말 충실하게 공부해둬야만 나중에 좌절을 맛보는 경험을 피할 수 있다. 현재 세 권까지 출판돼 있고, 1997년에 세 번째 판이 나왔다. 읽을 자신이 없다면 최소한 이 책들의 목차만이라도 봐두자. 상대적으로 좀 가벼운 책으로는 로버트 세드게윅(Rovert Sedgewick)이나 토마스 코멘 외 2인 공저의 "Introduction to Algorithm"를 참고하라.

◆Programming Pearls, Bentley, Jon Louis
  실질적인 코드(C, C++)와 함께 알고리즘 개선, 코드 최적화 등을 다룬다. CACM에 연재됐던 것을 모으고 좀더 덧붙인 것이다. 현재 프로젝트에서 알고리즘이나 자료 구조에서 문제가 생기면 일단 마음을 차분히 가라앉히고 조용한 곳에서 이 책을 읽어 보라.

◆Structure and Interpretation of Computer Programs, Abelson, Harold , et al
  미국 MIT 대학에서 10년이 넘도록 입문 코스용 교과서로 사용되고 있는 유명한 고전이다. 비록 수년이 흘렀고, Scheme이라는 그다지 대중적이지 못한 언어를 사용했지만, 이 책은 여전히 고전으로서 가치가 빛나고 있다. 세월이 가도 변치 않을 프로그래밍의 근본 원리 전달을 목적으로 집필됐기 때문일 것이다. 이 책은 겉 표지에 마법사 그림이 있어서 마법사 책이라고 불리며, 에릭 레이먼드의 해커 사전에도 등재돼 있다.

◆Design Patterns, Gamma, Erich, et al.
 하나의 디자인 패턴은 특정한 종류의 문제를 해결하는, 프로그래밍 언어보다는 좀더 추상적인 차원에서 일반적인 방법을 서술한다. 저자들은 "네 명의 동지들(Gang of Four)"로 더 알려져 있다. 국내 서점에서도 바닥이 날 정도로 잘 팔리는 베스트 셀러이다. 

◆A Pattern Language : Towns, Buildings, Construction, Alexander Christopher

 패턴 언어는 원래 건축학에서 온 개념이다. 건물을 짓는 것과 소프트웨어를 만드는 것(영어로는 모두 build라고 한다) 간에는 상당한 유사점이 있다. 디자인 패턴을 본 사람이라면 이 개념의 원류를 공부해 보는 것이 매우 유익할 것이다. 이 책과 함께 많이 읽히는 "Timeless Way of Building" 은 좀더 철학적(노장사상과 관계가 깊다)이고 사변적이다. 이것을 읽는다면 세상을 보는 관점이 바뀔 것이다. 흔히 알렉산더의 이론에 대한 반대로 실증적인 결과와 예가 없다는 것인데, 그의 "The Production of Houses"를 꼭 읽어보길 권한다. 필자는 이 책에서 프로젝트 관리와 적응적 개발(adaptive developement)등의 가능성을 발견했다.

◆How Buildings Learn : What Happens After They"re Built, Brand, Stewart

 비교적 최근에 출간된 책으로 건축학적인 개념에서 어떻게 건물이 "진화"하고 스스로 변화시켜 나가는지를 보여 주며, 진화하기 좋은 건축물은 어떤 것인가에 대한 진지한 고찰이 들어있다. 우리 프로그래머들이 고민하는 문제와 동일하다. 따라서 프로그래밍을 새로운 관점에서 볼 수 있을 것이다.

◆The Mythical Man-Month : Essays on Software Engineering, Brooks, Frederick
 더 이상 설명할 필요가 없는 책이다. 진행 중인 프로젝트 팀에 더 많은 인원을 쏟아 부으면 오히려 제품출시가 더욱 늦어진다는 점을 밝힌 것으로 유명하다. 소프트웨어 공학에 관심이 없거나 기반 지식이 전무한 사람도 읽어볼 만한 책이다.

◆Code Complete, McConnell, Steve
 소프트웨어 구축 과정에 관한한 거의 모든 사항을 "코드 중심으로" 모아둔 집적체다. 필자는 아직까지 이 주제를 다루면서 이 정도로 포괄적이면서 동시에 가치있는 책을 보지 못했다. 특히 33장의 참고자료는 더 많은 자료를 원하는 사람에게 유용하다.

◆How to Solve It, Polya, George
 문제 해결에 관한 한 최고의 베스트 셀러다. 한글 번역판이 있는 데, 국내에서 이 책의 가치가 제대로 평가되지 못하고 수학 시험 준비 서전으로 분류되고 있는 점이 아쉽다. 비단 수학뿐만 아니라 거의 모든 "문제 해결"이라고 할 만한 것(프로그래밍으로 포함)에 대해 건강한 경험적 가이드라인(휴리틱스)을 제시하는 책으로 교육적 가치도 높다. 이 책을 공부하고("읽고"가 아니라) 나면 한층 똑똑해진 자신을 발견할 수 있다.

◆Godel, Escher, Bach : An Eternal Golden Braid, Hofstadter, Dougl as R.
  GEB 라고 불리는 이 책은, 저자 호프슈테더 교수에게 퓰리처상을 안겨줬다. 아마 컴퓨터 관련 직종뿐만 아니라 자연과학, 철학 쪽에서까지 널리 읽히는 인기 서적이 아닐까 한다. 수학의 괴델과, 회화의 에셔, 음악의 바흐 작품을 비교하며 공톰을 찾는다. 전산학의 시원이라 할 수 있는 튜링 컴퓨터에 대한 설명도 있다.

◆Computer Architecture : A Quantitative Approach, Patterson, David A., et al.
  전문 프로그래머라면 하드웨어적인 지식도 절대 놓쳐서는 안된다 이러한 지식을 아는 사람과 그렇지 못한 사람의 프로그래밍 능력과 몸값은 엄청난 차이가 있다. 컴퓨터 아키텍처에 관한 한 최고의 양서로 평가받는 이 책은 학부생이나 평범한 프로그래머들이 보기엔 다소 난해할 수 있다. 그럴 경우 같은 저자의 "Computer Organization and Design"을 보는 것이 좋다.

◆Elements of Style, Strunk, William and E.B.White
  영미권에서 작문 관련 서적으로 가장 많이 팔린 책이다. 브라이언 커니건과 플로거가 쓴 "The Elements of Programming Style"은 이 책의 제목을 흉내낸 것이다. 영미인과 문법이나 철자법 등에 대한 논쟁을 하다가도 "스트렁크와 화이트의 책에 따르면"이라는 한마디면 종지부를 맺을 수 있을 정도로 권위적인 책이다. 특히 5장 스타일에 대한 가이드는 기술적 문서를 작성할 때는 물론이고 프로그래밍을 할 때에도 참고가 될 것이다.

◆The Psychology of Computer Programming, Weinberg, Gerald M.

  이 책은 에릭 레이먼드가 썼던 "성당과 시장"에서 비자아적 프로그래머(egoless programmer)에 관한 언급으로 국내에 많이 알려졌지만, 사실 영미권에서는 이미 베스트 셀러의 반열에 오른 지 몇 십 녀 됐다. 프로그래밍을 인간활동의 하나로 인식하고 심리학적인 접근을 통해 새로운 분야를 세운 기념비적인 책이다. 아직까지도 ACM이나 IEEE회원들이 가장 많이 구입하는 책 중 하나이며, 최근 실버 기념판이 출간되었다.

◆ACM Turing Award Lectures : The First Twenty Years : 1966 to 1985

  튜링상은 컴퓨터 분야의 노벨상이다. 우리가 실제로 사용하고 있는 거의 모든 기술의 원천은 튜링상 수상자들의 작품이다. 이 책은 튜링상 수상시 함께 하도록 돼 있는 강의 내용을 20년간 모은 것이다. 한눈에 컴퓨터 계의 발전 역사를 조망할 수 있으며, 선지자들이 조심스럽게 말하는 앞으로의 발전 방향도 엿볼 수 있다. 특별히 엣져 다익스트라(Edsgar Dijkstra)의 "The Humble Programmer"와 도널드 크누쓰의 "Computer Programming as an Art"는 꼭 읽어볼 만하다. 각각 72년, 74년에 한 강의이지만, 많은 부분이 오늘날에도 유효하다는 사실이 그 페이퍼의 질을 보장해 준다.

< Reference >

  -From Microsoft Magazine.