与莫奇利和埃克特共同研发ENIAC的陆军联络官赫尔曼·戈德斯坦上尉恰好也在阿伯丁火车站的月台上,正在等候搭乘一列北行的火车。虽然他之前从来没有见过冯·诺依曼,但他还是马上认出了对方。戈德斯坦向来都非常仰慕天才人物,因此能够遇到这位数学领域的明星确实让他感到兴奋不已。“于是我走向了这位世界闻名的人物,先做了一下自我介绍,然后开始与他攀谈,我知道这样做是相当失礼的,”他回忆道,“不过幸好冯·诺依曼是一个热情友善的人,他会尽量让身边的人感到放松。”当冯·诺依曼了解到戈德斯坦正在做的事情之后,双方交谈的气氛开始变得紧张起来。“当冯·诺依曼知道我的工作内容是研发一台能够在每秒完成333次乘法运算的电子计算机之后,我们本来轻松愉快的对话气氛变得更像是一场数学博士学位的论文答辩。”50
在戈德斯坦的邀请下,冯·诺依曼在几天之后来到宾夕法尼亚大学观摩正在建造的ENIAC。普雷斯伯·埃克特迫不及待想要见到这位著名数学家,而且他已经想好了一个测试来看看他是不是一个“名副其实的天才”:他的第一个问题会是关于这台机器的逻辑结构的吗?事实上这正是冯·诺依曼提出的第一个问题,因此他也赢得了埃克特的尊重。51
ENIAC可以在一个小时之内求解一道偏微分方程,而哈佛马克一号则需要花费80个小时。这点深深地打动了冯·诺依曼。然而,为不同的任务重新编程ENIAC将需要数个小时的时间,冯·诺依曼意识到当需要处理大量各不相同的任务时,这将会是一个严重的缺点。在1944年,莫奇利和埃克特一直在全力思考在计算机内部储存程序的方法。在吸收了来自哈佛大学和贝尔实验室等各个地方的想法之后,冯·诺依曼可以帮助他们以全新的高度来思考存储程序计算机。
冯·诺依曼后来成为ENIAC团队的顾问,他坚持计算机程序应该与数据保存在同一个存储器中的想法,因为这样可以在程序运行的过程中轻易地对其进行调整。他的研究工作开始于1944年9月的第一个星期,当时莫奇利和埃克特详细地向他介绍了这台机器,并分享了他们打算在下一代机器中采用“带有可寻址位置的存储设备”的想法,这种设备可以同时作为数据和编程指令的存储器。戈德斯坦在这周写给上级军官的信中汇报道:“我们计划制作一种集中式的编程设备,常规程序会以编码的形式保存在上文提到的储存设备中。”52
冯·诺依曼与ENIAC团队进行了一系列的会议,其中有四场正式的研讨会在1945年春季举行。他在这些会议当中起到了相当重要的作用,以至于它们的会议记录上都写着“冯·诺依曼会议”这个标题。在会议上,他会在黑板前面来回踱步,并采用苏格拉底式的问答方法引导讨论。他会将吸收到的想法加以完善,然后将它们写在黑板上面。“他会像一位教授那样站在会议室前面和我们一起讨论,”琼·詹宁斯回忆道,“我们会向他指出我们现有的问题,而且我们总是非常谨慎地确保我们提出的是一些根本性的问题,而不只是机械方面的问题。”53
虽然冯·诺依曼乐于接纳新的观点,但是他的聪明才智总是让人不敢反驳他的看法,不过詹宁斯有时会这样做。有一天,她对冯·诺依曼的其中一个观点提出了异议,他用难以置信的目光看着她,不过他在稍作思考之后还是接受了她的观点。冯·诺依曼会认真听取别人的意见,同时非常擅长让自己表现得谦逊,这点体现了他的个人魅力。54 “他是一个非常聪明和自信的人,但同时他在向其他人提出自己的想法时会表现得十分谦逊和腼腆,这确实是一种奇特的性格组合,”詹宁斯说道,“他会焦躁地在房间里来回走动,然而他在展示想法的时候会给人这样一种感觉,他就像是在为自己提出的异议或者更好的想法而向对方道歉。”
冯·诺依曼特别擅长构思计算机编程的基本原理。计算机编程在当时仍然是一项含义模糊的技术,自从埃达·洛夫莱斯在一个世纪之前为分析机写下伯努利数的生成步骤以来,这项技术一直都没有取得明显的进步。他意识到建立一个简洁的指令集需要严谨的逻辑和准确的表达。“他非常透彻地解释了为什么我们需要或者不需要某个特定的指令,”詹宁斯说道,“这是我第一次真正认识到指令代码的重要性,并了解到它们背后的逻辑和指令集必须含有的要素。”这点正是他博学多识的明证,这种天赋让他能够抓住一个新想法的本质。“冯·诺依曼拥有在问题中找出重点的能力,我在其他天才身上也注意到了这个特点。”55
冯·诺依曼意识到他们所做的不仅仅是提升ENIAC的重新编程效率,更重要的是他们正在实现埃达的愿景——创造一台可以根据任意符号集执行任意逻辑任务的机器。“由艾伦·图灵构思,并由约翰·冯·诺依曼实现的存储程序计算机打破了表达意义的数字和执行任务的数字之间的区别,”乔治·戴森写道,“我们的宇宙也因此被彻底改写。”56
另外,对于将数据和编程指令混合在相同存储器的方式,冯·诺依曼比其他同事更快地领会到它的一个重要特性:这种存储器应该是可擦写的,也就是我们现在所说的读写存储器。这就意味着存储程序的指令不是只能在程序运行结束之后才能更改,而是可以在程序运行过程的任意时刻进行调整。这种计算机可以根据中间得出的结果调整自己的程序。为了实现这点,冯·诺依曼设计了一种可变地址(variable-address)的程序语言,它能够在程序运行的过程中轻易地切换子程序指令。57
宾夕法尼亚大学的团队提议美国陆军按照这些思路建造一台改进版的ENIAC。它原来的十进制系统将会被二进制取代,同时会采用水银延迟线存储器,而且它的大部分结构都符合后来定义的“冯·诺依曼结构”。在上呈美国陆军的计划书中,这台新型机器被命名为电子离散变量自动计算器(Electronic Discrete Variable Automatic Calculator)。不过这支团队越来越多地把它称为计算机,因为它的功能要远远超出一台计算器的能力范围。其实采用哪种说法都不重要,因为大家都把它简称为EDVAC。
约翰·冯·诺依曼(1903—1957),照片摄于1954年
赫尔曼·戈德斯坦(1913—2004),照片约摄于1944年
普雷斯伯·埃克特(中)和CBS(哥伦比亚广播公司)的沃尔特·克朗凯特(右)正在观看UNIVAC生成的大选预测结果,照片摄于1952年
对于在1944年到1945年年初形成的存储程序计算机概念,后来的专利审判、学术大会、书籍和相互矛盾的历史文献都在激烈争论谁是它的最主要贡献者。例如,上文提到的说法将构思存储程序概念的功劳主要归于埃克特和莫奇利,而冯·诺依曼的贡献则在于认识到计算机在运行过程中调整存储程序的重要性,以及创造出一种可变地址的编程功能来实现这种能力。然而,比追寻想法的出处更重要的是认识到在宾夕法尼亚大学出现的创新是另外一个协作创造的例子。冯·诺依曼、莫奇利、戈德斯坦和詹宁斯等人在这里共同探讨各种想法,并从这里的工程师、电子学专家、材料科学家和程序员身上得到了宝贵的意见。
我们大多数人都曾经在小组头脑风暴会议中讨论过创造性的想法。也许在讨论结束的几天之后,会议的参加者已经记不清谁是第一个提出某个想法的人了,这时我们可以体会到想法的形成更多是来自团队成员之间的相互影响,而不是依靠某位成员给出一个完全原创的概念。创意的火花并非源自突如其来的灵感,而是多种想法相互碰撞的结果。来自贝尔实验室、洛斯阿拉莫斯、布莱切利园和宾夕法尼亚大学的创新都是通过这种方式诞生的。冯·诺依曼的一个长处是拥有主导这种协作创新流程的天赋——他善于提问和聆听,他会温和地提出试探性的建议,清晰地表达自己的观点,最后对各人的想法进行汇总整理。
冯·诺依曼习惯于收集和整理想法,而且不太在意这些想法的准确来源。这种做法虽然有助于他构思和完善EDVAC沿用的概念,但有时也会惹怒那些更加关心功劳(或者知识产权)归属的人。他曾经宣称通过团队讨论得出的想法是不可能确定归属的。据说埃克特在听到这番话之后的回应是:“真的吗?”58
冯·诺依曼的做法带来的好处和弊端在1945年6月开始显现出来。在宾夕法尼亚大学忙碌工作了10个月之后,他主动提出将他们的讨论内容以书面形式汇总起来。他在开往洛斯阿拉莫斯的长途列车上开始撰写这份报告。
冯·诺依曼将这份手写的报告寄给了宾夕法尼亚大学的戈德斯坦。他在报告中以翔实的计算数据描述了存储程序计算机的结构和逻辑控制方式,以及“将所有存储器看成是单个组件”的好处。埃克特对冯·诺依曼的做法产生了质疑,觉得这似乎是在利用其他人帮助完善的想法来完成一篇论文。戈德斯坦安慰道:“他只是想在自己的头脑中理清这些思路,而他采取的做法是向我写信,然后让我们在回信中向他提出理解不当的地方。”59
冯·诺依曼在报告中留出了空白的位置,用于插入来自其他人的引用内容,而且他的文字中从来没有出现过“EDVAC”这个缩写。不过当戈德斯坦将这份报告打印成文的时候(最终长度达到101页),他将自己的偶像列为报告的唯一作者。他在这份报告的标题页上写着:“关于EDVAC的报告初稿,由约翰·冯·诺依曼所作”。戈德斯坦使用油印机印出了24份报告副本,并在1945年6月底分发了这些副本。60
这份“报告初稿”具有非常高的使用价值,它引领了未来至少10年的计算机发展。冯·诺依曼决定撰写这份报告,并允许戈德斯坦发布它的做法反映了学术型科学家(尤其是数学家)的开放性,他们更倾向于发表和宣传研究成果,而不是尝试占有知识产权。“我当然希望尽自己最大的努力将这方面的内容保留在公共领域(从专利的角度来看)。”冯·诺依曼向一位同事解释道。他后来提到了自己之所以要写这份报告的两个目的:“帮助阐明和整合EDVAC研发团队的想法”,以及“促进高速计算机制造技术的发展”。他说自己并非试图占有这些概念的所有权,他从来没有为它们申请过专利。61
埃克特和莫奇利却不这么认为。“要知道我们最后已经把冯·诺依曼看成是一个倒卖想法的贩子,他的首席推销员正是戈德斯坦,”埃克特后来说道,“冯·诺依曼所做的是窃取他人的创意,并且试图将(宾夕法尼亚大学)摩尔学院的工作成果据为己有。”62 琼·詹宁斯也同意这种看法,她后来抱怨戈德斯坦“热心地支持冯·诺依曼的错误主张,他实际上是在帮助这个人夺取埃克特、莫奇利和摩尔学院团队其他成员的工作成果”。63
莫奇利和埃克特曾经尝试为ENIAC和EDVAC背后的多项概念申请专利,但是令他们感到气馁的是,冯·诺依曼之前分发报告的做法在法律上已经将这些概念纳入了公共领域。他们在为存储程序计算机结构申请专利的过程中也遇到了重重困难,这是因为冯·诺依曼的报告被认为是这些想法的“在先发表”(美国陆军的律师和法院最终都做出了这样的裁定)。