책소개
《Code Complete 2》는 소프트웨어 구현을 둘러싼 다양한 비유부터 기초적인 프로그래밍, 시스템 구축, 소프트웨어 장인정신에 이르기까지 소프트웨어 업계에 종사하는 분이라면 누구나 읽어야 할 필독서입니다.2004년에 초판이 출간된 이후로 시간이 흘러도 여전히 가치 있는 명저의 반열에 오른 책으로서 특정 프로그래밍 언어나 플랫폼과는 무관한 내용으로 구성돼 있어 소프트웨어 업계에 종사하는 모든 분들에게 도움될 만한 내용으로 가득 차 있습니다.
목차
[1부] 기초 확립 1장: 소프트웨어 구현으로의 초대1.1 소프트웨어 구현이란 무엇인가?1.2 소프트웨어 구현이 중요한 이유는 무엇인가?1.3 이 책을 읽는 방법요점 정리 2장: 소프트웨어 개발의 이해를 돕기 위한 비유2.1 비유의 중요성2.2 소프트웨어 비유 사용법2.3 일반적인 소프트웨어 비유참고 자료요점 정리 3장: 준비는 철저하게: 선행 조건3.1 선행 조건의 중요성3.2 작업 중인 소프트웨어의 종류 결정3.3 문제-정의 선행 조건3.4 요구사항 선행 조건3.5 아키텍처 선행 조건3.6 선행 조건에 소요되는 시간참고 자료요점 정리 4장: 구현 시 결정해야 할 핵심 사항4.1 프로그래밍 언어 선택4.2 프로그래밍 규약4.3 기술 흐름 파악4.4 구현 실천법 선택요점 정리[2부] 고품질 코드 작성 5장: 구현 설계5.1 설계의 어려움5.2 핵심 설계 개념5.3 설계 빌딩 블록: 발견적 학습5.4 설계 실천법5.5 잘 알려진 방법론에 대한 의견참고 자료요점 정리 6장: 클래스 다루기6.1 클래스의 토대: 추상 데이터형(ADT)6.2 좋은 클래스 인터페이스6.3 설계와 구현 문제6.4 클래스를 작성하는 이유6.5 프로그래밍 언어와 관련된 이슈6.6 클래스를 넘어서: 패키지참고 자료요점 정리 7장: 고급 루틴7.1 루틴을 작성하는 이유7.2 루틴 수준의 설계7.3 좋은 루틴 이름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 방어적인 프로그래밍에 대해서 한 번 더 고민하기참고 자료요점 정리 9장: 의사코드 프로그래밍 프로세스9.1 클래스 및 루틴 개발 단계 요약9.2 전문가를 위한 의사코드9.3 PPP를 이용한 루틴 구현9.4 PPP 대안요점 정리[3부] 변수 10장: 변수 사용 시 고려할 사항10.1 데이터 사용 능력10.2 변수 선언을 쉽게 만드는 방법10.3 변수 초기화 가이드라인 10.4 범위10.5 지속성10.6 결합 시점10.7 데이터형과 제어 구조 사이의 관계10.8 변수를 한 목적으로만 사용하기요점 정리 11장: 변수 이름의 기능11.1 좋은 이름을 위한 고려 사항11.2 특정 타입의 데이터 이름 짓기11.3 이름 규약의 효과11.4 비형식적인 이름 규약11.5 표준 접두사11.7 피해야 할 변수 이름요점 정리 12장: 기본 데이터형12.1 숫자 일반12.2 정수12.3 부동 소수점 수12.4 문자와 문자열12.5 불린 변수12.6 열거형12.7 이름 상수12.8 배열12.9 새로운 형 만들기(형 별명)요점 정리 13장: 특이한 데이터형13.1 구조체13.2 포인터13.3 전역 데이터참고 자료요점 정리[4부] 명령문 14장: 순차적 코드 구성하기14.1 순서가 중요한 명령문14.2 순서가 중요하지 않은 명령문요점 정리 15장: 조건문 사용15.1 if 문15.2 case 문요점 정리 16장: 반복문 제어16.1 반복문 종류 선택16.2 반복문 제어16.3 반복문을 쉽게 작성하는 법 - 안에서부터 밖으로16.4 반복문과 배열의 연관성요점 정리 17장: 특이한 제어 구조17.1 여러 곳에서 반환하는 루틴17.2 재귀문17.3 goto 문17.4 특이한 제어 구조에 대한 관점참고 자료요점 정리 18장: 테이블 활용 기법18.1 테이블 활용 기법에서 일반적으로 고려해야 할 사항18.2 직접 접근 방식18.3 인덱스 접근 방식18.4 단계적 접근 방식18.5 그 밖의 테이블 참조 방법요점 정리 19장: 제어와 관련된 일반적인 이슈19.1 불린 표현식19.2 복합문(블록)19.3 널 명령문19.4 지나치게 깊은 중첩 구조 처리19.5 프로그래밍의 기초: 구조적 프로그래밍19.6 제어 구조와 복잡성요점 정리[5부] 코드 향상 20장: 소프트웨어 품질20.1 소프트웨어 품질의 특성20.2 소프트웨어의 품질을 향상시키기 위한 기법들20.3 품질 향상 기법의 상대적 효과성20.4 품질 보증 활동 시기20.5 소프트웨어 품질의 일반적인 원칙참고 자료요점 정리 21장: 협력 구현21.1 협력 개발 방법 개요21.2 짝 프로그래밍21.3 형식적인 정밀 검토21.4 여러 가지 협력 개발 방법참고 자료요점 정리 22장: 개발자 테스트22.1 소프트웨어 품질에서 개발자 테스트의 역할22.2 개발자 테스트에 대한 바람직한 접근 방법22.3 여러 가지 교묘한 테스트 방법22.4 전형적인 오류22.5 테스트 지원 도구22.6 테스트를 향상시키는 방법22.7 테스트 기록을 보존하는 방법참고 자료요점 정리 23장: 디버깅23.1 디버깅 이슈 소개23.2 결함 발견23.3 결함 수정23.4 디버깅에서 심리학적으로 고려해야 할 사항23.5 디버깅 도구 ? 분명한 도구와 그렇지 않은 도구참고 자료요점 정리 24장: 리팩터링24.1 소프트웨어 진화의 종류24.2 리팩터링 소개24.3 구체적인 리팩터링24.4 안전한 리팩터링 방법24.5 리팩터링 전략참고 자료요점 정리 25장: 코드 튜닝 전략25.1 성능이란?25.2 코드 튜닝 소개25.3 느리고 비대한 부분25.4 측정25.5 반복25.6 코드 튜닝 단계 요약참고 자료요점 정리 26장: 코드 튜닝 기법26.1 논리 구조26.2 반복문26.3 데이터 변환26.4 표현식26.5 루틴26.6 저급 언어를 이용한 재구성26.7 변경이 많을수록 상태는 그대로참고 자료요점 정리[6부] 시스템 고려 사항 27장: 프로그램의 크기가 구현에 미치는 영향27.1 의사소통과 크기27.2 프로젝트 크기의 범위27.3 프로젝트의 크기가 오류에 미치는 영향27.4 프로젝트의 크기가 생산성에 미치는 영향27.5 프로젝트의 크기가 개발 활동에 미치는 영향참고 자료요점 정리 28장: 구현 관리28.1 훌륭한 코딩 장려28.2 형상 관리28.3 구현 일정 예측28.4 측정28.5 개발자를 사람으로 대우하기28.6 관리자 관리요점 정리 29장: 통합29.1 통합 접근 방법의 중요성29.2 통합 빈도-단계별 또는 점증적 접근 방법29.3 점증적 통합 전략29.4 일일 빌드와 스모크 테스트참고 자료요점 정리 30장: 프로그래밍 도구30.1 설계 도구30.2 소스코드 도구30.3 실행 코드 도구30.4 도구 지향적인 환경30.5 자신만의 프로그래밍 도구 개발30.6 프로그래밍 도구에 대한 환상참고 자료요점 정리[7부] 소프트웨어 장인정신 31장: 레이아웃과 스타일31.1 레이아웃 기초 지식31.2 레이아웃 기법31.3 레이아웃 스타일31.4 제어 구조의 레이아웃31.5 개별 명령문 레이아웃31.6 주석 레이아웃31.7 루틴 레이아웃31.8 클래스 레이아웃참고 서적요점 정리 32장: 스스로를 설명하는 코드32.1 외부 문서32.2 문서화를 위한 프로그래밍 스타일32.3 주석을 작성할 것인가? 작성하지 않을 것인가?32.4 효과적인 주석을 위한 핵심 사항32.5 주석 스타일32.6 IEEE 표준참고 자료요점 정리 33장: 개발자의 성격33.1 성격은 주제를 벗어난 것 아닌가?33.2 지성과 겸손33.3 호기심33.4 지적인 정직함33.5 의사소통과 협동33.6 창의성과 훈련33.7 게으름33.8 덜 중요한 특성33.9 습관참고 자료요점 정리 34장: 소프트웨어 장인정신에 대한 주제34.1 복잡성 정복34.2 자신에게 맞는 프로세스 선택34.3 컴퓨터보다 사람을 위한 프로그램을 작성하라34.4 언어에 제약을 받지 않고 언어를 활용한 프로그래밍34.5 규약을 활용하여 핵심에 집중34.6 문제 중심의 프로그래밍34.7 낙석을 주의하라34.8 반복, 반복, 또 반복34.9 소프트웨어와 신조를 떼어 놓아라요점 정리 35장: 더 많은 정보를 얻으려면35.1 소프트웨어 구현에 관한 정보35.2 구현 외의 주제35.3 정기 간행물35.4 소프트웨어 개발자의 독서 계획35.5 전문가 협회에 가입