电子计算机发明于 三大计算机之父

时隔很久,科学家中的通才这个系列,直到今天才写完最后一篇文章,带大家一起了解一下冯·诺依曼的开挂人生。

前两篇文章的传送门:

聊聊科学家中那些“不专一”的通才:牛顿

例数那些“不专一”的通才科学家:麦克斯韦

令人眼花缭乱的操作

《量子力学的数学基础》(1926)、《计算机与人脑》(1958)、《经典力学的算子方法》、《博弈论与经济行为》(1944)、《连续几何》(1960),如果告诉你这些书都是一个人写的,你有什么感觉?估计大部分人会觉得,这人是为了评职称也太拼了吧,咋啥玩意儿都敢写啊……

上面开个玩笑,其实这些著作确实是冯·诺依曼一个人写的,但他可不用担心自己的职称,人家30出头就已经是普林斯顿高级研究院的六名特聘教授之一,而且还是其中最年轻的一位,要知道,这里面还有爱因斯坦哦。所以冯·诺依曼他可不是一般的天才,看看下面照片中的发量就知道厉害了吧!

电子计算机发明于 三大计算机之父

对他的评价,比较全面和客观的是:20世纪最重要的数学家之一,在现代计算机、博弈论、核武器等领域内的科学全才,被后人称为“计算机之父”和“博弈论之父”。怎么样,咱们本文把他归作科学通才之列,名副其实吧。接下来,咱就逐一谈谈他在上述各方面的天才贡献。文章太长,还是老规矩:分为上下两部分,这篇是上半部分。

现代计算机之父

他最为人熟知的贡献,就是对现代计算机的基础性贡献,他提出了计算机制造的两个基本原则,即采用二进制逻辑和计算机的存储程序工作原理,他还把计算机划分为五个部分(运算器、控制器、存储器、输入设备、输出设备),这被称为冯·诺依曼体系结构,直至今天的计算机仍然在使用,所以我们一般都称他是“现代计算机之父”。接下来就详细说说这段历史。

我们一般都知道,ENIAC机是世界第一台电子计算机。它于1946年2月14日在费城开始运行。但ENIAC机存在两个明显的缺点:它没有存储器,而且使用布线接板进行控制,光搭这些线就够一群人摆弄一整天,所以它总体计算效率肯定就高不了哪去。因此,ENIAC机研制组显然也很头大,迫切的想改进计算机的结构。

另一边,在1944年,诺伊曼正参加原子弹的研制工作,该工作涉及到极为困难的计算(算是黎明前的黑暗吧,次年第一颗原子弹就试爆成功了)。在对核反应过程的研究中,要对一个反应的传播做出“是”或“否”的回答。解决这一问题通常需要通过几十亿次的数学运算和逻辑指令。他所在的洛·斯阿拉莫斯实验室为此聘用了一百多名女计算员,用台式计算机从早算到晚,还是太慢了。

冯·诺依曼在一次极为偶然的机会中知道了ENIAC计算机的研制计划,就这么机缘巧合的投身到这一宏伟的事业中,成就了他传奇一生中最大的丰功伟绩。

电子计算机发明于 三大计算机之父

冯·诺依曼和奥本海默在第一台计算机前合影

1944年夏的一天,正在火车站候车的诺伊曼遇到了正在参与ENIAC计算机研制的美国弹道实验室军方负责人戈德斯坦,并同他进行了短暂的交谈。交谈中,诺伊曼迅速对这一研制计划产生了浓厚的兴趣,他意识到了这项工作所具有的深远意义。

之后,冯·诺依曼就由这位戈德斯坦中尉介绍,参加了ENIAC机研制小组,便带领着一批富有创新精神的年轻科技人员,向着更高的目标进军。加入之后,冯·诺依曼便显示出他雄厚的数理基础知识,和探索问题和综合分析的天才,在他们共同讨论的基础上,诺依曼以手写的方式撰写了一份报告——《EDVAC报告书的第一份草案》,这是计算机发展史上一个划时代的文献。

  • 在这份报告中,冯·诺依曼明确了新机器由五个部分组成,包括:运算器、控制器、存储器、输入和输出设备,并描述了这五部分的职能和相互关系,进而系统地介绍了制造电子计算机和程序设计的新思想。
  • 不仅如此,冯·诺依曼还根据电子元件双稳工作的特点,建议在电子计算机中采用二进制。报告提到了二进制的优点,并预言,二进制的采用将大大简化机器的逻辑线路。时间证明了诺伊曼预言的正确性。如今,逻辑代数的应用已成为设计电子计算机的重要手段,在EDVAC中采用的主要逻辑线路也一直沿用着,只是对实现逻辑线路的工程方法和逻辑电路的分析方法作了改进。

只是出于一些原因,这份报告只署了冯·诺依曼一个人的名字,这个事情后来引起了很多争议,原因也众说纷纭。其中到底发生了什么事并非本文重点,在此略过。但有一点是确定的,此份报告中所提出的计算机新架构,被称为“冯诺依曼体系架构”,一直沿用至今!


扩展阅读1:计算机到底是谁发明的……

图灵和冯诺依曼,说起来都是泰山北斗式的人物,而且又都对计算机有着开创性的贡献,但是这二位天才到底谁才是计算机的真爸爸啊……

电子计算机发明于 三大计算机之父

一句话来说,图灵是从理论上阐述了计算机的可能性,他应该称为计算机科学之父;而冯诺依曼确定了现代计算机的基本架构和技术路线,他应该被称作现代计算机之父

而且根据一个不可考的传闻(至少我没找到具体的出处),冯诺依曼在谈到他的理论与构思时,谦虚地说,这些理论与构思的基础来自于英国数学家图灵和布尔的思想。虽然这个说法非常的谦虚,但确实也是事实。图灵在1936年发表的一篇论文《论可计算数及在密码上的应用》(On Computable Numbers, with an Application to the Entscheidungsproblem)中,严格地描述了计算机的逻辑结构,首次提出了计算机的通用模型——“图灵机”,并从理论上证明了这种抽象计算机的可能性。

可惜当时几乎没有多少人出席了图灵的演讲,而当演说结束后,只有区区两个人询问是否可以转载他的文章。在那个时代,图灵的想法被认为过于激进,从而无法被绝大多数人所接受。而时至今日,通用图灵机的理念——通过改变软件来实现多重任务执行的抽象计算机——早已被确定为当代计算机的前身,是从第一代阴极管阵列到今天我们所用的各类电脑产品的共同“祖先”。


计算理论

我们知道20世纪的很多顶级科学家都思考过有关生命起源于演化的问题,我在从平衡到远离平衡,有关生命如何从零到一的畅想(上)这篇文章中较为详细的梳理了近代科学历史上有哪些人做了哪些有重大意义的贡献。作为天才中的天才的冯诺依曼当然也不例外,只是他的出发点有点与众不同。

电子计算机发明于 三大计算机之父

在完成了EDVAC计算机的设计项目之后,他的兴趣转向了对计算本身的探索,与图灵类似,他也想发展一套信息处理的一般性理论,而且在这个过程中,他最早最深刻的意识到生命与计算之间的联系。相对于计算机之父的称号,冯诺依曼对“计算”理论本身的研究与贡献听起来好像没那么耀眼,但我认为它的意义却更加深刻和深远,下面从两个方面来向大家介绍:

A)自复制自动机

受到生命繁殖的启发,冯诺依曼对“如何才能实现自我复制”这件事产生了兴趣。在20世纪40年代晚期,冯·诺依曼已经初步解决了这问题。当时他在加利福尼亚州的海克森研讨班上做了一系列演讲,要解决的核心问题就是“机器要怎样才可以自我复制?”他认为,任何能够自我繁殖的系统,都应该同时具有两个基本功能:

  • 第一,它必须能够构建某一个组成元素和结构都和自己相同的下一代;
  • 第二,它需要能够把对自身的描述传递给下一代。

他把这两个部分分别叫做“通用构造器”和“描述器”,而描述器又包括了一个“通用机器”和保存在通用机器能够读取的介质上的描述信息。你看,他感兴趣的点和思考问题的思路都是和计算机及其具体实现相关的对吧,也就是说,冯诺依曼其实希望把自我繁殖功能做成一个自动机。

这样,只要有合适的原料,通用构造器就可以根据描述器的指示,生产出下一台机器,并且把描述的信息也传递给这台新机器。随后,新机器启动,再进入下一个循环,然后就子子孙孙无穷匮也了。

要知道,冯诺依曼做出这些思考可是在遗传物质发现之前哦!几年后的1953年,沃森和克里克发现DNA完全符合冯·诺依曼所提出的两个要求。因此从这个观点出发,生命本身就是一台自动机。不仅如此,冯诺依曼还提出了如何构建一个能够自我复制的机器的完整设计!而冯诺依曼对于自我复制机器的研究所用的工具,就是下面要说的:元胞自动机。

B) 元胞自动机

刚才说的冯诺依曼体系架构,其实是一个中心化的计算体系,整个计算机系统的核心就是CPU,程序存储在存储器中供CPU顺序执行。相比而言,这里说的这个元胞自动机是一个去中心化的计算系统,它一般由大量的“元胞”组成,每个“元胞”的状态受其周围元胞的状态调控,而且所有的元胞都遵循同样的规则来决定自身的状态。

但看似如此简单的规则,哪怕组成系统的元胞再多,也应该是死气沉沉的吧。错!元胞自动机系统所能呈现出来的整体行为是极为复杂和丰富的,即便它们不存在任何中央控制单元。如果你想了解更多,请看下面的扩展阅读部分里的简单介绍:


扩展阅读2:元胞自动机

灯泡阵列:元胞自动机的一种实现,摘自《复杂》一书

上图所示的灯泡阵列可以用来理解元胞自动机的概念,每个灯有“开”和“关”两种状态,每个灯与周围的8个灯相连(边上的灯会认为与另一边的相连,比如最左边的灯,会认为与最右边的灯相连。这样所有灯都与8个灯相连)。初始阶段,部分灯开部分灯关。元胞自动机像CPU一样一步一步地进行计算。

每个元胞自动机有一个规则,来说明每个灯怎么根据之前周围8个灯及自己的状态决定自己下一步时的状态(比如一种规则可以是:采用邻域占多数的状态。图中即展示了这种规则下下一步此元胞自动机会怎么变化)。


同样,我在从平衡到远离平衡,有关生命如何从零到一的畅想(下)这篇文章中的最后一部分,也提到了一个简化的二维元胞自动机:生命游戏的内容,大家有兴趣可以参阅,在这里就不展开了。

冯诺依曼证明了它的元胞自动机等价于通用图灵机,也就是说,元胞自动机同样具有通用计算的能力!它是结构完全不同于冯诺依曼架构的另一种计算机!有意思吧,计算机架构就分为“冯诺依曼”架构和“非冯诺依曼架构”,结果“非冯诺依曼架构”中最重要的一种,还是由冯诺依曼提出的…… 所以计算机管他叫父亲,不冤吧。

因为对计算和计算机的贡献实在太耀眼,而且也比较相关,因此我就放在本篇中一起谈了,在下一篇中,将会和大家聊聊冯诺依曼在其它领域的贡献,同样光芒四射。