실무로 통하는 클린코드: 기대와 실망 사이

Cpprhtn·2024년 8월 23일
1

books

목록 보기
5/10
post-thumbnail

"이 책은 한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다."만 책 내용에 대한 아쉬움이 많아 비판하는 내용을 같이 담아본다.

실무(협업, 오픈소스 기여 등)에서 클린 코드를 적용하는 데 도움을 줄 것으로 기대했으나, 여러 가지 아쉬운 점들이 많았다.

책의 구성과 주요 내용

이 책은 총 25개의 챕터로 구성되어 있으며, 각 챕터는 5개에서 17개의 레시피(Sub Chapter)로 세분화되어 있다.

다양한 상황에서 클린 코드를 어떻게 적용할 수 있는지 구체적으로 설명하려는 의도를 가지고 있는 듯했다.

특히 이 책에서 크게 얻어갈 수 있는 내용은 다음과 같다:

  1. 클린 코드의 이론과 이점 이해하기
  2. 단계별로 배우는 리팩터링 기술
  3. 코드 스멜을 식별하고 해결하는 방법
  4. 가독성이 높은 코드 작성 노하우

이 책의 독특한 점은 15종류가 넘는 프로그래밍 언어를 넘나들며 클린 코드의 개념을 설명하는 것이다.

기존의 클린 코드 서적들과는 차별화된 부분으로, 특정 언어에 국한되지 않는 클린 코드의 범용성을 강조하고 있다고 볼 수 있다.

기존에 읽어본 서적
Clean Code(로버트 C. 마틴) - Java
Tidy First(켄트 벡) - JavaScript, Python
파이썬 클린코드 2nd Edition(마리아노 아나야) - Python

다양한 언어의 활용: 장점과 한계

책에서는 클린 코드가 특정 프로그래밍 언어에 제한되지 않으며, 대부분의 레시피가 여러 언어에 적용 가능하다고 주장하고 있다. 기존의 클린 코드 책들이 특정 언어(Java, Python 등)에 집중한 것과는 다르게 접근한 점이 인상적이었다.

하지만 이 접근법은 실무에서 다루는 언어에 따라 책의 유용성이 달라질 수 있다는 문제점이 있었다. 나는 주로 Python과 C++을 사용하는 개발자로서, 여러 언어가 등장하는 부분에서 혼란스러움을 느꼈다. Bad Case와 Clean Case 코드를 비교할 때, 언어가 자주 바뀌는 점이 문제였다. 예를 들어, 한 레시피에서는 Java로 설명하다가, 바로 다음 레시피에서는 C++, 그다음은 Ruby, Kotlin, ... 등으로 전환되는 방식은 코드 이해를 어렵게 만들었다.

또한, 같은 레시피 내에서도 언어가 바뀌는 경우가 있었다. 예를 들어, Java로 Bad Case를 설명한 후, Kotlin 문법을 이용해 문제를 해결하라는 식의 설명은 나에게 혼란을 초래했다. 심지어 해당 문법은 파이썬에서는 완전히 다르게 동작한다. 이러한 방식은 각 언어에 대한 깊은 이해 없이, 단순히 여러 언어를 사용하려는 시도로 보일 수밖에 없었다. 책의 서문에서 "책에 작성된 코드들은 Copilot, Bard, ChatGPT 등의 도구로 작성되었습니다."라는 문구를 보고, 작성된 코드에 대해서는 언어별로 검수를 받았으면 좋았지 않았을까라는 생각이 들었다.

코드의 일관성과 가독성 문제

책을 읽으며 가장 큰 불만 중 하나는 코드의 일관성과 가독성 문제였다. 클린 코드의 기본 원칙 중 하나는 코드를 읽기 쉽게 만드는 것이다. 하지만 이 책에서는 코드에 설명 주석이 과도하게 붙어있어(아마 독자에게 설명하기 위한 배려일듯하지만), 오히려 코드 이해를 방해하는 경우가 많았다. 클린 코드라면 코드 자체로 이해할 수 있어야 한다는 점에서, 이러한 주석들은 불필요하게 느껴졌다.

각 레시피에서 참조하는 다른 레시피를 배치한 점도 문제가 있었다. 예를 들어, Chapter 3.4에서 Chapter 10.1과 Chapter 23.1을 참조하는 식의 구성은 처음 읽을 때 흐름을 방해했다. 물론, 나중에 사전처럼 활용할 때는 왔다갔다하며 유용할 수 있지만, 처음 읽는 입장에서는 불편하다고 느꼈다.

더 나아가, 책의 초반부터 코드 예시가 줄줄이 나오는 반면, Chapter 9에서야 코딩 표준에 대한 내용이 등장했다. 예를 들어, Python에서는 스네이크 케이스를 사용하라고 설명하면서도, 실제 책에서는 Python 예시코드에서 캐멀 케이스와 스네이크 케이스가 혼용된 경우가 있었다. 이는 번역 과정에서의 문제인지, 원서 자체의 문제인지는 모르겠다만... 책에서 제공하는 Github 소스코드를 확인해보니, 최근에서야 Python 변수 선언부 코드를 수정한 점도 아쉬움이 남았다.

실무와 동떨어진 조언들

이 책의 제목은 "실무로 통하는 클린 코드"이지만, 실제 내용은 실무와는 다소 동떨어져 있다는 느낌을 받았다. 예를 들어, 비즈니스 코드를 작성할 때 Go, Rust, C++을 피하라는 조언이 있었다. 회사에서 이미 사용 중인 언어를 다른 언어로 바꾸라는 식의 조언은 현실적이지 않으며, 실무에서의 적용 가능성을 떨어뜨렸다.

또한, C++에서 전처리기를 사용하지 말라는 권고는 지나치게 극단적인 표현으로 느껴졌다. 전처리기의 단점이 분명 존재하지만, 해당 단점을 포기함으로써 얻는 이점이 있어 여전히 유용하게 사용된다. 이러한 상황을 무시하고 단순히 사용하지 말라고 권하는 것은 클린 코드의 유연성을 해치는 접근이었다.

결론: 기대와 실망 사이에서

이 책은 클린 코드의 이론과 실무 적용을 다루며, 다양한 언어를 통해 범용적인 코딩 원칙을 설명하려고 했다. 그러나 코드의 일관성, 가독성 문제, 그리고 실무와의 괴리감 때문에 여러 면에서 실망스러웠다. 개인적으로는 오라일리 책을 읽으며 이렇게 실망한 적은 처음이었다. 클린 코드를 배우고자 한다면, 한두 개의 언어에 집중한 다른 책이나, 방법론적인 내용을 다룬 책을 선택하는 것이 더 나을 것 같다.

같은 한빛출판사의 Tidy First책을 감명깊게 읽었고 강추한다!!!
코드설명은 적지만 범용적으로 코드의 퀄리티들을 높여줄 수 있는 다양한 방법론을 예시를 들어 잘 설명해준다.

비판이 많이 담긴글이지만.. 아쉬워서 하는소리다.
현업에서 일어나는 다양한 부분들을 놓치지 않고 208개의 레시피로 설명하니 사전과 같이 필요할때 참고하기 좋은 책인듯하다.
궁금하다면 한번 구매해서 읽어보길 바란다.

profile
개발잘하고싶다

0개의 댓글