工程哲學:Grace Hopper,讓電腦說人類的語言

重點摘要
- Hopper的整套哲學可濃縮成一句話:讓電腦說人類的語言,絕不強迫人類去說機器的語言。
- 第一個編譯器A-0(1952年)把翻譯的重擔放到機器身上——在軟體裡自動化一次,而不是讓每位程式設計師永世以手工償付。
- 那段「奈秒電線」把延遲變成了可以握在手裡的實體:11.8英寸長,於是浪費時間的代價不再抽象。
- 「我們一向都是這麼做的」在她眼中是語言裡最危險的一句話——而她的每一項發明,都是對這句話的反駁。
核心原則
「人類對改變過敏。他們最愛說:『我們一向都是這麼做的。』我努力對抗這一點。所以我牆上掛著一座逆時針走的時鐘。」——Grace Hopper1
這種性情,源自一個信念:機器應當被打造來服務人類,而非反其道而行。1953年,當寫程式還意味著為特定機器手工編寫數字指令時,Hopper提出資料處理問題應該用英文字詞來陳述,再讓電腦去做翻譯。管理層告訴她這辦不到——電腦根本不懂英文。2她其實並非主張電腦懂英文。她主張的是:翻譯的重擔應當落在機器身上,在那裡只需自動化一次,而不該由每位程式設計師永遠扛著。這就是整套哲學:讓電腦說人類的語言,而非反過來。
事隔七十年,很容易忽略這在當年有多麼激進。當時主流的假設是:寫程式是一門深奧的技藝,只屬於那些能用機器的方式思考的人,而這「本來就是」工作的本質。Hopper的回應是:工作的本質其實是某個人做過、卻從未重新檢視的一個選擇——「我們一向都是這麼做的」硬生生石化成了一條物理定律。她整個職業生涯就是對這種石化的拒絕:第一個編譯器、第一個近似英文的語言,以及一輩子告訴人們,他們所接受的種種限制其實並不真實。
反教條的脾性與普及化的使命,是同一種直覺的一體兩面。抽象化——讓人能用自己的語彙表達意圖,再由工具把它翻譯到底層的金屬層級——並不是疊加在程式設計之上的便利附件。對Hopper而言,這正是程式設計的目的:把機器向那些原本會被拒於門外的人敞開。2016年歐巴馬總統頒授她總統自由勳章時,頌詞說得乾脆——她「發明了第一個編譯器,讓程式得以用一般語言書寫,再翻譯給電腦理解」。3同樣的信念,也支撐著一個論點:好的工具應該為使用它的人最佳化,而非為運行它的機器最佳化。
背景脈絡
Grace Brewster Murray Hopper於1906年12月9日生於紐約市。4她1928年在Vassar College取得數學與物理學士學位,隨後於耶魯取得碩士(1930年)與數學博士(1934年)——這個數學博士學位,在她那一代的女性中幾乎無人擁有。4整個1930年代她在Vassar教數學,而這個細節很重要:在成為程式設計師之前,她先是一位教師,而那種把艱深概念化為可理解之物的直覺,從未離開過她。
1943年12月,正值戰爭中期,她加入了美國海軍後備隊。海軍起初有些遲疑——她已三十六歲,體重又遠低於標準——但她硬是闖了過去,並於1944年被派往哈佛的軍械計算專案局(Bureau of Ordnance Computation Project),在Howard H. Aiken手下成為哈佛Mark I最早的程式設計師之一。4Mark I是一台占滿整個房間的機電式計算機;Hopper合著了它那本561頁的手冊《自動序列控制計算機操作手冊》(A Manual of Operation for the Automatic Sequence Controlled Calculator),多年來這都是教人如何為這台機器編寫程式的奠基文本。4

戰後她退出現役,但仍留在後備隊,並於1949年加入Eckert-Mauchly Computer Corporation——不久後併入Remington Rand——投入美國第一台商用電腦UNIVAC I的工作。4正是在那裡,她不再是把程式碼手工焊接到一台一次性的研究機器上,而是試圖讓一項產品能被普通企業使用,她生命的課題也由此聚焦成形。Aiken給了她機器,UNIVAC給了她客戶。客戶不會寫程式,而Hopper認定那是電腦該解決的問題,而非客戶該解決的問題。
主要工作
第一個編譯器:A-0(1952年)
到了1952年,Hopper已打造出A-0系統,普遍被認為是第一個編譯器。5這個構想事後看來簡單得近乎難堪,在當時卻是異端。程式設計師累積了一批批好用的副程式庫,但要重複使用其中一個,你得親手把它的指令抄進自己的程式,再費力地逐一修正每一個記憶體位址。Hopper的A-0則讓你改以一個簡短的呼叫編號來指涉每個副程式,並提供它的引數;系統接著從磁帶中取出這些常式、解析位址,組裝成一個可執行的程式。5
純粹主義者正確地指出,A-0的運作其實更像我們今天所稱的載入器(loader)或連結器(linker),而非現代的最佳化編譯器。5這沒錯,也值得說明。但真正歷久不衰的,是那一躍的概念:程式可以是一份用便利符號寫成的規格說明,而一段軟體能自動把這份規格翻譯成機器碼。翻譯如今成了機器的工作。Hopper本人對於自己為何這麼做的說法,留存在她回憶UNIVAC歲月的話語裡:「我以前是數學教授。當時我發現總有一定數量的學生學不會數學。後來我被交付了一項任務:讓商人能輕鬆使用我們的電腦。」2此後的每一個編譯器——每一行任何人以高於原始機器指令的語言所寫下的程式碼——都是那個決定的後裔。
FLOW-MATIC與通往COBOL之路
A-0翻譯的是符號。下一步,是讓那些符號變成英文。1955年到1959年間,Hopper與她在Remington Rand的團隊打造了FLOW-MATIC,這是第一個以近似英文的語句、而非數學記號來表達運算的程式語言。6一支FLOW-MATIC程式讀起來會出現像INPUT、COMPARE、MOVE這樣的指令——商務人士不必是數學家,就能讀懂並大致明白的字詞。用她的話說,這是一項刻意為之的工作:讓那些永遠不會用機器的方式思考的人,也能使用電腦。
FLOW-MATIC直接孕育了COBOL。1959年CODASYL委員會召開、著手設計一種共通的商務導向語言時,FLOW-MATIC是當時最成熟的近似英文資料處理語言,遂成為這項新標準的主要基礎。6Hopper被稱為COBOL在概念上的祖母,可謂名副其實——她並非唯一的作者,但正是她的工作與倡議,讓一種近似英文、與機器無關的商務語言變得可以想像。而與機器無關正是這裡夾帶的第二個激進構想:她主張程式應當能跨不同電腦移植,而不是為某一台手工量身打造——這正是Unix和C所發揚光大的「一次寫成、到處移植」信念的直系祖先。同樣的程式碼、同樣的英文,跑在它從未為之而寫的機器上。COBOL的壽命幾乎勝過周遭的一切;數十年後,它仍在運轉著全世界的銀行與政府系統——這本身就是一個沉默的論證,證明了一個以人類讀者為核心所建立的構想有多麼耐久。
奈秒:讓延遲化為實體
Hopper最著名的教學工具根本不是程式碼。是一段電線。有人曾問她為何衛星通訊要花那麼久時間,她於是著手把時間的代價變成人能握在手裡的東西。她會發給人們一段段剪成11.8英寸長的電線——電在一奈秒(十億分之一秒)內所能行進的最大距離——好讓一個抽象的延遲單位,變成你手中一件實實在在的物件。7接著她會拿出一卷984英尺長的線圈:她解釋說,那是一微秒。「我有時覺得我們應該在每個程式設計師的桌上掛一段,」她說,「好讓他們知道,當他們揮霍掉一個個微秒時,究竟扔掉了什麼。」7

這段電線,與驅動編譯器的,是同一種教師的直覺,只是瞄準了不同的一課。編譯器說的是:你不該為了使用機器,而非得用機器的方式思考。奈秒說的是:但你確實得尊重機器的物理。延遲不再是投影片上的一個數字,而成了一段訊號必須親身跨越、受光速所支配的長度,而每一個被浪費的微秒,都是你毫無理由地讓訊號白跑的一段電線。這些電線如今陳列在史密森尼學會的美國國家歷史博物館裡。8它們其實也幾乎一字不差地是John Carmack那句「光速爛透了」——只是早了四十年,並且由銅製成。兩者都把延遲那道嚴酷的物理下限,化為某種你無法抽象掉、也無法揮手帶過的東西,因為你看得見它,或握得住它。
那隻蟲與反教條的脾性
1947年9月9日,哈佛Mark II——Aiken的後繼機器,正是Hopper所屬的團隊——的操作員把一個故障追查到一隻卡在第70號繼電器、F面板裡的蛾。他們取出這隻昆蟲,用膠帶貼進日誌本,寫下:「首次發現實際的蟲(bug)案例。」9那一頁日誌,連同那隻仍黏附其上的蛾,如今由史密森尼學會典藏。8
這個故事的誠實版本很重要,因為Hopper說得太精彩,反倒把事實給模糊了。蛾是真的,日期也有文獻記載。但用「bug」指稱工程故障,遠在她之前就有了——早在Thomas Edison的年代就已通用——而那些操作員幾乎可以肯定是在玩雙關,把他們早已熟知的工程術語,和他們剛剛撬出來的那隻真實昆蟲湊在一起。9而且就多數記載而言,找到那隻蛾的人甚至不是Hopper。她所做的,是以其一貫的風采,把這則軼事、以及「bug」與「debugging」這套詞彙推廣開來,直到它們成為這個領域的母語。9所以精確的功勞應該這麼算:她沒有發明「bug」一詞,也很可能不是抓到那隻蛾的人,但她讓這則故事與這個詞深植人心。那是另一種貢獻——再一次,是屬於教師的貢獻。
支撐這一切的脾性,是一場對抗承襲假設的長期戰爭。她牆上那座時鐘逆時針走,是刻意為之的,用以證明:人人視為固定不變的成規,在你決定打造一座不一樣的鐘的那一刻,就顯露出它的隨意。1「我們一向都是這麼做的」在Hopper眼中是語言裡最危險的一句話——而編譯器、近似英文的語言、可移植的程式,以及你手中那段電線,全都是對它的反駁。
方法論
這套方法,貫穿了四十年始終如一——軍械計算、商用運算、語言設計,以及一輩子的教學。
把翻譯的重擔移到機器身上。她職業生涯反覆出現的一招,就是把每個人類此刻都在以手工進行的工作——解析位址、用數字運算碼思考、把程式碼硬塞進某一台特定電腦——拿來在軟體裡自動化一次。編譯器是這個構想;FLOW-MATIC是這個構想;與機器無關,也是這個構想。56
讓人能說自己的語言。程式設計應當在使用者所在之處與他們相會。商務人士應該能寫下MOVE和COMPARE,而不必背誦一整套指令集。可及性從來不是事後栓到工具上的一項功能;對Hopper而言,它正是這項工具存在的全部理由。26
讓抽象化為實體。當一個概念抽象到難以令人尊重時——一個奈秒、一個被浪費的微秒——就打造一件實體物件,逼出那一課。電線是化為工程的教學法:你無法跟一件你正握在手裡的東西爭辯。7
不信任「我們一向都是這麼做的」。把承襲的成規當成一個假設,而非一條定律。那座逆時針的時鐘,是化為實物的方法論:只要乾脆地用不同的方式去做,就能證明那道限制其實是隨意的。1
寧求事後原諒,不求事前許可。「如果這是個好主意,就放手去做吧。道歉遠比取得許可容易得多,」她如此建言——這是對抗教條在操作層面的推論。(這種想法早於她,確切措辭在各個來源間也有出入,但海軍與這個領域所記得的那個版本,是她的。)10你無法靠著乾等那些既得利益於舊路的人來祝福,而抵達抽象化。
影響鏈
是誰形塑了她
Howard Aiken與哈佛Mark I。Aiken把她的第一台電腦、第一個難題交到她手中,而她合著的那本Mark I手冊,逼著她嚴謹地思考一台機器是如何被下達指令的——這個問題,日後成了她畢生的課題。(直接影響)
美國海軍。海軍給了她制度、紀律,最終也給了她舞台;她斷斷續續身著軍服,長達四十餘年。軍方對可靠、可重複、可教授之程序的要求,形塑了她的信念:程式設計必須被打造成系統化、可移轉的,而非匠人作坊式的。(奠基影響)
她當數學教授的那些年。在機器之前,她教書。教師的那個問題——我該如何讓一個不像我這樣思考的人,也能掌握這個概念?——正是編譯器、近似英文的語言,以及那段電線的種子。(奠基影響)
她形塑了誰
每一種高階語言。編譯器讓人得以用原始機器碼以外的任何方式來寫程式。FORTRAN、COBOL,以及此後的一切,都立足於A-0所證明的前提:一個工具可以把人類便利的符號,翻譯成機器指令。5
COBOL與商用運算。身為COBOL在概念上的祖母,Hopper把近似英文、與機器無關的程式設計,交到了全世界企業的手中。這個語言至今仍運轉著全球金融與政府系統中極其龐大的一部分。6
以可及性為程式設計的目的。最深的傳承不是一種語言,而是一種立場:把機器向更多人敞開,這本身就是工作,而非工作的副產物。歐巴馬的頌詞——「我們可以感謝Grace Hopper,讓數以百萬計的更多人得以接觸程式設計」——說的正是這一點。3
貫穿的主線
Yukihiro Matsumoto設計Ruby,是為了替程式設計師的幸福感最佳化——語言應該遷就人,而非人遷就語言。那正是Hopper那句「讓商人能輕鬆使用我們的電腦」在1995年的重述:是讓電腦說人話的直系哲學繼承人。John Carmack那句「光速爛透了」,是她那段奈秒電線化為一個句子——兩者都堅持延遲是實體的,是一道你該尊重、而非抽象掉的嚴酷下限;她只是早了四十年抵達,並且用你能握住的銅打造了她的版本。而Thompson與Ritchie的Unix和C,之所以被打造成讓作業系統能一次寫成、到處移植,而不是焊死在單一機器上,正是Hopper為COBOL所倡議的「與機器無關」在實務上的實現:同樣的程式,跑在它從未為之而寫的硬體上。(系列銜接)
我從中汲取了什麼
我所記取的一課是:抽象化不是你有空時才添上的奢侈品——它就是整份工作。Hopper在1952年端詳程式設計,看見那艱難的部分正由每一個碰觸機器的人扛著,於是把那份重擔移進軟體,讓它只需被償付一次。那正是我如今在所建造的一切中試圖做出的一招:找出人類正在反覆以手工進行的翻譯工作,把它自動化進工具裡。標準和品質是唯一的變數如出一轍——問題從來不是「能不能訓練一個人去忍受這個介面?」,而是「他們究竟為什麼非得忍受不可?」
在我如今所建造的世界裡——代理(agents)、工具迴圈、AI系統——Hopper的這兩半都是承重結構,而且它們恰恰以那種富有成效的方式彼此拉扯。可及性的那一半說:讓人用自己的語言表達意圖,再讓系統把它翻譯到機器所需的任何層級——而這幾乎可以說,正是一個 LLM 工具呼叫層的本質,是七十年後的一個英文編譯器。物理的那一半則說:但別讓抽象化在代價這件事上對你說謊;每一次模型呼叫都是一奈秒的電線,而僅僅因為介面友善就把它們疊起來,正是你如何揮霍掉那些你看不見的微秒。而那種脾性——逆時針的時鐘、對「我們一向都是這麼做的」的拒絕——則是我在一個最容易把自身當下成規誤認為定律的領域裡,最需要傍身的部分。那個信念,即品味是一套技術系統,是你能檢視並改變的,而非一項你被動承襲的傳統——這條線,從1952年的一個編譯器一路筆直地延伸到2026年的一個代理框架。
常見問題
Grace Hopper的工程哲學是什麼?
Hopper的核心信念是:電腦應當被打造來服務人類,而非反過來——把人類意圖翻譯成機器指令的重擔,屬於軟體,只需自動化一次,而不該由每位程式設計師永遠扛著。正是這單一信念,催生了第一個編譯器(A-0,1952年)與第一個近似英文的程式語言(FLOW-MATIC),兩者都旨在讓那些無法、也不該非得用機器的方式思考的人,也能使用電腦。256與這項可及性使命相伴的,是一股不懈的反教條脾性,凝聚在她的一個觀點裡:「我們一向都是這麼做的」是語言裡最危險的一句話。1
Grace Hopper發明了什麼?
她在1952年打造了A-0系統,普遍被認為是第一個編譯器,能把符號化的程式規格自動翻譯成機器碼。5接著她主導了FLOW-MATIC(1955年至1959年)的開發,這是第一個使用近似英文語句的程式語言,後來成為COBOL的主要基礎。6她被稱為COBOL在概念上的祖母,也是與機器無關之程式設計的倡議者。她在美國海軍晉升至少將軍階,1986年以海軍最年長的現役軍官身分退役,並於2016年追授總統自由勳章;一艘海軍驅逐艦USS Hopper即以她命名。34
Grace Hopper的「奈秒」電線是什麼?
那是她最著名的教學工具:剪成11.8英寸長的一段段電線,也就是電在一奈秒(十億分之一秒)內所能行進的最大距離。她把它們發給人們,好讓一個抽象的延遲單位,變成你能握在手裡的實體物件。7她拿它對照一卷代表一微秒的984英尺長線圈,告訴程式設計師,這顯示了「當他們揮霍掉微秒時,究竟扔掉了什麼」。7這堂課的寓意是:延遲並不抽象——它是一段訊號必須跨越的實體長度。這些電線如今收藏於史密森尼學會的美國國家歷史博物館。8
「computer bug」(電腦蟲/程式錯誤)這個詞是Grace Hopper發明的嗎?
不是,而誠實的版本更有意思。1947年9月9日,哈佛Mark II的操作員發現一隻蛾卡在繼電器裡,用膠帶把牠貼進日誌本,寫下「首次發現實際的蟲(bug)案例」;那一頁日誌由史密森尼學會典藏。89但用「bug」指稱工程故障,比那隻蛾還早了數十年——在Thomas Edison的年代就已通用——而那些操作員幾乎可以肯定是在拿一個他們早已熟知的詞玩雙關。就多數記載而言,找到那隻蛾的並不是Hopper本人。她所做的,是把這則軼事,以及「bug」與「debugging」這套詞彙推廣開來,直到它們成為這個領域的標準語言。9
資料來源
-
Philip Schieber, “The Wit and Wisdom of Grace Hopper,” OCLC Newsletter, No. 167 (March/April 1987). 「人類對改變過敏。他們最愛說:『我們一向都是這麼做的。』我努力對抗這一點。所以我牆上掛著一座逆時針走的時鐘。」另見 “Grace Hopper,” Wikiquote。 ↩↩↩↩
-
“FLOW-MATIC,” Wikipedia. Hopper於1953年底提議,將資料處理問題以英文關鍵字來表達;管理層起初斥之為不可行。「我以前是數學教授。當時我發現總有一定數量的學生學不會數學。後來我被交付了一項任務:讓商人能輕鬆使用我們的電腦。」 ↩↩↩↩
-
President Barack Obama, “Remarks by the President at Presentation of the Presidential Medal of Freedom,” The White House, November 22, 2016. 「如果說Wright代表飛行、Edison代表光明,那麼Hopper就代表程式碼。」「她發明了第一個編譯器,讓程式得以用一般語言書寫,再翻譯給電腦理解。」 ↩↩↩
-
“Grace Hopper,” Wikipedia. 1906年12月9日生於紐約市;1992年1月1日逝世。Vassar學士(1928年);耶魯數學碩士(1930年)與博士(1934年)。1943年加入美國海軍後備隊;1944年在Howard Aiken手下被派往哈佛Mark I;合著Mark I手冊。1949年加入Eckert-Mauchly/Remington Rand,投入UNIVAC I的工作。晉升至少將;1986年8月以海軍最年長的現役軍官身分退役;USS Hopper(DDG-70)以她為名。 ↩↩↩↩↩↩
-
“A-0 System,” Wikipedia. 由Grace Hopper於1951年至1952年間為UNIVAC I所寫;普遍被認為是第一個編譯器,儘管它的運作更像載入器/連結器而非現代編譯器——它接受以呼叫編號加引數所指定的副程式,並組裝成可執行的機器碼。其後有A-1、A-2,最終發展為FLOW-MATIC。 ↩↩↩↩↩↩↩
-
“FLOW-MATIC,” Wikipedia. 在Hopper主持下於Remington Rand開發,1955年至1959年;第一個以近似英文語句表達運算的程式語言;1958年至1959年達到可投入生產的狀態;直接形塑了COBOL(透過1959年的CODASYL工作),傳遞了檔案組織、資料限定與程式區段結構。另見 “COBOL,” Wikipedia,論及FLOW-MATIC作為該語言的主要基礎。 ↩↩↩↩↩↩↩
-
“Grace Hopper Explains the Nanosecond,” ratfactor,謄寫她的演講;以及 “Grace Hopper to Programmers: Mind Your Nanoseconds!,” High Scalability。一奈秒是11.8英寸的電線(電在十億分之一秒內行進的最大距離);一微秒是一卷984英尺長的線圈。「我有時覺得我們應該在每個程式設計師的桌上掛一段……好讓他們知道,當他們揮霍掉微秒時,究竟扔掉了什麼。」 ↩↩↩↩↩
-
“Nanoseconds Associated with Grace Hopper,” 以及 “Log Book With Computer Bug,” Smithsonian National Museum of American History. 那些11.8英寸的奈秒電線,以及1947年那一頁黏著蛾的Mark II日誌,都在該館的館藏之中。 ↩↩↩↩
-
“Bug (engineering),” Wikipedia,以及 “The First Use of ‘Bug’ in the Context of Computing,” HistoryofInformation.com. 1947年9月9日,哈佛Mark II的操作員在第70號繼電器、F面板裡發現一隻蛾,並記下「首次發現實際的蟲(bug)案例」。用「bug」指稱工程故障,比這早了數十年(可追溯至Edison的年代);Hopper很可能不是找到那隻蛾的人,但她協助推廣了這則軼事以及「bug」和「debug」這兩個詞。另見 “The Bug in the Computer Bug Story,” JSTOR Daily。 ↩↩↩↩↩
-
“Grace Hopper,” Wikiquote. 「如果這是個好主意,就放手去做吧。道歉遠比取得許可容易得多。」廣泛歸於Hopper(並被引用於美國海軍《Chips》雜誌1986年7月號);Wikiquote指出其底層想法在Hopper之前即已見諸印刷,因此措辭是如人們所記得的她的版本,而構想則更為古老。歸屬討論:Quote Investigator. ↩