본문 바로가기
감상

[코딩관련글] It's probably time to stop recommending Clean Code

by invrtd.h 2023. 4. 17.

https://qntm.org/clean

 

It's probably time to stop recommending Clean Code @ Things Of Interest

It may not be possible for us to ever reach empirical definitions of "good code" or "clean code", which means that any one person's opinions about another person's opinions about "clean code" are necessarily highly subjective. I cannot review Robert C. Mar

qntm.org

 

3줄 요약)

  1. 조금의 코드 반복이 가독성에 큰 악영향을 주지는 않는다
  2. 함수를 더 작게 만들려는 강박이 부수효과가 있는 수많은 함수들을 쏟아낸다
  3. 비슷하게, 주석을 없애려는 강박이 엄청나게 긴 이름을 가진 부수효과가 있는 수많은 함수를 만든다
  4. 부수효과는 독자가 프로그램의 흐름을 읽기 어렵게 만들고, thread safety를 보장하지 못하게 만든다
  5. 함수형 프로그래밍이 인기를 얻으면 Clean Code 예제보다 훨씬 가독성 좋은 리팩토링을 할 수 있을 것
  6. 그러나 사실 객체 지향 프로그래밍이 대세였던 2008년에도 해당 예제는 좋은 코드가 아니었다

 

 내가 늘 하는 말이지만 근본주의, 본질주의는 우리 모두의 적이다. 내가 본질주의를 싫어하는 것은 하루 이틀 일이 아니었어서, 나는 한병철도 사랑을 본질주의적으로 대한다고 깠고 극단적 PC주의자와 대안우파 모두 비슷한 방식으로 깠다. 클린코드 담론은 이들과는 전혀 다른 영역에 있으므로 얼핏 보면 인문학과는 별로 관련이 없어 보이지만, 내 생각에는 모두 근본주의, 본질주의라는 말로 설명 가능하다. 그들은 언제나 you MUST라고 말한다. 코딩의 세계는 매우 변화무쌍한 세계이지만 근본주의적인 명제를 갖고 살다 보면 변화에 빠르게 적응하지 못하게 된다. 빠르게 변화하는 21세기에 인문학에서는 유독 다양성에 관한 담론이 활발히 논의되데 그 이유도 비슷할 것이다.

 

 나는 만약 내가 짠 함수가 10줄 이상이라고 트집을 잡고, 인덴테이션을 3번 했다고 트집을 잡는 상사가 있다면, 그 사람이랑은 일을 못할 것 같다고 늘 생각해 왔다. FFT를 한 번이라도 짜본 사람은 이해할 텐데, 아무리 노력해도 FFT 코드를 15줄 이하, 인덴테이션 2번으로 짜면서 성능과 가독성을 동시에 잡는 것은 불가능하다. 만약 코드를 그 이하로 줄이게 되면 함수 길이가 아무리 짧아졌다 해도 오히려 이해하기 힘든 코드가 나온다. 이유는 자명한데, 그 15줄짜리 코드(인덴테이션 3번)가 FFT를 구성하는 하나의 단위기 때문이다. 이를 쪼개는 것은 마치 원자를 쪼개는 것 같은 느낌을 줄 것이다. 그렇게 할 수도 있으나 불필요하다. 물질의 성질을 알기 위해서는 분자식을 읽는 것으로 족하다. FFT는 극단적인 예시 중 하나다. 그러나 FFT보다 훨씬 쉽지만 그렇게 쉽지는 않은 알고리즘들이 세상에는 널려 있다. 해당 링크를 타고 들어가면 Clean Code가 어떻게 에라토스테네스의 체를 리팩토링했는지 볼 수 있는데 글의 저자는 그것을 보고 "What the heck?"이라고 말한다. 이유는 자명하다. 에라토스테네스의 체도 사실 for문 2중첩을 포함한 10줄 남짓의 코드가 하나의 단위기 때문이다. 하지만 책은 어떻게든 for문을 1중첩으로 줄이고 함수 길이를 5줄로 줄이려고 노력한 결과, 에라토스테네스의 체에 대한 지식을 갖고 있는 사람이 오히려 더 읽기 어려운 코드를 만들었다.

 

 이런 끔찍한 상황이 왜 일어났는지 살펴보면, 모든 것은 코드의 가독성을 측정할 수 있다는 믿음에서부터 출발한다. 그런 믿음은 대개 약간 나쁘다. 이 믿음이 발전하면 코드의 줄 수와 인덴테이션 수와 주석 수만으로 코드의 가독성을 계산할 수 있다는 믿음이 되는데, 이런 믿음은 대개 매우 나쁘다. 멀쩡히 잘 돌아가던 for문 2중첩 10줄 코드를 분해해버린 것이 바로 그 믿음이었기 때문이다. 만약 하나의 단위가 에라토스테네스의 체 규모의 작은 알고리즘이 아니라, 약 30줄-40줄 정도 되는 알고리즘이라면, 우리는 어떻게 대응해야 하는가? 한 가지 확실한 점은, 본질주의적인 태도를 갖고서는 이런 상황에 대응하지 못할 것이다.

댓글