현실 세계에서 올바른 코드를 작성하는 법
동작하는 코드 너머에 있는 것들
프로그래머는 동작하는 코드를 작성하는 법은 알지만, 그저 동작만 한다는 사실은 알지 못한다. 잘 작성된 코드, 이해하기 쉬운 코드, 요구사항의 균형점에 있는 훌륭한 코드를 작성하는 법은 대부분 알지 못한다. 이 책에서는 동작하는 코드가 아니라 훌륭한 코드를 작성하는 법을 설명한다. 훌륭한 코드를 작성하는 법을 하나씩 익히다 보면 수습생에서 전문가로 변화할 수 있을 것이다.
코드마다 스타일이 달라서 정말 한 사람이 작성한 게 맞아요?
문법을 설명하고, 예제가 동작하는 법을 설명하는 책은 많지만, 올바르게 코드를 작성하는 법을 설명하는 책은 많지 않다. 그때그때 즉흥적으로 코드를 작성하거나 인터넷 검색을 통해 가져온 코드를 사용하면서 코드를 작성하다 보면 팀 리뷰에서조차 정말 한 사람이 작성한 게 맞느냐는 얘기를 듣기 쉽다. 코드를 작성하는 일관된 스타일을 익히는 것이 중요하다. 코드의 표현 스타일, 변수 이름 짓기, 오류 처리, 보안 같이 코딩에 필요한 요소들을 익혀서 정말 한 사람이 작성한 게 맞느냐는 얘기는 듣지 않게 하자.
위대한 코드는 나 홀로 탄생하지 않는다
전반부가 코드 작성 그 자체에 대한 이야기라면 후반부는 팀, 개발 프로세스, 명세서 작성, 팀 리뷰, 외부의 제약 조건을 다룬다. 훌륭한 코드는 프로그래머 개인의 코드 작성뿐 아니라 팀, 개발 프로세스, 명세서 작성, 팀 리뷰의 과정을 거친다는 사실을 놓치지 않는다. 전반부가 팀원의 역량이라면 후반부는 팀장, 아키텍처, 조직의 역량이라는 뜻이다. 위대한 코드를 위한 여정을 위해 이 책이 선반에 반드시 있어야 하는 이유다.
신입 개발자를 위한 코드의 기술
1부 코드페이스에서
1 방어 태세
__1.1 훌륭한 코드를 향해
__1.2 최악을 가정하라
__1.3 방어적 프로그래밍이란?
__1.4 거대하고 못된 세상
__1.5 방어적 프로그래밍 기법
__1.6 제약
__1.7 요약
__1.8 참고
__1.9 생각해 보기
2 잘 세운 계획
__2.1 왜 중요할까?
__2.2 독자 파악하기
__2.3 훌륭한 표현이란 무엇일까?
__2.4 마음 단단히 먹자(Brace yourself)
__2.5 전부를 뛰어넘는 단 하나의 스타일
__2.6 하우스 스타일(그리고 언제 고수해야 하는지)
__2.7 표준 수립
__2.8 전쟁은 불가피하다?
__2.9 요약
__2.10 참고
__2.11 생각해 보기
3 이름이 왜 중요할까?
__3.1 이름을 잘 지어야 하는 이유
__3.2 무엇을 명명할까?
__3.3 이름 고르기
__3.4 하나씩 살펴보기
__3.5 어떤 이름으로 불리우든 장미는 장미다
__3.6 요약
__3.7 참고
__3.8 생각해 보기
4 무엇을 작성해야 하나
__4.1 자체 문서화 코드
__4.2 자체 문서화 코드 작성 기법
__4.3 실용적 자체 문서화 방법론
__4.4 요약
__4.5 참고
__4.6 생각해 보기
5 부수적 주석
__5.1 코드 주석이란?
__5.2 주석은 어떻게 생겼나?
__5.3 주석을 얼마나 써야 할까?
__5.4 주석에 어떤 내용을 넣을까?
__5.5 실전
__5.6 미학적(aesthetics) 주석
__5.7 주석 다루기
__5.8 요약
__5.9 참고
__5.10 생각해 보기
6 사람은 실수하기 마련이다
__6.1 오류가 시작되는 곳
__6.2 오류 보고 메커니즘
__6.3 오류 감지
__6.4 오류 처리
__6.5 난동 부리기
__6.6 오류 처리
__6.7 요약
__6.8 참고
__6.9 생각해 보기
2부 코드의 비밀스러운 생애
7 프로그래머의 도구상자
__7.1 소프트웨어 도구란
__7.2 왜 도구에 신경 쓰는가?
__7.3 공부 벌레(Power tool)
__7.4 어떤 도구를 쓸까?
__7.5 요약
__7.6 참고
__7.7 생각해 보기
8 테스트할 시간
__8.1 현실성 검증
__8.2 누가, 언제, 무엇을, 왜?
__8.3 테스트는 어렵지 않다…?
__8.4 테스트 유형
__8.5 단위 테스트 케이스 고르기
__8.6 테스트 디자인
__8.7 직접 하지 않아도 돼!
__8.8 실패의 단면
__8.9 이겨낼 수 있는가?
__8.10 요약
__8.11 참고
__8.12 생각해 보기
9 결함 찾기
__9.1 삶의 진실
__9.2 야수의 본성
__9.3 해충 박멸
__9.4 버그 사냥
__9.5 결함을 고치는 방법
__9.6 예방
__9.7 말벌 스프레이, 민달팽이 퇴치제, 파리잡이 끈끈이
__9.8 요약
__9.9 참고
__9.10 생각해 보기
10 잭이 개발한 코드
__10.1 언어 장벽
__10.2 자세히 들여다 보기
__10.3 빌드 만들기
__10.4 훌륭한 빌드 시스템이란 무엇일까?
__10.5 기법(mechanics, 역학, 메커니즘)
__10.6 이제 출시해 주세요
__10.7 다재다능 빌드마스터?
__10.8 요약
__10.9 참고
__10.10 생각해 보기
11 속도의 필요성
__11.1 최적화란
__11.2 무엇이 코드를 최적이 아니게 만드는가?
__11.3 왜 최적화하면 안 되는가
__11.4 왜 최적화할까?
__11.5 하나씩 살펴보기
__11.6 최적화 기법
__11.7 효율적인 코드 작성
__11.8 요약
__11.9 참고
__11.10 생각해 보기
12 불안 장애
__12.1 위험
__12.2 적(The Opposition)
__12.3 변명을 해보자면
__12.4 취약한 부분
__12.5 보호 라켓
__12.6 요약
__12.7 참고
__12.8 생각해 보기
3부 코드 형태
13 훌륭한 디자인
__13.1 프로그래밍이 곧 디자인이다
__13.2 무엇을 디자인할까?
__13.3 왜 이렇게 야단법석(호들갑)일까(소란스러워)?
__13.4 좋은 소프트웨어 디자인
__13.5 코드 디자인 방법
__13.6 요약
__13.7 참고
__13.8 생각해 보기
14 소프트웨어 아키텍처
__14.1 소프트웨어 아키텍처란
__14.2 훌륭한 아키텍처란?
__14.3 아키텍처 스타일
__14.4 요약
__14.5 참고
__14.6 생각해 보기
15 소프트웨어 진화 혹은 소프트웨어 혁명?
__15.1 소프트웨어 부패
__15.2 경고 신호
__15.3 코드는 어떻게 성장할까?
__15.4 불가능을 믿다
__15.5 무엇을 할 수 있을까?
__15.6 요약
__15.7 참고
__15.8 생각해 보기
4부 프로그래머 무리?
16 코드 몽키
__16.1 몽키 비즈니스
__16.2 이상적 프로그래머
__16.3 그럼 이제 무엇을 할까?
__16.4 가장 어리석은 인간
__16.5 요약
__16.6 참고
__16.7 활동지
__16.8 생각해 보기
17 뭉쳐야 산다
__17.1 큰 그림으로 보는 팀
__17.2 팀 구성
__17.3 팀워크 도구
__17.4 팀 병폐
__17.5 단단한 팀워크 구축을 위한 개개인의 능력과 특성
__17.6 팀워크 수칙
__17.7 팀 생애 주기
__17.8 요약
__17.9 참고
__17.10 활동지
__17.11 생각해 보기
18 소스 안전 생활화
__18.1 우리의 책임
__18.2 소스 제어
__18.3 형상 관리
__18.4 백업
__18.5 소스 코드 출시
__18.6 소스 코드를 어디에 두든
__18.7 요약
__18.8 참고
__18.9 생각해 보기
5부 과정의 일환
19 명시적으로
__19.1 명세란 정확히 무엇인가?
__19.2 명세의 유형
__19.3 명세에 어떤 내용이 들어가야 하는가?
__19.4 명세 작성 절차
__19.5 그냥 명세를 작성하면 어떨까?
__19.6 요약
__19.7 참고
__19.8 생각해 보기
20 완벽한 리뷰
__20.1 코드 리뷰란?
__20.2 언제 리뷰하는가?
__20.3 코드 리뷰 수행
__20.4 태도 리뷰
__20.5 코드 완성
__20.6 코드 리뷰가 끝이 아니다
__20.7 요약
__20.8 참고
__20.9 체크리스트
__20.10 생각해 보기
21 그걸 누가 알겠어?
__21.1 어림짐작
__21.2 왜 추정하기 어려운가?
__21.3 압박
__21.4 실용적 추정 방법
__21.5 계획 게임
__21.6 일정 지키기!
__21.7 요약
__21.8 참고
__21.9 생각해 보기
6부 위에서 내려다 보기
22 프로그램 레시피
__22.1 프로그래밍 스타일
__22.2 레시피: 어떻게 그리고 무엇을
__22.3 개발 프로세스
__22.4 그만하면 됐다!
__22.5 프로세스 선택
__22.6 요약
__22.7 참고
__22.8 생각해 보기
23 외부 제약
__23.1 애플리케이션 프로그래밍
__23.2 게임 프로그래밍
__23.3 시스템 프로그래밍
__23.4 임베디드 프로그래밍
__23.5 분산 프로그래밍
__23.6 웹 애플리케이션 프로그래밍
__23.7 엔터프라이즈 프로그래밍
__23.8 수치해석 프로그래밍
__23.9 그래서 어쩌라고?
__23.10 요약
__23.11 참고
__23.12 생각해 보기
24 다음 단계는?
__24.1 하지만 지금은?
ㆍ지은이 피트 구들리프
ㆍ옮긴이 심지현
연관 프로그램
독자의견 남기기