70 年前一場由女性打頭陣的程式設計革命

從巴貝奇以降的電腦發明者都把焦點放在硬體上。但二次大戰期間參與計算工作的女性和愛達一樣,很早就看出程式設計的重要。她們設法把指揮硬體作業的指令編成程式碼,軟體中蘊含的神奇程式,能以奇妙的方式改變機器的作業。這群程式設計先驅中,故事最繽紛有趣的是膽識過人、活潑迷人的海軍女軍官霍普(Grace Hopper)。
評論
<i>SI Neg. 83-14878. Date: na.</i>

Grace Murray Hopper at the UNIVAC keyboard, c. 1960. Grace Brewster Murray: American mathematician and rear admiral in the U.S. Navy who was a pioneer in developing computer technology, helping to devise UNIVAC I. the first commercial electronic computer, and naval applications for COBOL (common-business-oriented language). 

Credit: Unknown (Smithsonian Institution)
SI Neg. 83-14878. Date: na. Grace Murray Hopper at the UNIVAC keyboard, c. 1960. Grace Brewster Murray: American mathematician and rear admiral in the U.S. Navy who was a pioneer in developing computer technology, helping to devise UNIVAC I. the first commercial electronic computer, and naval applications for COBOL (common-business-oriented language). Credit: Unknown (Smithsonian Institution)
評論

本文摘自《創新者們:掀起數位革命的天才、怪傑和駭客》一書第三章 〈程式設計〉,Inside 獲天下文化授權刊登。

程式設計

戰時打造的所有機器,最初構思時都以完成某項特殊工作(例如解方程式或破解密碼)為目標。但在愛達或圖靈心目中,真正的電腦應該能完美且快速的執行任何邏輯作業。如此一來,機器的作業就並非只由硬體決定,軟體(可以在上面跑的程式)也扮演重要角色。圖靈再度清楚說明這個概念:「我們不需要靠無數的不同機器來完成不同的工作。」他在 1948 年寫道:「只需要一部機器就夠了。在辦公室為通用機器『設計程式』來完成這些工作,取代了為執行不同工作而要生產不同機器的工程問題。」

理論上,像 ENIAC 這樣的機器應該可以程式化,甚至當成通用機器來使用。但實際上,載入新程式的程序非常辛苦,包括必須動手一一拔除連結電腦中不同單元的電纜。戰時打造的機器無法以電子速度轉換程式,因此催生現代電腦的下一個步驟就很重要:設法把程式儲存在機器的電子記憶體中。

霍普—膽識過人的程式設計先驅

▲ Grace Hope(右二)與 UNIVAC(照片來源:Public.Resource.Org

從巴貝奇以降的電腦發明者都把焦點放在硬體上。但二次大戰期間參與計算工作的女性和愛達一樣,很早就看出程式設計的重要。她們設法把指揮硬體作業的指令編成程式碼,軟體中蘊含的神奇程式,能以奇妙的方式改變機器的作業。

這群程式設計先驅中,故事最繽紛有趣的是膽識過人、活潑迷人的海軍女軍官霍普(Grace Hopper),她先是為哈佛大學的艾肯工作,然後又加入艾科特和莫渠利的團隊。她在大學時代主修數學和物理,從瓦薩學院畢業後,進入耶魯大學攻讀研究所,並且在 1934 年拿到數學博士的學位。

出人意料之外的是,霍普的教育過程在當時其實不算太不尋常。耶魯大學在 1895 年首度頒發數學博士學位給女性,而她是第十一位獲頒耶魯數學博士學位的女性。女性數學博士在 1930 年代並不算太罕見,尤其如果她們出身名門的話。事實上,比起後來的世代,霍普成長的年代更常見到女性數學博士。1930 年代,美國有 113 位女性獲得數學博士學位,占美國數學博士總數的 15%。但到了 1950 年代,只有 106 位女性獲得數學博士學位,只占總數的 4%。(到了二十一世紀的最初十年,情況已大幅好轉,那段期間美國總共有 1,600 位女性獲頒數學博士學位,占總數的 30%。)

嫁給比較文學教授文森.霍普(Vincent Hopper)之後,葛瑞絲.霍普到瓦薩學院任教。和其他數學教授不同的是,她堅持學生必須具備良好的寫作能力。她上機率課時,會先講解自己最愛的數學公式 1,然後要求學生以此為題寫一篇文章。她批改時,也會就文章清晰度和寫作風格來評析。

「我(在文章上)寫滿評語,而他們會抱怨這是數學課,又不是英文課,」她回憶道:「然後我會解釋,除非他們懂得怎麼和別人溝通,否則學習數學毫無用處。」終其一生,霍普一直很擅長把科學問題(例如有關軌道、流體流動、爆炸、天氣型態的問題)轉換為數學方程式,然後再翻譯成一般人聽得懂的英文。這項才能也幫助她成為優秀的程式設計師。

⋯⋯

霍普的長處是很懂得把現實世界的問題轉化為數學方程式,然後用機器能夠了解的方式下達指令,和機器溝通。「我學習海洋學的術語,還有和掃雷、雷管、近發引信及生醫領域相關的種種詞彙,」她解釋:「我們必須學習他們的用語,才有辦法解決他們的問題。我可以隨時轉換詞彙,先用高度技術性的術語跟程式設計師溝通,然後幾小時之後,再用完全不同的詞彙向主管報告相同的事情。」要成功創新,有賴於清楚的溝通。

由於霍普清晰準確的溝通能力,艾肯指派她撰寫電腦程式設計手冊,這是全世界第一部程式設計手冊。有一天,艾肯站在霍普的辦公桌旁,對她說:「妳要寫一本書。」

「我沒辦法寫書,」霍普回答:「我從來沒有寫過書。」

「妳現在加入海軍了,」艾肯說:「妳要撰寫一本書。」

結果霍普寫出一部厚達五百頁的巨著,裡面包含了馬克一號的發展史和程式設計指南。霍普的引言就從巴貝奇開始說起。她和愛達一樣,知道巴貝奇分析機有一種特質,也就是她和艾肯所深信,馬克一號有別於其他電腦的特質。艾肯的馬克一號和巴貝奇未完成的機器一樣,藉由打孔紙帶接收源源不絕的指令,可以透過重新編程,傳達新的指令。

霍普每天晚上都把當天撰寫的內容唸給艾肯聽,她因此領悟到成為優秀寫手的簡單訣竅,她說:「他指出,如果你大聲朗讀時,會結結巴巴讀不順,那麼最好修改句子。我每天都得朗讀五頁我寫下的內容。」於是,她寫的句子變得簡潔、生動、清晰。霍普和艾肯成為最佳拍檔,活生生是百年前愛達與巴貝奇的現代翻版。霍普愈深入了解愛達,就愈認同她。「她寫了第一個程式迴圈,」霍普說:「我絕對不會忘記這點。我們都不會忘記。」

霍普撰寫的電腦發展史偏重個人,所以她的書強調個人角色。反之,在霍普的著作完成後沒多久,IBM 的主管也推出自己的馬克一號發展史,把大部分功勞都歸諸在紐約恩狄考特建造機器 IBM 團隊。「以組織歷史取代個人歷史,最符合 IBM 的利益,」曾深入研究霍普的史學家拜耳(Kurt Beyer)指出:「根據 IBM 的說法,公司才是科技創新的所在。組織裡的工程師團隊扮演無名英雄,逐步推動進步,取代了獨自在實驗室或地下室埋首研究的激進發明家。」在 IBM 版本的歷史中,馬克一號涵蓋的一長串小創新(例如棘輪式計數器和雙層饋卡機制等),都要歸功於一群工程師在恩狄考特默默耕耘、通力合作所促成的。2

霍普版的歷史和 IBM 版之間的差異,其實不只關乎誰功勞最大的爭議,而隱含了更深遠的意義,進一步暴露出雙方的創新史觀在根本上的差異。和霍普一樣,有些科技相關研究也強調創意十足的發明家推動了跳躍式的創新。其他研究則強調團隊和組織的角色,例如貝爾實驗室工程師的努力,以及 IBM 恩狄考特團隊的合作成果。後者試圖說明,有些科技突破也許表面看來像是靈光閃現後的大躍進,實際上卻是逐步演進的結果,等到各種想法、概念、技術和工程方法都同時醞釀成熟時,才一舉畢其功。這兩種科技發展史觀都不夠完善。事實上,數位時代大部分的偉大創新,都仰賴擁有高度創造力的個人(莫渠利、圖靈、馮諾伊曼、艾肯等),和有能力實現創意的團隊之間的良好互動。

霍普在哈佛大學開發出來的其中一種程式是「次常式」,是為了特殊工作而編寫的大段程式碼,可暫時儲存起來,在主程式某個部分需要用到時再叫出來使用。「次常式是明確、簡潔,而且通常一再重複的程式,」她寫道:「哈佛的馬克一號包含了為 sin x、log10x、10x 設計的次常式,每個次常式都用一個作業碼來呼叫。」

愛達在關於分析機的評注中,最先描述了這個概念。霍普累積了許多這類次常式。她為馬克一號寫程式的時候,也發展出「編譯器」(compiler)的概念,她發明一種程序,能把源碼轉譯為不同電腦處理器使用的機器語言,加速了為多部機器撰寫相同程式的過程。

除此之外,「bug」(錯誤)和「debug」(除錯)這兩個詞,也在霍普團隊推波助瀾下,成為電腦界的流行用語。當時打造馬克二號電腦的哈佛建築物沒有裝紗窗。有一天晚上機器突然故障,工作人員開始檢查究竟哪裡出問題。他們發現有一隻翅膀達四公分寬的大飛蛾卡死在電機繼電器中。於是他們取出飛蛾,把牠用膠帶黏在對數表上,並在實驗日誌中記下:「面板 F,(飛蛾)在繼電器中。找到第一隻真正的蟲(bug)。」從此他們就把偵錯和除錯稱為「debug」。

電腦創新者和其他開路先鋒一樣,如果在半途卡住了,很容易從超前變落後。執著和專注等特質令他們創造力豐沛,但是面對新觀念時,他們也可能因為相同的特質而抗拒改變。賈伯斯的執著和專注十分有名,然而當他領悟到必須改弦易轍時,他會突然改變主意,令同事眼花撩亂,困惑不已。艾肯卻缺乏這種靈活應變的能力,只是一味憑著海軍指揮官的本能,採取中央集權的管理方式。

⋯⋯

令霍普欣慰的是,這場程式設計革命是由女性打頭陣。


  1. 她最喜歡的是斯特林公式(Sterling’s formula),這個公式可以計算出某個數階乘的近似值。↩
  2. 哈佛科學中心原本在展示馬克一號時,隻字不提霍普,也沒有展示任何女性的照片,直到 2014 年才修正,開始凸顯霍普和其他程式設計師扮演的角色。↩