这是一本讲述计算机工作原理的书。不过,你千万不要因为“工作原理”之类的字眼就武断地认为它是晦涩而难懂的。作者用丰富的想象和清晰的笔墨将看似烦杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。更重要的是,你会因此更加深刻地理解计算机的工作原理。这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。
不管你是计算机高手,还是对这个神奇的机器充满敬畏之心的“小白”都不妨翻阅一下本书,读一读大师的经典作品,必然会有收获。
√ Charles Petzold 《编码》经典原味再现
√ 畅销近20年的计算机英文经典书籍
√ 以通俗之文字化解繁杂之理论
√ 以简单事物描绘计算机之原理
推荐序
《道德经》有云:“大方无隅,大器晚成。大音希声,大象无形。”这也就是老子所说“道”的至高境界。世界上最恢宏、壮丽的气派和境界,往往并不拘泥于一定的事物和格局,而是表现出“气象万千”的面貌和场景,科学知识的论述也是如此。科学不一定等同于晦涩和深奥,最复杂的理论也可用最简单的方式描述。这就是普遍存在于现实世界的辩证的、朴素的唯物主义精神。
我想Charles Petzold就是这样一位智者。作为Windows编程界开创者之一和世界顶级的技术专家,他在Windows编程方面著述丰富,在基础计算机理论书籍方面也取得了卓尔不凡的成就。他善用丰富的想象和清晰的笔墨将看似烦杂的理论描述得生动、简单,使读者不会感到枯燥和生硬。尤其这本畅销多年、经久不衰的《编码——隐匿在计算机软硬件背后的语言》(Code:The Hidden Language of Computer Hardware and Software)更是化腐朽为神奇、化晦涩为通俗之杰作。即使读者不是计算机专业的人士,在Petzold笔墨的引导之下,也能够轻松阅读本书。书中使用像电线、电灯泡、触发器等这些非常常见的零件,拼拼接接,最后出人意料地建造了一台电子计算机。读者在阅读过程中,可以循序渐进地学习有关计算机系统基础和构造的知识,作者的奇思妙想和妙趣横生的讲述方式不得不令人赞叹。
透过现象进而探索本质,可以发现新事物;将复杂的事物简单化,可以发现解决问题的新方法。作者将那些看似复杂的理论转换成我们熟悉的诸多景象,使读者不由自主地跟随他的思路打造这台只由电线、电灯泡和触发器组构成的庞大的计算机系统。
最后,我还是想将《道德经》上的两句话来送给各位读者——“为学日益,为道日损,损之又损,以至于无为,无为而无不为。”衷心希望各位读者有朝一日都能够在学问上到达无为而治的境界。
作者序
在真正开始撰写这本书之前,纷繁的思绪在我的脑海中已经萦绕了近十年之久。但从着手写作,一直到出版,我不断反复地问着自己一个问题:这本书是讲什么的?
关于这个问题我总是找不到合适的答案。我想说:“这本书将带领大家通过一段信息技术革命的旅程重新感受现代计算机技术。”语毕,我内心纠结,这个回答真的将这本书的内容完整诠释出来了吗?
最后我不得不承认:“这本书其实是讲述计算机是如何工作的。”
我之所以有些底气不足,是因为我已经猜到了某些读者的反应:“嗨,这种书我早就读过了。”但我会立刻告诉他:“不,这种书你并没有读过。”对于这点,我坚信不疑。因为这本书并不是讲“计算机——如何——工作”。书中并没有用一张又一张描述磁盘的插图,没有用各种箭头解释数据是如何被输送到计算机的,书里面也没有装载着一节又一节“0和1数据”的“火车”图片。明喻与暗喻是文学描述中精妙的辅助手段,但它们常常掩盖了科学技术的真正光芒。
我还听过另一个说法:“人们不愿意了解计算机是如何工作的。”对于这句话我毫无保留地赞同,因为就我个人来说,也是在不经意之间才体会到理解事物如何运作这一过程是多么的有趣。但是这并不意味着我对世上一切事物的运作机制都感兴趣,都要有所了解,因此我绝对不会在任何场合向大家解释我房间里冰箱的工作原理。
然而与此同时,经常有人向我问起一些涉及计算机内部运行机制的问题。一个常见的例子就是:“‘存储器(storage)’与‘内存(memory)’有何区别?”
对于计算机用户而言,这个问题要是搞不清楚,的确“寸步难行”,可以看到,市场上考察个人计算机的存储性能,最主要的就是这两个概念。即便对于最初级的计算机用户来说,他们也一定需要了解到底多少“兆字节”或多少“吉字节”的存储器才能应对运行在其上的程序。如果进一步思考,这些初级用户或许更加想了解计算机中的“文件”是什么概念,甚至连带这些文件如何从存储器加载进内存,又如何从内存存储到存储器,他们也非常期待学习这些知识。
像这类“存储器—内存”问题的解答在本书中大都使用类比法:“内存就好比你的办公桌,而存储器就好比你的文件柜。”就问题本身而言,它的确给出了满意的回答。但我对这个答案并不满意,主要原因在于这个答案将计算机的体系结构与办公室的结构等同起来,但是内存与存储器的区别其实是在逻辑层面上的,它体现着计算机体系结构的实际需求与存储器客观性能之间的矛盾,简单地说,就是我们找不到一种同时具备这两种存储器所有优点的存储媒介,这些优点就包括存储速度块、存储容量大、非易失性,等等。今天的计算机都采用“冯·诺依曼体系结构”——五十年来它一直是计算机体系结构的主导,而内存与存储器的区分也正是由于这种体系结构的不足所导致的。
还有一些计算机用户问我这样一个问题:“为什么Macintosh环境下的程序不能在Windows下运行?”我想立刻回答这个问题,但在我刚开口时就立刻意识到,这个问题涉及太多的技术细节,要想彻底搞清楚,那提问的这位朋友一定要和我来一次“茶话会”不可。
我希望这本书能够成为大家理解这些问题的“助手”,这种理解我希望不是抽象层面上的,而是具有一定深度的,甚至不逊于“电气工程师”和“程序员”的理解深度。我同时也非常希望大家能够理解:计算机是20世纪技术领域的“登峰造极之作”,它是一种值得欣赏、具有“美”学文化底蕴的人类伟大成果,这种“美”不需要明喻与暗喻的额外修饰。
计算机拥有与生俱来的层次化体系结构,这种结构的底层是晶体管,其顶层则是计算机显示器上所呈现的信息。从下向上分析该结构的每一层——这也是本书的编写结构——其实这一切并没有人们想象中的那么难。当然,现代计算机的内部结构不断推陈出新,但其本质上仍然是一些常见且简捷的操作组合。
尽管今天的计算机与25年前,以及50年前的计算机相比都复杂许多,但它们在本质上是完全一致的。学习技术发展史的重要意义正在于此:追溯的历史越久远,技术的脉络就变得越清晰。因此,我们需要做的就是确定某些关键的历史阶段,在这些阶段,技术最天然、最本质的一面将清晰可见。
在这本书中,我回溯了自己能找得到资料的计算机发展史。令我自己也感到惊讶的是,竟然一直追溯到了19世纪,甚至使用了早期的电报设备来演示计算机是如何构建的。至少从理论角度来看,本书的前17章中提到的所有设备,都可以利用已经存在了一个世纪的简单电子器件来构造。
这些古董级技术的使用令本书蒙上了一层怀旧的面纱。我要强调的是,Code是这样一本书,它永远不会被命名为诸如The Faster New Faster Thing或Business @ the Speed of a Digital Nervous System。在这本书中,“bit”定义在第68页,“byte”的定义则出现于第180页。晶体管直到第142页才被介绍,而且只是顺便提及而已。
在对计算机工作原理介绍方面,本书将会一直深入到本质(例如,只有少数书会去介绍计算机处理器的实际工作机制),但整本书的节奏是相对轻松的。在保证内容深度的基础上,我尽量使读者在学习的旅程中保持轻松愉悦的心情。
我最后还是要说,本书中没有那种装载着一节又一节“0和1数据”的“火车”图片。
Charles Petzold
2000年8月16日