计算思维史话

512 阅读1小时+

计算机科学不同于物理学,它实际上不能算是一门科学,因为它不研究自然物体。你可能会觉得它与数学有关,但其实也不然。计算机科学研究的是如何让某个东西去做某件事情。

——理查德·费曼

计算机科学是什么?

说我们身处于计算机革命之中,这已经是老生常谈了。计算机几乎影响到了我们生活的方方面面,而这仅仅是个开始。互联网改变了我们获取信息以及与他人接触的方式。我们可以看到,计算机不仅让汽车、飞机等交通工具变得更安全、性能更好,而且还为移动通信开辟了道路,现在智能手机的计算能力已经超过了10 年前最顶尖的计算机。本书讲述了所有这一切的来龙去脉,从计算机发展的早期(20 世纪中期)一直讲到互联网无处不在的今天,以及未来我们将走向何方。

计算机科学这一学术研究领域,取材于多个学科,例如数学和电子学。诚如诺贝尔物理学奖得主理查德·费曼所言,从物理学的意义来看,计算机科学不是一门科学,物理学研究的全是自然系统。计算机科学更类似于工程学,因为它研究的是人造系统,最终是让计算机做有用之事。三位早期的计算机先驱艾伦·纽厄尔(Allen Newell)、艾伦·佩里斯(Alan Perlis)和司马贺(HerbertSimon)喜欢用“科学”一词来描述他们所做的工作,但是他们提出了与费曼类似的定义,即计算机科学是一门研究计算机的学问。我们将会看到,计算机科学与复杂性管理有着千丝万缕的联系,因为现代计算机中包含着数以十亿计的活动元件。如此复杂的系统应该如何设计与建造呢?答案就是,依靠分层抽象思想与通用性原则。这两大主题构成了我们讨论计算机的基础。

借助于分层抽象思想,我们可以把计算机的设计分成多个层次,这样就可 以每次只专注于某一个层,而无须担心更底层上发生了什么。费曼在他的《费 曼计算学讲义》中将分层抽象思想与地质学和地层学的创立者威廉·史密斯 (William Smith)的工作(图1.1)做了类比。虽然计算机科学中所用的分层 方法并非因受到地质层的启发而产生,但费曼通过类比来解释计算机的分层结构,让我们知道,我们可以查看与理解每一层所发生的事情(图1.2)。这正 是我们理解计算机的关键所在。

图1.1 大不列颠地质图。它由威廉·史密斯绘制。史密斯曾参与过运河的勘测和开凿工作,他在工作中逐渐发现地层结构是有规律的。1815年,史密斯绘制了一张“改变世界的地图”,即第一张大尺寸的大不列颠地质图。史密斯是第一个阐述地层叠覆原理的人,他指出,地层是按照旧地层在下、新地层在上的顺序叠覆在一起的。这与计算机科学中的分层思想类似。借助这种分层思想,我们才得以设计出由数以亿计的组件所组成的复杂系统。

图1.2 海绵蛋糕。相比于地层而言,用海绵蛋糕类比分层思想更为适用,也更有吸引力。

通用性与通用计算机这个概念相关,通用计算机的概念由阿兰·图灵等人 提出。图灵提出了一个非常简单的计算机模型,即通用图灵机。它使用的指令 编码在一条被划分为一个个格子的纸带上,机器在从每个格子读取指令时遵循 一套非常简单的规则。通用图灵机的缺点是,在做复杂计算时效率极差,速度 非常慢。再者,针对某个特定问题,其实可以设计一台更为高效的专用机器。 然而,尽管专用计算机的运行速度可能更快,但通用图灵机的优点就是它的通 用性,即它可以进行专用计算机所能进行的任何计算。这就是著名的丘奇– 图 灵论题,它是计算机科学的奠基石之一。这个了不起的论题意味着,尽管你的 笔记本计算机比世界上最快的超级计算机慢得多,但是从原则上说,它与那些 超级计算机一样强大,从这个意义上说,任何超级计算机能进行的计算,你的 笔记本计算机都一样能做到。

那么,我们是怎么有了这么强大的笔记本计算机的呢?尽管“强大的计算机器”这一想法早在19 世纪早期就已经出现,但是今天的电子计算机只能追溯到第二次世界大战期间。

一次伟大的偶遇

关于计算的起源,有很多历史细节,讲解这些历史细节会大大偏离本书的 目标。这里就不赘述了,我们只讲几个主要的节点。首先,一切要从阿伯丁火 车站的一次偶遇说起。

1943 年,正值第二次世界大战期间,美军碰到了一个问题。他们位于马 里兰州阿伯丁试验场的弹道研究实验室对当时正在制造的新式火炮射表的计算 已经严重落后。每种新式火炮都需要为炮兵提供一套射表,指明开炮角度,以 便炮弹命中指定目标。这些弹道计算工作由麻省理工学院教授范内瓦·布什设 计的一台机器执行。这台机器叫微分分析机(图1.3),它是一台模拟设备, 类似于以前工程师使用的计算尺(计算尺后来被数字计算器所淘汰),但是建 造规模更大。这台机器拥有许多由电动机驱动的旋转盘与钢轴,它们通过金属 杆连接在一起。它必须通过人工设置才能求解特定的微分方程问题,整个设置 过程长达两天。这台微分分析机用来计算炮弹的基本弹道轨迹,然后这些计算 结果被交给一批负责计算的人,他们采用人工方式计算影响弹道的其他变量, 比如风速与开炮方向。

图1.3 微分分析机。它由范内瓦·布什设计,这是一台复杂的模拟计算机,它使用旋转盘与齿轮计算积分。整台机器体量庞大,几乎占满了一个房间。它连着几个由金属杆与齿轮连接在一起的集成单元。这台微分分析机属于美军马里兰州阿伯丁试验场的弹道研究实验室,被用于求解常微分方程,计算炮弹轨迹。

到1944 年夏天,计算这些射表所要耗费的时间太长,造成大量积压,致使火炮的研制与制造计划一再被推迟。这种局面似乎无望改变,因为即便弹道研究实验室早前已安排使用另一台位于宾夕法尼亚大学莫尔电气工程学院(简称莫尔学院)的微分分析机来使得计算能力翻番,他们每周收到的请求计算射表的数量仍超出其最大完成量的两倍之多。赫尔曼·戈德斯坦(Herman Goldstine)是一位年轻的陆军中尉,负责莫尔学院计算分站的工作。1944 年8月的一个夜晚,他出现在阿伯丁火车站月台,准备赶火车回宾夕法尼亚。

1943 年3 月,戈德斯坦首次听说有一种方案或许可以帮助弹道研究实验室解决这道难题。他在与莫尔学院的一位机械师的交谈中,了解到副教授约翰·莫奇利(B1.1)曾提议建造一台运算速度比微分分析机更快的电子计算机。莫奇利是一位物理学家,起初对气象学感兴趣。在研发天气预测模型的过程中,他很快就意识到,如果没有某种自动计算机的支持,这项任务根本无法完成。因此,莫奇利萌生了使用真空电子管制造一台运算速度更快的电子计算机的想法。

戈德斯坦是一位接受过训练的数学工作者,并不是工程师,因此他并没有注意到大家对这件事情的普遍看法。当时大家都认为,使用成千上万个真空电子管建造一台大型计算机是不可能实现的,因为真空管本身并不可靠。在与莫奇利交谈之后,戈德斯坦请他向弹道研究实验室提交一份建造这种真空管电子计算机的完整方案,以便申请资金支持。事情进展得很快,不到一个月,莫奇利就与莫尔学院最聪明的学生约翰·埃克特一道去阿伯丁介绍了他们的新方案。最后,他们如愿以偿拿到了项目赞助资金(起初为15 万美元),并于1943 年6 月1 日启动了Project PX 项目。最终,他们研制出了世界上第一台通用电子计算机,命名为“ENIAC”,这是电子数字积分计算机(Electronic Numerical Integrator And Computer)的首字母缩写。

B1.1 约翰·莫奇利(1907—1980)和约翰·埃克特(1919—1995)。两位是ENIAC 的设计师。随后他们与约翰·冯·诺依曼一起继续设计研制EDVAC,EDVAC 是一台存储程序计算机。但是不幸的是,由于在知识产权与专利方面产生了法律纠纷,他们未来的工作变得异常艰难。后来,莫奇利和埃克特离开了宾夕法尼亚大学莫尔学院,自己创办了公司, 制造了UNIVAC,UNIVAC 是美国第一台成功的商业计算机。

正当戈德斯坦等火车回宾夕法尼亚时,他看到了一位面熟的人——著名数 学家约翰·冯·诺依曼(B1.2)。战前,戈德斯坦在做数学研究的过程中曾听 过冯·诺依曼的几场讲座。后来戈德斯坦写道:

当时,我很鲁莽地走到这位名人面前,自我介绍并跟他聊起来。所 幸,冯·诺依曼对我很和蔼、友好,他总是想办法让眼前的人放松下来。 我们很快谈到了我的项目。当我说到我要制造一台每秒可以做333 次乘 法运算的电子计算机时,交谈的气氛一下子从幽默放松的状态变成了数 学博士学位的口头答辩现场。

这次会面之后不久,戈德斯坦就带领冯·诺依曼参观了莫尔学院,这样冯· 诺依曼才见到了ENIAC(图1.4),并与埃克特和莫奇利进行了交谈。事前, 对于这次访问,戈德斯坦还记得埃克特当时的反应:

他(埃克特)说,他可以通过冯·诺依曼问的第一个问题判断出他是不是真的天才。如果冯·诺依曼问的是机器的逻辑结构,那他就承认冯·诺依曼是个天才,否则就不是。当然,那正是冯·诺依曼提的第一个问题。

图1.4 原ENIAC 计算机的一部分,陈列在宾夕法尼亚大学。

冯·诺依曼之所以会对ENIAC 如此感兴趣,是因为当时他正在美国新墨 西哥州的洛斯阿拉莫斯国家实验室参与曼哈顿原子弹项目。洛斯阿拉莫斯国家 实验室的物理学家们在制造钚弹的计划上遇到了瓶颈。他们需要做复杂的计算, 才能为炸弹做出球形内爆透镜(图1.5)。透镜由位置精准的炸药形成,这些 炸药会产生球形压缩波,向内挤压处于球体中心的钚使其达到临界状态,从而 引起原子核发生连锁反应。冯·诺依曼请求由范内瓦·布什创立的科学研究与 发展局提供解决计算瓶颈的建议。科学研究与发展局让冯·诺依曼关注自己正 在资助的3 个自动计算机项目,或许可以从中找到他所需要的计算能力。在遇 到戈德斯坦之前,冯·诺依曼就已经推断科学研究与发展局推荐的这些项目不 会有任何帮助,包括由IBM 与哈佛大学的霍华德·艾肯(Howard Aiken)所 制造的机电式计算机Mark I。当时科学研究与发展局并未向冯·诺依曼提到军 方资助的ENIAC 项目,因为布什等人认为它纯粹是一个浪费钱的项目。因此, ENIAC 团队非常欢迎著名数学家冯·诺依曼的加入,接下来的几个月里,他 们进行了多次定期讨论。

图1.5 球形内爆透镜示意图。球形内爆透镜是用来启动钚弹中的原子核反应的。冯·诺依曼需要找到一台能够高效进行复杂计算的自动化设备,以便制作透镜。正因如此,他对ENIAC 产生了兴趣。

B1.2 约翰·冯·诺依曼(1903—1957)。他出生在布达佩斯一个富裕的银行家家庭,从匈牙利布达佩斯大学(现罗兰大学)获得了数学博士学位,另从苏黎世联邦理工学院获得了化学工程的学士学位,还从哥廷根大学赢得了奖学金。他曾与戴维·希尔伯特(David Hibert)一同工作,致力于希尔伯特野心勃勃的计划,即数学的公理化。1933 年,冯·诺依曼从普林斯顿高等研究院获得一个学术职位,成为该院最早的4 位教授之一。

冯·诺依曼在数学与语言方面非凡的天赋早在童年时就显露出来。后来在苏黎世联邦理工学院读大学时,他的老师乔治·波利亚(George Polya)这样评价他: 他是唯一一个吓倒我的学生。他思维异常敏捷。在苏黎世联邦理工学院我带着 一个专门面向优秀学生的研讨班,冯·诺依曼就是其中一员。我曾在班上提到过一 个定理,并补充说这个定理尚未得到证明,证明起来可能很难。冯·诺依曼一声不响,5 分钟之后,他举起手。我点了他的名,他便走到黑板前,写下了这个定理的证明过程。从那以后,我就开始怕他了。

冯·诺依曼是一位名副其实的博学家,他对博弈论、量子力学、计算机等诸多领域有着开创性的贡献。此外,他还主办过享有盛名的鸡尾酒派对,但是他的驾驶水平很糟糕:
冯·诺依曼开起车来既鲁莽又粗心。据说,他大概每年会毁掉一辆车。在普林 斯顿有一个十字路口,被人戏谑地称为“冯·诺依曼拐角”,因为他总是在这里闹出车祸。

ENIAC 最终于1945 年11 月建造完成,但当时战争已经结束,所以它没 能帮上战争什么忙。ENIAC 高2.5 米,长25 米,重达30 吨,包含约17 500 根真空管、70 000 个电阻器、10 000 个电容器、1500 个继电器和6000 个手动 开关,耗电量为174 千瓦,这么大的电量足可以为几千台笔记本计算机供电。 令人惊叹的是,仅仅50 年之后,这台“巨兽”的所有硬件都可以在单个芯片 上实现(图1.6)。幸运的是,最终的结果证明,真空管远比人们想象的更为 可靠。ENIAC 的运算速度令人赞叹,比艾肯制造的Mark I 要快1000 多倍。 采用十进制数,ENIAC 每秒可以做5000 多次加法或者300 多次乘法运算。尽 管在运算速度上ENIAC 远快于微分分析机和Mark I,但就基本操作而言,设 置ENIAC 来解决特定问题时仍然需要花费大约两天时间,操作员还需要专门 写一段程序来指定正确的操作顺序。

图1.6 芯片上的ENIAC。宾夕法尼亚大学的一个学生团队设计了这个芯片,用以纪念ENIAC 诞生50 周年。这个仅有0.5 平方厘米的芯片的运算能力与1946 年那台30 吨重的ENIAC一样。在人类历史进程中,没有其他任何技术可以达到这样的发展速度。

在为ENIAC 写程序时,编程者需要熟悉这台机器,对它的了解程度甚至要赶上它的设计师(图1.7)。运行程序时,操作者要拨动ENIAC 的开关来执行特定的指令,通过插电线来安排这些指令按正确的顺序执行。1997 年,6 位为ENIAC 编写程序的女士最终被推选为国际技术名人堂的伟大女性(图1.8)。

图1.7 ENIAC 的宣传海报。美军发布的海报把ENIAC 宣传成数学家和解谜者的工作机会。

图1.8 ENIAC 的第一批编程者。她们全部是女性,在过去,编程就是指设置计算机的所有开关并重新进行插线,烦琐的操作往往需要几天才能完成。

ENIAC 解决的第一个问题是由冯·诺依曼提出的。这个问题来自于他在洛斯阿拉莫斯国家实验室的工作,当时他们需要做一些复杂计算以对爱德华·泰勒(Edward Teller)提出的氢弹设计方案进行评估。初步的评估结果显示,设 计中存在着严重的缺陷。于是,洛斯阿拉莫斯国家实验室主任诺里斯·布拉德伯里(Norris Bradbury)就写信给莫尔学院,信中写道:“这些问题的复杂度超乎想象,没有ENIAC的帮助,我们就没法找到切实可行的解决方案。”

冯·诺依曼与存储程序计算机

在ENIAC 完成设计进行建造的过程中,埃克特和莫奇利有了一些闲暇时间,可以继续思考如何使用新出现的内存存储技术设计一台更好的计算机。他们发现,ENIAC 需要具备存储程序的能力,这可以帮编程者省下漫长的设置时间。大概在1943 年年末或1944 年年初,埃克特和莫奇利就提出了“存储程序计算机”的想法。可惜的是,他们没有抽时间把这个想法明确地写在下一代计算机的设计文档中,只是在建造ENIAC 的进展报告中只言片语地提到过这种想法。但是,毫无疑问,提出“存储程序计算机”这一想法的功劳至少有他们一份。冯·诺依曼第一次来到莫尔学院是在1944 年9 月,他听取了埃克特和莫奇利关于建造一台新计算机的简要介绍。这台新的计算机被命名为离散变量自动电子计算机(Electronic Discrete Variable Automatic Computer),EDVAC。根据莫奇利的说法,他们告诉了冯·诺依曼如下内容:
我们的基本想法是:整台EDVAC 将只有一个存储器(带有可寻址位置),它既可以用来保存数据,也可以用来保存指令。所有必需的算术操作都由一个算术单元执行(这点不同于ENIAC)。当然,还有一些设备用来处理输入与输出,它们在控制模块的控制下进行工作,就像其他模块那样。

在随后的几个月里,他们三人继续对EDVAC 的设计思想进行完善,最终 冯·诺依曼起草了一份长达101 页纸的报告,即《EDVAC 报告书一号草案》 (First Draft of a Report on the EDVAC)。尽管冯·诺依曼在这份草案上为另 外两位作者留出了署名位置,但不幸的是,戈德斯坦提前发表了这份报告, 而作者署名只有冯·诺依曼一人。这份报告中,首次描述了存储程序计算机 的逻辑结构,即现在广为人知的“冯·诺依曼体系结构”(图1.9)。

图1.9 约翰·冯·诺依曼纪念邮票。该邮票由匈牙利发布,邮票上包含冯·诺依曼的肖像及其计算机体系结构草图。

报告中提到的第一个重大的抽象概念是把计算机硬件与软件区分开来。在 硬件层面,冯·诺依曼没有深入讲解建造计算机的硬件技术细节,而是从计算 机要执行的基本逻辑功能入手描述了计算机的整体结构。执行这些功能的真实 硬件可以由多种电子元器件实现,比如机电开关、真空管、晶体管或者现代的 硅芯片。所有这些不同的元器件都能完成相同的计算功能,不过运行性能有所 差异。通过这种方式,我们就可以把如何按特定顺序装配逻辑组件以解决特定 计算的问题从硬件细节中分离出来。这种职责划分(硬件设计与机器编程)最 终催生出了两个全新的工程学科,即计算机体系结构与软件工程。

对于计算机硬件,冯·诺依曼把它们划分成5 个功能部件(图1.10):中央运算单元(CA)、中央控制单元(CC)、内存(M)、输入设备(I)和输出设备(O)。中央运算单元执行所有的算术与逻辑运算,中央控制单元组织要执行的操作序列。中央控制单元是总指挥,它从内存获取指令与数据,并提供时钟与控制信号,以此协调计算机各个部件的工作。中央运算单元的任务是执行指定的运算。内存应该既可以保存程序,也可以保存数据,这样它就能够访问到其中的程序指令或数据。输入和输出设备可以直接从计算机内存读取指令或数据,也可以把它们直接写入内存中。最后,冯·诺依曼建议EDVAC 使用二进制运算,而不是ENIAC 的十进制运算。在第2 章中我们将会看到,在采用了以2 为基数的二进制之后,算术与逻辑运算的电子实现将会变得更简单、更高效。

图1.10 冯·诺依曼体系结构。所有采用这种体系结构的计算机均由输入设备、输出设备、内存和处理器组成。其中,输入设备(现在一般是键盘或鼠标)用来向计算机输入数据。信息经过二进制数编码之后,保存在内存中。处理器从内存获取其中的信息,解码之后,执行指定的计算。最终计算结果被放回内存中,然后输出设备(一般是显示器、打印机甚至是扬声器)从内存读取计算结果进行输出。处理器由两个部件组成:中央控制单元(CC)与中央运算单元(CA),即现在的算术逻辑单元(ALU)。

“冯·诺依曼体系结构”跟图灵提出的通用性有什么关联呢?第二次世界 大战之前,图灵在普林斯顿大学求学时,冯·诺依曼深入了解过图灵在英国剑 桥大学读书时发表的一篇关于理论计算机的开创性论文。在冯·诺依曼体系结 构中,内存、输入设备与输出设备从逻辑上等同于通用图灵机的纸带,中央运 算单元与中央控制单元则对应图灵机的读写部件。这就意味着,采用冯·诺依 曼体系结构建造的计算机能够做所有的计算。后来的计算机工程师们不需要提 出新的体系结构,他们可以直接优化冯·诺依曼体系结构设计,提高其性能。 事实上的确有一些方法,比如使用多处理器以及设计并行计算机,可以消除所 谓的“冯·诺依曼瓶颈”(所有指令都是一条接一条顺次读取与执行的),以此来改进这种设计。

走向全球的EDVAC

《EDVAC 报告书一号草案》的邮寄名单上最初只有32 人,但是关于这份报告的新闻很快在世界各地广泛传播开来。第二次世界大战结束以后,科学家们可以再次走出国门,去世界各地旅行。到1946 年上半年,已经有好几位英国的访客访问过莫尔学院。第一位访问莫尔学院的是一位来自英国的新西兰人,名字叫莱斯利·科姆里(Leslie Comrie,B1.3)。科姆里一直对天文学与科学计算感兴趣,第二次世界大战期间,他领导一个科学家小组为盟军空军做轰炸瞄准表之类的计算。出乎意料的是,在参观完ENIAC 之后,莫尔学院允许他把《EDVAC 报告书一号草案》的一份副本带回英国。回到英国后,科姆里拜访了剑桥大学的莫里斯·威尔克斯(Maurice Wilkes)。威尔克斯是一位数学物理学家,战后他退伍回到剑桥大学,试着创办一个可独立发展的计算机实验室。在回忆录中,威尔克斯写道:
1946 年5 月中旬,刚从美国旅行回来的科姆里来见我,把一份文档递给我,这份文档就是冯·诺依曼代表莫尔学院EDVAC 研制小组撰写的《EDVAC 报告书一号草案》。科姆里要在圣约翰学院逗留一晚,允许我第二天早晨再还给他。要是现在,我会复印一下,但是那个时候办公室没有配备复印机。所以,我只好熬夜读完整个文档。文档中明确指出了研制现代数字计算机所要遵循的原则:存储程序(数据与指令存在同一个存储器中)、按顺序执行指令、使用二进制开关电路做运算与控制。读完之后,我立刻意识到这种方案是可行的,并下定决心研制计算机。

B1.3 莱斯利· 科姆里(1893—1950)。天文学家,数学家。他在1946 年访问了莫尔学院, 将《EDVAC 报告书一号草案》的副本首次带回了英国。

莫尔学院的另一位早期访客是约翰·沃默斯利(John Womersley),他来自 英国国家物理实验室。沃默斯利在工作中使用的是微分分析机,参观过程中, ENIAC 的超高性能给他留下了深刻的印象。回国之后,沃默斯利便着手在自己 所在的实验室创办一个计算机项目,并且聘请图灵来领导这支团队。图灵阅读了 冯·诺依曼撰写的报告之后,设计出了一台存储程序计算机,命名为ACE,即自 动计算机(Automatic Computing Engine)的首字母缩写(图1.11 和图1.12),这里选用“Engine”这个词是为了向查尔斯·巴贝奇致敬。

图1.11 图灵设计的ACE。它是一款独具特色的计算机,相比于3 个月前冯·诺依曼发表的报告,图灵所做的设计更为详细。ACE 有很多创新之处,比如三地址指令、可变长块传送和位级操作,但是它很难进行编程,这是这种独特设计结构未能对计算机体系结构产生重大影响的原因之一。

图1.12 1950 年11 月28 日的《伦敦晚报》报道了计算机ACE 的运算速度。

ACE 的设计报告这样描述这台计算机的设计理念:
本设计旨在让用户在设置机器以解决新问题时几乎只需做一些文字工作。除此之外,要按照这些文字工作准备一盒穿孔卡卡片,并让它们穿过一个与机器相连的读卡器。即使我们想突然从计算氖原子的能量级切换为枚举阶为720 的所有群,也完全不需要做内部改动。其中的原理可能很令人费解,毕竟没有人会觉得一台机器竟然能做到这么多事情!其实,我们只要知道机器能做一些简单的事情就可以了,它只不过是将一些传递给它的、用机器可理解的标准格式写的命令执行出来而已。

这不是最后一个低估“文字工作”难度的描述。当时所谓的“文字工作”,正是我们今天所说的“为计算机编程”。

1946 年,经过莫尔学院新院长霍华德·潘德(Howard Pender)的斡旋,在美国陆军装备部、美国海军研究所的共同资助下,莫尔学院开设了存储程序计算机暑期班(图1.13)。有三四十人受邀参加,他们主要来自美国一些企业、大学和政府机关。在战时的同盟国中,英国是唯一受邀参加的国家。莫尔学院这次计算机的课程从7 月到8 月共持续了8 周。除了埃克特、莫奇利之外,艾肯和冯·诺依曼也作为客座讲师出席。课程的第一部分主要讲数值计算与ENIAC 的细节。直到课程快结束时,他们才获得安全许可,讲师们得以向与会者展示EDVAC 设计的一些细节。当时威尔克斯也接到了潘德院长的邀请,尽管资金与签证有所耽误,他还是觉得应该去瞧瞧,反正“晚到一阵子也未必会错过什么”。参加完最后两周的课程,威尔克斯回国前参观访问了哈佛大学与麻省理工学院。在哈佛大学,威尔克斯见到了艾肯的Mark I 和Mark Ⅱ机电式计算机;在麻省理工学院,他见到了一台新式的布什微分分析机。随后他离开了美国,并且愈加确信,这些大机器都没有前途,只有EDVAC 报告中所提到的存储程序计算机才是未来的方向。回到英国剑桥大学后,威尔克斯便着手启动了一个建造电子延迟存储自动计算机(Electronic Delay Storage Auto-matic Calculator)的项目,EDSAC,以此向EDVAC 表达敬意。

图1.13 宾夕法尼亚大学莫尔电气工程学院,ENIAC 诞生于此。

EDSAC 于1949 年研制成功并投入运行。这些早期计算机所面临的主要 问题是缺少合适的存储设备来保存二进制数据。对此,埃克特提出,使用充满 水银的管子存储来回传播的声波来表示数据。威尔克斯成功地为EDSAC 制造 了这样一个水银延迟线存储器。在威尔克斯设计的EDSAC 的基础上,莱昂斯 公司经过修改研制出了世界上第一台商用计算机,即LEO(Lyons Electronic Office),并且成功将其应用到了他们经营的莱昂斯拐角客栈连锁店,后来, 威尔克斯又提出了微程序设计的思想,从此可以使用软件而非硬件来实现复 杂操作。微程序设计思想极大降低了硬件复杂度,成为计算机设计的主要原 则之一。

而此时的美国,埃克特和莫奇利由于与宾夕法尼亚大学之间产生专利纠 纷,最后他们从莫尔学院辞职。然后,他们努力寻求资金支持,打算制造一台 商用计算机。

在克服了种种困难之后,埃克特和莫奇利最终成功设计并制造出了通用自动计算机(UNIVersal Automatic Computer),即著名的UNIVAC。随着战争的结束,冯·诺依曼回到了普林斯顿大学,并马不停蹄地筹集资金为普林斯顿高等研究院建造一台EDVAC 架构的计算机。冯·诺依曼从EDVAC 项目组请来了戈德斯坦和亚瑟·伯克斯(Arthur Burks),还有天才工程师朱利安·毕格罗(Julian Bigelow),帮助他设计普林斯顿高等研究院的计算机。1947 年,冯·诺依曼与赫尔曼·戈德斯坦一起写了第一本关于软件工程的教科书,书名叫《电子计算仪器的规划和编程问题》(Planning and Coding Problems for an Electronic Computing Instrument)。

正当计算机的商业化在美国开始发展的时候,英国的两个团队首次论证了存储程序计算机的可行性。在曼彻斯特,弗雷迪·威廉姆斯(Freddie Williams)和汤姆·基尔伯恩(Tom Kilburn)根据冯·诺依曼提出的计算机体系结构,于1948 年6 月研制出一台原型机,命名为Baby(图1.14)。1948 年6 月21 日,人类在一台电子计算机上运行了第一个存储程序。1949 年5 月,威尔克斯在剑桥大学成功研制出了EDSAC。毫无疑问,它是世界第一台拥有强大计算能力的存储程序计算机。

图1.14 汤姆·基尔伯恩、弗雷迪·威廉姆斯与Baby。这台计算机只有7 条指令,主存储器为32×32 位,使用阴极射线管实现。

本章重要概念
■ 计算可以自动进行
■ 分层抽象
■ 存储程序原则
■ 存储与处理分离
■ 冯·诺依曼体系结构

炮兵在开炮之前计算炮弹弹道。

计算机的早期历史

一个酝酿已久的想法

现代电子计算机的起源可以追溯到20 世纪40 年代的EDVAC,但是关于建造强大计算机器的想法由来已久,可以追溯到19 世纪早期一个名叫查尔斯·巴贝奇的英国人。

查尔斯·巴贝奇和差分机

第一个由政府资助并超支的计算机项目就是查尔斯·巴贝奇在1823 年尝试建造的差分机。这个项目起源于有“航海家圣经”之称的《大不列颠航海天文年鉴》(British Nautical Almanac)数表中含有大量的错误。这些错误的来源有两个,一是计算错误,二是复印与排版错误。这些错误导致表格的准确度下降,被普遍视为引发众多海难的原因。有人做了一项研究,从这些数表中任意抽取40 卷,发现勘误表就列出了3000 多条错误,有些勘误表甚至是专门针对旧勘误表的错误而做的。

查尔斯·巴贝奇(B1.4)是一位数学家,1812 年,他还在剑桥大学读书的时候,就萌生了使用机器来计算数表的想法。关于这一点,他在自传中写道:
有一天晚上,我坐在剑桥大学分析学会的办公室里,神情恍惚地看着面前一张打开的对数表。一位会员走进来,瞧见我的样子,大声喊道:“喂!巴贝奇,你在做什么梦啊?”我指着对数表回答说:“我在想,或许可以用机器把这些表计算出来。”

B 1.4 查尔斯·巴贝奇(1792—1871)。他是一位富有的银行家之子,在剑桥大学攻读数学,他通过从法国和德国引入新的符号和数学方法来解决英国数学中牛顿微积分的体系遗留问题。巴贝奇因在计算机研制方面的开创性工作而闻名, 同时他也是一位多产的发明家。他的发明包括检眼镜、排障器、地震仪以及由压缩空气推动的潜艇等。但是,巴贝奇最终没能把计算机成功制造出来,抱憾离世。

几年后的一天, 巴贝奇与一位天文学家朋友约翰· 赫歇尔(John Herschel)正在查看天文表。两人面前都有一堆文件,包含着对这些天文表的计算结果。其实当时并没有计算机这种机器,这里所说的计算员指的是那些严格按照指定运算步骤采用手工方式做普通计算的人。两堆文件包含同一批表的计算结果,这些结果经由不同的人计算,最终结果应该是一致的。巴贝奇与赫歇尔把计算结果逐行对比,发现了许多错误。整个对比过程又慢又枯燥,巴贝奇最后抱怨说:“真希望上帝赐给我一台万能的蒸汽机,把这些计算都给做了。”

这次经历促使巴贝奇在接下来几年设计了一台数学机器——差分机,这台机器能够使用“恒差分”的数学方法对天文表与航海表进行计算。然而,得出正确的计算结果只能解决数表中的一部分问题,因为在复印和排版这些计算结果的过程中,也很容易产生错误。为了消除这些错误,巴贝奇对他的差分机做了一些改动,让它在金属板上记录计算结果,这样人们就可以直接使用这些金属板进行印刷了。到了1822 年,巴贝奇制造出了一台可运转的小原型机,并向英国皇家学会提请建造一台更大尺寸的差分机,即全尺寸差分机。英国皇家学会建议他从英国政府寻求资金支持,最终,巴贝奇史无前例地从政府那里获得了1500 英镑的财政支持。1500 英镑在当时大致是个什么水平呢?多伦·斯沃德(Doron Swade)在他的《差分机》中写道:“以1814 年一位男士的收入为例,如 果一年能挣300 英镑,那么他就能让自己的妻子以及几个孩子过上十分舒适的生活。”可见在1822 年,这对政府来说是一笔非常大的投资。

然而,建造大型差分机需要设计数千个高精度齿轮与轮轴。为此,巴贝奇先与一位技术精湛的技术工程师约瑟夫·克莱门特(Joseph Clement)一起花费大量时间设计出更好的机床来生产成百上千个一模一样的零件。不幸的是,当时英国的制造技术正处于个人手工制造与大规模生产的转型阶段。因此,哪怕是像螺丝这 样简单的零件,制造工厂也无法进行标准化生产。克莱门特手下有一位工程师,名叫约瑟夫·惠特沃斯(JosephWhitworth),他在后来英国制造业广泛采用的“惠氏标准螺纹”制造中扮演着重要角色。

到1832 年,整个项目的启动已经过去10 年,耗费了大约10 000 英镑,巴贝奇和克莱门特才完成了机器的一小部分,即打印部件。它很好用,可以打印出精度达到6 位小数的计算结果。但是此时,巴贝奇与克莱门特之间发生争执,整个项目陷入停滞状态。自此,机器制造工作再也没有恢复启动。1842 年,这个项目正式取消,它总共花掉了英国政府17 000 英镑。相比之下,罗伯特·史蒂芬森(Robert Stephenson)建造一台可以推动轮船航行到美国的新蒸汽机总花费还不到800 英镑。

第一篇对巴贝奇设计的差分机进行详细介绍的文章出现在1834 年,由富有传奇色彩的人物戴奥尼索斯·拉德纳(Dionysius Lardner)撰写,以《巴贝奇的计算机》(Babbage’s Calculating Engine)为题发表于《爱丁堡评论》(Edinburgh Review)上。一名来自斯德哥尔摩的印刷商、出版商、记者乔治·舒兹(George Scheutz)阅读了这篇略带赞美的长篇文章之后,毅然投入到差分机的研究之中。舒兹没有办法了解巴贝奇差分机的各种操作细节,于是自己制作了一台机器。1843 年夏天,舒兹与儿子爱德华·舒兹(Edvard Scheutz)制造出了一台可实际运转的机器,包括打印部件。他们不知道巴贝奇会对他们的机器持何种态度,并因此忧心忡忡,但实际上,巴贝奇在观摩之后大为赞赏,并帮助他们推销机器。1855 年,舒兹父子制造的差分机在巴黎大博览会上获得金奖,随后在1857 年,他们把一台机器以1000 英镑的价格卖给了纽约阿尔巴尼达德利天文台主任本杰明·古尔德(Benjamin Gould),古尔德致力于把达德利天文台打造成美国的格林尼治天文台。古尔德博士使用这台差分机计算一组用于描述火星轨道的表格。不过,遗憾的是,1859 年,古尔德被解雇,这台舒兹差分机最 终被捐献给了史密森尼博物馆。

舒兹父子制造的另外一台机器被英国登记总局买走。威廉·法尔(William Farr)是该机构的首席统计师,他想使用这台机器自动制作预期寿命、年金、保险费、利息支付表格,以便制作1864 年的《英国寿命统计表》(English Life Table, 图1.15)。该机器由伦敦的唐金公司负责搭建,用于编制《英国寿命统计表》的项目。然而,由于这台机器不具备巴贝奇差分机那样精细的防错机制,因此需要有人持续不断地进行照看。最后,整个《英国寿命统计表》项目的600 页的印刷表格中仅有28 页完全由机器制作,另有216 页表格由机器部分参与制作。因此,这台计算机器失败了,它既没能带来任何明显的效益,也没能节约什么成本。后来,舒兹父子破产,产生这种恶果的部分原因就是他们对这种计算机器的过度迷恋。

图1.15 1864 年制作的《英国寿命统计表》封面,其中一部分表格由制表机制作。制表机的设计与制造受到了巴贝奇差分机的启发,但是它缺少防错机制,这严重影响了机器的实用性。

另一方面,巴贝奇的儿子亨利·巴贝奇(Henry Babbage)继承了大部分未曾投入使用的差分机零件,也就是克莱门特制造的那些零件。尽管许多零件已经毁坏,但亨利还是凑到了足够的零件,组装出6 台小型样机。亨利把这些样机分别寄往几所大学,包括英国的剑桥大学、伦敦大学学院、曼彻斯特大学以及美国的哈佛大学。20 世纪30 年代晚期,霍华德·艾肯发现了亨利寄到哈佛大学的小型样机。后来艾肯表示,他仿佛倾听到了来自巴贝奇本人的教诲。

直到1991 年,英国科学博物馆馆长多伦·斯沃德和他的团队才根据查尔斯·巴贝奇(图1.16)的设计制造出一台可以实际运转的全尺寸差分机模型。这有力证明了在巴贝奇那个年代,制造这种机器是可能的,但是需要投入大量的工程工作(图1.17)。

>*图1.16 查尔斯·巴贝奇200 周年诞辰纪念邮票。*

图1.17 多伦·斯沃德与差分机II。1991 年,为了纪念查尔斯·巴贝奇诞辰两百周年,多伦·斯沃德和他在伦敦科学博物馆的同事根据巴贝奇的原始设计,制造出了一台可运转模型——差分机II。这些计算机史学家与工程师竭尽全力地保留了它的原真性,制造时使用了原始设计图、材料,以及巴贝奇所处时代的制造精度。他们把这项工作视为巴贝奇项目的延续,但这时距离巴贝奇时代过去150 多年了。差分机II 大约由8 000 个齿轮组成,总重约4.5 吨。它通过一个手摇柄进行操作,图中是斯沃德正在摇动手柄的情形。设计中包含了许多故障保险机制,比如机械式奇偶校验,可以用来防止出现错误,即便震动导致某些齿轮发生紊乱,这些保险机制也能有效地发挥作用。齿轮是按照能以可控方式断裂的标准制造的,这等同于一根机械式保险丝。然而,需要指出的是,这台机器设计得太超前了。它的计算精度达到了44 位二进制数。这个精度实在是太高,即使是今天,我们所使用的许多机器计算精度也只有32 位二进制数。这台机器甚至还可以用来计算七阶多项式,而今天我们常用的也只是三阶多项式。我们至今还不清楚巴贝奇为什么会觉得他需要这么高的精度。如果这台机器稍微简单一些,他就不需要使用这么多齿轮,制造起来也就容易得多。巴贝奇把差分机看作整个计算过程不可或缺的一部分,整个计算过程就是他设想的用来产生数字的工厂。

分析机

巴贝奇不是什么深谋远虑的大师。他没能完成大型差分机的制造工作,并且不明智地建议政府放弃研制尚未完成的原始机器,转而建造一台功能更强大、更通用的机器,他称之为分析机。本质上,差分机是一种特殊用途的计算机器,巴贝奇意识到他能设计一种更为通用的机器,这种机器可以用来执行各种算术或逻辑 运算。在1834 〜1836 年,巴贝奇构思出一种功能更强大、更通用机器的想法,并且不断对设计进行修改,直到他去世为止。这种分析机从来没有付诸实际制造,只是一项思想实验。尽管如此,其设计中蕴含的许多原则仍能在现代计算机中找到踪影。特别是巴贝奇在设计中将用于执行各种算术运算的机器部件与用来存储数据(处理前或处理后的数据)的机器部件分离开来这一点尤甚。巴贝奇借用纺织业中的术语,把机器上的这两个部件分别称为“计算工厂”(现在叫中央处理单元或CPU)与存储数据的“仓库”(对应于现在的计算机内存)。这种分离就是冯·诺依曼在那篇著名报告中所提出的现代计算机组织原则的基本特征。

巴贝奇在设计中的另一项重要创新是通过穿孔卡来提供机器指令,现在我们把这些指令称为“程序”。巴贝奇通过穿孔卡来“指挥”计算机的灵感来自于一台自动织布机(图1.18),这种用穿孔卡控制机器的想法最早由法国人约瑟夫·雅卡尔(Joseph Jacquard,B1.5)提出,并将其用来控制织布机。这些穿孔卡片串在一起,组成条带,然后穿过一个能够感知孔洞模式的机械设备进行读取。这些织布机能够根据穿孔卡的指示织出十分复杂的图像与图案。巴贝奇在伦敦举办过一次著名的晚宴,期间他向人们展示了一幅用丝织成的雅卡尔肖像。这幅肖像一共用了大约10 000 多个穿孔卡控制织布机的生产,其精致程度令人称奇。

图1.18 雅卡尔织布机。穿孔卡上的指令用来控制织布机织出复杂图案。织布机的“程序”由一连串带有孔洞的穿孔卡组成,每个孔洞的位置都是特定的。穿孔卡的顺序以及孔洞的位置决定着织布机提针与落针的时机,以控制织布机织出指定的图案。

B1.5 约瑟夫·雅卡尔(1752—1834)和菲利普·德拉塞尔(1723—1804)。图为两人出现在里昂的壁画《里昂人》上。德拉塞尔是一位著名的设计师,在丝绸业知名度很高。雅卡尔使用穿孔卡为自动织布机提供控制指令的做法给巴贝奇带去灵感,于是巴贝奇就有了使用穿孔卡为分析机编程的想法。

为了设计分析机,巴贝奇写了6000 多页笔记,画了数百张工程图表,用来准确说明分析机的运转原理。然而,他并未公开发表任何关于分析机的科学论文,公众只是通过他于1840 年在都灵为意大利科学家所做的演讲中才了解到他建造分析机的雄心壮志。这次演讲内容由意大利著名的年轻工程师费德里科·路易吉(Federico Luigi)详细地整理了出来。费德里科后来成为意大利军队的一名将军,再后来出任意大利首相。

埃达·洛夫莱斯

故事讲到这里,该聊聊埃达·洛夫莱斯(B1.6)了。她是浪漫主义诗人拜伦勋爵的唯一婚生女。埃达第一次见到巴贝奇是在巴贝奇组织的一次晚宴上,那是在1833 年,当时埃达17 岁。之后,不到两个星期,她和母亲就接到巴贝奇的邀请,请她们参加他的“计算机”样机介绍会。由于父亲的原因,埃达从小就学习数学。对那个时代的女性来说,这并不常见。在与巴贝奇第一次见面之后不久,埃达就结了婚,并有了孩子。1839 年,她写信给巴贝奇,请他为自己介绍一位数学老师。巴贝奇向她推荐了奥古斯塔斯·德·摩根(Augustus De Morgan)。德·摩根是一位著名的数学家,在代数学与逻辑学等方面有过重要的贡献。埃达对自己的数学才能很自信,她在给巴贝奇的信里说:“我学得越多,想进一步学习的欲望就越强烈。”德·摩根曾经给埃达的母亲写过一封信,从信件内容可以看出,他对埃达数学才能有一定程度的肯定。在信中,德·摩根说埃达的数学才能能够让她成为“一名出色的数学研究员,也许还能成为一流的数学家”。

B1.6 埃达·洛夫莱斯(1815—1852)。图为机器人绘制的肖像。埃达的父亲是英国浪漫主义诗人拜伦勋爵,他在埃达接受数学教育方面起到了重要作用。埃达是第一个用英文论述巴贝奇分析机巨大潜力的人,并且被认为是世界上第一位 计算机程序员。她也是第一个指出分析机除了执行数值计算也能处理符号的人。她还写道:“或许有一天机器可以自己写出诗作。”

在一位共同好友、科学家查尔斯·惠斯通(Charles Wheatstone)的建议下, 埃达把费德里科·路易吉的论文翻成英文出版。巴贝奇建议她在论文中添加 一些自己的阅读笔记。巴贝奇对埃达的这项工作很感兴趣,于是将自己在都 灵演讲时用过的材料与示例给了她,并帮她的笔记草稿写了注解。巴贝奇还 为埃达写了一个全新的例子,即使用分析机计算伯努利数(一系列复杂的有 理数)。埃达之前没见过这个例子,但是看过之后,她很快就掌握了计算步骤, 并指出了巴贝奇计算中的一个错误。埃达详述了巴贝奇的思想,并用简洁明 了的方式加以表述,从她笔记中的两个例子可以印证这一点。

分析机最显著的特征就是引入了雅卡尔发明的控制方式,即通过穿孔 卡来控制要在织物中编织的复杂图案。这种控制方式提供了具备扩展能力 的机制,这一点让分析机有机会成为抽象代数的得力助手。差分机与分析 机的差异正在于此,差分机不支持这种方式。更形象一点说:分析机为代 数学编织图案,就像雅卡尔织布机为织物编织花朵、叶片一样……

许多人认为,机器的职责就是提供数字形式的结果,因此其处理本质 必须是基于算术与数字的,而非基于代数与分析。这种想法是错的。分析 机能够准确地排列与组合它的数值数量,就像它们是字母或其他任何通用 符号一样。事实上,如果做好了相应的条件,分析机就可以产生代数形式 的结果。

巴贝奇肯定没有公开或详细阐述任何使用分析机做代数运算的想法。还 有一个富有争议的话题来自于埃达对人工智能与计算机的论述:分析机不能 自主地发明任何东西,它只能按照我们的命令去做一些事情。后面我们会讨 论计算机是否具备可识别的智慧。

密码破译机

说起计算机的早期历史,就一定要提到英国布莱切利庄园里密码破译 员的开创性工作以及第一台商用计算机的研发过程。

布莱切利庄园、恩尼格玛密码机、巨人机

第二次世界大战期间,英国布莱切利庄园中的数学家和科学家们一直在寻求某种自动机器来帮助他们完成破解密码这项绝密工作。图灵和他在剑桥大学的导师马克斯·纽曼(Max Newman,B1.7)深入参与设计和建造这样的自动机器来帮助破解德军的加密通信系统。图灵参与的是解密工作,研究著名的恩尼格玛密码机加密过的信息。在此之前,波兰情报机关已经开始研究恩尼格玛密码机(图1.19),在波兰人研究成果的基础上,图灵参与研制出一台机电式机器,名叫炸弹机(Bombes),它可以用来确定恩尼格玛密码机的参数设置。这种机器最早在1940 年投入使用,为保护北大西洋护航队免遭德国U 型潜艇的攻击做出了巨大贡献。

图1.19 布莱切利庄园中波兰密码破译员纪念碑。他们的工作对研制用来破解恩尼格玛密码的炸弹机至关重要。

B1.7 马克斯·纽曼(1897—1984)。他是英国剑桥大学一位才华横溢的数学家与密码破译专家。阿兰·图灵从纽曼在剑桥大学的讲课中获得灵感,发明了著名的图灵机。第二次世界大战期间,纽曼在布莱切利庄园工作,他带领的团队主要工作是破解经过洛伦兹密码机加密过的情报。他们制造了一台名为希思·罗宾逊的机器,专门用来破解洛伦兹密码。巨人机就是基于这台机器制造出来的。

柏林的德军最高指挥部采用了一种更加复杂的密码机,名为洛伦兹密码机。纽曼带领团队研制出一种名叫希思·罗宾逊的机器。希思·罗宾逊(Heath Robinson)是一位漫画家的名字,以绘制异想天开的机器而闻名。这样起名是想表明制造一台用于破解洛伦兹密码的设备是可行的。随后又出现了ULTRA 项目,目标是建造一台全电子化的希思·罗宾逊机器,取名为“巨人”(图1.20)。尽管它不是一台通用计算机,但它由1500 个电子管组成,还配备着带有光学传感器的纸带读取器,具备每秒处理5000 个电传打字机字符的能力。这部机器由英国邮政局多利斯山研究实验室的一名工程师汤米·弗劳斯(Tommy Flowers,B1.8)设计与建造,并于1943 年12 月投入使用,比ENIAC 还早两年多。“巨人”的伟大成就之一就是使两位盟军统帅艾森豪威尔和蒙哥马利确信,希特勒坚信盟军的登陆舰队将从多佛登陆。密码破译机在战时的巨大贡献被丘吉尔认可,对此,丘吉尔说道:“下金蛋的鹅从不咯咯叫。”

图1.20 巨人计算机。它是一台密码破译机,直到第二次世界大战结束多年之后,人们才知道它的存在。它由英国邮政局工程师汤米·弗劳斯在1943 年设计与建造。

B1.8 汤米·弗劳斯(1905—1998)。他对计算机以及第二次世界大战期间的密码破译工作做出了巨大贡献,直到战争结束后,人们才从布莱切利庄园中记录密码破译活动的秘密文件中知道这个人。弗劳斯制造了一台名叫巨人的电子密码破译机,它可以用来破译德军最高指挥部所采用的洛伦兹密码机的加密系统。之前用来破译恩尼格玛密码的炸弹机采用的是机电设备,弗劳斯决定使用电子管来取代它们。最初也有一些反对的声音,因为大家普遍认为电子管不是十分可靠。巨人机由大约1500 个电子管组成,它是世界上第一台专用的电子计算机。针对计算机运转时产生的巨大热量,弗劳斯这样写道:“啊,潮湿寒冷的英国冬日凌晨2 点的可贵温暖!”

密码破译机的主要任务是从纸带上读取文本,然后找出加密设备中12个转子的可能设置。巨人机在1943 年12 月首次证明了自身价值,为盟军准备诺曼底登陆提供了非常宝贵的信息。巨人机和炸弹机这些自动密码破译机对于加速战争的结束做出了重大贡献(图1.21)。

图1.21 布莱切利庄园密码破译机纪念碑。碑文是“我们也服役过”。在纪念碑的背面用莫尔斯电码写着丘吉尔的评价:“我最绝密的情报源。”

战争结束时,丘吉尔下令把这10 台巨人机的多数予以销毁。弗劳斯在多利斯山实验室亲手把设计图纸投入火炉。这样一来,英国政府就可以向其他各国政府兜售仿恩尼格玛机,并且拥有破译这种机器所发送的信息的能力。截至20 世纪50 年代晚期,有两台巨人机一直为英国政府位于切尔滕纳姆的通信总部所用。随着数字通信时代的到来,布莱切利庄园战时活动不再需要保密。20 世纪70 年代,有关巨人机的信息开始公开。一份1945 年关于破译洛伦兹密码机信号的秘密报告在2000 年得以解密,其中包含与巨人机有关的描述:
令人遗憾的是,我们不可能把仍在运转的巨人机的魅力诉诸笔墨。它体积庞大、十分复杂,拥有不可思议的运行速度,薄薄的纸带绕着闪亮的滚轮;纯机械式的逐字解码的能力(曾有一个新手以为被戏弄了);打印机无须人工协助,就能将大量内容完美无误地打印出来……

战争期间,英国政府隐瞒了自己在计算机研发方面取得的成就,这使得以后所有国家(包括英国自己)的计算机研制工作都采用了冯·诺依曼存储程序计算机的设计思路。

LEO:第一台商用计算机

在EDSAC 的基础上,英国的莱昂斯公司研制出了世界上第一台商业应用(非数值计算)电子计算机LEO。令人颇感意外的是,莱昂斯公司是一家餐饮公司,在英国各地经营着茶馆和客栈(图1.22)。他们在伦敦提供英式高级茶点,女服务员统一着装、被称为“穿行者”。餐饮业需要大量员工来确保每天配送的烘焙食品数量是正确的,而且还需要人工处理相关的收据与发票。以现在的视角来看,我们很清楚这些工作都可以由计算机代劳。但是在那个年代,能够意识到这些原本被设计来计算炮弹弹道的计算机,在与科学无关的商业应用领域中有用武之地,绝对需要这个人拥有超乎常人的远见卓识。

图1.22 莱昂斯公司在英国各地经营着茶馆和客栈,出人意料的是,他们最先将计算机用在商业计算中。

LEO 项目在约翰·西蒙斯(John Simmons)的远见卓识下诞生。他是莱昂斯公司组织与方法部的一位数学家,也是计算机自动化的热情倡导者。1947 年5 月,莱昂斯公司派人赴美国考察计算机用于商业的可能性。不久,西蒙斯意识到,英国本土就有一位完美的拍档,西蒙斯在剑桥大学找到了莫里斯·威尔克斯,希望他能帮助莱昂斯公司找到解决方案。1949 年5月,EDSAC 首次试运行成功,随后西蒙斯得到董事会的许可,开始建造LEO。

工程师约翰·平克顿(John Pinkerton,B1.9)被指派至这个项目来设计LEO,他大概算是世界上第一个工业计算机工程师了吧。西蒙斯组建了一支优秀的制造团队,对EDSAC 的设计进行改进,让它可以兼顾那些特殊的用户需求。他们的商业业务与科学计算有很大不同,一般输入和输出非常少,但是运算需要运行很长时间。LEO 支持多种输入与输出方式,并且拥有比EDSAC 更大的存储空间。此外,对于不间断运行的商业应用而言,机器运行的可靠性至关重要,所以平克顿在这台机器中采用了28个可更换的电子管组,这样出故障的电子管组可立即更换。LEO 在1951年年末问世,并在11 月代替了员工使用的“面包店估值法”。LEO 能够根据面包店投入的原料、人工和耗电成本,计算产出的面包、蛋糕、馅饼产品的价值。它使用制作成本价格和利润率来计算派送到各个茶馆、食品店、饭店的产品价值。LEO 还可以用来计算库存产品的价值。LEO 计算机公司成立于1954 年,一直致力于这台机器的升级换代工作,直至20 世纪60 年代早期与英国电气公司合并。1968 年,它又合并了其他两家公司,成立了新的国际计算机有限责任公司(International Computers Ltd.),这家公司持续盈利了几十年。

B1.9 约翰· 平克顿(1919—1997)。图为他与计算机LEO 的合影。平克顿是第一批计算机工程师。他在EDSAC 的基础上经过一系列改进,设计与建造了第一台商用计算机LEO。LEO 最初是莱昂斯公司订制的,用于自动记录公司的产品,并把烘焙好的食品递送到公司下属的各处茶馆中。LEO 在1951 年投入使用。

其他先驱

计算机的研制工作不仅出现在美国和英国,在其他国家(比如德国、苏联、澳大利亚)也有很多先驱从事数字电子计算机的研制工作。

康拉德·楚泽与Z 系列计算机和Plankalkül 编程语言

康拉德·楚泽(B1.10)是德国广为人知的计算机开创者。在第二次世界大战爆发前的艰苦岁月里,他孤身一人从事计算机的设计研究工作。1941 年,楚泽制造出了一台可运行的机电式计算机Z3,这台机器的结构特征已经成为计算机设计师做设计时要遵守的重要原则。不同于ENIAC,楚泽设计的计算机采用了二进制编码(数据与指令),这可以大大降低设计的复杂度。Z3 是第一台自动且由程序控制的电磁式计算机,早于霍华德·艾肯的Mark I。1943 年之前,楚泽一直在研制新的计算机Z4,并于1945 年建造出Z4。为了防止Z4 像Z3 那样被炸毁,楚泽带着Z4 离开了柏林,四处转移,最后把它藏在了巴伐利亚阿尔卑斯山一个小村庄的马厩里。楚泽还开发了一种编程语言Plankalkül(意即“微积分计划”)。在这种语言中,楚泽引入了赋值与循环的概念,这些概念已经成为现代编程语言的重要组成部分。战后,楚泽于1949 年创立了一家名叫Zuse KG 的计算机公司,并于1950 年把Z4 卖给了瑞士苏黎世联邦理工学院。他的公司继续研制新 型计算机,最终制造出了电子管通用计算机Z22R,并成功把56 台Z22R卖给了各个公司与大学研究机构。1967 年,楚泽的公司被西门子公司收购。

B1.10 康拉德· 楚泽(1910—1995)。德国计算机科学家。他在第二次世界大战期间独立设计与研制了Z 系列计算机。直到最近,他的开创性工作才广为人知。1946 年,IBM 公司获得了他的专利权。楚泽设计的编程语言Plankalkül 在他有生之年未曾实现。2001 年,德国柏林自由大学的一支团队为这门语言编写了一个编译器。

谢尔盖·阿列克谢耶维奇·列别捷夫与MSEM 和BESM

谢尔盖·阿列克谢耶维奇·列别捷夫(Sergei Alekseyevich Lebedev,B1.11)是苏联研制计算机的先驱。战后,在他的带领下,一个秘密的电子实验室在基辅郊外成立,开始研制苏联第一台电子计算机。1951 年12 月,他们研制出一台可运行的计算机,这标志着苏联自主研制计算机的开端。他们研制的计算机既有大型计算机,像BESM、URAL 和Elbrus,也有小型机,比如MIR 与MESM等。这些计算机的名字在苏联之外并不为人知,但是在苏联的科学与工程领域,它们备受尊敬。BESM 是苏联计算机的支柱,大约生产了350 台。BESM-1 建造于1953 年,这个系列的最后一个型号BESM-6 建造于1966 年。然而,1967 年,政府决定复制IBM 的计算机。这就标志着苏联自主研发计算机时代的结束,这项决定让苏联许多计算机研制先驱感到失望。

B1.11 谢尔盖· 阿列克谢耶维奇·列别捷夫(1902—1974)。苏联计算机工业的创始人。他既是一位才华横溢的工程师, 也是一位狂热的登山家,曾经攀登过欧洲最高峰厄尔布鲁士峰。1996 年,已经去世22 年的列别捷夫获得了由美国电气和电子工程师协会(IEEE)授予的查尔斯·巴贝奇奖章。

有关苏联计算机的细节很少,因为大部分文档从未公开过。一般认为,20 世纪50 年代与60 年代,苏联计算机的研制水平远远落后于西方国家。我们难以想象,苏联在缺少强大计算能力的情形下仍然在空间探索、军事防御、科学技术方面取得了令人瞩目的成就。伦敦科学博物馆的资深策展人多伦·斯沃德在1992 年访问过西伯利亚,以谋求一台苏联的BESM-6 作为伦敦科学博物馆的收藏。在BBC 四频道的一次采访中,斯沃德被问到关于列别捷夫的贡献和MESM 的问题时,他是这样回答的:
MESM 是苏联自主研发的吗?我认为几乎完全是肯定的。它的性能相当不错吧?当然。BESM 性能也不错吧?我觉得当时BESM 在性能上赶不上美国的同代计算机。但是,作为一个主力机型,它对苏联各个研究领域产生了深远影响,比如空间研究计划、军事研究、科学研究等,我们可以把它看作现代计算机史上最有影响力的计算机。

特里沃·皮尔西与CSIR Mark I

特里沃·皮尔西(Trevor Pearcey,B1.12)出生于英国,第二次世界大战期间从事把高等数学应用到雷达研制方面的工作。1945 年,皮尔西移居澳大利亚,途中访问了哈佛大学与麻省理工学院,并参观了霍华德·艾肯的Mark I 与布什的微分分析机。1946 年,皮尔西进入澳大利亚科学与工业研究理事会位于悉尼大学的无线电物理学部门工作。在美国参观期间,他了解到机器的局限,也看到了使用电子管建造高速数字计算机的潜力。1947 年年末,皮尔西与悉尼大学毕业的电子工程师马斯顿·贝尔德(Maston Beard)开始合作设计计算机,皮尔西负责理论研究,贝尔德负责硬件研究。虽然皮尔西在1948 年年末访问过英国,并参观过曼彻斯特大学的Baby和剑桥大学的EDSAC,但是他觉得没有必要根据它们修改自己的设计。后来,皮尔西声称CSIR Mark I“完全是本土制造的,离英国与美国的主流研发有10 000 公里远”。

在早期计算机研制过程中,最大的挑战之一是计算机存储技术的研发。使用水银延迟线为CSIR Mark I 设计存储系统的重任落到了工程师雷格·瑞安(Reg Ryan)及其团队的肩上。CSIR Mark I 以1000 赫兹运行,其延迟线存储器能存储768 个字,每个字20 位长。到了1949 年年末,他们的计算机能够运行一些基本的数学运算,可以称得上是第一批可运行的存储程序计算机之一。1951 年,CSIR 更名为CSIRO(联邦科学与工业研究组织),计算机也随之更名为CSIRO Mark I。1951 年8 月,澳大利亚召开了第一次自动计算机会议,CSIRO Mark I 首次演示播放了计算机生成的音乐,即战时最流行的《布基上校进行曲》(Colonel Bogey)。1954 年,CSIRO 项目正式结束,CSIRO Mark I 在1955 年被运送到墨尔本大学。墨尔本大学于1956年设立了新的计算实验室,采用CSIRO Mark I 作为工作母机,并将之重命名为CSIRAC。这台计算机一直运行了8 年,其中大约只有10% 的时间用来进行维护。

B1.12 特里沃·皮尔西(1919—1998)。他出生于伦敦,毕业于帝国理工学院,获得物理和数学学位。第二次世界大战期间,他致力于研制雷达系统。后来移居澳大利亚,在悉尼大学负责设计与建造CSIR Mark I,这是世界上最早使用电子管研制的计算机之一。