1장 깨끗한 코드
코드가 존재하리라
- 코드는 더 이상 문제가 아니고 모델이나 요구사항에 집중해야 한다고 생각하는 사람도 있다. 코드가 자동으로 생성되는 시대가 다가온다는 것이다. 그 때가 되면 프로그래머는 필요 없다. 영업 직원이 명세에서 프로그램을 자동으로 생성하면 되니까
- 코드는 요구사항을 상세히 표현하는 수단이므로 앞으로 코드가 사라질 가망은 전혀 없다. 앞에 적은 내용은 헛소리다.
- 앞으로 프로그래밍 언어에서 추상화 수준은 점차 높아질 것으로 예상된다. 하지만 그렇다고 코드가 사라지지는 않는다. 고도로 추상된 언어나 특정 응용 분야 언어로 기술하는 명세 역시 코드니까.
- 궁긍적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심한다. 요구사항에서 정형 구조를 뽑아내는 도구를 만들 수도 있다. 하지만 어느 순간에는 정밀한 표현이 필요한다. 그러므로 코드도 항상 존재하리라.
나쁜코드
- 나쁜 코드는 회사를 망하게 할 수도 있다.
- 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험있다.
- 물론 그때 그 시절 우리는 르블랑의 법칙을 몰랐다. 나중은 결코 오지 않는다.
나쁜 코드로 치르는 대가
- 나쁜 코드가 쌓일수록 팀 생산성은 떨어지다가 마침내 0에 근접한다.
- 생산성이 떨어지면 관리층은 새로운 인력을 추가로 투입한다.
- 하지만 새 인력은 시스템 설계에 대한 조예가 깊지 않다.
- 게다가 새 인력과 팀은 생산성을 높여야 한다는 극심한 압력에 시달린다.
- 그래서 결국 나쁜 코드를 더 많이 양산한다.
- 덕텍에 생산성은 더더욱 떨어져 거의 0이 된다.
원대한 재설계의 꿈
- 마침내 팀은 반기를 들고 관리층은에게 재설계를 요구한다.
- 관리층은 생산성이 바닥이라는 사실을 부인할 수 없어 결국 팀이 요구하는 대로 원대한 재설계를 허락한다.
- 새로운 타이거 팀이 구성된다. 모두가 합류하고 싶지만 가장 유능하고 똑똑한 사람들만 타이거 팀으로 차출된다. 나머지는 계속해서 현재 시스템을 유지보수한다.
- 타이거팀은 기존 시스템의 기능을 모두 재공하면서 그동안 시스템에 가해지는 변경도 모두 따라잡아야 한다.
- 새 시스템이 기존 시스템을 따라잡을 즈음이면 초창기 타이거 팀원들은 모두 팀을 떠났고 새 팀원들이 새 시스템을 설계하자고 나선다. 왜? 현재 시스템이 너무 엉망이어서.
- 위의 것들 중 일부라도 겪었다면 시간을 들여 깨긋한 코드를 만드는 노력이 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이라는 사실을 인정하리라.
태도
- 코드가 왜 엉망이 되었을까요? 딜버트씨, 잘못은 전적으로 우리 프로그래머에 있답니다. 우리가 전문가답지 못했기 때문입니다.
- 인정하기 어렵다.
- 일정이 촉박해 제대로 할 시간이 없었다.
- 일정이 쫒기더라고 대다수 관리자는 좋은 코드를 원한다.
- 그들이 일정과 요구사항을 강력하게 밀어붙이는 이유는 그것이 그들의 책임이기 때문이다.
- 좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다.
- 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.
원초적 난제
- 모든 프로그래머가 기한을 맞추려면 나쁜 코드를 양산할 수밖에 없다고 느낀다. 간단히 말해, 그들은 빨리 가려고 시간을 들이지 않는다.
- 두 번째 부분이 틀렸다. 나쁜 코드를 양산하면 기한을 맞추지 못한다. 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고 결국 기한을 놓친다.
- 그러니까 빨리가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
깨끗한 코드라는 예술?
- 깨끗한 코드를 구현하는 행위는 그림을 그리는 행위와 비슷하다.
- 그림을 보면 잘 그린 그림인지 아닌지 알 수 있다. 하지만 잘 그린 그림을 구분하는 능력이 그림을 잘 그리는 능력은 아니다.
- 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다.
- 어떤 사람은 ‘코드 감각’을 타고 난다. 어떤 사람은 투쟁해서 얻어야 한다.
- ‘코드 감각’이 있는 사람은 나쁜 모듈을 보면 좋은 모듈로 개선할 방안을 떠올린다.