목차
역자서문 ... 3
서문 ... 6
소개 ... 7
1장 정규 표현식 부합기 하나  / 브라이언 커니핸(Brian Kernighan) ... 27
   책 The Practice of Programming의 정규식 부합기 ... 28
   구현 ... 30
   논의 ... 31
   대안들 ... 33
   확장 ... 34
   결론 ... 36
2장 서브버전의 델타 편집기:온톨로지로서의 인터페이스  / 칼포겔(Karl Fogel) ... 39
   버전 관리와 트리 변환 ... 40
   트리 차이의 표현 ... 44
   델타 편집기 인터페이스 ... 45
   그런데 이것이 예술일까? ... 53
   과도한 추상화의 위험 ... 56
   결론 ... 59
3장 내가 결코 쓴 적이 없는 가장 아름다운 코드  / 존 벤틀리(Jon Bentley) ... 61
   내가 쓴 가장 아름다운 코드 ... 62
   적을수록 많다 ... 63
   분석 ... 70
   쓴다는 것이란? ... 73
   결론 ... 73
   감사의 글 ... 75
4장 뭔가를 찾는다는 것  / 팀 브레이(Tim Bray) ... 77
   시간에 대해 ... 78
   문제: 웹로그 자료 ... 78
   문제: 누가 무엇을 언제 조회했는가? ... 88
   대규모 검색 ... 94
   결론 ... 97
5장 정확하게, 아름답게, 빠르게(이 순서대로):XML 검증기 설계에서 배운 교훈들  / 엘리옷러스티 해럴드(Elliotte Rusty Harold) ... 99
   XML 검증의 역할 ... 100
   문제 ... 100
   버전 1: 소박한 구현 ... 102
   버전 2: BNF 문법 흉내내기 O(N) ... 104
   버전 3: 첫 번째 최적화O(logn N) ... 106
   버전 4: 두 번째 최적화 - 두 번 점검하지 않는다 ... 107
   버전 5: 세 번째 최적화O(1) ... 110
   버전 6: 네 번째 최적화 - 캐싱 ... 115
   이 이야기의 교훈 ... 117
6장 FIT: 취약함에서 비롯된 아름다움  / 마이클 페더스(Michael Feathers) ... 119
   클래스 세 개로 된 승인 검사 프레임워크 ... 120
   프레임워크 설계의 난제 ... 122
   열린 프레임워크 ... 124
   놀랄 만큼 간단한 HTML 파서 ... 126
   결론 ... 129
7장 아름다운 검사  / 알베르토 사보이아(Alverto Savoia) ... 131
   까다롭기로 유명한 이진 검색 ... 133
   JUnit 소개 ... 136
   이진 검색의 철저 검사 ... 137
   결론 ... 152
8장 이미지 처리를 위한 즉석 코드 생성  / 찰스 페졸드(Charles Petzold) ... 155
9장 하향식 연산자 우선순위  / 더글러스 크록포드(Douglas Crockford) ... 183
   JavaScript ... 185
   기호 테이블 ... 186
   토큰 ... 187
   우선순위 ... 189
   표현식 ... 189
   중위 연산자 ... 190
   전위 연산자 ... 193
   배정 연산자 ... 194
   상수 ... 194
   범위 ... 195
   문장 ... 197
   함수 ... 201
   배열 리터럴과 객체 리터럴 ... 203
   확장 및 개선 방안 ... 204
10장 더 빠른 개체수 집계 방법을 찾아서  / 헨리 S. 워런(Henry S. Warren. Jr) ... 205
   기본적인 해법들 ... 206
   분할정복 ... 208
   다른 방법들 ... 210
   두 워드의 개체수의 합과 차 ... 212
   두 워드의 개체수 비교 ... 213
   배열의 1비트 세기 ... 214
   응용 ... 219
11장 보안 통신: 자유의 기술  / 아시시 굴라티(Ashish Gulhati) ... 223
   전반적인 고려 사항 ... 224
   보안 메시징의 복잡성 파헤치기 ... 226
   핵심은 사용성 ... 228
   기반 구조 ... 230
   검사 모음 ... 236
   작동하는 프로토타입 ... 237
   정리, 통합, 실행 ... 238
   히말라야에서의 해킹 ... 243
   보이지 않는 손의 움직임 ... 249
   속도는 중요하다 ... 251
   인권을 위한 통신 사생활권 ... 252
   문명의 해킹 ... 254
12장 BioPerl로 아름다운 코드 키우기  / 링컨 스타인(Lincoln Stein) ... 257
   BioPerl과 Bio::Graphics 모듈 ... 258
   Bio::Graphics의 설계 과정 ... 263
   Bio::Graphics의 확장 ... 286
   결론 및 교훈 ... 291
13장 Gene Sorter의 설계  / 짐 켄트(Jim Kent) ... 293
   Gene Sorter의 사용자 인터페이스 ... 295
   웹 사용자용 대화상자 정보의 유지 ... 296
   C에서 다형성 구현하기 ... 298
   관련 유전자만 분류하기 ... 302
   큰 관점에 본 아름다운 코드 ... 303
   결론 ... 307
14장 하드웨어와 함께 진화하는 우아한 코드: 가우스 소거법의 예  / 잭 동개러(Jack Dongarra) ; 표트르 루시체크(Piotr ... 309
   컴퓨터 아키텍처가 행렬 알고리즘에 미치는 영향 ... 310
   분해 접근방식 ... 312
   간단한 버전 ... 313
   LINPACK의 DGEFA 서브루틴 ... 316
   LAPACK의 DGETRF 서브루틴 ... 319
   재귀적인 LU 분해 ... 322
   ScaLAPACK의 PDGETRF ... 325
   다중코어 시스템을 위한 다중 스레딩 ... 331
   오차 해석과 연산 횟수에 대해 ... 334
   향후 연구 방향 ... 335
   더 읽을거리 ... 336
15장 아름다운 설계의 장기 이득  / 애덤 콜라와(Adam Kolawa) ... 339
   내가 생각하는 아름다운 코드 ... 339
   CERN 라이브러리에 대해 ... 340
   외면의 미 ... 341
   내면의 미 ... 348
   결론 ... 355
16장 Linux커널 드라이버 모형: 협업의 장점  / 그레그 크로아-하트먼(Greg Kroah-Hartman) ... 357
   소박한 시작 ... 359
   더욱 작은 조각들로 줄이기 ... 364
   장치 수천 개로의 규모 확장 ... 368
   느슨하게 결합된 작은 객체들 ... 369
17장 또 다른 수준의 간접층  / 디오미디스 스피넬리스(Diomidis Spinellis) ... 371
   코드에서 포인터로 ... 372
   함수 인수에서 인수 포인터로 ... 374
   파일시스템에서 파일시스템 계층으로 ... 379
   코드에서 영역 국한 언어로 ... 381
   멀티플렉싱과 디멀티플렉싱 ... 383
   끝없는 계층들 ... 385
18장 파이썬의 사전 구현: 모든 이를 위한 범용 자료구조 만들기  / 앤드루 커츨링(Andrew Kuchling) ... 387
   사전의 내부 ... 389
   특별한 수단들 ... 391
   충돌 ... 393
   크기 변경 ... 395
   반복과 동적 변경 ... 396
   결론 ... 397
   감사의 글 ... 397
19장 NumPy의 다차원 반복자  / 트래비스 E. 올리펀트(Travis E. Oliphant) ... 399
   N차원 배열 연산의 주된 난제들 ... 400
   N차원 배열에 대한 메모리 모형 ... 402
   Humpy 반복자의 기원 403
   반복자 설계 ... 404
   반복자 인터페이스 ... 411
   반복자의 용례 ... 413
   결론 ... 417
20장 NASA의 화상 탐사 로버 임무를 위한 고신뢰성 전사적 시스템  / 로널드 맥(Ronald Mak) ... 419
   화성 탐사 임무와 CIP ... 420
   임무 요구사항 ... 422
   시스템 아키텍처 ... 423
   사례 연구: 스트리머 서비스 ... 426
   신뢰성 ... 430
   안정성 ... 439
   결론 ... 442
21장 ERP5: 최대의 적응성을 위한 설계  / 호제리우 아템 데 카르발류(Rogerio Atem de Carvalh ... 443
   ERP의 전반적인 목표들 ... 444
   ERP5 ... 444
   기반 Zope 플랫폼 ... 446
   ERP5 Project의 개념들 ... 451
   ERP5 Project의 코딩 ... 453
   결론 ... 457
   감사의 글 ... 458
22장 구정물 한 숟갈  / 브라이언 캔트릴(Bryan Cantrill) ... 459
23장 MapReduce를 이용한 분산 프로그래밍  / 제프리 딘(Jeffrey Dean) ; 산자이 게마와트(Sanjay ... 481
   동기 유발 문제 ... 481
   MapReduce 프로그래밍 모형 ... 485
   다른 MapReduce 예제들 ... 486
   분산 MapReduce 구현 ... 488
   모형의 확장 ... 492
   결론 ... 493
   더 읽을거리 ... 493
   감사의 글 ... 494
   부록: 단어 집계 프로그램 ... 494
24장 아름다운 병행성  / 사이먼 페이턴 존스(Simon Peyton Jones) ... 497
   간단한 예: 은행 계좌 ... 498
   소프트웨어 트랜잭션 메모리 ... 501
   산타클로스 문제 ... 511
   Haskell에 대한 고찰 ... 521
   결론 ... 522
   감사의 글 ... 523
25장 구문적 추상: syntax-case 확장기  / R. 켄트 디빅(R. Kent Dybvig) ... 525
syntax-case의 간략한 소개 ... 530
   확장 알고리즘 ... 533
   예제 ... 548
   결론 ... 551
26장 노동 절감 아키텍처: 네트워크 소프트웨어를 위한 객체지향적 프레임워크  / 월리엄 R. 오트(William R. Otte) ; 더글러스 C. 슈? ... 553
   예제 응용프로그램: 로깅 서버 ... 555
   로깅 서버 프레임워크의 객체지향적 설계 ... 558
   순차적 로깅 서버의 구현 ... 565
   병행적 로깅 서버의 구현 ... 570
   결론 ... 577
27장 협력사들을 REST 방식으로 통합하기  / 앤드루 페이처(Andrew Patzer) ... 579
   프로젝트의 배경 ... 580
   서비스들을 외부 클라이언트들에게 노출 ... 581
   공장 패턴을 이용한 서비스 분배 ... 585
   e-비즈니스 프로토콜들을 이용한 자료 교환 ... 587
   결론 ... 593
28장 아름다운 디버깅  / 안드레아스 첼러(Andreas Zeller) ... 595
   디버거를 디버깅하기 ... 596
   체계적인 디버깅 공정 ... 598
   검색 문제 ... 600
   실패 원인을 자동으로 찾기 ... 601
   델타 디버깅 ... 603
   입력의 최소화 ... 606
   결함 찾기 ... 607
   프로토타입 문제 ... 610
   결론 ... 610
   감사의 글 ... 611
   더 읽을거리 ... 611
29장 에세이 같은 코드  / 유키히로 마쓰모토(Yukihiro Matsumoto) ... 613
30장 버튼 하나로 세상과 소통하기  / 아룬메타(Arun Mehta) ... 619
   기본적인 설계 모형 ... 621
   입력 인터페이스 ... 624
   사용자 인터페이스의 효율성 ... 640
   다운로드 ... 640
   향후 방향 ... 641
31장 Emacspeak: 완비된 음향 데스크톱  / 레이먼(T. V. Raman) ... 643
   음성 출력의 생성 ... 644
   Emacs의 음성 가능화 ... 646
   온라인 정보에 손쉽게 접근하기 ... 659
   요약 ... 667
   감사의 글 ... 670
32장 살아 움직이는 코드  / 로라 윈저드(Laura Wingerd) ; 크리스토퍼 세이월드( ... 671
   '책처럼' 만들기 ... 673
   비슷한 것은 비슷하게 ... 674
   들여 쓰기의 위험 ... 675
   코드 내비게이션 ... 677
   우리가 사용하는 도구들 ... 678
   DiffMerge의 파란만장한 과거 ... 680
   결론 ... 682
   감사의 글 ... 683
   더 읽을 거리 ... 683
33장 '그 책'에 실릴 프로그램 짜기  / 브라이언 헤이스(Brian Hayes) ... 685
   왕도는 없다 ... 686
   Lisp에 대해 ... 687
   동일 선상의 세 점 ... 687
   기울기 비교 ... 691
   삼각 부등식 ... 692
   굽이치는 강물 ... 694
   '어?'에서 '아하'로 ... 696
   결론 ... 698
   더 읽을거리 ... 699
후기 ... 701
   필진 ... 702
   찾아보기 ... 713
닫기