사실 프로그래밍에 경험이 생긴다고 모두 다 좋은 코드를 작성하는 것은 아닙니다.
가독성은 물론이며, 속도나 메모리상의 이점을 가진 코드도 많은 경험에서 얻어질 가능성이 높은 것이지 자연스레 얻어지는 것은 아니라고 확신합니다.
이 책은 저자가 경험했거나, 적절하다 생각하는 예제를 놓고 다양한 방법으로 해결을 논합니다. 물론 저자가 거론한 방법이 최선은 아닙니다. 저자도 그렇게 얘기하진 않구요.
효율이란 어느 한 가지 관점에서 이루어져야 하는 것이 아닙니다. 주변 상황에 따라 중요시 여겨야 하는 가치가 달라지므로 그에 맞는 적절한 합의점을 찾아야 한다는 류의 이야기는 이런 류의 책에서 자주 보지만, 진부하다 싶은 감은 있어도 너무 당연한 이야기라 이견의 여지가 없더군요.
알고리즘의 선택에서의 팁이 특히 흥미로웠습니다. 일반적인 퀵정렬이 삽입 정렬이나 선택 정렬보다 느릴 수 있는 상황에 대한 이야기가 아주 적절한 예입니다.
저자는 그런 얘기들을 하면서, 알려진 라이브러리, 자신이 작상했던 함수 등에 대한 맹목적인 믿음을 갖고 코딩을 하지 않았으면 한다는 느낌을 받았습니다. 퀵정렬이 당연히 빠를 것이다라는 믿음에서 올 수 있는 효율성 저하는 단순히 기본 퀵정렬함수보다, 개선한 퀵정렬 함수를 써라가 아니라, 왜 기본 퀵정렬함수가 느릴 수 있는지 이해하고, 개선된 퀵정렬 함수가 왜 효율에 문제가 없는지 이해할 만큼 고민하고 검증하는 과정을 거치라는 이야기가 아니었을까요?
저는 원제인 Programming Pearls보다, 생각하는 프로그래밍이라는 제목이 더 맘에 듭니다. 프로그래밍은 반복되는 작업만하는 단순 노동이 아닙니다. 만약 그랬다면 매크로로 대체될 수 있었겠죠.
그렇기 때문에 어떠한 주제에 대해 한번 더 고민해보는 시도를 할 수 있게 도와준것만으로도 이 책은 가치가 있는 책이었습니다.