목차 일부
역자서문 ... 3
서문 ... 6
소개 ... 7
1장 정규 표현식 부합기 하나 / 브라이언 커니핸(Brian Kernighan) ... 27
책 The Practice of Programming의 정규식 부합기 ... 28
구현 ... 30
논의 ... 31
대안들 ... 33
확장 ... 34
결론 ... 36
2장 ...
더보기
목차 전체
역자서문 ... 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
더보기 닫기