생각하는 프로그래밍 [- 프로그래밍 본질에 관한 15가지 (원제 : Programming Pearls, 2nd Edition)]
지은이 Jon Bentley/윤성준 출판사 Insight (인사이트) | 발행일 2003년 02월 04일
도서소개
Programming Pearls(2/e)의 번역서!!
프로그래밍을 할 때 기계적이거나 수동적인 태도를 가지고 있지는 않은가? 필요한 기능이 동작할 정도의 상태만 되면 할 일이 끝났다고 여겨오지는 않았는가? 드러난 버그만 수정한 후에 코드를 내버려 두지는 않았는가?
이는 프로그래머의 올바른 자세가 아니다. 적극적인 태도로 조금만 더 생각하면 여러분의 프로그램을 더 우아하게 만들 수 있다. 같은 일을 더 짧은 코드로 더 멋지게 처리할 수 있다. 그리고 이렇게 프로그램의 질이 향상되는 것에 그치는 것이 아니라, 다시금 프로그래밍의 재미를 느낄 수 있을 것이다.
그러나 단순히 API 사용법을 익히는 것을 넘어서 깊은 생각을 통해 프로그램을 향상시키는 것이 쉽지는 않다. 어떻게 접근해야 하는지 그 방법 자체가 어려울 수 있다. 이런 어려움을 겪는 사람에게 "생각하는 프로그래밍(원제:Programming Pearls)"은 프로그래머로서 진일보하는 초석이 될 것이다.
"물고기를 잡아 주기 보다는, 낚시하는 방법을 가르친다"라는 진부한 표현처럼, "생각하는 프로그래밍"은 읽는 이에게 생각하는 방법을 알려준다. 보통의 알고리즘 책과는 달리, 여러 알고리즘과 데이터 구조를 장황하게 나열하기보다는, 몇 개의 간단한 알고리즘 및 데이터 구조를 통해 생각하는 방법의 전형을 보여준다.
이 책은 총 15개의 칼럼으로 구성되어 있고, 크게 다음과 같이 나뉜다.
1부 준비. 문제에 대한 정확한 정의를 강조하는 것을 시작으로, 알고리즘과 데이터 구조가 프로그램에 미치는 영향력을 보여주고, 정확한 코드 작성을 위한 검증 기법을 자세히 소개한다.
2부 퍼포먼스. 프로그램의 퍼포먼스와 알고리즘 및 데이터 구조 간의 관계를 설명하고, 속도 향상과 메모리 절감을 위해 디자인 과정에서 적용할 수 있는 여러 기법을 알려준다.
3부 프로덕트. 1, 2부에서 배운 내용을 기반으로 실질적이고 재밌는 프로그램들을 작성하면서, 책의 주제를 공고히 한다.
목 차
제1부 준비
칼럼1 조개껍질 깨기
대화 / 1.2 정확한 문제 기술 / 프로그램 디자인 / 구현 스케치 / 원리
연습문제 / 더 읽을거리
칼럼2 아하! 알고리즘
세 가지 문제 / 여기저기에서 쓰이는 이진 탐색(Binary Search)
기초적인 조작의 위력 / 정렬 / 원리 / 연습문제 / 더 읽을거리
sidebar : 전철어구 프로그램의 구현
칼럼3 프로그램의 구조를 결정하는 데이터
설문 조사 프로그램 / 폼 레터 프로그래밍 / 다른 예제들 / 데이터 구조화하기
특화된 데이터를 위한 강력한 도구 / 원리 / 연습문제
칼럼4 정확한 프로그램 작성
생각보다 어려운 이진 탐색 / 프로그램 작성 / 프로그램에 대한 이해
원리 / 프로그램 검증의 역할 / 연습문제 / 더 읽을거리
칼럼5 프로그래밍에서의 사소한 문제
가상코드로부터 C로 / 테스트 장치(harness) / 단정문(assertion)사용 요령
자동화된 테스트 / 시간측정 / 완전한 프로그램 / 원리 / 연습문제
더 읽을거리
sidebar : 디버깅
제2부 퍼포먼스
칼럼6 퍼포먼스에 대한 개관
사례 연구 / 디자인의 수준 / 원리 / 연습문제 / 더 읽을거리
칼럼7 봉투뒷면에 하는 간단한 계산
기초 기술 / 퍼포먼스 추정 / 안전계수(Safety Factors)/ Little의 법칙
원리 / 연습문제 / 더 읽을거리
sidebar : 일상생활에서의 간단한 계산
칼럼8 알고리즘 디자인 기법
문제 및 간단한 알고리즘 / O(n2) 알고리즘 두 가지 / 나누어 푸는 알고리즘
스캐닝(scanning) 알고리즘 / 무엇이 중요한가? / 원리 / 연습문제 / 더 읽을거리
칼럼9 코드 튜닝
전형적인 이야기 / 코드 튜닝의 몇 가지 예제 / 대수술-이진 탐색 / 원리
연습문제 / 더 읽을거리
칼럼10 메모리 절약
핵심-단순함 / 이해를 돕는 문제 / 데이터 공간을 위한 기법
코드 공간을 위한 기법 / 원리 / 연습문제 / 더 읽을거리
sidebar : 대규모 절감
칼럼11 정렬
삽입 정렬 / 간단한 퀵 정렬 / 개선된 퀵 정렬 / 원리 / 연습문제 / 더 읽을거리
칼럼12 표본 선정 문제
문제 / 솔루션 하나 / 디자인 공간 / 원리 / 연습문제 / 더 읽을거리
칼럼13 탐색
인터페이스 / 선형적 구조 / 이진 탐색 트리 / 정수를 위한 구조 / 원리
연습문제 / 더 읽을거리
sidebar : 실질적 탐색 문제
칼럼14 힙(Heaps)
데이터 구조 / 두 가지 중요한 함수 / 우선순위 큐 / 정렬 알고리즘 / 원리
연습문제 / 더 읽을거리
칼럼15 문자열 처리
단어 / 어구 / 텍스트 생성하기 / 원리 / 연습문제 / 더 읽을거리
1판에 대한 에필로그
2판에 대한 에필로그
부록1 알고리즘 카탈로그
부록2 추정퀴즈
부록3 시간과 공간에 대한 비용모델
부록4 코드 튜닝을 위한 규칙
부록5 탐색을 위한 C++ 클래스
연습문제 힌트
연습문제 해답
Posted by 홍반장