코드가 존재하리라
코드에 집중을 굳이 해야할까? 모델이나 요구사항에 집중해야 하지 않을까?
코드는 요구사항을 표현하는 언어, 코드의 도움 없이 요구사항을 상세히 표현하기란 불가능하다.
나쁜 코드
프로그래머라면 누구나 나쁜 코드로 고생한 경험이 있다. 그렇다면 어째서 나쁜 코드를 짰는가? 급해서? 서두루느라?
우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다.
그러나 나중은 결코 오지 않는다.
나쁜 코드로 치르는 대가
나쁜 코드는 개발 속도를 크게 떨어뜨린다. 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다.
<원대한 재설계의 꿈>
생산성이 떨어지면 관리층은 재설계를 위해 새로운 팀을 꾸린다. 하지만 새로운 팀은 모두 떠난다. 왜? 현재 시스템이 너무 엉망이라서
<태도>
일정이 촉박해 제대로 된 코딩을 할 시간이 없었다. 상사가 시키는 대로 하지 않으면 짤린다.
글쎄다. 그래도 더러운 코드로 인한 잘못은 전적으로 프로그래머에게 있다.
관리자가 일정과 요구사항을 강력하게 밀어붙이는 이유는 그것이 그들의 책임이기 때문이다. 좋은 코드를 사수하는 일은 바로 프로그래머들의 책임이다.
예를 들어, 어느 환자가 수술 전에 손을 씻지 말라고 요구한다. 시간이 너무 걸리니까.
하지만 의사는 단호하게 거부한다. 왜? 질병과 감염의 위험은 환자보다 의사가 더 잘 아니까. 환자 말을 그대로 따르는 행동은 전문가답지 못하다.
프로그래머도 마찬가지다. 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.
<원초적 난제>
대부분의 프로그래머는 기한을 맞추려면 나쁜코드를 양산할 수 밖에 없다고 느낀다.
하지만 오히려 나쁜 코드를 양산하면 기한을 맞추지 못한다. 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고, 결국 기한을 놓친다.
기한을 맞추는 유일한 방법은, 그러니까 빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
<깨끗한 코드라는 예술?>
그렇다면 깨끗한 코드를 어떻게 작성할까?
깨끗한 코드를 작성하려면 '청결'이라는 힘겹게 습득한 감각을 적용하는 절제와 규율이 필요하다. 열쇠는 '코드 감각'이다.
<깨끗한 코드란?>
비야네 스트로스트룹 - 보기에 즐거운 코드, 자원을 낭비하지 않는 코드, 오류 처리를 꼼꼼히 하는 코드, 한 가지에 집중하는 코드
그래디 부치 - 잘쓴 책처럼 읽히는 코드
데이브 토마스 - 다른 사람이 고치기 쉬운 코드, 테스트 케이스가 있는 코드
마이클 페더스 - 주의 깊게 작성한 코드
론 제프리스 - 중복을 피하라, 한 기능만 수행하라, 제대로 표현하라, 작게 추상화하라
워드 커닝햄 - 짐작했던 기능을 그대로 수행하는 코드
우리들 생각
이 책은 오브젝트 멘토 진영이 생각하는 깨끗한 코드를 설명한다. 하지만 책의 생각이 절대적으로 '옳다'라는 단정은 금물이다.
우리는 저자다
우리는 저자다. 저자에게는 독자가 있다. 그리고 저자에게는 독자와 잘 소통할 책임도 있다.
또한 우리 역시 코드를 읽는다. 심지어 코드를 읽는 시간 대 코드를 짜는 시간 비율이 10대 1을 훌쩍 넘는다.
새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다. 기존 코드를 읽어야 새 코드를 짜므로 읽기 쉽게 만들면 사실은 짜기도 쉬워진다.
보이스카우트 규칙
캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라
체크아웃할 때보다 좀 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다.
프리퀄과 원칙
이 책은 저자가 2002년에 출판한 Agile Software Development: Principles, Patterns, and Practices (PPP)의 프리퀄이다.
이 책에서는 다양한 설계 원칙을 산발적으로 거론한다. SRP, OCP, DIP 등이 그 예이다. 각 원칙은 PPP에서 자세히 설명한다.
결론
이 책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다. 단순히 뛰어난 프로그래머가 생각하는 방식과 도구를 소개할 뿐이다.
즉, 이 책을 읽고 체득하는 것은 바로 독자에게 달렸다.
'book > clean code' 카테고리의 다른 글
[Clean Code] 6. 객체와 자료 구조 (0) | 2021.09.11 |
---|---|
[Clean Code] 5. 형식 맞추기 (0) | 2021.09.02 |
[Clean Code] 4. 주석 (0) | 2021.08.30 |
[Clean Code] 3. 함수 (2) | 2021.08.27 |
[Clean Code] 2. 의미 있는 이름 (0) | 2021.08.27 |