Media Log

[아름다운 명서(컴퓨터)]에 해당되는 글 38

  1. h 코딩 호러의 이펙티브 프로그래밍 - 제프 앳우드 4 2013.04.08
  2. h 읽기 좋은 코드가 좋은 코드다 4 2012.05.28
  3. h 조엘 온 소프트웨어 - 박재호 역 4 2012.02.12
  4. h Writing Solid Code(버그 안녕) - Steve Maguire 2011.10.23
  5. h 클린 코드 2011.09.27
  6. h Effective C++ 3판 -스캇 마이어스 3 2011.08.22
  7. h Effective STL -스캇 마이어스 2 2011.06.27
  8. h Effective TCP/IP Programming -존 스네이더 지음 2 2011.04.07
  9. h TCP/IP 소켓 프로그래밍 개정판 -윤성우 4 2011.03.08
  10. h Windows 시스템 프로그래밍 4판 -Johnson M. Hart 2011.03.06
  11. h 거의 모든 IT의 역사 -정지훈 지음 1 2011.01.23
  12. h 윈도우 개발 282 스토리 -레이몬드 첸 4 2010.08.01
  13. h 소프트웨어 개발의 모든 것 -전규현 3 2010.06.07
  14. h 실용주의 프로그래머 -앤드류 헌트 2010.05.22
  15. h Programming The Microsoft Windows Driver Model 2/E -월터 오니 6 2010.04.25
  16. h WinDbg로 쉽게 배우는 Windows Debugging -김성현 저 2010.03.06
  17. h Windows 시스템 실행파일의 구조와 원리 -이호동 저 2010.02.13
  18. h More Joel on Software -조엘 스폴스키 1 2010.01.07
  19. h 특이점이 온다 -레이 커즈와일 4 2009.06.21
  20. h 정규 표현식 완전 해부와 실습 -서환수 역 2 2009.02.19
  21. h 제프리 리처의 Windows via C/C++ 12 2008.12.19
  22. h 리눅스 그냥 재미로 - 리누스 토발즈 1 2008.08.20
  23. h 웹 사이트 최적화 기법: UI 개발자를 위한 필수 지침서 -Steve Souders 2008.08.09
  24. h Writing Secure Code 2/E : 안전한 코드 작성 기술 -Michael Howard 2008.08.01
  25. h Taeyo's ASP - 김태영 2 2008.07.19
  26. h Art of UNIX Programming - Eric S. Raymond 1 2008.06.28
  27. h Javascript The Definitive Guide 5/E -David Flanagan 2 2008.06.15
  28. h Steve McConnell의 Code Complete 2/E 2 2008.06.01
  29. h 윤성우의 뇌를 자극하는 윈도우즈 시스템 프로그래밍 2008.06.01
  30. h 웹 진화론 -우메다 모치오 4 2008.05.11

블로그 이사했습니다.

https://jeho.page/essay/2013/04/08/effective-programming.html

 

코딩 호러의 이펙티브 프로그래밍

출처: 알라딘

jeho.page

 

읽기 좋은 코드가 좋은 코드다 - 10점
더스틴 보즈웰 & 트레버 파우커 지음, 임백준 옮김/한빛미디어

한빛미디어에서 새로 나온 신간이며 국내 개발자들에게 꽤 유명한 임백준씨가 내용을 옮겼다.
원서는 The Art of Readable Code라는 책인데 아마존에서도 그럭저럭 호평을 받고 있는 것으로 보여진다.


책 제목처럼 읽기 쉬운 코드를 쓰는 방법에 대해서 구체적으로 설명한다. 책 분량도 적당하고 내용도 어렵지 않다.

아주 깔끔하게 잘 나온 책이라고 생각한다.


하지만 새로운 지식이나 멋진 뭔가를 얻으려고 생각하면 안된다. 책을 읽어가다 보면 아마 기존에 자신이 코드를 작성하면서 대부분 한번씩 고민해 봤을 내용들일 것이다. 이 책의 저자들은 보통 사람들보다 조금 더 많이 고민해 본 것이 확실해 보인다.

책을 읽어 가면서 자신이 이전에 생각했던 내용들과 비교하면서, 읽기 좋은 코드를 작성하는 방법에 대해서 다시 한번 진지하게 생각해보는 계기를 가진다면 좋을 것이다.


아참, 책 내용 중에 이런 글이 있었다.

우리가 이 장에서 설명하는 건 헝가리언 표기법보다 더 넓고 비공식적인 시스템이다. 어떤 변수가 가지는 중요한 속성을 포착한 다음, 그 속성에 중요한 의미가 있으면 변수명에 포함시키는 방법이다. 원한다면 이 방법을 '잉글리쉬 표기법'이라고 불러도 좋다.


으음, 원하지 않는다.

변수 이름을 잘 지어야 한다고 노래를 부르더니 정작 본인들은 이름을 이렇게 밖에 못 짓나? 크크크.

Writing Solid Code - 10점
Steve Maguire 지음, 나윤석 외 옮김/높이깊이

몇 일전 deview 2011 행사 중 한 세션에서 재미있는 이야기를 들었다.
 NHN 김정민 이사의 세션이었는데, 이런 말을 했다.
애플, 마이크로소프트, HP 같은 회사에서 15년 동안 일했던 (지금은 NHN에서 일하고 있는) 송창현 이사가 예전에 우리회사에 면접을 보러 왔을 때 잘하는 게 뭐냐고 물어봤더니,
"저는 meticulous code reader입니다. 남의 코드를 아주 꼼꼼하게 읽어줄 수 있습니다."
대부분의 경력을 많이 가진 사람들은, 저는 유닉스를 10년을 넘게 다뤄서 커널 구석 구석까지 깊게 알고 있습니다. 오라클 전문가입니다 라고 말하지 저런 식으로 말하지는 않는데, 김정민 이사는 그게 상당히 인상적이고 멋있어 보였다고 한다.

나 또한 그 말이 멋있어 보인다는데에 완전히 동의한다.
저는 자바스크립트만큼은 누구보다 잘할 자신이 있습니다, 라는 말(또는 뻥)보다 훨씬 멋지지 않은가?

직장 생활을 하다보면 Meticulous code reader가 거의 없다는 것을 쉽게 알게 된다. - 나는 이전에 다니던 직장에서 여태껏 그런 사람을 딱 1명 만나봤다.
여러분이 후임이 있다고 치자. 어떤 기능을 구현해달라고 일을 주고 후임이 나중에 다 만들었습니다 했을 때, 또는 만들고 있는 도중에, 코드를 한줄 한줄 다 꼼꼼하게 읽어주고 피드백 해준 적이 있다면, 당신은 좋은 Meticulous code reader가 될 수 있는 가능성이 있다. 거의 대부분의 사람들은 그렇게 하지 않는다.

갑자기 이런 이야기를 하는 이유는, 최근에 Writing Solid Code라는 책을 읽으면서 이 책의 저자인 Steve Maguire가 그런 Meticulous code reader 라는 생각이 들었기 때문이다.
이런 사람들은 회사에 꼭 필요하다. 마이크로소프트가 10년 넘게 황제의 자리를 차지할 수 있었던 이유는 이런 사람들이 많이 있었기 때문일 것이다.

이 책에서는 정교하고 튼튼한 프로그램을 짜기 위한 많은 기술들을 배울 수 있으며, 또한 프로그래머가 프로그램을 만든다는 것 대해서 가져야할 바람직한 자세를 배울 수 있다.
매 챕터가 끝날 때에는 '생각할 점'이 나오는데, 여기에도 좋은 내용들이 참 많다. 부록에 답까지 있으니 모두 꼼꼼하게 읽어보도록 하자.
인터넷 어딘가에서 번역이 최악이라는 평가를 본 것 같은데, 이 책의 번역은 정말 잘 되었다고 생각한다. 부분 부분 약간 어색한 단어 선정이 보였던 것 같긴 하지만, 나는 왜 최악의 번역이라고 하는건지 이해할 수가 없다.
Clean Code 클린 코드 - 9점
로버트 C. 마틴 지음, 박재호.이해영 옮김/케이앤피북스
언젠가 어떤 책을 읽다가 모든 디자인 패턴은 중복을 제거하려는 시도로부터 나왔다는 내용을 읽은 적이 있다. 중복을 제거하는데 집중하게 되면 결국 현재 잘 알려진 디자인 패턴 중 하나를 사용하게 된다는 내용이었는데 나는 그 말이 참 마음에 와닿았다. 그 이후로는 쓸데없이 여기는 이 패턴을 적용해야지 하는 생각들을 버리고 그냥 맘 편하게 중복을 제거하는데 집중해서 프로그래밍 하고는 했는데 그 방법이 훨씬 더 좋은 것도 같다. 어쨌거나 그 글을 이 책에서 읽은 줄 알았었는데, 다시보니 이 책이 아니었었나 보다. 어느 책에서 읽었는지 도대체 기억이 나지가 않는다. 다시 한 번 보고 싶은데. 혹시 알고 계신 분이 있으면 좀 가르쳐주세요.

이 책은 책 제목 그대로 어떻게 클린 코드를 작성하는지에 대해서 다룬다. 디자인 패턴하고도 밀접한 관계가 있고 리팩터링하고도 관련이 있다.
변수 이름을 짓는 간단한 방법부터 시작해서 어떻게 잘 설계된 클래스와 인터페이스를 만드는지, 어떻게 리팩터링을 하는지에 대한 훌륭한 지침들이 가득 담겨져 있다. 하나하나 읽으면서 음미할 수 있고 고민이 되는 잘쓰여진 좋은 책이다.

그런데 책 중간부터는 뭔가 실전처럼 보여주기 위해 남의 코드를 리팩터링 하는데 하필 그 중 한 코드가 도널드 커누스가 작성한 코드이다.
리팩터링할 코드는 찾아보면 쌔고 쌨을텐데 하필 커누스인가. 최고의 프로그래머에 대한 예의를 갖추는 것처럼 말은 조심스럽게 하지만 결국 당신 코드는 읽기는 참 어렵단 말이야, 내 코드가 더 낫지! 라고 말하는 것 같다.

..그래서 별 반 개 깍았다. -_-ㅋ
이펙티브 C++ - 10점
스콧 마이어스 지음, 곽용재 옮김/피어슨에듀케이션코리아

한 동안 계속 C로만 코드를 짜다가 최근 회사를 옮기면서 C++를 다시 하고 있는데 C++로 코딩하는게 그렇게 재미있을 수가 없다.

이 책은 2006년도에 회사에 갓 들어가서 한 번 읽었던 책인데, 최근 읽은 Effective STL이 너무 재미 있어서 5년여 만에 다시 꺼내어 읽어 본 책이다.
두번째로 읽었지만 그 당시 읽었던 것보다 더 재미있게 읽었고 정말 많은 부분을 놓치고 지나갔었다는 것을 알게 되었다.

이 세상에 스캇 마이어스처럼 C++를 재밌고 간결하게 설명할 수 있는 사람이 있을까? 있을수도 있지만 아마 비야네 스트롭은 아닐 것이다. 비야네의 책은 좋은 책임에는 분명하지만 정말 재미없고 어렵다. -.-

책을 읽다가 문득 궁금했다. 혹시 이제 C++11 버전 에디션을 하나 내지는 않을까? 어쩌면 이미 준비하고 있는 것은 아닐까?
그래서 한 번 메일을 보내서 물어봤는데, 맙소사 스캇 마이어스가 내게 답장을 해주다니.

안타깝게도 아직은 계획에 없다고 한다. 새 버전의 책은 분명히 쓸만한 가치가 있지만 C++11을 Effective하게 사용하는 법을 쓰기 위해서는 먼저 그에 대한 충분한 경험이 필요하기 때문이라고 한다.
뭔가 새 버전만 나오면 남에게 뒤질세라 대충 공부해서는 얼른 책 한권을 만들어 내는 요즘 세상에 참 멋진 해커가 아닌가?
아마도 스캇 마이어스가 말하는 충분한 경험이란 꼴랑 두세달 공부하는 것은 아닐 것이다.
오래 기다려야 할 것 같아서 안타깝긴 하지만 언젠가는 꼭 다음 에디션이 나오게 되지 않을까 싶다.
윤성우의 열혈 TCP/IP 소켓 프로그래밍 - 9점
윤성우 지음/오렌지미디어
이 책은 대학시절 네트워크 프로그래밍을 처음 공부하면서 봤던 책이다. 당시에도 그랬고 아직까지도 네트워크 프로그래밍 서적으로는 상당히 많이 팔린 책 중 하나인데, 작년쯤 개정판이 나왔다.
나오자마자 사놓고서는 여태껏 게으름 피우고 있다가 이제야 쭈욱 읽어봤다.

책의 표지도 그렇고 글쓴이의 문체 또한 조금 가벼운 느낌이 있어서 프로그래밍을 처음 시작하는 초보자들이나 읽어봐야할 책이라는 생각이 들수도 있다. 하지만 그렇지는 않다. 마치 어려운 내용은 다 빼고 쉬운 내용만을 설명한 것처럼 책이 술술 읽히는데, 저자가 설명을 쉽게 하는 재주가 있기 때문이지 중요한 내용들이 빠진 것은 아니다.
책장을 넘기는 내내 명불허전이라는 생각을 했다. 정말 좋은 책이다.

개정판에서는 epoll이 추가되어서 좋았다. 항상 말로만 들어보고 뭔가 너무 궁금했었다.
설명이 몇 페이지 없긴 하지만 처음부터 책을 잘 읽었으면 어렵지 않게 이해할 수 있다. IOCP를 사용해본 적이 있다면 더 쉽게 이해할 수 있을 것이다.
개인적으로 이 책의 IOCP의 설명보다는 제프리 리쳐의 Windows via C/C++의 설명이 훨씬 좋았다. 더 체계적이고 놓쳐서는 안될 세심한 부분들까지 완벽하게 다룬다. IOCP를 다루는 몇몇 책들 중에서는 제프리의 책이 가장 훌륭하다고 생각한다.

그동안 네트워크 프로그래밍을 꽤 오랫동안 안다루기는 했는가보다.
책을 읽다보니 기본적인 부분들을 포함해 많은 부분을 잊고 살고 있었는데, 이제 다시 머리 속이 채워진 느낌이다.
너무 재밌게 읽었고, 더 알고 싶은 부분도 많아서 또 다른 좋은 네트워크 책으로 보충할 생각이다.
Windows 시스템 프로그래밍 - 9점
Johnson M.Hart 지음, 류광 옮김/정보문화사

오래전부터 이 책이 좋은 책이라는 이야기를 많이 들었었는데, 여태까지 못보고 있다가 이번에 4판이 번역되어 나온 김에 하나 구입해서 며칠동안 재미있게 읽었다.

저자는 이 책을 리차드 스티븐스의 유명한 고전인 APUE에 대응하는 윈도우 버전이라고 말했지만 책을 읽는 내내 자꾸 비슷한 주제를 다루는 제프리 리처의 Windows via C/C++과 비교가 되는 것은 어쩔수가 없었다.

책 중간의 동기화 오브젝트를 다루는 부분에서는 이 책이 Windows via C/C++보다 훨씬 구체적이고 많은 실례들을 들어 설명을 하고 있으며(제프리보다 재밌게 설명하는 것은 아니지만) 그 이후에 나오는 소켓과 파이프, 윈도우즈 서비스 그리고 오브젝트 보안에 대한 내용들은 Windows via C/C++에서는 다루지 않는 내용이다.
맨 마지막 챕터에서 보안 디스크립터로 ACL을 조작하는 내용은 제프리의 책뿐 아니라 다른 책들에서도 쉽게 다루지 않는 보기 힘든 내용이다. 윈도의 파일들을 리눅스 스타일의 권한(rwx--로 관리되는)처럼 관리할 수 있게 하는 재미있고 실용적인 예제와 함께해서 더 좋았다.

간간히 유닉스 시스템과 비교해서 설명해주는 저자의 코멘트들 또한 이 책의 큰 장점이다.
부록에서는 윈도 API의 유닉스와 CRT 대안 함수들을 표로서 제공해주기도 한다.

제프리리처 책의 모든 챕터를 이제는 2-3번씩 읽어서 윈도우 시스템 프로그래밍에 대해 꽤 많이 알게 되었다고 생각했는데, 이 책을 읽으면서 아직도 많은 부분을 제대로 이해 못하고 있구나 하고 느꼈다. 속상한 일이다.

책에서 옮긴 단어중 신호, 일꾼쓰레드, 스택 위넘침 등은 약간 부자연스럽긴 하지만 내용을 이해하는데는 아무런 문제가 없었다. 하지만 딱 한가지 단어가 나를 힘들게 했는데 그것은 '회부' 라는 단어였다. 가상 메모리를 커밋한다고 할 때 바로 그 커밋을 뜻하는데, 잘 매치가 되지 않아서 머리 속으로 계속 Replace를 했다.

부록에는 여러가지 I/O 방식들에 대한 성능 테스트가 나와 있다.
나는 블로그나 잡지 같은 곳에서 프로그램 성능 테스트를 해봤더니 결과가 어떻더라라고 하면 의심을 하고 잘 믿지 않는 편인데, 그것은 많은 사람들이 페이지 폴트나 캐시 등의 잡음을 고려하지 않고 테스트를 하기 때문이고, 또 그런 것들을 미리 알고 있다 하더라도 완벽히 잡음을 제거하기가 힘들기 때문이다.

책을 읽는 동안 이 책의 저자가 상당히 부지런하고 꼼꼼한 사람이라는 느낌을 받아서 벤치마크 결과에 대해 믿음도 가고 기대를 많이 하고 있었는데, 이 저자 역시 실수를 범해 누군가가 이미 벤치마크의 오류를 지적했었나보다.
아래 페이지에서 저자의 코멘트를 볼 수 있다.
http://jmhartsoftware.com/comments_updates.html
램이 1.5기가가 달린 윈도 XP가 페이지 폴트의 영향 때문에 성능이 몹시 떨어져서 나왔는데,  나중에 다시 테스트해서 올리겠다고 한다. 이런, XP하고 비스타의 I/O 성능 비교가 가장 궁금했는데.
어쨌거나 이것들을 다시 테스트 해보는 일은 엄청 귀찮을텐데 5판을 낼 때쯤에나 다시 해보지 않을까 걱정이 되기도 한다.

제프리 리처의 책이 더 이상 새 버전이 안나오는 것은 정말 아쉬운 일인데, 이 책은 5판도 6판도 계속 해서 쓰여졌으면 좋겠다.
거의 모든 IT의 역사 - 10점
정지훈 지음/메디치

블로그 글들을 자주 읽는다면 하이컨셉 & 하이터치 혹은 애플, 마이크로소프트, 구글의 IT 삼국지를 한번 쯤 본 적이 있을지도 모르겠다.

이 책은 하이컨셉 & 하이터치라는 블로그에서 연재되고 있는 애플, 마이크로소프트, 구글의 IT 삼국지란 글들을 모아서 발행한 책이다. 책을 출간하면서 이름이 '거의 모든 IT의 역사'라고 바뀌게 된 것 같다.
'애플, 마이크로소프트, 구글의 IT 삼국지'라는 제목이 이 책의 내용을 더 잘 표현하는 것 같지만 '거의 모든 IT의 역사'라는 제목도 아주 흥미롭고 책을 읽어보고 싶어지도록 만든다.

위의 세 기업 말고도 IBM, 페이스북, 페이팔, 아마존, 트위터 등의 기업들에 대한 이야기도 짬짬히 등장한다.
국내의 이야기는 거의 언급되지 않는다.

책 중 가장 재미있었던 이야기는 게리 킬달의 에피소드였다. 뛰어난 천재 프로그래머의 이야기는 언제나 재밌다.
아래 링크에서 읽어볼 수 있다.
http://health20.kr/1524

폴 알렌의 이야기도 재미있었는데, 그의 이야기는 다른 블로그에서 더 재미있게 잘 다루었다.
폴 알렌의 놀라운 인생
MS 공동창업자 폴알렌 9조 6천억원을 날려버리다.

책을 읽으면서 이런 내용들을 어떻게 알고 있는 걸까 궁금했었는데, 위키피디아에서 대부분의 내용을 참고했다고 말하고 있다.
나는 주말동안 방구석에 누워서 이리 굴렀다 저리 굴렀다 하면서 편하게 읽었는데, 저자가 얼마나 많은 위키 페이지를 읽고서 정리했을까 상상하니 고마운 생각이 먼저 든다.

책을 읽는 중에 상당히 신선한 부분이 있었다.
이 책 여러 장에 걸쳐서 아래와 같은 QR코드를 볼 수 있다.

나는 스마트폰을 안써서 직접 확인해보지는 못했지만, 아마 웹페이지 URL을 담고 있을 것이라 예상된다.
기존의 책들은 책에 URL을 직접 인쇄했었는데, 나는 독자로서 그것이 너무나 불편했다. 그럼에도 불구하고 정말 궁금한 내용은 키보드로 직접 쳐서 따라가보기도 했었는데(야만스럽게!), 이 책의 QR코드들을 보고 이제는 그런 짓을 안해도 되는구나 생각하니 너무나 기뻤다.
앞으로 나오는 많은 책들이 따라했으면 좋겠다.

이 책의 내용은 저자의 블로그에서 아직 계속 연재중에 있고, 거의 대부분의 내용을 블로그에서도 볼 수 있다.

세 공룡들의 싸움은 점점 더 흥미진진해지고 앞으로도 많은 재미있는 일들이 생기게 될텐데, 꼭 2탄이 나오기를 바란다.
소프트웨어 개발의 모든 것 - 9점
김익환.전규현 지음/페가수스
소프트웨어 개발의 모든 것이라 제목이 붙긴 했다만 물론 제목은 뻥이다.
어떻게 이 얇은 책이 소프트웨어 개발의 모든 것을 다루겠는가.

사실은 소프트웨어 공학의 모든 것이 책 내용과 조금 더 어울리긴 하지만 그렇게 이름지었으면 난 죽을 때까지 이 책을 안 읽었을 것이다.

나는 컴퓨터 과학의 대부분의 분야가 아주 재밌고 흥미롭지만 소프트웨어 공학 만큼은 질색이다.
그럼에도 불구하고 이 책은 꽤나 재밌게 잘 쓰여졌다. 내가 읽은 -몇 권 안되긴 하지만- 소프트웨어 공학 책 중에서는 가장 재밌는 책이었다. 스티브 맥코넬의 책보다도 재밌다! -물론 Code Complete는 빼고.

이 책은 개발자뿐만이 아니라 프로젝트 매니저, 기획자, 테스터, 그리고 심지어 세일즈맨까지도 읽어보면 도움이 되는 책이다.

얼마 전에 저자의 블로그에서 재밌는 포스팅을 읽었다.

하수
소스코드관리시스템을 거의 제대로 쓰지 못하는 경우, 오늘 고치고 있는 소스코드를 수동으로 하나씩 지워서 원래 버전을 만들어냅니다. 이러한 경우는 믿기 힘들겠지만 제가 컨설팅을 하면서 많은 회사들이 이렇게 하고 있다는 것을 접했습니다. 이렇게 원래 버전을 만들어서 Hotfix를 만들어서 내보낸 후에 다시 재작업을 합니다.

중수
이보다 조금더 나은 경우, 원래 고치고 있던 소스코드의 디렉토리를 임시로 백업 받아 놓고 소스코드관리시스템에 있는 어제 버전의 소스코드를 다시 Check out합니다. 이렇게 Check out한 소스코드를 가지고 Hotfix를 만들어서 내보내고 오늘 작업하던 백업을 받아 놓은 소스코드와 Merge tool을 이용해서 Merge를 한 후에 정기 업데이트 버전을 만들어서 내보내는 방법입니다. 아까보다는 조금 나아 졌지만, 여전히 수작업에 많이 의존을 하고 귀찮은 작업들을 해줘야 합니다.

고수
Subversion등의 소스코드 관리시스템을 제대로 사용한다면 이보다 좀더 손쉽습니다.
우선 어제 릴리즈를 한 소스코드의 Baseline(Tag)에서 Hotfix용 브랜치를 만듭니다. 기존에 개발하고 있던 디렉터리는 그대로 놔두고 새로운 디렉터리에 Hotfix를 Check out 받습니다. 보고된 버그를 수정하여 자동화된 빌드스크립트를 이용해서 Hotfix를 만들어내고 업데이트에 올립니다. 정상적으로 Hotfix가 배포된 것을 확인하고 Hotfix 브랜치는 Trunk로 Merge를 합니다. 이때 3Way Merge 툴을 이용하면 됩니다.

나는 처음 회사에 들어갔을 때는 하수였고 지금은 중수이다.
저자는 하수가 하는 짓을 믿기 힘든 짓이라 말하지만, 형상관리툴 사용을 잘 모르는 입장에서 보면 사실 그리 믿기 힘든 일도 아니다. 똥줄이 바짝 타는 상황이 생기면 믿기 힘든 무식한 일도 하게 되는 법이다. -핫픽스를 만든다는 것이 바로 그 똥줄이 타들어가는 상황이기도 하다.

시간이 좀 흘러서 고수가 하는 저 방법을 알게 되었음에도 불구하고 계속 중수의 방법을 고수해 온 것은 전적으로 나의 게으름 때문이었다. 저렇게 핫픽스를 만들어내야 하는 상황은 자주 오지 않기 때문에 나중에 배워야지하고는 계속 미루고 있었는데, 위 글을 읽으면서 몹시 부끄러움을 느꼈다.

그래서 잠시 시간을 내서 이것 저것 실험해보며 테스트를 해봤는데, 그동안 왜 그토록 게으름을 부렸을까 싶을 정도로 쉽게 해낼 수 있었다. -Subversion과 KDiff3의 개발자들 그리고 전규현씨께 감사한다. :-)

처음에는 정말 재미있게 읽었다.
하지만 폭포수 모델하고 SRS(요구사항 명세)에 대해서 설명하기 시작할 때는 읽다가 읽다가 결국 포기해버렸다.
저자가 지금 이 글을 보면 아니 그 중요한 부분을 그냥 넘어가면 어떻하나 하고 안쓰러워 할 것이 눈에 훤할 정도로 SRS의 중요성에 대해 입에 침이 닳도록 설명하지만, 그래도 정말 어쩔 수 없었다.

이 책의 내용에서 아쉬운 점 하나는 내가 가장 궁금해하는 내용이 빠졌다는 것이다.

나는 마이크로소프트 같은 커다랗고 프로세스가 잘 정립된 회사의 형상 관리툴의 소스트리를 보고 싶다.
그들이 모듈을 어떤 식으로 분리하고 어떤 구조로 트리를 구성하는지, 중복되는 코드들을 어떤 식으로 제거하고 또 공유하는지, 체크인 되는 코드의 코멘팅은 어떤 규칙으로 하는지 등이 너무 너무 궁금하다. 1시간 만이라도 들어가서 차근차근 살펴볼 수 있다면 내 실력은 훨씬 나아질 것이다.

이 책의 저자 중 김익환 선생님께서는 마이크로소프트에 버금가는 훌륭한 회사들에서 일했었는데, 그런 내용도 함께 알려주었더라면 나는 이 책에 주저 없이 별 5개를 줬을 것이다!

...물론 그래도 SRS는 싫다.

WinDbg로 쉽게 배우는 Windows Debugging - 8점
김성현 외 지음/에이콘출판
회사에 처음 들어와서 윈도우즈 유저모드 애플리케이션들을 개발해온지 이제 3년이 조금 넘었다.
얼마전부터는 생전 처음으로 커널 레벨 코드를 작성하게 되었다.

3년이라는 시간은 길다면 길고 짧다면 짧은 시간이지만, 그동안 사용자 레벨 시스템에 대한 많은 부분을 배울 수 있었는데, 커널 레벨은 또 하나의 새로운 세계를 보여주는 느낌이다.

커널 레벨 프로그래밍을 하면서 윈도우즈 시스템의 깊숙한 부분들에 대해서 잘 몰랐던 부분들이 조금씩 명확해지는 기분은 아주 달콤하지만, 잘 설계된 하이레벨 언어들과 라이브러리들을 사용하지 못하고 또 사용자 레벨에서처럼 편하게 디버깅을 할 수 없다는 것은 많은 한숨이 나오게 하는 점이었다.

나는 마치 다시 신입사원 때로 돌아간 것만 같은 느낌인데, 당시에는 Win32 API도 거의 아는 것이 없어서 김상형님의 winapi.co.kr에서 Win32 API와 Window Messages들을 모두 출력해서 출퇴근길마다 읽고, 집에 들어가면 Windows API 정복이나 Windows via c/c++(당시에는 4판이었던), 디버깅 애플리케이션과 같은 좋은 책들을 읽으면서 지식을 쌓을 수 있었다.

반면에 불행히도 윈도우즈 디바이스 드라이버 프로그래밍을 다루는 책들은 그다지 많지 않다. 아니 거의 없다. 책을 쓰기도 어렵거니와, 수요가 워낙 적어서 잘 팔리지도 않을 것이기 때문이다.
그래서 가장 많이 참조하게 되는 것은 결국 MSDN인데, 나는 아직 영어를 정확하고 빠르게 읽을만한 수준이 되지 못해서 이런 한글 책이나 번역서에 항상 감사한다.

블루스크린이 뜨고 덤프를 보고도 문제를 찾아내지 못하면서, 나는 디버깅을 조금 더 잘 할 수 있어야겠다는 생각을 갖게되었는데, 이 책이 내게 아주 많은 도움을 주었다.

특히 Bug Check 0xCE는 바로 그저께 닥친 문제였는데, 이 책을 차근차근 읽으면서 어렵지 않게 해결할 수 있었다. 책을 읽지 않고 코드만 바라봤다면 계속 흰머리만 하나씩 늘어갔을 것이다.

나는 이 책을 이틀동안 읽었는데, 얇은 책이라고는 하지만 기술서적이 이틀동안에 읽혀진다는 것은 그만큼 읽기 편하게 쓰여졌다는 뜻이기도 하다. 물론 예전에 존로빈스의 디버깅 애플리케이션을 읽으면서 배웠던 지식들도 도움이 많이 되었다.

이 책은 대체적으로 쉽게 잘 쓰여졌다만 설명이 부족한 부분들이 몇몇 있고, 덤프 코드와 설명을 빨리 매치 시키기가 어려운 단점이 있다. 만약 덤프 코드 앞에 라인번호을 붙여놓고 라인 번호와 함께 설명했다면 훨씬 읽기가 좋았을 것이다. b0f128a4 어쩌구 하는 어지러운 주소값을 라인번호도 없이 눈으로 찾아야하는 것은 읽는이로 하여금 쓸데없는 집중력을 소비하게 만든다.

어쨌거나 이 책을 다 읽고나서 바로 이틀 전인 그저께 모습보다 나는 훨씬 많이 발전했는데, 이 책의 가격이 좀 비싼감이 들긴 하지만(500페이지 분량에 35000원이다) 내가 얻은 결과에 비하면 충분한 값어치를 하고도 많이 남은 셈이다.

2년여 동안 고생해서 좋은 책을 써주고, 내게 많은 지식을 얻게해준 저자들에게 감사를 표한다.
Windows 시스템 실행파일의 구조와 원리 - 9점
이호동 지음/한빛미디어

이 책은 PE(Portable Executable)라고도 불리우는 윈도우즈 실행 파일의 내부 구조에 대해서 다룬다.
EXE, DLL, OCX, SYS, DRV 확장자들로 된 파일들이 모두 PE파일이다.

이런 PE 파일들이 실행되는 순간에 메모리에 어떻게 매핑되고 그 자료구조는 어떻게 구성되는지가 바로 이 책이 다루는 내용이다.

이 책을 읽기 전에 제프리리처의 Windows Via C/C++

13장 윈도우 메모리의 구조
14장 가상 메모리 살펴보기
17장 메모리 맵 파일
19장 DLL의 기본
20장 DLL의 고급 기법

위 장들을 읽어보는 것이 이 책을 이해하는데 많은 도움을 줄 것이다.

나는 처음에는 헥사코드를 하나씩 따라가면서 정독해서 읽었는데, 관련 구조체들이 다 비슷비슷 하게 구성되어 있어서 중간쯤 부터는 그런 부분들을 제껴가면서 조금 더 편하게 읽을 수 있었다.

개인적으로 DLL의 깊숙한 부분에 대해서 많은 것을 얻을 수 있어서 좋았고, 또 리소스에 대해서는 거의 아는 것이 없었는데, 이 부분을 많이 다루어 주어서 특히 좋았다.

이 책의 단점을 꼽자면, 그림이나 코드들이 보기에 너무 조잡하다는 것이다.
또한 느낌표나 말줄임표를 잔뜩 붙여놓은 문장들이 곳곳에서 보이는데, 이는 잘 정제되지 못한 글의 느낌을 받게 한다. 마치 인터넷에 써서 올렸던 글을 추려서 책으로 낸듯이 말이다.
저자는 프로그래머이지 글쟁이가 아니므로 이런 것들은 출판사에서 신경을 써준다면 좋을 것이다.

이 책과 비슷한 경우로 김상형의 Windows API 정복이라는 명서가 있는데, 나는 이 책을 국내에서 출판된 가장 잘 쓰여진 프로그래밍 책이라고 생각하지만, 책 안의 그림들은 저자의 깔끔한 글솜씨에 비해 조잡하게 느껴진다.
이 책은 가남사에서 출판되었다가 한빛미디어에서 개정되었는데, 그림들이나 표는 아마도 그대로 옮긴 것 같다.

저자가 그린 그림을 출판사에 제출하면 편집없이 그대로 실는 것 같은 느낌인데, 만약 정말 그러고 있다면 출판사에서 좀 더 다듬어서 주기를 바란다.
오라일리 같은 출판사에서 발행하는 책들은 그림이나 표가 참 보기 좋게 그려져있다. 그 책을 쓰는 저자들이 모두 미술에까지 일가견이 있어서 그런 것은 분명 아닐 것이다.

다음은 내가 출판사에 바라는 점들이다.
1. 모든 코드 조각은 회색 박스로 둘러싼다.
2. 코드 폰트는 고정폭 폰트를(기왕이면 프로그래머가 많이 쓰는) 사용한다.
3. 지저분한 그림이나 표는 예쁘게 다시 그린다.

쓰다보니 단점의 내용이 길어져 버렸는데, 이 것은 이 책만이 아니라 국내에서 출판되는 모든 프로그래밍 서적에 대한 내용이다.

이런 자잘한 단점을 제외하면 이 책은 읽을만한 가치가 있는 아주 훌륭한 책이다.
이런 지식을 얻기위해서, Matt Pietrek이 쓴 다음과 같은 글 들을 눈이 빠지게 읽어야 하는데
보기만해도 질려버린다.




이미 이 책의 저자가 이 문서들을 잘 읽어본 후에 우리들에게 한글로 쉽게 설명해주고 있으니 그저 고마울 뿐이다.

이 책이 개정판이 또 나올 것 같지는 않지만 혹시 개정된다면, 위에서 말한 부분들의 교정과 함께 64bit PE나 Managed PE에 대해서도 살짝 다루어주면 좋겠다.

특이점이 온다 - 8점
레이 커즈와일 지음, 김명남.장시형 옮김, 진대제 감수/김영사

회사에 과학을 아주 좋아하는 사람에게서 이 책의 이야기를 처음 들었다.
앞으로 변할 미래 세계의 모습을 담은 책인데, 그리 멀지 않은 미래임에도 불구하고 엄청난 변화를 예언하고 있어서 나는 사이비같은 이야기라 생각하고 한귀로 흘려들었다.

그러던 어느날 진대제의 열정을 경영하라라는 책을 아주 재미있게 읽고는, 그가 쓴 다른 책이 없을까 하고 찾아봤는데 이 책이 떡하니 나오는 것이 아니겠는가.(진대제는 감수만했다.)

책의 부제처럼 특이점이란 기술이 인간을 초월하는 순간이다.
특이점이 오게되면 기술 발전의 속도가 기하급수적으로(우리가 감히 상상도 할 수 없을 만큼) 빨라지게 되고 지금과는 전혀 다른 세상으로 변하게 되는데, 이 책에서 저자는 그 시기를(컴퓨터가 튜링테스트를 통과하게되는) 2020년대 중반 내지 후반일 것이라고 예측하고 있다.

특이점이 오게되면, 컴퓨터가 인간보다 똑똑해지고 그 컴퓨터들이 기술을 기하급수적인 속도로 발전시켜서 우리가 상상하던 모든 것들과 상상하지 못했던 일들 조차 이루어 질 것이다.

물론 당연히 여기에는 많은 의심이 있을 수밖에 없다. 기술 발전 속도가 현재도 빠르다고는 하지만, 90년대 초반 우리들이 어렸을 적에 머리속에 그려왔던 2010년의 모습은 자동차가 스스로 운전하고 심지어는 하늘을 날라 다니는 수준이었다. 하지만 지금 2010년의 도로를 살펴보면 조금 더 고급 자동차들이 달리는 것 말고 큰 변화는 없다.
전철역에서 노란 종이표를 집어 넣고 다시 빼가는 90년대 사람들의 행동은 지금까지도 이어져 오고 있다.

그런데도 불구하고 앞으로 20년이 지나면, 컴퓨터가 튜링테스트를 통과하게 된다니(너무 똑똑해서 사람인지 컴퓨터인지 구별조차 할 수 없게되는) 많은 사람들이 -전문가들 조차도 의심하고 돌을 던질만 하다.

하지만 지은이는 선형적으로 계산하면 안되고, 지수적으로 계산해야 한다고 입이 닳도록 설명하는데(아래 그림 참조) 이 책에서 보여주는 지은이의 엄청난 지식이 뒷받침된 견해들과 함께 읽어나가다보면, 엇 정말 그렇게 되는것 아냐? 하는 생각이 드는 것도 사실이다.

수확 가속의 법칙

수확 가속의 법칙



빌게이츠같은 최고 수준의 미래 예언가들조차 지은이를 찾아가서 의견을 구하는 모습들을 보면 우리는 이 사람의 말들을 그냥 한귀로 흘려버리는 것이 너무 어리석은 행동은 아닐까 라는 생각도 한 번쯤 해볼만하다.

이런 특이점이 오기 위해서는 컴퓨터 하드웨어와 인공지능 분야뿐만이 아니라, 나노공학이나 유전공학 등 많은 과학 분야의 기술이 함께 발전해야 하는데, 그 중에서 컴퓨터과학 분야가 중요한 위치를 차지하고 있다는 것은 우리들에게 있어 굉장히 고무적인 일이다.

나는 특히 사람의 뇌를 역공학하는 부분이 아주 재밌었는데 지구상에서 가장 훌륭한 발명품이라고 여겨지던 뇌가, 병렬처리 능력을 빼고는 컴퓨터보다 나은 것이 별로 없다는 사실은 충격적이었다.
뇌에 대한 분석이 완료되면 컴퓨터가 서로간에 데이터를 복사하듯이 우리 뇌에 들어있는 지식들도 다른 사람에게 복사될 수 있을 것이다.

지은이는 이런 특이점이 오기를 갈망하며, 하루에 영양제 200알씩을 먹어가면서 담당의사까지 두고 건강을 관리하고 있는데, 나는 그런 현실이 별로 기대되지 않아서 그렇게까지 할 필요가 있을까 하는 생각이 든다.

어렸을 적 놀이터의 흙냄새와 잔디밭의 풀냄새는 나에게 아주 좋은 추억으로 남아있다.
나는 30살이 가까워진 지금도 종종 집근처에 있는 놀이터와 공원에 가서 옛날처럼 캐치볼을 하며 놀고는 하는데, 앞으로 우리의 자식들이 컴퓨터의 가상현실 속에서 스포츠나 연애같은 모든 놀이들을 해결할 것을 상상하면 끔찍하다.

웹 사이트 최적화 기법 - 10점
스티브 사우더스 지음, 박경훈 옮김/ITC(아이티씨)


이 책의 원제는 High Performance Web Sites: Essential Knowledge for Frontend Engineers 이다.
번역서로 200여 페이지 밖에 안되는 작은 책이라 부담없이 읽기에도 아주 좋다.

이 책은 야후 엔지니어의 오랜 연구에 의한 10여가지의 수준 높은 팁들을 제공하는데, 책의 분량만 보고도 알 수 있지만, 근본적인 세세한 원리까지 하나하나 설명 해주지는 않는다.
이 책의 저자도 책의 초반부에 이야기 하듯이, HTTP The Definitive Guide를 읽어보는 것이 이 책의 팁들을 이해하는데에 많은 도움이 된다.

개인적으로 이런 좋은 팁을 제공하는 형식의 책들은 참 고맙다.
본인이 몇 년동안 연구한 노하우를 보는 사람 입장에서는 하루 내지 이틀만에 얻을 수 있으니 얼마나 고마운 일인가. - 물론 문제에 대해 실제로 많은 고민을 해본 것 보다는 못하겠지만.
이런 스타일의 다른 많은 책들이 돈벌이를 위해 제목과 목차만 그럴 듯하게 해서 부실한 내용으로 발행하는 반면에, 이 책에서 제공하는 팁들은 하나도 빠짐없이 쓸만하며, 저자의 정성이 녹아 들어가 있는 것을 느낄 수 있다.

내가 만일 야후 사장이었으면,
이런 빌어먹을 놈의 자식. 하라는 일은 안하고 쓸데없는 책 따위나 쓰고 말이야. 도대체 우리회사에서 몇 년동안 연구한 성과물을 왜 남 좋으라고 책으로 쓰고 지랄이야!?
라고 소리쳤을 지도 모르겠다.

뭐 어쨌든 책을 보는 우리 입장에서는 그저 고마운 일이다.

이 책의 번역자는 내 또래인데, 혹시나 번역이 부실하지 않을까 걱정했었는데 읽는 동안 불편함이 전혀 없을 정도로 번역 수준이 괜찮았다.

아... 빌어먹을. 영어 공부 해야겠다.
Writing Secure Code - 10점
Michael Howard 외 지음, 지정기 외 옮김/정보문화사

요즈음 계속 가벼운 책들만 읽어보다가 오랫만에 명서를 하나 골라 잡아 읽었다.
그저 그런 책을 읽는 것보다 좋은 기술 서적을 읽을 때에는 훨씬 더 많은 집중력이 필요하고 그만큼 몸도 지치게 되는데, 사실 그래서 이런 좋은 책들을 집어 들기 위해선 큰 각오와 용기가 필요하다.
강컴에 꽤 오랫동안 좋은 책들도 안나오고 해서, 이번엔 맘을 다 잡고 몇 일간 이 책을 쭉 읽었는데, 내용이 꽤나 어려워서 많은 부분을 이해하지 못하고 넘어가버렸다.
명서를 완독하게 되면 힘든 만큼 가슴이 뿌듯해야 하는데 너무 많은 것을 모르고 넘어가서 큰 기쁨을 느낄 수 없었다.
조금 더 실력을 쌓아서 내년 쯤 되면 다시 읽어봐야 할 것 같다.

이 책은 보안에 관련된 거의 모든 분야를 자세히 다루고 있으므로, 개발 플랫폼이나 분야에 상관없이 누구에게라도 많은 도움이 될 것이다.

이 책의 저자인 마이클 하워드는 마이크로 소프트에서 일하고 있는 유명한 수석 보안 관리자인데, 가장 최근에는 Writing Secure Code for Windows Vista 라는 책을 저술 했다.

비스타에만 집중해서 쓴 이 얇은 책은, 나오자 마자 회사에 신청했었는데 빌어먹을 영어 실력 때문에 몇 장 깨작거리다가 덮어 버렸다.
그 후에 곧 한글판이 번역되어 나왔고, 또 회사에 신청했는데 아직도 못 읽고 있다.

이제 다음 타자는 Writing Secure Code for Windows Vista ^^

TAEYO'S ASP - 8점
김태영 지음/삼양출판사

내가 이 책을 처음 알게 된 것은 2001년도 였다.
그 때는 그냥 ASP라는게 다 있구나, 이 빨간 책이 유명한책인가보다. 태요? 이름이 특이해서 왠지 끌리네 하는 느낌 정도 였었다.

군대를 다녀와서 복학한 후 연구실에 들어가서 공부를 한지 1년 쯤 지났을 때, 아마 그러니깐 2005년도 겨울 방학 때였다.

방학 때마다 항상 뭔가를 하나씩 만들었었는데, 그 방학때 만들기로 한 것은 연구실 홈페이지였다.

당시 우리는 웹 프로그래밍의 기본에 대해서 전혀 모르고 있었고, 단지 C/C++ 을 사용하여 고만고만한 응용 프로그램을 만들 수 있는 수준 정도 였었다.

홈페이지의 목적이나 레이아웃, 어떤 컨텐츠를 넣을 지에 대해서는 화이트 보드 앞에 모여 앉아서 지금 생각해도 제법 그럴 듯하게 회의를 하면서 잘 결론을 지어냈다.
나머지는 어떤 언어를 사용해서 만들까였는데,  나는 그 당시 C#을 공부하고 있었기 때문에 ASP.NET으로 한번 해보자고 주장했지만, 다른 모든 사람들은 ASP로 하길 원했다.

결국 ASP로 하기로 결정하고는, 옛날의 기억을 살려 이 책을 빌려서 공부하기 시작했다.
이 책은 99년도에 나온 책이다. 이 책을 볼 당시인 2005년도 겨울은 슬슬 AJAX란 말이 들려오기 시작 할 때 였는데, 나는 너무 옛날 책을 보고 있는 것 아닌가 하는 걱정을 했지만, 그렇다고 딱히 ASP에 대한 다른 볼만한 책도 없었다. 이 책 내용 중에 저자가 추천하는 Wrox의 책을 선택했다면 아마 프로젝트를 중간에 포기했을지도 모르겠다.

이 책은 정말 재미있었고 쉬웠지만 지금 다시 곰곰히 생각해보면 이 책의 설명은 정확하고 수준 높은 지식을 전달해주지는 못했다.
아마 웹 프로그래밍에 어느 정도 익숙한 사람이 지금  이 책을 보게 된다면, 뭐 이런 쓰레기 같은 구시대 책이 다 있어 하고는 집어 던져버릴지도 모르겠다.
이 때 이 책을 보고 만든 홈페이지만 해도 공격당하기 쉬운 코드 투성이었으며 파이어폭스로 들어가면 괴물 형상으로 변해버리고 말았다.-물론 파이어폭스 문제는 드림위버로 만들어진 떡코드를 그대로 사용한 우리의 잘못이다. :)

회사에 들어오고 나서 재밌는 에피소드가 하나 있는데, 그것은 우리 팀장님이 연구실 홈페이지를 해킹한 것이다.
어느날 옆에 오셔서는,
"재호씨 학교에서 숙제가 나왔는데 홈페이지를 해킹해야해요."
"근데요?"
"요즘 만든 페이지들은 다 너무 잘만들어져 있어서 공격하기 쉽지가 않더라구요. 재호씨가 예전에 학교 다닐 때 만든 연구실 홈페이지에다가 좀 해보면 안될까요?"
"네........................"

최고의 굴욕적인 순간이었다. ;)

결국 팀장님은 우리 연구실 사람들의 주민등록 번호랑 개인정보들을 쉽게 빼낼 수 있었고, 아마 그걸로 A+을 받았을지는 잘 모르겠다.

음 어쨌든, 다시 돌아와서.
이 책의 예제코드는 구식이고, HTTP 프로토콜이나 웹프로그래밍 기술에 대해서 수준높게 다루지도 않는다.
하지만 그럼에도 불구하고, Server Side codes에 대해서 전혀 지식이 없는 사람들에게 이 책은 아주 많은 도움이 된다.
아마도 그것은 김태영씨가 초보자에게 쉽게 설명하는 훌륭한 능력을 가지고 있고, 또 둘째가라면 서러울만한 유머센스를 겸비하고 있기 때문일 것이다.

나는 현재 책을 쓰고 있는 국내 저자 중에서 김상형, 윤성우, 김태영씨를 특히 좋아하는데, 김태영씨는 다른 두 사람만큼의 깊은 내공을 갖고 있지는 않다고 생각한다.
하지만 김상형과 윤성우의 책들은 몇 몇 책들만을 훌륭하다고 생각하는데 반해 김태영의 모든 책들은 다 훌륭하다고 생각한다.
그것은 김태영의 책이 더 읽기 쉽고 재밌기 때문이다.
다른 두명의 책이 내용만 좋고 재미없다는 뜻은 아니다. 이 사람들 역시 읽기 쉽고 재밌게 글을 쓴다. 하지만 김태영의 책은 더 읽기 좋고 더 재밌다^^

내 친한 친구가 그 때 당시 선물해준 Aron 기계식 키보드와, 비주얼 스튜디오가 아닌 에디트 플러스에서 작성되는 분홍색 코드들. 처음 만나보는 괄호 없는 VB 문법. 그리고 김태영의 유머러스한 글.
이 모든 것들이 조합되어 한줄 한줄 코딩을 할 때마다 뇌에서 엔돌핀이 솟아 나오는 느낌이었다.

얼마전인 5월 스승의날에 졸업생들이 모여 연구실을 찾았을 때, 후배 중 하나가 연구실 홈페이지가 너무 낡았다며 새로 만들겠다고 했다.
우리들의 추억이 없어져 버리는 것 같아 조금 마음이 아프기도 했지만, 마치 몇 년전 우리들의 모습을 보는 것 같아 기분이 좋았다.
그나저나 그 때 프리젠테이션 했던 이 빌어먹을 후배녀석은 아무래도 아직까지 한줄도 코딩을 안하고 있는 것 같다, :(
이 녀석들의 방학이 끝날 때 쯤엔 이쁘고 새로운 우리의 공간을 볼 수 있었으면 좋겠다.^^

Art of UNIX Programming - 8점
Eric S. Raymond 지음, 김희석 옮김/정보문화사


오픈소스나 유닉스 계열에서 꽤나 유명한 에릭 레이몬드가 쓴 책이다.
이 책의 제목만 봐서는 유닉스 프로그래밍에 대한 고급 기법들을 다룰 것 같지만, 단지 유닉스 철학만을 이야기한다. 도날드 커누스의 Art of Computer Programming의 이름을 본 따서 지었다는데, 책 주제와 상관없는데도 제목을 이렇게 지은 걸 보면 어지간히도 커누스의 Art of 시리즈가 감명 깊었는가보다.( 책 이름이던지 내용이던지 아니면 커누스 그 자체던지간에 )

책의 목차를 한번 살펴보자. 소주제들은 제외했다.

Part 1 UNIX의 오늘
Chapter 1 철학 : 중요한 것은 철학이다
Chapter 2 역사 : 두 문화에 대한 이야기
Chapter 3 대조 : UNIX 철학과 다른 것을 비교하기

Part 2 설계
Chapter 4 모듈화 : 간단하게, 단순하게!
Chapter 5 텍스트화 : 우수한 프로토콜은 우수한 습관을 만든다
Chapter 6 투명성 : 빛이 있으라!
Chapter 7 멀티프로그래밍 : 서로 다른 작업을 위한 프로세스들
Chapter 8 미니언어 : 노래하는 기호를 찾아
Chapter 9 생성 : 명세를 한 단계 높게
Chapter 10 구성 : 순조롭게 출발하기
Chapter 11 인터페이스 : UNIX 환경의 사용자 인터페이스 디자인 패턴
Chapter 12 최적화
Chapter 13 복잡함 : 되도록 단순하게 그러나 지나치지 않게

Part 3 구현
Chapter 14 언어 : C 언어이어야 하는가? 아닌가?
Chapter 15 툴 : 개발의 용병들
Chapter 16 재사용 : 바퀴를 다시 발명하지 않기 위해서

Part 4 공동체
Chapter 17 이식 가능성 : 소프트웨어의 이식성과 표준 따르기
Chapter 18 문서화 : 소프트웨어를 종이-중심의 세계로 설명하기
Chapter 19 오픈소스 : 신 UNIX 공동체의 프로그래밍
Chapter 20 미래 : 위험 그리고 기회


vi와 emacs를 비롯한 편집기에 대한 평가와 c, java, python, lisp등 여러 언어에 대한 평가가 특히 재밌다.

편집기나 언어에 대한 평가는 언제나 인터넷을 뜨겁게 달구는 주제이다.
Effective C++의 스캇마이어스도 Effective 시리즈 중 어떤 책에서 편집기에 관한 이야기를 잠깐 언급했는데, 그 때 최고의 편집기는 바로 emacs라고 했다. 나는 그 글을 읽고 바로 Emacs를 설치하고 연습해봤는데, 몇 일 못가서 바로 포기했다. ;)

에릭 레이몬드 역시 그렇지만, 리눅스 계통의 해커들은 c, java, C#보다는 perl 이나 python, LISP 같은 언어들을 높게 평가하는 경향이 있다.
하지만, 조엘 온 소프트웨어의 조엘 같은 경우에는 자기 주위의 해커들( 아마도 마이크로소프트의 천재들 )은 그렇지 않다며 반박하는 것도 재밌다.

에릭 레이몬드는 윈도우즈를 정말 더럽게도 싫어하는데, 윈도우즈를 욕하는 내용 또한 역시 재밌는 볼거리이다.

이런 내용들 말고도 재밌게 읽은 만한 내용들이 많이 들어있다.
꼭 유닉스 프로그래머가 아니더라도 가볍게 읽어보기 좋을 것이다.

에릭 레이몬드의 글 중 이 책에 없고 인터넷에 올려진( 어딘가에서 한번씩은 읽어봤을만한 ) 재밌는 글들 또한 많다.

다음 링크들에서 볼 수 있다.
How To Become A Hacker
해커가 되는 방법
Why Python
How To Ask Questions The Smart Way
좀더 나은 질문을 하기 위한 방법
에릭 레이몬드의 홈페이지



자바스크립트 완벽 가이드 - 전2권 - 10점
데이비드 플래너건 지음, 송인철 외 옮김/인사이트


지난달에 신청해 두었던 책들이 오늘 도서관에 도착했다.
제일 기대했던 책은 JavaScript The Definitive Guide라는 책이었는데, 워낙 유명한 책이라서 Javasciprt를 쓸 일이 거의 없긴 하지만 꼭 한번 읽어보고 싶었다.

나는 예전 부터 궁금했던 Closure에 대한 부분만을 읽어봤는데 꽤 많은 도움이 되었다.

python이나 ruby에 익숙하다면 아마도 Closure를 사용해서 프로그램을 작성하는 방법에 익숙하겠지만, C/C++, Java, C# 같은 언어를 사용한다면 대부분이 그렇지 않을 것이다.

내가 처음 Closure를 알게 된 것은 폴 그레이험의 해커와 화가라는 책에서였다.
그는 LISP가 좋은 이유를 설명하면서 누산기 함수를 여러 언어로 작성해서 비교했었는데, 그때 자바 스크립트 코드가 다음과 같았다.

function foo( n ) {
    return function( i ) {
        return n += i } }

아니 뭐 이렇게 생긴 코드가 다있어!  라고 생각했었고, 그 때부터 python이나 다른 언어에서 제공 되는 lamda 표현식에 조심씩 관심을 갖기 시작했다.

이 책에서는 10pages 정도만이 Closure를 설명하고 있는데 이해하기가 쉽지 않았다.

<html>
<head>
<script language="javascript">
var f, g;
function foo()
{
  var x = 0;
  f = function() { return ++x; };
  g = function() { return --x; };
  x = 1;
  alert(f());// "2"
}

var uniqueID1 = (function()
{
        var id = 0;
        return function() { return id++; };
})();

var uniqueID2 = (function()
{
        var id = 0;
        return function() { return id++; };
})();
</script>
</head>

<body>
        <input value = "foo" type="button" OnClick="foo();"></input>
        <input value = "+" type="button" OnClick="alert(f());"></input>
        <input value = "-" type="button" OnClick="alert(g());"></input>
        <input value = "uniqueid1" type="button" OnClick="alert(uniqueID1());"></input>
        <input value = "uniqueid2" type="button" OnClick="alert(uniqueID2());"></input>
</body>
</html>

foo 함수는 f()와 g()를 전역참조에 저장하기 때문에 f()와 g()는 같은 호출 객체를 공유한다.
따라서 상태변수 x 역시 공유된다.

uniqueID 함수는 호출될 때 마다 1씩 증가된 고유한 값을 리턴한다.
전역 변수를 하나 둔 채로 다음과 같이 작성하는 거랑 뭐가 틀리지? 하고 생각할 수도 있을 것이다.

var i = 0;
function unique()
{
    return ++i;
}

하지만 위의 전역변수는 다른 곳에서 언제든지 바뀔 수 있기 때문에 고유한 값임을 보장하지 못한다.

var uniqueID1 = (function()
{
        var id = 0;
        return function() { return id++; };
})();

반면에 위의 클로저 예제 에서는 데이터는 id라는 지역 변수안에 가지고 있고 이 변수는 다른 곳에서는 절대로 접근할 수가 없다.

uniqueID2는 새로운 호출 객체를 생성하여 그 호출 객체와 매핑된다. 따라서 uniqueID1과 uniqueID2는 서로 독립적으로 상태를 유지하는 함수 객체들이 된다.

클로저에 익숙하지 않다면 위 코드를 실행시켜보는 것이 이해하는데 도움이 될 것이다.

아래에 링크된 페이지들도 역시 유용하다.
http://en.wikipedia.org/wiki/Closure_(computer_science)
http://martinfowler.com/bliki/Closure.html
http://newlord.egloos.com/1978181    ( 위 마틴 파울러의 글을 번역 )
Code Complete - 10점
스티브 맥코넬 지음, 서우석 옮김/정보문화사

이 책은 말이 필요 없는 프로그래머들의 필독서이다. 좋은 코드를 작성하기 위해서 필요한 정보들을 내용으로 담고 있다.책의 난이도는 초급이면서 동시에 초고급이다.
초급자에게는 그 나름대로 좋은 지침을 주고, 고급 개발자에게는 고급 개발자들만이 보이는
문장이 있다.

신입사원 때 이 책을 조금 읽다가 딱딱하고 지루해서 그만두었었는데, 회사에서 개발을 꾸준히 하다가 1년 쯤 지나서 다시 이 책을 뒤적거렸을 때에는 예전에는 보이지 않던 아름다운 지침들이 조금씩 눈에 들어오는 것을 느꼈다.

아직도 많은 부분을 이해하지 못하고 넘어가지만, 어쩌면 이 책에 있는 모든 문장  하나하나가 그런 좋은 지침일지도 모른다.
단지, 아직 경험이 미숙해 의미가 와닿지 않고 스쳐지나가게 될 뿐. 조금 더 경험을 쌓고 다시 읽을 때 마다 새로운 느낌을 갖게 될 것 이다.

1년에 한 번 정도는 새로 읽어보는 것도 좋지 않을까?

실제로 Jeffrey Richter도 이 책을 가장 먼저 추천하는데, 그 역시 10년동안이나 이 책을 읽고 있지만 아직도 이 책에서 많은 것을 배운다고 말한다.

번역은 내가 너무 좋아하는 서우석씨가 했으며, 역시 훌륭하다.

목차는 다음과 같다.

Part 1 기초 수립
Chapter 1 소프트웨어 구현으로의 초대
Chapter 2 소프트웨어 개발의 이해를 돕기 위한 비유
Chapter 3 준비는 철저하게 : 선행 조건
Chapter 4 구현 시 결정해야 할 핵심적인 사항들

Part 2 고급 코드 생성하기
Chapter 5 구현 설계
Chapter 6 클래스 다루기
Chapter 7 고급 루틴
Chapter 8 방어적인 프로그래밍
Chapter 9 의사코드 프로그래밍 프로세스

Part 3 변수
Chapter 10 변수 사용 시 일반적인 문제
Chapter 11 변수 이름의 효과
Chapter 12 기본 데이터 형
Chapter 13 특이한 데이터 형

Part 4 명령문
Chapter 14 직선형 코드 구성하기
Chapter 15 조건문 사용
Chapter 16 루프 제어
Chapter 17 특이한 제어 구조들
Chapter 18 테이블을 활용하는 방법
Chapter 19 제어와 관련된 일반적인 문제

Part 5 코드 향상
Chapter 20 소프트웨어의 품질에 대한 조망
Chapter 21 협력적인 구현
Chapter 22 개발자 테스트
Chapter 23 디버깅
Chapter 24 리팩토링
Chapter 25 코드 최적화 전략
Chapter 26 코드 최적화 기법

Part 6 시스템 고려사항
Chapter 27 프로그램의 크기가 구현에 미치는 영향
Chapter 28 구현 관리
Chapter 29 통합
Chapter 30 프로그래밍 도구들

Part 7 소프트웨어 장인정신
Chapter 31 배치와 방식
Chapter 32 스스로를 설명하는 코드
Chapter 33 개인 성격
Chapter 34 소프트웨어 장인(匠人)에 대한 주제
Chapter 35 더 많은 정보를 얻으려면




국내에 좋아하는 프로그래밍 서적 집필자들이 몇 명 있는데 그들은 김상형, 이재규, 김태영 그리고 윤성우이다.
이들의 공통점은 국내의 몇 안되는 베스트 셀러 및 스테디 셀러 작가라는 점이다.
아마도 그 이유는 글로써 어려운 내용을 쉽고 재밌게 전달하는 능력을 갖추고 있기 때문일 것이다.

작년에 이 책이 나오자 마자 책 주제와 저자 이름만 보고 바로 구해서 읽었었는데, 그 이름 값은 충분히 했다. 책을 다 읽고 감동해서 윤성우씨한테 고맙다는 메일을 보냈는데 답장이 와서 좋아했던 기억이 난다.

이 책은 Jeffrey Richter의 Programming Application 의 내용과 흡사한데, Jeffrey Richter의 책 만큼 깊게 접근 하지는 않지만 본질들을 잘 다루고 있고, 재미있게 쓰여져 있어서 읽는 내내 너무 좋았다.

특히 커널 오브젝트와 핸들 테이블에 대한 내용은 이 책의 백미인데, Jeffrey의 책에서도 잘 다루고 있지만 나는 오히려 우리말로 쓰여진 이 책에서 훨씬 더 많은 내용을 이해할 수 있었다.

-Jeffrey Richter의 책은 4판이 번역서가 있긴 하지만 읽기가 힘들어서 5판의 번역서가 어서 나오길 기대하고 있다.

이 책의 목차는 다음과 같다.

1부. 컴퓨터 구조와 프로그래밍 모델
1장. 컴퓨터 구조에 대한 첫 번째 이야기
2장. 아스키코드 vs 유니코드
3장. 64비트 기반 프로그래밍

2부. 프로세스와 IPC
4장. 컴퓨터 구조에 대한 두 번째 이야기
5장. 프로세스의 생성과 소멸
6장. 커널 오브젝트와 오브젝트 핸들
7장. 프로세스간 통신(IPC) 1
8장. 프로세스간 통신(IPC) 2
9장. 스케줄링 알고리즘과 우선순위

3부. 멀티 쓰레드와 동기화
10장. 컴퓨터 구조에 대한 세 번째 이야기
11장. 쓰레드의 이해
12장. 쓰레드의 생성과 소멸
13장. 쓰레드 동기화 기법 1
14장. 쓰레드 동기화 기법 2
15장. 쓰레드 풀링(Pooling)

4부. 메모리 관리와 I/O
16장. 컴퓨터 구조에 대한 네 번째 이야기
17장. 구조적 예외처리(SHE) 기법
18장. 파일 I/O와 디렉터리 컨트롤
19장. 비동기 I/O와 APC
20장. 메모리 관리(Virtual Memory, Heap, MMF)
21장. Dynamic Linking Library

웹 진화론 - 10점
우메다 모치오 지음, 이우광 옮김/재인


몇 달 전에 회사에서 booksmba.com 이라는 곳의 무료 독서 프로그램을 수강해보라고 해서 웹 2.0에 대해 쓴 책들을 무더기로 읽게 될 기회가 있었다.

사실 여러 수강 과목들이 있었지만 다른 과목들은 다 경제니 마케팅이니 하는 것들 밖에 없어서 나는 별 고민 없이 웹 2.0 이라는 과목을 선택했다.

다음 3권의 책이 내게 전해졌다.
- 대한민국 웹 2.0 트렌드 -김상범
- 웹 2.0 경제학 -김국현
- 웹진화론 -우메다 모치오
맨 처음에는 대한민국 웹 2.0 트렌드라는 책을 읽었는데, 사실 이 때야 블로그가 뭔지 제대로 알게 되었고, 그 빌어먹을 놈의 트랙백 보내기라는 말도 알게 되었다. -나는 개발팀에서 일하지만 종종 우리 기획팀 사람들에게 컴맹이라는 소리를 많이 듣는다. 제기랄.
이 때 처음으로 나도 블로그가 해보고 싶다는 욕구를 느꼈고, 그래서 지금 이 블로그를 만들게 되었다.

두 번째로 읽은 책이 바로 웹 진화론 이라는 책이었는데, 엄청 잘 쓰여진 책이었다.
전혀 기대하지 않고 보게되는 책들 중 이런 명서를 발견하게 되는 것은 기억에 남는 일이다.

내 침대 옆에는 책이 10권 정도가 널부러져있는데, 자기 전에 보고 싶은 것들을 집어서 읽다가 잠들곤 한다.
아마도 금요일 날이었을 것이다. 술을 마시고 집에 들어가서 침대에 누워 이 책을 펴서 조금 깨작거리다가 그대로 떡실신을 해버렸다.
다음 날에 눈을 뜨니 일어나기도 귀찮고 해서 책이나 좀 읽을까 하고 이 책을 집어 들었는데, 나는 6시간 동안 꼼짝 않고 누운 자리에서 이 책을 다 읽었다. 배고픈 걸 참는게 조금 힘들긴 했지만 이 책은 그만큼 나를 몰입시켰다.

다른 웹 2.0 책들과 마찬가지로 구글이니 아마존이니 롱테일이 어쩌구 저쩌구 하는 전체적인 줄거리는 같지만, 다른 책들에서는 미처 깨달을 수 없었던 많은 부분들을 이 책에서 얻을 수 있을 것이다.