推荐序 6
译者序 21
序 1
前言 3
第1章 正则表达式匹配器 9
编程实践 10
实现 11
讨论 12
其他的方法 14
构建 15
结论 17
第2章 Subversion中的增量编辑器:灵活的接口 19
版本控制与目录树的转换 20
表达目录树的差异 24
增量编辑器接口 25
但这是艺术吗 30
像体育比赛一样抽象 32
结论 35
第3章 我从未编写过的最漂亮的代码 37
我编写过的最漂亮的代码 38
事半功倍 39
观点 45
本章的中心思想是什么 47
结论 48
致谢 49
第4章 查找 51
耗时 51
问题:数据 52
问题:时间人物,以及对象 61
大规模尺度的搜索 67
结论 69
第5章 正确、优美、迅速(按重要性排序):从设计XML验证器中学到的经验 71
XML验证器的作用 71
问题所在 72
版本1:简单的实现 74
版本2:模拟BNF语法——复杂度O(N) 75
版本3:第一个复杂度O(log N)的优化 77
版本4:第二次优化:避免重复验证 78
版本5:第三次优化:复杂度O(1) 80
版本6:第四次优化:缓存 84
从故事中学到的 86
第6章 集成测试框架:脆弱之美 87
三个类搞定一个验收测试框架 88
框架设计的挑战 90
开放式框架 92
一个HTML解析器可以简单到什么程度 93
结论 96
第7章 漂亮的测试 99
讨厌的二分查找 101
JUnit简介 103
将二分查找进行到底 105
结论 118
第8章 图像处理中的即时代码生成 121
第9章 自顶向下的运算符优先级 145
JavaScript 146
符号表 147
语素 148
优先级 150
表达式 150
中置运算符 151
前置运算符 153
赋值运算符 154
常数 154
Scope 155
语句 157
函数 160
数组和对象字面量 161
要做和要思考的事 162
第10章 寻求快速的种群计数 163
基本方法 164
分治法 165
其他方法 167
两个字种群计数的和与差 169
两个字的种群计数比较 169
数组中的1位种群计数 170
应用 175
第11章 安全通信:自由的技术 179
项目启动之前 180
剖析安全通信的复杂性 181
可用性是关键要素 183
基础 186
测试集 190
功能原型 191
清理,插入,继续…… 191
在喜马拉雅山的开发工作 195
看不到的改动 201
速度确实重要 203
人权中的通信隐私 203
程序员与文明 204
第12章 在BioPerl里培育漂亮代码 207
BioPerl和Bio∷Graphics模块 207
Bio∷Graphics的设计流程 211
扩展Bio∷Graphics 230
结论和教训 234
第13章 基因排序器的设计 237
基因排序器的用户界面 238
通过Web跟用户保持对话 239
多态的威力 241
滤除无关的基因 244
大规模美丽代码理论 245
结论 248
第14章 优雅代码随硬件发展的演化 251
计算机体系结构对矩阵算法的影响 252
一种基于分解的方法 253
一个简单版本 255
LINPACK库中的DGEFA子程序 257
LAPACK DGETRF 259
递归L U 262
ScaLAPACK PDGETRF 265
针对多核系统的多线程设计 269
误差分析与操作计数浅析 272
未来的研究方向 273
进一步阅读 273
第15章 漂亮的设计会给你带来长远的益处 275
对于漂亮代码的个人看法 275
对于CERN库的介绍 276
外在美 277
内在美 283
结论 289
第16章 Linux内核驱动模型:协作的好处 291
简单的开始 292
进一步简化 297
扩展到上千台设备 300
小对象的松散结合 301
第17章 额外的间接层 303
从直接代码操作到通过函数指针操作 304
从函数参数到参数指针 305
从文件系统到文件系统层 310
从代码到DSL (Domain-Specific Language) 312
复用与分离 314
分层是永恒之道吗 315
第18章 Python的字典类:如何打造全能战士 317
字典类的内部实现 319
特殊调校 321
冲突处理 322
调整大小 323
迭代和动态变化 325
结论 325
致谢 326
第19章 NumPy中的多维迭代器 327
N维数组操作中的关键挑战 328
N维数组的内存模型 329
NumPy迭代器的起源 331
迭代器的设计 331
迭代器的接口 337
迭代器的使用 339
结论 342
第20章 NASA火星漫步者任务中的高可靠企业系统 345
任务与CIP 346
任务需求 347
系统架构 348
案例分析:流服务 351
可靠性 355
稳定性 362
结论 364
第21章 ERP5:最大可适性的设计 367
ERP的总体目标 368
ERP5 368
Zope基础平台 370
ERP5 Project中的概念 374
编码实现ERP5 Project 375
结论 379
第22章 一匙污水 381
第23章 MapReduce分布式编程 397
激动人心的示例 397
MapReduce编程模型 400
其他MapReduce示例 401
分布式MapReduce的一种实现 403
模型扩展 406
结论 407
进一步阅读 407
致谢 408
附录:单词计数解决方案 408
第24章 美丽的并发 411
一个简单的例子:银行账户 412
软件事务内存 415
圣诞老人问题 424
对Haskell的一些思考 434
结论 435
致谢 436
第25章 句法抽象:syntax-case展开器 437
syntax-case简介 442
展开算法 444
例子 456
结论 458
第26章 节省劳动的架构:一个面向对象的网络化软件框架 459
示例程序:日志服务 461
日志服务器框架的面向对象设计 464
实现串行化日志服务器 470
实现并行日志服务器 475
结论 481
第27章 以REST方式集成业务伙伴 483
项目背景 484
把服务开放给外部客户 484
使用工厂模式转发服务 487
用电子商务协议来交换数据 489
结论 494
第28章 漂亮的调试 495
对调试器进行调试 496
系统化的过程 498
关于查找的问题 499
自动找出故障起因 500
增量调试 502
最小化输入 505
查找缺陷 505
原型问题 508
结论 509
致谢 509
进一步阅读 509
第29章 代码如散文 511
第30章 当你与世界的联系只有一个按钮时 517
基本的设计模型 518
输入界面 521
用户界面的效率 535
下载 535
未来的发展方向 535
第31章 Emacspeak:全功能音频桌面 537
产生语音输出 538
支持语音的Emacs 539
对于在线信息的简单访问 551
小结 558
致谢 561
第32章 变动的代码 563
像书本一样 565
功能相似的代码在外观上也保持相似 566
缩进带来的危险 567
浏览代码 568
我们使用的工具 569
DiffMerge的曲折历史 571
结论 573
致谢 573
进一步阅读 573
第33章 为“The Book”编写程序 575
没有捷径 576
给Lisp初学者的提示 576
三点共线 577
不可靠的斜率 580
三角不等性 581
河道弯曲模型 583
“Duh !”——我的意思是“Aha!” 584
结论 586
进一步阅读 586
后记 589
作者简介 591