ARTS - Review

计算机程序设计艺术

一些在书架上的书看着如此美丽,不仅仅是因为装帧美,而且书脊上表达了关于主人的话。Donald Knuth 的四精装卷的“计算机程序设计艺术” - 四个很贴切的深紫色, 传达了一个明确的信息:站一边,地球人,你站在一个真正的程序员面前。一个计算机科学的严谨实践者。

比尔盖茨曾经说过,如果你认为你是一个非常好的程序员,请阅读《计算机程序设计艺术》,如果你能读懂书里的一切,你可以直接给我发简历了。

对我来说,订购这一套书册感觉就像是一项重要的专业成就。在这些书到达前,我在书架上腾出了一个特别的空间,就像在仓库里为一个崭新大型机器腾空间一样。

它们的权威太大了以至于不能动摇。所以我从不读它们,这不是本系列的书评,不好意思。

这也不是提前走出影院的影评家的一种厌恶的评论。Knuth的书是史诗级的,他真正的掌握了计算机科学的基本原理,数学的原理, 以及两个学科的交叉点。如此多的荣耀。

只是我不值得TAOCP (计算机程序设计艺术缩写)的深度。

我读过卷一的序言三四遍, 我也曾试图想象完成整个系列是什么感觉。我将会离开互联网几个月,独自到Wyoming 山顶的一个小屋里,那里有一堆纸,几盒铅笔, TAOCP ,基本数学书,还有90天的 Adderall (一种治疗多动症的药物)供应。

我将会在山上长时间徒步旅行,深入思考算法原理。没有笔记本,没有WIFI,没有电 – 这些令人分心的东西。日落后,我会在烛光下阅读或解决问题集,我的思绪放飞在一个由谐波数、二项式系数、和非线性数据结构组成的宇宙中。

但是这些永远没有发生。所以当我昨天再次阅读序言时候,我觉得我应该停下来反思我的旅程。

这就是Knuth对电脑的热爱,整个系列都致力于一个: 20世界50年代流行的IBM 650 大型机。 它是第一台大规模生产的电脑,用现在美元计算花费几十万。这是Knuth咬紧牙关的机器。

在1950年代对计算机的热爱就是对应用数学的热爱。早起的IBM650有基本的数学操作和控制结构,它基于十进制而不是二进制。

没有显示器,没有命令行. 人就是操作系统, 一个控制台让操作员启动停止程序。

你说想要你写一个程序去生成斐波那契数列. FORTRAN 语言还不存在 - 它在 650发布四年后诞生。 所以,这些早年你必须写机器级别的操作代码,之后手动运行程序在打孔机上打出有程序的纸片。

有一些方法优化你的程序。你需要设计一个更快的算法或者发布对问题合适的数据结构。

你可能也要优化你的程序加载运行过程 - 更细粒度的操控机器。 磁鼓存储器是先打硬盘存储区的先驱,是650硬盘的主要存储器,非常慢。所以你作为程序员的目标就是最大限度的减少12500转筒机的旋转潜伏期,所以让你的代码和数据在执行阶段更快的抵达cpu。你希望在主机的cpu 和这些存储器之间实现完美同步。

计算机科学就在这个地方,是数学和机械工程的粗糙交叉。可以被一个非常聪明的人完全理解。这并不总是现实。Knuth 和那个时代的程序员必须比IBM 650 更聪明。他们了解每一个真空管和控制开关。 现在我们不自爱比我们电脑更聪明了。

序言的第一段,Knuth 称程序设计是一种审美体验,很想写诗和绘画。我认为这种美感仍在吸引有抱负的程序员。20世纪50年代以来,沿着指数曲线发展很长一段路之后,这种美感依然完好无损,令人欣慰。虽然我们不在设计出软件再将他送入热闹的计算器, 编程之美仍然在每一个抽象层。

我想知道在8Kb 内存范围手工组装约束下以及打孔机器工作下如何影响编写软件的执行特性。我想象在Knuth的时代写代码是一种兴奋和冒险的行为.很小的错误就很痛苦。

从那时起,数十年的抽象化就像一对床垫一样堆叠起来,我们大多数人只是在上面翻滚。

今天的软件的短反馈回路和延展性是有代价的。虽然软件开发今天可以更能把玩,但如果不加思考的随意闹,也会产生很多问题。伟大的软件仍然需要大量的思考,而且我们很容易失去严谨性。

IBM 650 的约束生硬且迅速,今天的电脑约束更软常常自我约束。移动电话的微小屏幕预示着经济型软件和接口设计的革新浪潮。