從查爾斯·巴貝奇開始,發明計算機的男性都將主要的精力放在了機器的硬件上。然而,率先看到編程的重要性的卻是在「二戰」期間參與計算機工作的女性——就像是曾經的埃達·洛夫萊斯一樣。她們研究出了編碼計算機指令的方法,這些指令可以控制硬件執行的操作。這種軟件內含的神奇配方可以讓計算機實現一些令人意想不到的功能。
最具傳奇色彩的一位編程先驅當屬格雷斯·霍珀,一位勇敢、果斷而且富有人格魅力的美國海軍軍官。她曾經在哈佛大學為霍華德·艾肯工作,後來進入了普雷斯伯·埃克特和約翰·莫奇利創辦的公司。格雷斯·霍珀的本名是格雷斯·布魯斯特·穆雷(Grace Brewster Murray),於1906年出生於一個位於曼哈頓上西區的富裕家庭。她的祖父是一位土木工程師,他經常會帶她到紐約各處進行實地考察。她的母親是一位數學家,父親是一位保險經理。她大學畢業於瓦薩學院(Vassar),並取得了數學和物理學的雙學位,隨後進入耶魯大學繼續深造,於1934年取得數學博士學位。2
不過她的教育經歷可能並沒有你想像中的那麼不同尋常。她是畢業於耶魯大學的第十一位數學女博士,第一位是在1895年畢業的。3 女性在20世紀30年代取得數學博士學位其實不算是一件特別罕見的事情,尤其是對於一位家庭條件優越的女性來說。事實上,下一個時代的女性反而更難取得數學博士學位。在20世紀30年代,獲得數學博士學位的美國女性數量為113人,占美國同期數學博士畢業生總數的15%。到了20世紀50年代,獲得數學博士學位的美國女性只有106人,僅佔總數的4%(這種情況到了21世紀的前10年大為改觀,總共有1 600位女性在此期間獲得數學博士學位,相當於總數的30%)。
在嫁給了一位比較文學教授文森特·霍珀(Vincent Hopper)之後,格雷斯回到了瓦薩學院任教。她的教學方式跟大部分的數學教授都不一樣,她非常著重培養學生的寫作能力。在概率論課程的第一課上,她講解了一道自己最喜歡的數學公式[1] ,並要求學生們寫出一篇關於這條公式的文章。她會根據文章內容的清晰度和寫作風格進行評分。「我在給這些文章打分的時候會看到一些反對的意見,說他們上的是數學課,而不是英語課,」她回憶道,「然後我就會跟他們解釋,如果無法和其他人進行交流,那麼他們學習到的數學知識將沒有用武之地。」4 她一直都擅長於將科學問題(例如彈道、流體流動、爆炸和天氣模式)轉化為數學公式,然後用平實的語言表達出來。這項天賦對她日後成為一位優秀的程序員起到了很大的幫助。
到了1940年的時候,格雷斯·霍珀開始對自己的生活感到厭倦。她沒有生小孩,婚姻生活也日漸平淡,而且數學教師的工作也沒有她想像中的充實。她從瓦薩學院請假來到紐約大學,與那裡的知名數學家理查德·科朗特一起研究偏微分方程的求解方法。這項研究一直持續到1941年12月日本襲擊珍珠港的時候。美國的參戰為霍珀帶來了一個改變人生的機會。在接下來的18個月裡,她辭去了瓦薩學院的教職,與自己的丈夫離了婚,並以36歲的年齡加入了美國海軍。在入伍之後,她被派到位於馬薩諸塞州的史密斯學院的海軍預備軍官學校進行學習。她在1944年6月以全班第一的成績畢業,並得到了少尉的軍銜。
她以為自己會被分配到負責加密和解密的部門服役,但沒想到自己接到的竟然是前往哈佛大學報到的命令,她的任務是進行與馬克一號相關的工作。正如上文提到的,馬克一號是由霍華德·艾肯在1937年設計的大型數字計算機,它使用笨重的機電繼電器和電動馬達驅動的轉軸來建造。當霍珀被分配到這項任務的時候,美國海軍已經接管了馬克一號。這個項目的負責人仍然是艾肯,但他當時的身份是海軍中校,而不是哈佛大學的教員。
霍珀在1944年7月來到哈佛大學報到,這時艾肯給了她一份巴貝奇備忘錄的副本,並帶她參觀了馬克一號。「這是一台計算機器。」他向她介紹道。霍珀默默地盯著它看了一會兒。「那裡放著一台正在隆隆作響的巨大機械裝置,」她回憶道,「它完全沒有被遮蓋起來,而且非常吵鬧。」5 她意識到自己需要透徹瞭解這台機器才能正確地使用它,因此她花了幾個晚上的時間來研究它的設計藍圖。她的一項長處是能夠將現實世界的問題轉化為數學公式(這是她在瓦薩學院任教的時候就擁有的能力),然後使用機器能夠理解的指令表達出來。「我曾經學習過關於海洋學、掃雷、雷管、近炸引信和生物醫藥等各個領域的詞彙。」她解釋道,「如果要解決某個領域的問題,我們必須學習相關的專業詞彙。我可以隨意轉換自己的用詞,例如我可以和程序員進行非常技術性的交流,然後在幾個小時之後使用另外一套完全不同的用詞向上級陳述同樣的內容。」創新需要清晰的表達能力。
由於霍珀擁有準確表達信息的能力,所以艾肯委派給她一項任務——編寫世界上第一本編程手冊。「你要寫一本書。」有一天他站在她的桌子旁邊說道。
「我不會寫書,」她回復道,「我從來沒有寫過書。」
「既然你現在已經是海軍的一員了,」他說道,「你就要寫這本書。」6
霍珀最終寫成了一本多達500頁的書籍,這本書不僅記錄了馬克一號的建造歷史,而且還是一本針對這台計算機的編程指南。7 霍珀在書的第一章講述了一些早期發明的計算機器,其中重點介紹了帕斯卡、萊布尼茨和巴貝奇的機器。這本書的卷首插圖是艾肯在辦公室組裝的巴貝奇差分機部分模型,她還引用了巴貝奇說過的一句話作為卷首語。跟埃達·洛夫萊斯一樣,霍珀也能夠理解巴貝奇分析機的獨特之處,她和艾肯都認為這個特性將會是哈佛馬克一號和同時代的其他計算機之間的區別所在。艾肯的馬克一號與巴貝奇未完成的機器一樣,也是通過打孔紙帶接收操作指令的,而且可以使用新的指令進行重新編程。
每天晚上,霍珀都會向艾肯朗讀她在當天寫成的內容,這個過程讓她學習到了成為優秀作家的一個簡單技巧:「他指出如果你在大聲朗讀的時候發現有不順暢的地方,那你最好修改一下這個句子。我每天都要朗讀自己完成的5頁內容。」8 在經過了這樣的訓練之後,她的文筆開始變得簡潔利落、條理清晰。霍珀和艾肯的緊密合作關係就像是一個世紀之前的洛夫萊斯和巴貝奇一樣。在不斷深入瞭解埃達·洛夫萊斯的過程中,霍珀對她的認同感也變得越來越強烈。「她編寫了第一個循環程序,」霍珀說道,「我永遠不會忘記這點,我們都不會。」9
霍珀將歷史部分的重點放在了歷史人物上,也就是說她的書強調的是個人的作用。在霍珀的作品完稿後不久,IBM的管理層也聘請專人編寫了另外一份關於馬克一號的歷史。相比之下,IBM版本的歷史的主角是位於紐約恩迪科特的IBM工程團隊,他們才是真正建成這台機器的人。「利用組織的歷史取代個人的歷史是最符合IBM利益的做法,」歷史學家庫爾特·拜爾(Kurt Beyer)在一份關於格雷斯·霍珀的研究中寫道,「按照IBM的說法,企業是技術創新的中心。發明家在實驗室或地下室中孤軍奮戰的神話已經不合時宜,取而代之的是平凡的工程師團隊在企業中參與漸進式創新的現實。」10 在IBM版本的歷史中,馬克一號是多項微創新成果的集合,例如棘輪式計數器和雙層卡片饋送裝置。IBM書寫的歷史所歌頌的是一群在恩迪科特互相協作的不知名工程師。[2]
從表面上來看,霍珀和IBM所編寫的歷史是在爭論誰對馬克一號的貢獻最大,但是它們之間其實有著更深一層的區別。這兩段歷史的差異表明了人們會以兩種截然不同的觀點來看待創新的歷史。某些關於技術和科學的研究會強調實現創造性飛躍的發明家的作用,也就是霍珀所採用的研究方式。另外一些研究則強調團隊和機構的作用,例如在貝爾實驗室和IBM恩迪科特實驗室進行的團隊合作。後一種方式想要證明的是,所謂的創造性飛躍(靈光一閃的瞬間)其實是一個漸進過程的結果,當思想、概念、技術和工程手段都成熟的時候,創新就會隨之出現。然而這兩種看待技術發展的觀點都是不夠全面的。數字時代的多數偉大創新都是個人和團隊相互作用的結果,即使是富有創意的個人(莫奇利、圖靈、馮·諾依曼、艾肯),他們的想法也需要通過團隊合作來實現。
和霍珀一起操作馬克一號的搭檔是理查德·布洛赫(Richard Bloch),後者是哈佛大學數學專業的畢業生,曾經在大學的一個喜歡惡作劇的樂隊中擔任長笛手,還參與過海軍的外勤任務。在霍珀到任之前,布洛赫少尉已經為艾肯工作了三個月的時間,所以他負責為霍珀提供指導。「我記得我們一起坐下仔細研究這台機器的工作原理,討論如何對它進行編程,一直聊到深夜。」他說道。他和霍珀需要每天12小時輪班管理馬克一號,同時還要聽候與這台機器一樣喜怒無常的長官——艾肯的差遣。「有時他會在凌晨四點出現,」布洛赫說道,「他在視察我們的工作時會問:『我們有在計算數字嗎?』他在機器停止運作的時候會感到非常不安。」11
霍珀採用了非常系統化的編程方式。她會將每個物理學問題或者數學方程分解成簡單的計算步驟。「你只需要告訴計算機每一步要怎麼做,」她解釋道,「比如說將這兩個數字加起來,然後將結果放在這裡;接著將另外兩個數字相乘,將下一個結果放在那裡。」12 每次到了要測試記錄程序的打孔紙帶的時候,馬克一號的團隊成員都會拿出一張跪墊,一起面朝東方祈禱他們的程序可以運行起來——這本來只是一次玩笑,不過後來就變成了一個固定的儀式。
布洛赫有時會在深夜對馬克一號的硬件電路進行調整,這樣做會導致霍珀編寫的軟件程序出現問題。這時年輕氣盛的霍珀會以自己在軍官學校學到的用語狠狠地訓斥布洛赫一頓,而身材瘦長的布洛赫通常只是對這些責備一笑置之。他們兩人之間的關係成為硬件工程師和軟件工程師之間的對抗和友誼的典型。「每次當我完成了一個可行的程序之後,他都會在晚上改動計算機內部的電路,導致程序在第二天早上無法運行,」她抱怨道,「更糟糕的是,他在這個時候已經回家睡覺了,所以我也無法知道他做了些什麼。」布洛赫表示出現這種情況的時候,他就知道自己又要遭殃了。「艾肯不會以樂觀的心態來看待這些事情。」13
這樣的事件讓霍珀得到了為人傲慢無禮的名聲。她的確是這樣的一個人,但她能夠將自己的傲慢和協作精神結合在一起,這是軟件黑客特有的一種能力。這種猶如海盜和船員之間的共事關係(霍珀和後來一代接一代的程序員所共有的)實際上解放了她的能力。正如拜爾所寫的,「為她的獨立思想和行動創造空間的不是叛逆的性格,而是她的協作能力。」14
事實上,與盛氣凌人的霍珀相比,沉著冷靜的布洛赫反而更容易與艾肯中校發生爭執。「布洛赫總是在闖禍,」霍珀說道,「我試著向他解釋艾肯本人就像是一台計算機一樣。他可以說是用電線連接而成的,如果你要和他共事的話,你必須知道他的電線是怎麼排布的。」15 艾肯本來對於讓一位女性軍官加入自己的部隊是有所顧慮的,但是他在不久之後就把霍珀任命為自己的首席程序員和第一副官。多年以後,艾肯深情地回憶起了霍珀對計算機編程的誕生所做的貢獻。「格雷斯是一個好人。」他稱讚道。16
在哈佛大學工作期間,霍珀對多種編程方式進行了完善,其中包括子程序的編寫。子程序指的是專門用於特定任務的代碼塊,它們只需要儲存一次就可以按照需求在主程序的不同位置調用。「子程序是一種明確定義、容易符號化和經常重複的程序,」她寫道,「哈佛馬克一號含有用於求解sin x、lg10 x和10x的子程序,每個子程序都通過單個操作碼調用。」17 這是埃達·洛夫萊斯最初在分析機論文的「註解」中描述的概念。霍珀將這些子程序收集到一個不斷增補的程序庫當中。她在為馬克一號編程的時候還發明了編譯器的概念,編譯器是一種用於為多台機器編寫相同程序的工具,它可以將程序的源代碼翻譯為不同計算機處理器使用的機器語言。
此外,她的團隊還提出了程序故障(bug)和調試排錯(debugging)這兩個術語。哈佛馬克二號(Mark II)計算機被放置在一座沒有安裝紗窗的大樓裡面。一天晚上,這台機器突然出現故障,工作人員馬上開始查找問題的所在。他們發現有一隻翼展達4英吋的蛾子卡在了機器的一個機電繼電器裡面。他們將這只蛾子取了出來,並用膠帶把它黏貼在工作日誌上面。「面板F(蛾子)在繼電器中,」日誌上的記錄寫道,「這是首次發現蟲子(bug)的情況。」18 從此以後,他們就將排除故障的工作稱為「為機器除蟲」(debugging the machine)。
到了1945年,哈佛馬克一號已經是世界上最容易編程的大型計算機,這點主要歸功於霍珀的貢獻。它只需輸入打孔紙帶上的新指令就可以切換任務,不需要對機器的硬件或線路進行重新配置。然而,這個優點無論在當時還是在歷史上都沒有得到什麼關注,因為馬克一號(即使是在1947年製成的後繼機型馬克二號)採用的是操作緩慢而噪聲巨大的機電繼電器,而不是像真空管這樣的電子元件。「當時任何一個對她有所瞭解的人,」霍珀對馬克二號評價道,「都認為她已經毫無希望了,所有人都在追捧電子技術。」19
計算機的創新者和其他領域的先驅一樣,如果在前進的道路上止步不前的話,他們就會被其他人超越。他們的性格當中有著諸如固執和專注這樣的特點,雖然這些特點是他們的創造力的來源,但有時候也會讓他們難以接受新鮮的想法。史蒂夫·喬布斯正是一個以固執和專注著稱的創新者,然而當他意識到自己需要「不同凡想」(think different)的時候,他就會突然改變自己的主意,這點經常讓他的同事們感到措手不及。艾肯缺乏這種靈活應變的能力,所以他無法實現優雅的轉身。身為海軍中校的他對中央權威有著本能一樣的執著,因此他的部下不能像莫奇利和埃克特在賓夕法尼亞大學的團隊那樣不受拘束地工作。艾肯還將可靠性的優先級放在了速度之上,所以即使賓夕法尼亞大學和布萊切利園的團隊都已經清楚認識到了真空管是未來的潮流,他仍然堅持使用久經考驗和可靠性更高的機電繼電器。他的馬克一號每秒只能執行三個指令,而正在賓夕法尼亞大學建造的ENIAC可以在同樣的時間內執行5 000個指令。
艾肯後來前往賓夕法尼亞大學視察ENIAC,並參加了幾場講座。「艾肯完全沉浸在了自己的行事方式當中,」當時的一份會議記錄寫道,「看來他還沒有意識到這些新的電子機器的重要性。」20 霍珀在1945年參觀ENIAC的時候也出現了同樣的情況。她似乎認為馬克一號比ENIAC更加高級,因為它的編程操作十分簡便。她對ENIAC的評價是:「你們連接各個組件的做法實際上是為每項任務製作一台專門的計算機。我們已經習慣了編程的概念,而且會利用自己編寫的程序來控制計算機。」21 為ENIAC重新編程可能需要花費一整天的時間,這樣一來它在處理速度上的優勢就被抹平了,除非它一直被用於重複完成同樣的任務。
但是跟艾肯不一樣的是,思想開放的霍珀很快就改變了她的看法。當年出現了一些編程方式上的進步,使得ENIAC可以更加快速地實現重新編程。令霍珀感到欣慰的是,站在這場編程革命的最前沿的人都是女性。