馮·諾依曼在賓夕法尼亞大學

與莫奇利和埃克特共同研發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背後的多項概念申請專利,但是令他們感到氣餒的是,馮·諾依曼之前分發報告的做法在法律上已經將這些概念納入了公共領域。他們在為存儲程序計算機結構申請專利的過程中也遇到了重重困難,這是因為馮·諾依曼的報告被認為是這些想法的「在先發表」(美國陸軍的律師和法院最終都做出了這樣的裁定)。

《創新者:一群技術狂人和鬼才程序員如何改變世界》