译序
若人一生只能翻译一本书,我定会选择《 Code: The Hidden Language of Computer Hardware 》。可惜我是个门外汉,不懂得翻译的标准,即使懂得也未必愿意老实地遵循它,以致本系列字里行间尽是私货,姑且算作读书笔记吧。
原序
在写书之前我就在为序言打腹稿。然而直到书出版后,当人们问我这本书写的啥时,我还是难以回答。我想玄乎地声称它是“一次现代数字技术的历史穿越之旅”,但不得不承认它说白了就是一本介绍计算机如何工作的书。
有人说:“我已经有一本类似的了。” 对此我的回应是:“不,你没有!”没错!我这本书是与众不同的。它没有用箭头表明数据如何出入磁盘驱动器的大幅彩图,也没有满载着 0 和 1 的火车。比喻是文学的修辞,它会掩盖技术的美感。
还有人说:“人们不想知道计算机是如何工作的。”没错!我也有想知道和不想知道的事,比如我就不想知道我家冰箱是如何工作的。可是我经常被问必须了解工作原理才能解答的问题,比如“内存和外存有什么区别”。诚然这是一个关键问题,用户也想知道自己需要多大空间的内存和外存,甚至还想弄明白文件是如何先从外存读入内存再从内存写入外存的。“内存如桌,外存似柜”这种回答我不满意,它听起来仿佛计算机是照着办公室来架构的。事实上内存和外存的区别是因为我们找不到一种速度快、容量大、安全性又高的完美介质。统治了五十多年的 Von Neumann 架构就是妥协的结果。又如“为什么不能在 Windows 下运行 Macintosh 程序?”我会在回答时尽可能阐释所有涉及到的技术知识,远远超出提问者的预期。
我希望《 Code 》能让你对计算机的理解达到电气工程师的水平。作为 20 世纪最最伟大的技术成就,计算机实在美不可言。计算机是有层次的,从底部的晶体管到顶部的屏幕信息,层间变化并不像大多数人想象得那么困难。
计算机总是不断执行着非常简单的操作,虽然今天的计算机比几十年前的要复杂得多,但它们本质上没有区别。时间越久远,技术越简单,我们总能找到一个相对容易理解的阶段,比如 19 世纪的电报设备可以展示计算机是如何构造的。理论上前 17 章所有内容都可以用一个世纪前的电子设备构造。这些古董技术真是令人怀旧。
《 Code 》不是一本快速入门手册。我直到第 68 页才定义 bit ,直到第 180 页才定义 byte ,直到第 142 页才提到晶体管。尽管计算机工作原理有一定深度,但是整体学习曲线还算平缓,而且没有满载着 0 和 1 的火车。
Charles Petzold 2000 年 8 月 16 日