코드가 존재하리라
- 프로그래밍의 방식은 진화를 거듭하며 미래에는 프로그래머라는 직업이 줄어들 거라고 생각하는 이가 다수이다. 하지만 GUI등의 방식을 통한 프로그래밍에는 한계가 있다. 상세한 요구사항을 실현하기 위해서는 프로그래머의 역할이 필수불가결하다.
나쁜 코드
- 프로그래머로서 이제 막 5년을 풀로 채운 내가 크게 공감할 수 있었던 파트.
- 시간에 떠밀려, 스케쥴에 맞추기 위해, 혹은 너무나 하기 싫은 개발 부분. 일단은 돌아가는 기능을 만들어놓고 나중에 리팩토링하지 뭐, 라는 생각으로 어떻게든 넘어갔던 순간들. 하지만 실무에서 코딩 경험을 가진 대다수의 프로그래머들은 알고 있을 것이다. 나중은 오지 않는다는 것을.
나쁜 코드로 치르는 대가
- 위와 같은 나쁜 코드가 쌓이고 쌓여 결국 프로젝트를 더 이상 진행할 수 없는 지경에 이르고. 거기에 사람만 바꾸어가면서 좋은 코드를 만들어내야 하는 상황. 모두가 지옥같은 일상을 맞이하는 최악의 상황이다.
원대한 재설계의 꿈
- 결국 참다 못한 멤버들은 선택을 한다. 프로젝트를 떠나거나(퇴직, 이직), 새로운 시스템을 설계하자고. 이를 받아들이고 프로젝트를 뒤집어엎고, 이번엔 다를 것이라고 다짐한다.
태도
- 코드 한 줄의 수정으로 끝날 것만 같았던 일이, 수십, 수백 줄의 코드를 수정해야 하는 대공사로 이어진 경험이 있을 것이다.
- 이럴 때마다 우리는 기획이나 관리 등에게 그 책임을 떠밀곤 한다. 하지만 애초부터 요구사항에 관여하고 이를 실행하는 역할을 맡은 프로그래머들의 책임이 가장 크다.
- 기능 구현 방법등에 있어서는 기획이나 관리자보다 프로그래머가 더 잘 아는 것이 당연한 것이고, 그게 전문가의 역할이다.
원초적 난제
- 앞에서도 언급되었지만, 스케쥴을 맞추기 위해서 나쁜 코드를 양산하는 것은 결국 미래의 재앙을 초래하는 것과 마찬가지이다. 따라서 가장 빨리 가는 길은 깨끗한 코드를 작성하는 것이다.
깨끗한 코드라는 예술?
- 깨끗한 코드를 작성하기 위해서는 '코드 감각'이 필요하다. 이를 타고 나는 사람도 있지만 그렇지 못한 사람도 있다.
- 코드 감각이 있는 프로그래머는 나쁜 코드를 보면 그것을 어떻게 개선할 지에 대해 생각하지만, 코드 감각이 없는 프로그래머는 거기까지 생각하지 못한다.
깨끗한 코드란?
Bjarne Stroustrup (C++의 창시자) |
- 우아하고 효율적인 코드 - 논리가 간단해야 버그가 숨어들지 못한다. - 의존성을 최대한 줄여야 유지보수가 쉬워진다. - 오류는 명백한 전략에 의거해 철저리 처리한다. - 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. - 깨끗한 코드는 한 가지를 제대로 한다. |
- 우아한 코드; 보기에도 좋은 코드 - 오류 처리 등 세세한 사항을 꼼꼼하게 처리하는 코드 |
Grady Booch | - 단순하고 직접적이다. - 잘 쓴 문장처럼 읽힌다. - 설계자의 의도를 숨기지 않는다. - 명쾌한 추상화와 단순한 제어문으로 가득하다. |
- 가독성! - 명쾌한 추상화; 추측이 아니라 사실에 기반해 쓰여진 코드 |
Dave Thomas | - 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다. - 단위 테스트 케이스와 인수 테스트 케이스가 존재한다. - 의미있는 이름이 붙는다. - 특정 목적을 달성하는 방법은 하나만 제공한다. - 의존성은 최소이며 각 의존성을 명확히 정의한다. - API는 명확하며 최소로 줄였다. - 언어에 따라 필요한 모든 정보를 코드만으로 명확히 표현할 수 없기에 코드는 문학적으로 표현해야 마땅하다. |
- 가독성 - 테스트 코드는 필수 |
Michael Feathers | - 언제나 누군가 주의 깊게 짰다는 느낌을 준다. - 고치려고 살펴봐도 딱히 손 댈 곳이 없다. |
- '주의'깊게 작성한 코드 |
Ron Jeffries | - 모든 테스트를 통과한다. - 중복이 없다. - 시스템 내 모든 설계 아이디어를 표현한다. - 클래스, 메서드, 함수 등을 최대한 줄인다. |
- 중복을 피하라 - 한 기능만 수행하라 - 제대로 표현하라 - 작게 추상화하라 |
Ward Cunningham | - 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다 - 코드가 그 문제를 풀기 위한 언어처럼 보인다 |
- 큰 어려움 없이 코드를 이해할 수 있고, 이해한 대로 움직이는 코드 |
우리들 생각
- 종교에도 그들이 믿는 교리가 있듯, 깨끗한 코드에도 보는 시각에 따라 깨끗한 코드인지 판단하는 기준을 다를 수 있다.
우리는 저자다
- 쉬운 코드는 또 다른 이*독자)가 쉬운 코드를 작성할 수 있도록 도와준다.
- 코드를 읽는 작업은 실제로 코드를 작성하는 작업보다 더 오랜 시간을 투자한다.
보이스카우트 규칙
- 보이스카우트의 규칙에는 체크아웃을 할 때에는 체크인을 할 때보다 더 깨끗하게 정리한다라는 규칙이 있다.
- 프로그래머에게 있어서도 계속해서 코드를 개선해나가는 노력을 더해나가면서 깨끗한 코드를 작성하고 유지해갈 수 있다.
프리퀄과 원칙
결론
- 예술에 대한 책을 읽는다고 예술가가 된다는 보장이 없듯, 이 책을 읽는다고 '코드 감각'을 가진 프로그래머가 될 수 있다는 것을 보장하지는 않는다.
- 뛰어난 프로그래머가 생각하는 방식과 그들의 기술, 도구 등을 소개하는 것일 뿐이다. 나머지는 읽는 이에게 달려있다.