팀원 중 한명이 이 책이 좋다고해서 사두고 책장에 꽂아만 뒀다가 시니어 엔지니어 분의 제안으로 이 책으로 스터디를 시작하게 되었다. '클린 소프트웨어'라는 책 제목을 봤을 땐, 과연 어떤 내용을 담고 있을지 잘 예상되지 않았다. 하지만 책을 모두 읽고 난 지금은 나같은 주니어 개발자들이 모두 읽어봤으면 좋겠다.
내가 기억하는 책의 큰 흐름은 다음과 같다.

애자일 소프트웨어 개발선언 > TDD > Pair Programming > Design Patterns > Case Study > Package Design

애자일 개발 방법론에 대해 설명하고, SOLID 개발원칙을 지키면서 개발하는데 왜 TDD가 중요한지 알려준다. 그리고 Pair Programming 예제를 통해 코드가 어떻게 진화하는지 보여준다. 그 뒤에 디자인 패턴을 설명하면서 Case Study를 통해 패턴이 어떻게 적용되는지 코드를 통해 보여준다. 끝으로 패키지 설계 원칙을 설명하고 Case Study에 적용해본다.

이 책에서는 TDD를 거의 책 전반에 걸쳐서 이야기 한다고 할만큼 강조하고 있다. 오죽하면 챕터마다 요약을 '기승전TDD'라고 쓴적도 있다. TDD를 해야한다는 말은 많이 들었고 TDD 책도 조금 읽어봤지만, 업무에서는 적용해보지 못했다. 개발 속도가 느리기도 하고 그 당시 나의 경험이나 시간적 여유 등 여러가지 이유가 있었겠지만 그랬다. 하지만 이책을 통해 내가 실제로 TDD를 해본 점에서 이 책을 높이 평가하고 싶다. 모든 예제가 Test case가 가장 먼저 나오고 그 뒤에 구현코드가 나온다. 나는 Case Study를 읽으면서 실제로 코드를 구현하였는데, Testcase가 파란불이 나오도록 차례로 구현해보고 비교해봤다. 구현코드 없이 테스트부터 먼저 짜는 것에 어떤 심리적 경계심이 있었다. 하지만 코드가 진화하는 과정을 보고 작가의 방식을 따라가다보니 어느새 TDD가 익숙해졌다.

Design Pattern이나 나머지 부분은 아직 프로젝트 경험이 많이 없어서 그런지 다른 책보다 더 잘 설명하고 있다거나 못하다고 말하기 힘들다. 이 책에서 아쉬운 점도 있다. 코드가 일부는 C++로 되어있고 Java 코드도 최신 코드가 아니다. 이전에 출판된 책을 재출간하는 것인데 소스코드도 10년이란 시간이 흐른만큼 업데이트 해줬으면 하는 아쉬움이 있다. 하지만 책 내용을 이해하는데는 크게 문제가 없다.(그래서 그대로인가)

책의 내용을 요약해보면 다음과 같다.

  1. TDD를 하자.
  2. 작동하는 소프트웨어를 만들어라.
  3. 확장은 나중에, 실제로 필요할 떄 고민하자
  4. 원칙은 원칙일뿐 집착하지 말자.

각자가 가진 경험에 따라 책이 전하고 싶은 메시지가 다르게 다가올 것 같다. 하지만 나는 굉장히 중요한 책을 읽었다는 느낌을 받았다. 더 빨리 읽었으면 좋다는 생각이 들었다. 주니어 개발자들 모두 이 책을 보고 한 단계 성장하는 단계가 됐으면 좋겠다.