出版时间:2011-5 出版社:人民邮电出版社 作者:[美] Jon Bentley 译者:钱丽艳,刘田 等
Tag标签:无
内容概要
多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位于前列。正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon
Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”,发表在《ACM通讯》最受欢迎的专栏中,最终结集为两部不朽的计算机科学经典名著,影响和激励着一代又一代程序员和计算机科学工作者。本书为续集,秉承了《编程珠玑》的风格,但涉及的主题更广,包括文档、小语言、性能监视、图形输出等。
作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了计算机大师们在探索解决方案过程中发生的轶事、走过的弯路和不断精益求精的历程,引导读者像真正的程序员和软件工程师那样富有创新性地思考,并透彻阐述和总结了许多独特而精妙的设计原则、思考和解决问题的方法以及实用程序设计技巧。每章后所附习题极具挑战性和启发性,书末给出了简洁的解答。
作者简介
Jon Bentley 世界著名计算机科学家,被誉为影响算法发展的十位大师之一。他先后任职于卡内基-梅隆大学(1976~1982)、贝尔实验室(1982~2001)和 Avaya实验室(2001年至今)。在卡内基-梅隆大学担任教授期间,他培养了包括Tcl语言设计者John Ousterhout、Java语言设计者James Gosling、《算法导论》作者之一Charles Leiserson在内的许多计算机科学大家。2004年荣获Dr. Dobb’s程序设计卓越奖。 钱丽艳 北京大学信息科学技术学院基础实验教学研究所软件实验室主任、高级工程师,毕业于国防科技大学,目前主要从事数值计算、程序设计等方面的研究工作。
书籍目录
第一部分 编 程 技 术
第1 章 性能监视工具
1.1 计算素数
1.2 使用性能监视工具
1.3 专用的性能监视工具
1.4 开发性能监视工具
1.5 原理
1.6 习题
1.7 深入阅读
第2 章 关联数组
2.1 Awk 中的关联数组
2.2 有穷状态机模拟器
2.3 拓扑排序
2.4 原理
2.5 习题
2.6 深入阅读
第3 章 程序员的忏悔
3.1 二分搜索
3.2 选择算法
3.3 子程序库
3.4 原理
3.5 习题
第4 章 自描述数据
4.1 名字—值对
4.2 记录来历
4.3 排序实验
4.4 原理
4.5 习题
第二部分 实 用 技 巧
第5 章 劈开戈尔迪之结
5.1 小测验
5.2 解答
5.3 提示
5.4 原理
5.5 习题
5.6 深入阅读
5.7 调试(边栏)
第6 章 计算机科学箴言集
6.1 编码
6.2 用户界面
6.3 调试
6.4 性能
6.5 文档
6.6 软件管理
6.7 其他
6.8 原理
6.9 习题
6.10 深入阅读
第7 章 粗略估算
7.1 头脑热身
7.2 性能的经验法则
7.3 Little 定律
7.4 原理
7.5 习题
7.6 深入阅读
7.7 日常速算(边栏)
第8 章 人员备忘录
8.1 备忘录
8.2 原理
8.3 深入阅读
第三部分 人性化I/O
第9 章 小语言
9.1 Pic 语言
9.2 视角
9.3 Pic 预处理器
9.4 用来实现Pic 的小语言
9.5 原理
9.6 习题
9.7 深入阅读
第10 章 文档设计
10.1 表格
10.2 三条设计原则
10.3 插图
10.4 文本
10.5 合适的媒介
10.6 原理
10.7 习题
10.8 深入阅读
10.9 次要问题目录(边栏)
第11 章 图形化输出
11.1 实例研究
11.2 显示结果取样
11.3 原理
11.4 习题
11.5 深入阅读
11.6 拿破仑远征莫斯科(边栏)
第12 章 对调查的研究
12.1 有关民意调查的问题
12.2 语言
12.3 图片
12.4 原理
12.5 习题
第四部分 算 法
第13 章 绝妙的取样
13.1 取样算法一瞥
13.2 Floyd 算法
13.3 随机排列
13.4 原理
13.5 习题
13.6 深入阅读
第14 章 编写数值计算程序
14.1 问题
14.2 牛顿迭代
14.3 良好的起点
14.4 代码
14.5 原理
14.6 习题
14.7 深入阅读
14.8 数值算法的力量(边栏)
第15 章 选择
15.1 问题
15.2 程序
15.3 运行时间分析
15.4 原理
15.5 习题
15.6 深入阅读
附录A C 和Awk 语言
附录B 子程序库
部分习题答案
索引
章节摘录
然后我跑回我的终端前,很兴奋地看到这次二分搜索成功地通过了n从1到9的测试。然而当n=10的时候,程序再次失败了,我的心都快碎了。那个时候,bign=10。我实在想不出为什么程序会在n-10的时候失败,又按照bign=9和bign=11各运行了一次,希望问题的产生是因为那是最后一次测试。不幸的是,代码总是一直到9都能正确运行,然后运行10或者11就会出错。从9到10,到底出了什么问题? Awk变量既可以是数值,也可以是字符串。Awk的说明书中说,如果比较的双方都是数值,那么就按照数值比较的规则来比较,否则就按照字符串的规则来比较。由于这个程序涉及函数调用的特殊情况,解释器误认为字符串“10”先于字符串“5”。我写了6行的小程序捕捉到了这个错误,Kernighan在次日解决了这个问题。 3.4原理 本章触及了程序员日常工作中的一些常见任务。它们可能不是那么吸引人,但是绝对很重要。 脚手架。本章介绍了程序原型、在程序中加入输出以观察运行过程、度量代码以及组件测试等方法。其他的脚手架方法还有测试数据(虚拟的文件和数据结构)以及使用“残桩”代码模拟未完成的程序从而方便自顶向下的测试。 专用语言。合适的编程语言可以使代码的长度减少一个量级,清晰程度上升一个量级。请大家自己发掘各语言的优势和特性。Awk是一种构造算法原型的极好的语言:其内建的关联数组可以使你模拟许多常用的数据结构,它的字段、隐式循环、模式一动作对等设计极大地简化了输入输出过程,隐式的变量声明和初始化也使得程序更加简洁。AWK Programming Language一书(见2.6节)的第7章中还有关于用Awk进行算法实验的更多资料。13.2节和答案14.6给出了两个小型算法中应用的Awk脚手架。 测试与调试。本章专注于测试和调试小的程序。先用白盒测试的方法观察程序是否按照我们预想的方法运行,然后再用黑盒测试来增加自己对于程序正确性的信心。错误报告。对于子程序库的组件测试不经意间变成了对于Awk最近新引入特性的一次系统测试。Kernighan把这种现象称作“新用户现象”:新系统的每一个新用户都能够发现一系列的新错误。相比于之前的用户,我对函数的钻研更深。在这个300行的程序两次遇到Awk的错误时,我都是先用一段小的程序(一个是15行,一个只有6行)重现这一奇异的现象,然后才报告错误的。贝尔通信研究院的Stu Feldman这样描述他多年来维护一个Fortran编译器的经验: 当你在错误报告附上25000行代码的时候,无论是程序作者、支持机构还是你的朋 友,都会选择无视你的报告。我花了几年时间来教会他这一点(为了保护当事人,把姓名隐去了)。采用的技术包括凝视代码、发挥直觉、用二分法(试着扔掉子程序的后半部分)等等。如果你发现了一个错误,请使用最小的测试用例来报告它。 程序验证的角色。为了保证自己的程序是正确的,我会使用任何可用的方法。非正式的验证方法可以帮助我编写代码,并在实现前就检验我的想法,一旦实现了代码,测试就变成了最关键的问题。我在程序验证方面有了些经验后,再也不会对于一个复杂的小程序第一次运行就正常工作而感到惊讶。如果程序不能工作,我会通过测试和调试的方法找到没有被满足的断言,并修改相应的代码。 ……
媒体关注与评论
《编程珠玑》是对我职业生涯影响最大的书之一,其中的许多真知灼见多年之后仍然使我受益匪浅。Jon在《编程珠玑(续)》中组织了更多素材,诸多内容让我耳目一新。” ——Steve McConnell,软件工程大师,IEEE Software前主编,《代码大全》作者 “对每一位遇到的程序员,我都会毫不迟疑地建议他阅读并不断重读这部经典之作。” ——Slashdot
编辑推荐
经久不衰的计算机科学名著! 集深邃思想、实战技术与趣味轶事于一册! 领略计算机科学之美!
图书封面
图书标签Tags
无
评论、评分、阅读与下载