五本令人难忘的编程书籍
我读过一些经典著作——《计算机程序的构造和解释》、《人工智能编程范例》——但我想特别提一下几本更为冷门、却深刻影响了我思考方式的书。
《汇编语言之道》 迈克尔·阿布拉什,1990年
我在20世纪80年代的大部分时间里都在编写8位电脑游戏(如果你感兴趣,可以去看看)。
回想起来或许有些奇怪,尽管当时那台运行在不到2MHz频率下的6502处理器性能有限,我却并不执着于性能优化。相反,我更希望代码尽可能小,这多少也是因为当时用的是行编辑器,而且程序还得靠别人从杂志上逐行录入——满篇都是DATA 0AFF6CA900004021……真是让人头疼。
就在我那段经历即将结束的时候,《汇编语言之道》出现了,作者是我从未听说过的人,这本书剖析、阐释并拓展了我作为单打独斗的汇编黑客多年间自学摸索出的各种技巧。
尽管阿布拉什关注的是8086而非6502,读起来却仿佛这本书就是为我量身定制的。
这也是我印象中出版周期最离奇漫长的技术类书籍之一。书中绝大部分内容都在讨论针对8088和8086的细致优化,可它出版时,80486芯片已经出现在高端台式机上了。
《科学Forth》 朱利安·诺布尔,1992年 《分形、可视化与J》 克利福德·赖特,2000年
这两本书的主题截然不同:一本讲纯粹的科学计算,另一本讲图像生成;两书所附的代码也都采用了各自迥异且相当非主流的语言。
然而,这两本书却遵循着同一种总体思路,而这种思路本该更为普遍。表面上看,作者们是在介绍特定的编程语言(这也是书名中出现语言名称的原因);但实际上,每位作者都有自己深耕的专业领域,并找到了一种能够支持他们在该领域进行探索、编写代码解决问题的语言。
因此,书中没有刻意安排的示例或玩具式的小问题,而是呈现了一些严肃而颇具挑战性的程序,展示了语言的实际应用。诺布尔博士演示了他如何用Forth处理复杂的矩阵运算,并在意识到逆波兰表示法并非在所有情况下都理想时,开发了一个将中缀表达式转换为Forth的翻译器。
赖特则直接切入图像处理算法,同时还涉足一些轻松些的课题,比如“R/S分析、赫斯特指数与太阳黑子”。
这两本书都是对那些常见的“本月学习某某编程语言”教材的绝佳替代。遗憾的是,朱利安·诺布尔已于2007年去世。
《程序员的工作》 苏珊·拉默斯,1986年
我过去常常如饥似渴地阅读印刷版的程序员与游戏设计师访谈(而那时的游戏设计师往往也兼任程序员)。莱维的《黑客》让我着迷,尤其是其中关于游戏开发的那一章。
《程序员的工作》同样如此:来自一群风格各异、既有名人也有怪才的程序员们的哲学、理念与经验直陈眼前。但这本书的重点并不在技术本身,而在于创造力。
接受采访的大多数人并没有计算机科学学位,书中也没有强调数学、程序正确性证明或λ演算——有的只是人们提出想法并将其付诸实践的过程。
当然,游戏的影子也无处不在:贾伦·拉尼尔谈到为Commodore 64开发的迷幻游戏《月尘》,比尔·巴奇大胆(至今仍未实现)的“搭建套件之搭建套件”计划。
拉默斯的这本书成了我撰写《Halcyon Days》时的范本。我还把《黑客》也掺了进来,采访了约翰·哈里斯,请他谈谈自己对莱维书中对其描述的不满。
命运弄人的是,《程序员的工作》和《Halcyon Days》后来被整合到一张CD上,通过Dr. Dobb's Journal的资料库销售。这一组合已经存在了十年,至今仍在售,着实令我意外。
《Thinking Forth:一种用于解决问题的语言与哲学》 利奥·布罗迪,1984年
没错,又是一本关于Forth的书。
不过这本书值得一读,并不是因为它讲Forth,而是因为它为数不多地探讨了如何分解问题、组织代码。你会觉得这本书像是由福勒等人写成的,直到你意识到它的年代是20世纪80年代中期。
布罗迪用的是“factor”(源自Forth社区),而不是“refactor”,这也暴露了他的背景。令人印象深刻的是,书中既没有面向对象编程,也没有模式讨论,更没有繁复的术语。
它讲述的是如何理解自己的目标、避免冗余,并写出极其简洁的代码。
当然,这本书因Forth本身也值得一读,尤其是那些穿插其中的专家智慧,其中包括Forth的创始人查克·摩尔的真知灼见。
永久链接2008年2月18日
此前文章:
• 重温函数式编程的基础• 不要把数据结构一直嵌套到底• Erlang中的垃圾回收• 为什么对垃圾回收的过度担忧有时仍然有道理• 函数式编程考古学