2022-06-03 @이영훈
코드가 존재하리라
기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업, 바로 이것이 프로그래밍이다. 이렇게 명시한 결과가 바로 코드다.
궁극적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심한다. 요구사항에 더욱 가까운 언어를 만들 수도 있고, 요구사항에서 정형 구조를 뽑아내는 도구를 만들 수도 있다.
나쁜 코드
그들은 출시에 바빠 코드를 마구 짰다. 기능을 추가할수록 코드는 엉망이 되어갔고, 결국 감당이 불가능한 수준에 이르렀다. 회사가 망한 원인은 바로 나쁜 코드 탓이었다.
나중에 코드를 정리하겠다고 다짐했었다. 물론 그때 그 시절 우리는 르블랑의 법칙을 몰랐다. 나중은 결코 오지 않는다.
나쁜 코드로 치르는 대가
•
나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 그러다가 마침내 0에 근접한다.
•
좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다.
[비유] 환자가 수술 전에 손을 씻지 말라고 요구한다. 시간이 걸리니까. 하지만 의사는 단호하게 거부한다. 환자 말을 그대로 따르는 행동은 전문가답지 못하니까.
프로그래머도 마찬가지다. 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.
원초적 난제
나쁜 코드를 양산하면 기한을 맞추지 못한다. 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고 결국 기한을 놓친다.
기한을 맞추는 유일한 방법은, 그러니까 빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
깨끗한 코드라는 예술?
깨끗한 코드를 작성하려면 ‘청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다. 열쇠는 ‘코드 감각’이다. 어떤 사람은 코드 감각을 타고난다. 어떤 사람은 투쟁해서 얻어야 한다. ‘코드 감각'이 있으면 좋은 코드와 나쁜 코드를 구분한다. 절제와 규율을 적용해 나쁜 코드를 좋은 코드로 바꾸는 전략도 파악한다.
깨끗한 코드란?
우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다.
- 비야네 스트롭스트룹
깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.
- 그래디 부치
깨끗한 코드는 언제나 누군가 주의 깊게 짰다라는 느낌을 준다. 고치려고 살펴봐도 딱히 손 댈 곳이 없다.
- 마이클 페더스
1. 모든 테스트 코드를 통과한다.
2. 중복이 없다.
3. 시스템 내 모든 설계 아이디어를 표현한다.
4. 클래스, 메서드, 함수 등을 최대한 줄인다.
- 론 제프리스
중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라.
코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다. 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라 불러도 되겠다.
- 워드 커닝햄
우리는 저자다
기존 코드를 읽어야 새 코드를 짜므로 읽기 쉽게 만들면 사실은 짜기도 쉬워진다.
보이스카우트 규칙
캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라
결론
뛰어난 프로그래머가 생각하는 방식과 그들이 사용하는 기술과 기교와 도구를 소개한다.
좋은 코드도 소개하고 나쁜 코드도 소개한다. 나쁜 코드를 좋은 코드로 바꾸는 방법도 소개한다. 다양한 경험적 교훈과 체계와 절차와 기법도 열거한다. “연습!!”