(서평) 읽기 쉬운 코드가 좋은 코드다

제가 여러번 극찬한 임백준씨의 번역서입니다.

얼마나 좋았으면 직접 번역을 하셨을까 궁금하더군요.

이전에 번역하신 해커와 화가도 두고 두고 읽을만큼 색다른 시각이 좋았던지라, 이 책에 대한 기대도 그만큼 컸다고 볼 수 있습니다.

대략 책 제목에서도 알 수 있듯이, 어떠한 코드가 읽기 좋은 코드인지에 대한 기준을 제시하는 책입니다.

한빛 미디어 사이트 목차에서 발췌하자면, 담고 있는 내용은 아래와 같습니다.

1장. 코드는 이해하기 쉬워야 한다
01. 무엇이 코드를 '더 좋게' 만드는가?  
02. 가독성의 기본 정리  
03. 분량이 적으면 항상 더 좋은가?  
04. 이해를 위한 시간은 다른 목표와 충돌하는가?  
05. 어려운 부분  

PART I. 표면적 수준에서의 개선

2장. 이름에 정보 담기
01. 특정한 단어 고르기  
02. tmp나 retval 같은 보편적인 이름 피하기  
03. 추상적인 이름보다 구체적인 이름을 선호하라  
04. 추가적인 정보를 이름에 추가하기  
05. 이름은 얼마나 길어야 하는가?  
06. 이름 포메팅으로 의미를 전달하라  
요약  

3장. 오해할 수 없는 이름들
01. 예: Filter()  
02. 예: Clip(text, length)  
03. 경계를 포함하는 한계값을 다룰 때는 min과 max를 사용하라  
04. 경계를 포함하는 범위에는 first와 last를 사용하라  
05. 경계를 포함하고/배제하는 범위에는 begin과 end를 사용하라  
06. 불리언 변수에 이름 붙이기  
07. 사용자의 기대에 부응하기  
08. 예: 이름을 짓기 위해서 복수의 후보를 평가하기  
요약  

4장. 미학
01. 미학이 무슨 상관인가?  
02. 일관성과 간결성을 위해서 줄 바꿈을 재정렬하기  
03. 메소드를 활용하여 불규칙성을 정리하라  
04. 도움이 된다면 코드의 열을 맞춰라  
05. 의미 있는 순서를 선택하고 일관성 있게 사용하라  
06. 선언문을 블록으로 구성하라  
07. 코드를 '문단'으로 쪼개라  
08. 개인적인 스타일 대 일관성  
요약  	
    
5장. 주석에 담아야 하는 대상
01. 설명하지 말아야 하는 것  
02. 생각을 기록하라  
03. 코드를 읽는 사람의 입장이 되어라  
04. 마지막 고찰 - 글 쓰는 두려움을 떨쳐내라  
요약  
    
6장 명확하고 간결한 주석 달기
01. 주석을 간결하게 하라  
02. 모호한 대명사는 피하라  
03. 엉터리 문장을 다듬어라  
04. 함수의 동작을 명확하게 설명하라  
05. 코너케이스를 설명해주는 입/출력 예를 사용하라  
06. 코드의 의도를 명시하라  
07. 이름을 가진 함수 파라미터 주석  
08. 정보 축약형 단어를 사용하라  
요약  
    
PART II. 루프와 논리를 단순화하기

7장. 읽기 쉽게 흐름제어 만들기
01. 조건문에서 인수의 순서  
02. if/else 블록의 순서  
03. (삼항 연산자로 알려진)?:를 이용하는 조건문 표현  
04. do/while 루프를 피하라  
05. 함수 중간에서 반환하기  
06. 악명 높은 goto  
07. 중첩을 최소화하기  
08. 실행 흐름을 따라올 수 있는가?  
요약  
    
8장. 거대한 표현을 잘게 쪼개기
01. 설명 변수  
02. 요약 변수  
03. 드모르간의 법칙 사용하기  
04. 쇼트 서킷 논리 오용하기  
05. 예: 복잡한 논리와 씨름하기  
06. 거대한 구문 나누기  
07. 표현을 단순화하는 다른 창의적인 방법들  
요약  
    
9장. 변수와 가독성
01. 변수 제거하기  
02. 변수의 범위를 좁혀라  
03. 값을 한 번만 할당하는 변수를 선호하라  
04. 마지막 예  
요약  
    
PART III. 코드 재작성하기

10장. 상관없는 하위문제 추출하기
01. 소개를 위한 예: findClosestLocation()  
02. 순수한 유틸리티 코드  
03. 일반적인 목적의 코드  
04. 일반적인 목적을 가진 코드를 많이 만들어라  
05. 특정한 프로젝트를 위한 기능  
06. 기존의 인터페이스를 단순화하기  
07. 자신의 필요에 맞춰서 인터페이스의 형태를 바꾸기  
08. 지나치게 추출하기  
요약  
    
11장. 한 번에 하나씩
01. 작업은 작을 수 있다  
02. 객체에서 값 추출하기  
03. 더 큰 예제  
요약  
    
12장. 생각을 코드로 만들기
01. 논리를 명확하게 설명하기  
02. 라이브러리를 알면 도움이 된다  
03. 논리를 쉬운 말로 표현하는 방법을 더 큰 문제에 적용하기  
요약  
    
13장. 코드 분량 줄이기
01. 그 기능을 구현하려고 애쓰지 마라 - 그럴 필요가 없다  
02. 요구사항에 질문을 던지고 질문을 잘게 나누어 분석하라  
03. 코드베이스를 작게 유지하기  
04. 자기 주변에 있는 라이브러리에 친숙해져라  
05. 예: 코딩 대신 유닉스 도구를 활용하기  
요약  

PART IV. 선택된 주제들
    
14장. 테스트와 가독성
01. 읽거나 유지보수하기 쉽게 테스트를 만들어라  
02. 이 테스트는 어떤 점이 잘못되었을까?  
03. 이 테스트를 더 읽기 쉽게 만들기  
04. 읽기 편한 메시지 만들기  
05. 좋은 테스트 입력값의 선택  
06. 테스트 함수에 이름 붙이기  
07. 이 테스트 코드는 무엇이 잘못되었는가?  
08. 테스트에 친숙한 개발  
09. 지나친 테스트  
요약  
    
15장. '분/시간 카운터'를 설계하고 구현하기
01. 문제  
02. 클래스 인터페이스 정의하기  
03. 시도1: 순진한 해결책  
04. 시도2: 컨베이어 벨트 설계  
05. 시도3: 시간-바구니 설계  
06. 3가지 해결책 비교하기  
요약  
    
Appendix 추가적인 도서목록
01. 높은 수준의 코드를 쓰는 방법을 다루는 책들  
02. 다양한 프로그래밍 주제에 대한 책들  
03. 역사적 사례를 담고 있는 책들  
찾아보기

이 중 가장 유용했던 내용이라면 주석에 대한 내용입니다. Doxygen을 쓰다보니 강제당한 주석이 너무 당연한 내용을 너무 많이 담고 있었습니다.

물론 제가 Doxygen 규격을 따라가다 느낀 장점은, 당연한 내용을 작성하던 중에 다시 한번 생각하게 된다라는 점이었는데요, 그런 점을 제외하고는 사실 커다란 이득을 보기 어려웠던게 사실입니다.

특히나 최초 작성시에는 그렇다쳐도, 추후 유지보수에는 더더욱이 큰 메리트는 없다고 볼 수 있었습니다.

그렇다고 주석이 필요 없는 코드가 좋다고 항변하기엔, 그런 코드만 작성할 수 있는 것도 아니고 말이죠.

생각을 기록하라라는 이야기도 꽤나 크게 와닿았습니다.

또, 결함을 설명하라는 이 책에 대한 만족도를 크게 높여줬다고 볼 수 있었죠.

  • TODO: 아직 하지 않은일
  • FIXME: 오작동을 일으킨다고 알려진코드
  • HACK: 아름답지 않은 해결책
  • XXX: 위험! 여기에 큰 문제가 있다.
  • TextMate:ESC (이게 뭔뜻인지 아시는분?)

조금 아쉬웠던 것은, 저도 반대하면서도 장점과 단점을 명확히 제시하고 싶었던 goto에대한 설명이 아주 짧게 쓰여있다는 점이었습니다만…뭐 그분들도 제대로 설명하기 어려웠던 걸려나요?

아참! 제가 요새 절실히 깨닳고 있는, 코드 분량줄이기 챕터도 아주 좋습니다.

일주일에 코드 몇만줄 짜냐느니 등으로 일을 열심히했다는 바로미터로 삼는 한심한 일도 비일비재하지만, 대다수의 능력있는 프로그래머들은 적은양의 코드를 작성하면서 원하는 목표를 달성하는 일이 얼마나 가치있는지 잘 아실테니까요.

책 페이지 수도 많지 않고 (부록 제외 240여 페이지), 내용들도 쉽게 쉽게 읽히는 편인지라, C++ 코딩의 정석 만큼이나 추천드리고 싶은 책입니다.

물론, C++ 코딩의 정석은 실수 사례도 모은 느낌이고, 이 책은 코드 작성 + 코드 읽기 관점이지만 말이지요.

팀 내 가이드로 삼아도 될만큼 좋은 책입니다. 추천!

Comments

comments powered by Disqus