본문 바로가기
그냥

더 빨리 나왔으면 좋았을 '프로그래밍의 규칙'

by wizmusa 2024. 7. 28.

프로그래밍의 규칙
더 나은 코드를 작성하는 21가지 개발 비법
저자: 크리스 짐머만, 번역: 박상현 / 한빛미디어 / 2024-05-20
https://www.hanbit.co.kr/store/books/look.php?p_code=B8528154135

 
코딩은 업무 스킬 중 하나이기에 완독했습니다. 이런 책이 왜 이제 나왔을까 싶습니다. 프로그래밍 입문자라면 프로그래밍에 좀 익숙해진 후에는 애자일 같은 개발 방법론보다 먼저 읽는 게 유용하겠다고도 보았습니다. 아집을 버리고 팀플레이를 하도록 세세하게 코딩 방법을 설명합니다. 저자가 시니컬하거나 근시안적인 팀원에게 얼마나 시달렸을지 행간에 보입니다. 개발 조직은 시간이라는 한정적 자원을 정말 효율적으로 써야 존재가치를 증명하며, 개발자는 조직 성과에 기여해야 장수하며 발전합니다. 겸손한 저자는 독자가 그렇게 성장하기를 바라며 코드 차원에서 자잘한 부분까지 짚어줍니다. 여담으로 저자가 권하는 대로 주석을 작성하면 Copilot같은 AI가 시행착오 없이 한두 번만에 적당한 코드를 제꺽 생성하지 않을까 합니다. 
 
C++을 쓰지 않은지 아주 오래 되었던 터라 예시 코드 읽기가 다소 힘들었습니다. 코드를 잘 이해하지 못해도 핵심을 습득하는 데에는 문제가 없긴 합니다. 그럼에도 세심한 저자는 부록에 Python 개발자와 Javascript 개발자를 대상으로 C++ 코드를 이해하는 법을 마련해 두었습니다. 차례를 꼼꼼이 읽을 걸 그랬습니다. 진도 나가기가 한결 쉬웠을 겁니다.


반응형

규칙 1 최대한 단순하게, 그러나 너무 단순하지 않게
_단순성 측정하기
_그러나 너무 단순하지 않게
_문제를 단순화하는 것이 솔루션보다 나을 때가 있다
_단순한 알고리즘
_흐름을 놓치지 말라
_모든 규칙을 지배하는 단 하나의 규칙
 
규칙 2 버그는 전염된다
_사용자를 믿지 말라
_자동화 테스트는 까다롭다
_상태를 유지하지 않는 코드는 테스트하기 쉽다
_제거할 수 없는 상태는 감사하라
_내 코드를 사용하는 동료를 믿지 말라
_코드를 건강하게
 
규칙 3 좋은 이름은 최고의 문서다
_글자 수를 줄이는 것은 최적화가 아니다
_코딩 컨벤션을 믹스앤드매치하지 말라
_제 무덤을 파지 말라
_생각하게 하지 말라
 
규칙 4 일반화에는 세 가지 사례가 필요하다
_필요하지 않으면 구현하지 말라
_이의 있다고요? 저는 아주 확고합니다
_섣부른 일반화는 정말 나쁘다
_이것이 성공은 아니다
 
규칙 5 첫 번째 최적화 교훈: 최적화하지 말라
_첫 번째 최적화 교훈
_두 번째 최적화 교훈
_두 번째 최적화 교훈 시험해보기
_다섯 단계 최적화 과정 적용하기
_세 번째 최적화 교훈은 없다
간주 규칙 5에 대한 비판을 중심으로
 
규칙 6 코드 리뷰의 세 가지 장점
_코드 리뷰는 지식 공유다
_금지된 코드 리뷰
_코드 리뷰의 진정한 가치
_코드 리뷰는 본질적으로 사회적 활동이다
 
규칙 7 실패 케이스를 제거하라
_잘못 사용하면 제 무덤 파기 쉬운 함수
_나도 모르게 내 무덤 파기
_컴파일러의 도움 받기
_타이밍이 전부다
_더 복잡한 예제
_순서 실수를 불가능하게 만들기
_메서드 체이닝 대신 템플릿 사용하기
_상태 제어 조율하기
_실수를 발견하는 것도 좋지만, 실수를 방지하는 것이 더 좋다
 
규칙 8 실행되지 않는 코드는 작동하지 않는다
_1단계: 단순한 시작
_2단계: 대표적인 패턴 일반화하기
_3단계: 위장 추가하기
_4단계: 뿌린 대로 거둔다
_책임 따지기
_테스트의 한계
 
규칙 9 요약 가능한 코드를 작성하라
_실패란 이런 느낌이다
_단기 기억의 역할
_경계선을 그어야 하는 곳
_추상화의 비용
_이해하기 쉽도록 추상화를 사용하라
_장기 기억의 역할
_상식은 공짜지만 새로운 지식은 비싸다
_단기 기억과 장기 기억을 함께 활용하라
 
규칙 10 복잡성을 격리하라
_간단한 예제
_내부 세부 사항 숨기기
_상태 분산과 복잡성
_능력 복원?
_안개가 끼기 시작하다
_접근법 다시 생각해보기
_격리된 복잡성, 단순한 상호작용
 
규칙 11 두 배 좋은가
_앞으로 전진하는 세 가지 길: 무시, 미세 조정, 리팩터링
_점진적 진화 vs 지속적 재발명
_간단한 기준 하나
_애매한 혜택 다루기
_재작업은 작은 문제를 정리할 좋은 기회다
 
규칙 12 큰 팀에는 강력한 컨벤션이 필요하다
_형식화 컨벤션
_언어 사용 컨벤션
_문제 해결 컨벤션
_효율적인 팀은 같은 방식으로 생각한다
 
규칙 13 산사태를 일으킨 조약돌을 찾으라
_버그의 생애 주기
_상태의 가짓수 최소화하기
_제거할 수 없는 상태 다루기
_피할 수 없는 지연 다루기
 
규칙 14 네 가지 맛의 코드
_쉬운 문제와 단순한 솔루션
_쉬운 문제와 세 가지 복잡한 솔루션
_복잡성에 따르는 비용
_프로그래머의 네 가지(실제로는 세 가지) 유형
_어려운 문제와 작동하지 않는 약간 복잡한 솔루션
_어려운 문제와 약간 복잡한 솔루션
_어려운 문제와 단순한 솔루션
 
규칙 15 잡초를 뽑으라
_잡초 식별하기
_코드는 어떻게 잡초로 덮이는가
 
규칙 16 코드가 아닌 결과에서부터 작업하라
_한 가지 예제
_짜증 나는 일
_골짜기의 끝 선택하기
_뒤로 작업해나가기
_완전히 다른 무언가를 위해
_앞으로 작업하기와 거꾸로 작업하기
 
규칙 17 더 쉽게 해결되는 큰 문제도 더러 있다
_제대로 착지하기
_올바른 방향 찾기
_기회 포착하기
 
규칙 18 코드가 스스로 이야기하게 하라
_사실이 아닌 이야기는 하지 말라
_이야기에는 목적이 있어야 한다
_좋은 스토리텔링
 
규칙 19 평행 재작업
_뜻밖의 문제
_평행 시스템을 구축하라
_구체적인 예시
_실전에서의 스택 할당
_불안 요소
_좀 더 영리하게 스택 컨텍스트 만들기
_이전 스택 컨텍스트를 새 스택 컨텍스트로 마이그레이션하기
_StackVector 마이그레이션 준비하기
_마이그레이션할 시간
_평행 재작업 전략을 적용하기 좋은 상황
 
규칙 20 계산하라
_자동화할 것인가, 하지 않을 것인가, 그것이 문제로다
_절대적 한계 조사하기
_계산이 달라질 때
_계산 문제가 다시 MS 워드 문제로 바뀔 때
 
규칙 21 때로는 못질을 해야 한다
_새로운 인수 추가하기
_버그가 하나뿐일 리 없다
_자동화의 경고음
_파일 크기 관리하기
_지름길은 없다
 
결론 자신의 규칙을 만들라
_자신의 판단을 믿으라
_토의하라
_끝맺음
 
부록 A 파이썬 프로그래머를 위한 C++ 코드 읽기
_타입
_형식화와 주석
_클래스
_가시성
_선언과 정의
_함수 오버로딩
_템플릿
_포인터와 참조
 
부록 B 자바스크립트 프로그래머를 위한 C++ 코드 읽기
_타입
_배열
_클래스
_선언과 정의
_함수 오버로딩
_템플릿
_포인터와 참조
 
 
 

반응형