본문 바로가기

General

[클린 코드] 서문, 0장 들어가면서

최근 좋은 기회로 당근마켓 개발자분들과 우아한형제들 개발자분들이 함께하는 클린 코드 북스터디에 함께하게 되었다. 느슨한 코드에 한 줄기 긴장감이 되어줄 책 읽기와 북스터디 활동이 기대된다.

앞으로 매 장 스터디하며 인상깊은 구절을 정리해보려고 한다. (원래는 1장부터 적어보려했는데, 서문에도 인상 깊은 구절이 많아서 따로 적어보았다.)

서문

옮긴이 서문 (박재호님)

이 책은 로버트 C. 마틴이 40년 이상의 개발 경험을 토대로, 프로 개발자가 어떤 마음가짐으로 개발에 임해야하는지를 다루고 있다. 이 책을 읽고 나면, 왜 전문가 정신, 그리고 장인 정신이 강조되어야 하는지 이해할 수 있다.

이 글은 Java 언어를 베이스로 하지만, 언어나 프레임워크에 관계 없이 우리가 얻어가야할 원칙과 기본은 변하지 않았을 것이다. 그러나 프로그래밍에도 유행이나 스타일이 조금씩 바뀌기 마련이므로, 이 책에 나오는 모든 지침을 절대적이라고 여겨서는 안된다. 오히려 개선의 여지가 언제든지 있다고 생각하는 것이 바람직하다. 개발자 사이에서 함께 생각할 거리를 던져주므로 더욱 가치를 발하는 책이다.

 

추천사 (제임스 O. 코플리엔)

사소한 것이 중요하다.

건축가 미스 반데로에가 말했듯, 신은 세세함에 깃들어 있다. 미스 반데로에는 자신이 설계한 집의 손잡이도 모두 직접 선택했다고 한다. 왜 그랬을까? 사소한 것이 중요하기 때문이다. 작은 것에도 충실한 사람이 큰 것에도 충실하다. 모든 변수 이름에 주목해야한다. 첫아이 이름을 짓듯이 심사숙고해서 변수 이름을 지어야한다.

책임있는 전문가라면 프로젝트를 시작할 때 생각하고 계획할 시간을 확보해야한다. 테스트와 코드만으로 설계를 주도한다는 1990년대 후반의 생각으로는 (더 이상) 안 된다. 이제 세세함에 주의를 기울이는 태도는 전문가에게 더욱 필수적인 자질이다.

사실 소프트웨어는 80% 이상이 소위 '유지보수'다. 사실 개발자는 무언가를 만드는 '건축가'보다는, 이를 지속적으로 관리하고 보수하는 '수리공'에 빗대는 것이 더 타당하다. 진정으로 책임있는 개발자라면 제품 생명주기까지 고려해야 한다. 매일 기계를 검사하고, 닳아버린 부품을 교체하고, 10,000km 주기로 엔진오일을 교체해 고장을 미연에 방지한다. 코드에서는 인정사정없이 리팩터링하라는 얘기다.

집을 청소해본 사람은 누구나 알듯, 지속적인 개선과 보살핌은 결코 끝나지 않는다. 건축가 크리스토퍼 알렉산더는 모든 설계행위를 작은 규모의 국부적인 수리 행위로 보았다. 전체 구조를 훌륭하게 만드는 것만이 장인으로서 건축가가 해야할 유일한 일이고, 주택의 형태를 만들어가는 것은 패턴과 거주자의 응용에 맡겨도 된다고 생각했다. 

벨 연구소에서 일하던 시절 우리는 간단한 조사, 일관적 들여쓰기 스타일이 버그 수를 줄여주는 가장 중요한 요인 중 하나라고 추측했다. 간단한 들여쓰기 스타일로 가치를 더한다는 사실에 모욕감을 느낄 수 있다. 고상한 설계 방법론과 도구를 통달해야 한다고 생각하는 까닭에, 뭔가 좀 더 고차원적인 요인이 있기를 바란다.

하지만 품질은, 하늘에서 뚝 떨어지는 것이 아니라, 일상 속에 기울이는 무수한 관심 속에서 얻어진다. 일상적이고 간단한 활동 모두가 인간의 노력에 들어있는 위대함과 아름다움의 바탕이다.

우리는 우리의 코드를 숭고한 설게 노력이 낳은 아름다운 산물로 봐야한다. 설계는 '과정'이지, 고정된 종착점이 아니다. 아키텍쳐도, 깨끗한 코드도 완벽을 주장하지는 않는다. 단지 최선을 다해 정직하라 요구할 뿐이다. 

고상한 통찰을 끝냈으니 이제 내 책상이나 치우러 가야겠다.

 

0장 들어가면서

장인 정신을 익히는 과정은 2단계로 나뉜다.

  1. 이론 - 장인에게 필요한 원칙, 패턴, 기법, 경험이라는 지식을 습득해야한다.
  2. 실전 - 열심히 일하고 연습해 지식을 몸과 마음으로 체득해야 한다.

단순히 원칙과 패턴을 안다고 깨끗한 코드가 나오지 않는다. 고생을 해야한다. 스스로 연습하고 실패도 맛봐야한다. 남들이 시도하다 실패한 모습도 봐야한다. 잘못된 결정으로 대가를 치르는 모습도 봐야한다.

이 책을 읽는 동안 마음 고생할 준비를 하기 바란다. 비행기 안에서 심심풀이로 읽어보는 '기분 좋은' 책이 아니다. 읽을 코드가 아주 많다. 모듈을 분해했다 다시 조립하는 과정도 이해해야한다. 이 모든 활동에는 시간과 노력이 들지만 그만큼 값어치가 있다고 생각한다.

이 책의 구성은 3단계로 나뉜다.

  1. 깨끗한 코드를 작성하는 원칙, 패턴, 실기
    • 1~13장 (p1~244)
    • 코드가 많아 읽기 힘들겠지만, 2단계를 준비하는 단계이다.
  2. 케이스 스터디
    • 14~16장 (p245~366)
    • 복잡도가 더 높다. 문제가 있는 코드를 문제가 더 적은 코드로 바꾸는 연습이다. 상세히 살펴보려면 집중력이 필요하다. 시간도 충분히 투자해야 한다. 
  3. 결말
    • 17장 (p367~406)
    • 케이스 스터디를 통해 수집한 code smell과 휴리스틱(heuristic)을 마지막 장에서 열거한다.

2단계를 주의깊게 읽어보지 않으면 3단계에서의 정리가 가치를 발휘하지 못하게 된다. 2단계를 건너뛰고, 1단계와 3단계를 건너뛴다면 '기분 좋은' 책을 하나 더 읽었을 뿐이다. 이 책이 그저 '기분 좋은' 책으로 머물지 않기를 바란다. 손으로, 몸으로, 마음으로 익히기를 바란다.

 

 

출처: 도서 클린코드 애자일 소프트웨어 장인 정신, 로버트 C.마틴 지음 | 박재호, 이해영 옮김 | 인사이트