[genie 9780132350884]
여러가지 의미에서 Kent Beck의 Implementation Patterns 과 비슷한 느낌의 책이다.
우리가 다루는 프로그래밍 추상화 단계 – 각 단위의 이름(변수나 함수, 클래스 등등…), 실행문(statement), 함수, 클래스, 시스템 레벨에서 어떻게 하면 “쉽게 읽고, 이해하고, 변경할 수 있는” 코드를 짤 수 있는지 설명한다. 그리고 comment나 클래스 설계 원칙에 대한 일반론들(open-closed principle, single responsibility principle…) 역시 다룬다. 사실 일종의 best-practice 북인 셈?
하지만 단순한 이런 류의 책에서 더 나아가서 – 개인적으론 이 부분이 Kent Beck의 Implementation Pattenrs 보다 훨씬 나은 점인 것 같다; 사실 TDD by examples 같은 느낌이기도 하다 – 실제 코드 (JUnit에서 따온 것도 있고, SerialiDate 클래스 같은 것도 있고 … ) 를 점진적으로 개선하는 실제 작업 내용을 한 단계씩 차근차근 밟아가면서 비교해주는 점이 좋았다. “나쁜 ???”에 해당하는 예를 적절히 보여준다는 것도 장점. 특히나 이것들을 “실제로 동작하는 프로그램”에서 가져온다는 점이 아주 좋음…
병행성(concurrency)에 대해서 다루는 부분도 읽을만 했다 – 물론 단점이 꽤 있다. 특히 처음 인용한,
“Objects are abstractions of processing. Threads are abstractions of schedule”
은 꽤나 맘에 듬.
곧 번역서가 나올 것이란 얘기도 있으니, 발간되고 나면 한 번 읽어보는 것도 괜찮겠다.
하지만 이 책에 단점이 없는 것은 아니다. 일단, 이건 개인적인거지만 Java 에 완전히 종속적인 부분이 나오며, 다른 언어에 대한 추가 고려는 없다(…). 그리고 첫 장에서 저자가 설명하듯이,
“모든 내용에 대해서 독자들이 동의할 거라곤 생각하지 않는다.”
에 해당하는게 꽤 보였다. 사실 그게 크게 작용한 것은 병행성 부분. 13 장과 부록에서 크게 다루고 있는데, 저자가 너무 지엽적인데 목매달고 있으며, library와 잘 알려진 concurrent data-structure/model을 쓰라고 하면서도, 정작 중요한(적어도 현재는) Java Executor Services에 대해선 너무 짧게 다룬다. Producer-consumer나 reader-writer 문제 같이 OS 시간에 다뤄서 충분할 내용들을 길게 다루고, 현재 OS나 platform 단에서 잘 정의해서 쓸 수있게 만든 executor service 나 Future construct에 해당하는 녀석들은 제대로 다뤄주지도 않는다.
실제로 여기서 설명하는 것들 – 공유 변수의 ++ 문제 – 같은 건 그냥 병행성 입문 교재에서 다루는 정도도 충분하다. 이 책의 다른 부분들 – 정도의 차이가 꽤 크긴 하지만 – 수준으로 다뤄졌어야 한다. 특히 병행성이 어떻게 구현될 수 있는지 – data parallel, task parallel … – 같은 부분은 거의 생략하면서, 실행 순서 문제나, lock 의 가벼운 정도(Java 5의 AtomicInteger vs. synchronized construct) 주제는 너무 길게 다루고, 큰 의미도 없다. 사실 더 중요한 캐시 친화적인 프로그래밍 같은건 싹 빠졌음 Orz.
실제로 synchronized 대신에 Atomic??? 류를 쓰는 것이 좋긴 하다. 그렇지만 더 중요한 것은 lock 의 세밀함(coarse-grained vs. fine grained)이나, lock 자체를 피해갈 수 있는 전반적인 프레임웍 문제지, 지엽적인 주제에 집착하는 것은 그닥 좋지 않다. 이 부분의 저자가 컨설턴트인데 이러는 것도 좀 그렇긴하다(…).
차라리 이 부분은 적당히 건너뛰고, Art of concurrency나 Patterns for Parallel Programming, 혹은 Java Concurrency in Practice 같은 책을 보는게 이 항목에 대해선 좋은 선택인 듯 싶다.
총평: 일부 동의할 수 없는 내용이나, 미진한 내용(개인적으론 concurrency 부분의 두 챕터)이 있긴하지만, 전반적으로 괜찮은 책이니, 시간이 되면 한 번 읽어보시라.
영어라 읽다 포기했는데;;; 번역서 나올거라니… 그냥 그때가서 다시 읽어야겠다(먼산~)
조엘 온 소프트웨어와 하드 코드 등등을 번역했던 박재호 님이 번역 중이란 소문을 들었음