编程珠玑,第二版

作者:Harvey Friedman
  • 作者:Jon Bentley

  • 出版社:ACM Press / Addison Wesley

  • 电子邮件:ACMHELP@ACM.org

  • URL: http://www.acm.org/

  • 价格:24.95美元

  • ISBN: 0-201-65788-0

  • 评论者:Harvey Friedman

Programming Pearls, Second Edition

为了消除那些拼写能力较弱的读者在看到书名后可能产生的任何误解,本书并非关于Perl编程,尽管Perl语言被提及了两次。本书是对1986年出版的一本书的修订,该书收录了Bentley为期刊 Communications of ACM 撰写的专栏文章的精选。ACM代表计算机协会(Association for Computing Machinery),这是一个由硬件和软件专业人士及学生组成的组织,成立于计算技术不如今天这般专业化之前。作为60年代末和70年代初的会员,我热切地阅读Bentley的专栏,尽管有时在阅读提示后才看到他提供的解决方案,我会感到沮丧。他的第一版 Programming Pearls 成为经典之作,其中使用了C和FORTRAN语言的示例,但算法和解决方案采用伪代码,以便读者可以用自己喜欢的语言实现。在为来自CD-ROM数据盘的相对较大的大气科学二进制数据文件设计和实现应用程序访问软件时,我使用了本书中的一些想法。

由于Bentley在贝尔实验室工作,他有机会咨询许多有趣的问题,其中更有趣的问题被他用作本书的示例。本书共有15章,他称之为“专栏”(因为最初,每一章都基于 CACM 的一个专栏)。每章都包括对他所考虑问题的讨论,他认为可以从该专栏中得出的原则,以及用于解决和/或进一步思考的问题。本书的末尾是提示(提供解决问题的启发性方法的进一步问题),对应于每个专栏的问题集,以及提示部分之后的部分中解决方案的概要。每个专栏还有一个名为“进一步阅读”的部分,他在其中列出了与该专栏相关的书籍或期刊文章。令人稍感失望的是,本书末尾没有收集书目,其中所有进一步阅读的材料都已正确引用,并在可能的情况下附有ISBN。

最后,一些章节末尾有侧边栏;这些都是写得很好的叙述文,带有有趣的案例研究或轶事。我特别喜欢侧边栏13.8,其中他介绍了Doug McIlroy的拼写检查器。将包含75,000个英语单词的字典列表放入PDP-11计算机的64KB地址空间听起来是不可能的。即使Bentley解释了所使用的空间压缩技术的轨迹,并看到了20年前的“spell”的计时,也无法消除这种敬畏感。

为了使第二版与时俱进,Bentley在他的伪代码中仅使用C和C++示例程序。他重写了书中所有伪代码的程序,在运行MS Windows NT 4.0的128MB RAM的400MHz Pentium II上运行了它们,并在相应的专栏中展示了计时。我认为如果他真的想与时俱进,他应该在Linux上运行它们。对于那些有空闲时间玩Linux系统的人来说,这可能是一个很好的练习:下载Bentley的C和C++程序,看看在类似的硬件设置上运行时,时间如何比较。在附录1“算法目录”中,Bentley为算法课程的大学教师提供了展示本书材料的方法。排序、搜索、字符串算法、向量和矩阵算法、生成伪随机整数和数值算法都包含一个或多个章节。

附录2是一个简短的、草稿式的计算测验,用于评估一个人在做出合理的数字猜测方面的熟练程度。尝试之后,我需要更多练习。附录3包含时间和空间的成本模型;自然是针对计算机的。附录4“代码调优规则”来自他1982年的著作 Writing Efficient Programs,列出了27条规则。主要类别是空间换时间规则、时间换空间规则、循环规则、逻辑规则、过程规则和表达式规则。他列出了这些规则,然后引用了书中包含示例的部分。附录5“C++搜索类”正如其名称所示。

第二版在重写中没有任何损失。我只希望新一代程序员能够像我们这些通过阅读经典的第一版学习解决编程问题的方法的人一样欣赏它。

Harvey Friedman 可以通过电子邮件 fnharvey@u.washington.edu 联系。

加载Disqus评论