- 주요 내용
- 나쁜 코드를 작성하게되면 어떻게 되는지, 깨끗한 코드를 작성해야하는 이유
- 깨끗한 코드의 다양한 의견
- 코드를 자동으로 생성하는 시대가 오고, 그 때 프로그래머는 필요가 없다고 생각하는 사람들이 있지만 앞으로 코드가 사라질 가능성은 전혀없다.
- 코드는 요구사항을 상세히 표현하는 수단이라, 어느 수준에 이르면 코드의 도움 없이 요구사항을 상세하게 표현하기란 불가능하다.
- 궁금적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심한다.
- 급하고 서두르느라 제대로 짤 시간이 없다고 생각해 나쁜 코드를 작성한다.
- 그리고 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다.
- 우리는 르블랑의 법칙(leblanc's Law)을 몰랐고, 나중은 결코 오지 않는다.
점점 생산성이 떨어진다.
- 개발 속도가 프로젝트 초반에는 번개처럼 나가다가 1-2년만에 굼뱅이처럼 기어들어가는 팀도 많다.
- 코드를 고칠 때마다 엉뚱한 곳에서 문제가 발생하거나, 나쁜 코드는 간단하게 변경할 수는 없어 코드를 해독한뒤 얽히고설킨 코드를 더한다.
- 생산성이 떨어져, 기존 팀을 나누어 재설계를 계획한다.
- 재설계하는 팀은 기존 기능과 변경 내용을 모두 잡아야하고, 기존 팀은 변경 사항을 적용해야한다.
- 이 과정은 재설계된 시스템이 완성될 때까지 진행되며, 오래걸릴 수 있다.
계속 변경되는 요구사항과 일정이 촉박해 나쁜 코드를 작성했다고 생각하지만, 이 부분의 문제는 전적으로 프로그래머에게 있다. 우리가 일정이 부족하다면 제대로 정보를 제공해야 했기 때문이다.
만약, 환자가 의사에게 자신의 수술을 진행할 때 시간이 급하니 소독을 생략해달라해도 의사는 단호하게 거부할 것이다. 질병과 감염에 대해서는 의사자가 더 잘 알고, 의사가 그 행동을 따르는 것은 전문가답지 못하기 떄문이다.
- 나쁜 코드를 양산하면 기한을 맞추지 못하고, 오히려 엉망진창인 상태로 인해 속도가 늦어져 기한을 놓친다.
- 빨리가는 유일한 방법은 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
- 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 수 있다는 뜻은 아니다.
- 깨끗한 코드를 작성하려면 '청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들은 적용하는 절제와 규율이 필요하다.
아래의 내용은 각 사람이 생각하는 깨끗한 코드에 대한 의견이다. 이 생각이 절대적으로 '옳다'는 단정은 금물이다.
- 비야네 스트롭스트룹
- 보기에 즐거운 코드
- 논리는 간단하게 의존성을 줄이고 오류는 전략에 의거해 관리하며 성능을 최적으로 유지해야한다.
- 한가지에 집중한다. 각 함수와 클래스와 모듈은 주변 상황에 현혹되거나 오염되지 않은 채 한길만 걷는다.
- 데이브 토마스, 앤드 헌트: 깨진 창문(나쁜 코드는 나쁜 코드를 유혹한다.)
- 그래디 부치: 잘 쓴 문장처럼 읽혀야한다.
- 데이브 토마스
- 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.
- 단위 테스트 케이스와 인수 테스트 케이스가 존재한다.
- 마이클 페더스: 누군가 주의 깊게 썻다는 느낌을 준다.
- 론 제프리스: 중복 줄이기, 표현력 높이기, 초반부터 간단한 추상화 고려하기
- 워드 커닝햄: 짐작했던 기능을 각 루틴이 그대로 수행단다면 깨끗한 코드다. = 코드를 독해하느라 머리를 쥐어짤 필요가 없어야한다.
- javadoc에서
@author필드는 저자를 소개한다. 우리는 저자다. - 저자에게는 독자가 있고, 독자와 잘 소통할 책임도 있다. 코드를 작성할 때 이 점을 잊지말자.
- 새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다. 그래서 읽기 쉬운 코드가 매우 중요하다.
캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라
미국 보이스카우트가 따르는 간단한 규칙
- 시간이 지나도 언제나 깨끗하게 유지해야한다.
실제 코드를 작성할 때, 일단 작성해놓고 나중에 수정하자 라고 생각했던 적이 많았습니다. 지금 이 내용을 읽으며 그때 진짜 다시 수정한 것이 얼마나 되었나를 생각해보게 되었고, 나쁜 코드를 작성하는 일이 주는 영향에 대해 다시 생각해 보게 되었습니다. 그리고 그만큼 깨끗한 코드의 다양한 생각을 읽고, 왜 그렇게 생각했나를 고민해보며 각 생각이 표현이 다를 뿐 통일된 내용을 의미한다고 생각했습니다.