코드 크래프트
Description
현실 세계에서 올바른 코드를 작성하는 법
동작하는 코드 너머에 있는 것들
프로그래머는 동작하는 코드를 작성하는 법은 알지만, 그저 동작만 한다는 사실은 알지 못한다. 잘 작성된 코드, 이해하기 쉬운 코드, 요구사항의 균형점에 있는 훌륭한 코드를 작성하는 법은 대부분 알지 못한다. 이 책에서는 동작하는 코드가 아니라 훌륭한 코드를 작성하는 법을 설명한다. 훌륭한 코드를 작성하는 법을 하나씩 익히다 보면 수습생에서 전문가로 변화할 수 있을 것이다.

코드마다 스타일이 달라서 정말 한 사람이 작성한 게 맞아요?
문법을 설명하고, 예제가 동작하는 법을 설명하는 책은 많지만, 올바르게 코드를 작성하는 법을 설명하는 책은 많지 않다. 그때그때 즉흥적으로 코드를 작성하거나 인터넷 검색을 통해 가져온 코드를 사용하면서 코드를 작성하다 보면 팀 리뷰에서조차 정말 한 사람이 작성한 게 맞느냐는 얘기를 듣기 쉽다. 코드를 작성하는 일관된 스타일을 익히는 것이 중요하다. 코드의 표현 스타일, 변수 이름 짓기, 오류 처리, 보안 같이 코딩에 필요한 요소들을 익혀서 정말 한 사람이 작성한 게 맞느냐는 얘기는 듣지 않게 하자.

위대한 코드는 나 홀로 탄생하지 않는다
전반부가 코드 작성 그 자체에 대한 이야기라면 후반부는 팀, 개발 프로세스, 명세서 작성, 팀 리뷰, 외부의 제약 조건을 다룬다. 훌륭한 코드는 프로그래머 개인의 코드 작성뿐 아니라 팀, 개발 프로세스, 명세서 작성, 팀 리뷰의 과정을 거친다는 사실을 놓치지 않는다. 전반부가 팀원의 역량이라면 후반부는 팀장, 아키텍처, 조직의 역량이라는 뜻이다. 위대한 코드를 위한 여정을 위해 이 책이 선반에 반드시 있어야 하는 이유다.

신입 개발자를 위한 코드의 기술
■ 올바른 코드를 올바른 방식으로 작성할 수 있을까?
■ 기술적으로 명쾌한 코드
■ 유지 보수 가능한 코드
■ 엉망인 코드를 이해하고 조정하기
■ 어울려 일하기
저자

피트구들리프

데스크톱,임베디드소프트웨어,iOS애플리케이션을개발하며C++전문가이다.새로운시스템개발에서디바이스드라이버개발,운영체제구현,오디오코덱,JVM구현,MIDI시퀀싱애플리케이션까지다양한분야에서경험을쌓았다.현재는다양한오디오제품을만드는모회사inMusic의디렉터로일하고있다.

목차

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 마음단단히먹자(Braceyourself)
__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 공부벌레(Powertool)
__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 적(TheOpposition)
__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 하지만지금은?