瑪格麗特·漢密爾頓在 MIT 博物館
瑪格麗特·漢密爾頓(Margaret Hamilton)沒有想著要發明現代軟體的概念並讓人類登陸月球。那是1960 年,一個不鼓勵女性從事高技術工作的年代。漢密爾頓,一個24歲的數學學士,在 MIT 找到一份程式設計師的工作,本來的計劃是支援她丈夫哈佛法學院 3 年學業,然後就輪到她去讀一個數學研究生學位。
但是阿波羅空間專案開始了。漢密爾頓在實驗室開創了工程技術方面的史詩壯舉,幫助改變了人類 —— 和數字技術 —— 能力所及的未來。
瑪格麗特·漢密爾頓在阿波羅指令艙實體模型內
1960年代,作為一個有工作的媽媽,漢密爾頓是不尋常的;但是作為一個太空船程式設計師,漢密爾頓極其激進。漢密爾頓週末和晚上會把女兒勞倫帶到實驗室。4歲的勞倫睡在查爾斯河畔的辦公室地板上時,她媽媽在一邊程式設計,創造著最終將會裝入阿波羅指令艙計算機中的程式。
瑪格麗特·漢密爾頓站在阿波羅導航計算機 (AGC) 原始碼清單旁,程式碼屆的「著作等身」
“人們過去經常和我說,‘你怎麼能撇下你的女兒?你怎麼能這麼做?’” 漢密爾頓回憶說。但她喜愛這份工作的神祕新奇。她喜歡同志情誼——下班後在 MIT 職員俱樂部的小酌;極客開的玩笑,比如說她走廊周邊“左負轉移”。局外人摸不著頭腦。但在實驗室,她說,“我是小夥子們的一份子。”
1962年4月19日,瑪格麗特·漢密爾頓跟一位前同事一起。漢密爾頓當時在林肯實驗室在第一臺 AN/FSQ-7 計算機上開發軟體。她的軟體是個雷達定位監控程式,用來偵查潛在的敵機。
然後,現在看,“小夥子們”主導了技術和工程領域。像今天充滿多樣性挑戰的技術產業中的女程式設計師一樣,漢密爾頓是個特例。這會令今天的軟體從業者驚詫,他們男孩俱樂部的創立者之一實際是個母親——這應該讓他們停下來思考為什麼《廣告狂人》時代的性別不平等持續到今天。
“當我最初從事這個,沒有人知道我們在幹什麼。這裡就像是蠻荒西部。”——瑪格麗特·漢密爾頓
漢密爾頓和她的女兒勞倫
當漢密爾頓的職業生涯開始起航,軟體世界由於約翰·肯尼迪 1961年啟動阿波羅專案而處在大爆發的邊緣。在漢密爾頓工作的 MIT 儀器實驗室,當她和同事們為世界上第一個行動式計算機編寫程式碼時,他們實際上在發明計算機程式程式設計的核心理念。她成為系統程式設計的專家,並且在重要的技術爭論中勝利。“當我最初從事這個,沒有人知道我們在幹什麼。這裡就像是蠻荒西部。沒有現成的課程,他們沒有講授過這個。” 漢密爾頓說。
漢密爾頓(左一),在支援阿波羅八號任務時,在綜合分析室與部分同事在一起
這一切距離微軟公司成立有十年,距離馬克·安德森發現軟體事實上“在吞噬著世界”近半個世紀。在阿波羅時代,這個世界根本沒有對軟體思考那麼多。原始文件列出阿波羅計劃的工程需求,甚至沒有提到軟體一詞,MIT 航空學教授戴維·閔代爾在他的《數字化阿波羅》一書中寫道,“軟體沒有在計劃之列,甚至沒有包含在預算內。”至少起初沒有。
但當阿波羅計劃展開,在完成任務中軟體的中心性開始變得清晰。1965 年,漢密爾頓開始負責阿波羅計算機的機載飛行軟體。這是一個令人興奮的時刻,整個美國依賴著她所做的工作。但有時壓力使漢密爾頓徹夜難眠。一次午夜聚會後,她衝回計算機實驗室,校正一段她突然意識到的缺陷程式碼。“我總是想象報紙的頭條新聞,他們會倒查問題是怎麼發生的,最終會倒查到我。”
到1968 年中期,400 多人在從事阿波羅的軟體開發工作,因為軟體將是美國贏得登月競賽的手段。當然,實際情況表明軟體將幫助世界做的更多。漢密爾頓和同事們在為阿波羅宇宙飛船程式設計的時候,他們也在孵化一個價值4000億美元的產業。
一個雷神的工人在把銅線穿到電磁環上
對漢密爾頓而言,程式設計就是要在一堆堆穿孔卡片上打眼,卡片在巨大的霍尼韋爾大型機上做整晚的批處理計算,模擬阿波羅著陸器的工作。“我們必須在阿波羅起飛前模擬所有的一切,” 漢密爾頓回憶。一旦程式碼固定下來,就會被載往附近的雷神(Raytheon)工廠,那裡有一群婦女,阿波羅計劃稱為“小老太太”的專業女縫工,把銅線穿過電磁環(穿芯的線是1;繞芯的線是0)。忘記 RAM 或硬驅;在阿波羅上,記憶體是實打實地硬線聯接,幾乎牢不可破。
雷神工廠的“小老太太”們
阿波羅載有兩個近乎一樣的機器:一個在登月艙——著月的老鷹號——另一個載著宇航員往返地球的指令艙。這些70磅的阿波羅號計算機是有別於其他的行動式計算機。由 MIT工程師哈爾·萊寧和漢密爾頓的老闆狄克·巴頓設計,這是最早使用積體電路而非電晶體的重要計算機之一。就像閔代爾講的,它是第一個計算機機載導航系統,設計為由人來控制,但是具備“電傳操縱系統”自動駕駛技術——當今噴氣客機標配的計算機導航系統前身。
這個系統在永久儲存器裡儲存12,000 多個“字”——雷神工人穿的那些銅“纜”——在可擦寫儲存器中有 1,024 個字。“這是第一次,在宇宙飛船內設定重要計算機,併為任務賦予許多職責,”曾在 MIT的儀器實驗室為登月艙寫程式碼的唐·埃爾斯說。“我們證明了這是能夠做到的。我們以在今天看來異常小的記憶體而且非常慢的計算速度完成了。”沒有它,內爾·阿姆斯特朗到不了月球。並且,沒有漢密爾頓、埃爾斯和MIT工程師團隊寫的軟體,計算機就是一廢品。
這一點在1969年7月20日變得顯而易見,就在阿波羅11號在月球“靜海”著陸前的幾分鐘。由於阿波羅軟體工程師唐·埃爾斯所說的“文件錯誤”,阿波羅的計算機在這個任務的關鍵階段開始報出令人擔心的錯誤資訊。但這正是漢密爾頓和同事們贏得的技術爭論拯救了那一天。錯誤資訊彈出來,因為計算機負載過重,進行了一系列不必要的運算,實際上,最需要做的是將登月艙著陸月面。而休斯頓這邊的工程師們知道,依靠阿波羅獨特的非同步能力,計算機會集中處理手頭的任務——將老鷹號降落在靜海。當軟體認識到沒有足夠的空間處理所有的它要做的功能,它通過錯誤檢測處理,專注於優先順序最高的工作,漢密爾頓說。
「這是永遠不會發生的」
一天,勞倫在玩 MIT 指令艙模擬器的顯示器鍵盤單元,暱稱 DSKY (讀dis-key)。當她擺弄鍵盤時,一條錯誤資訊彈出來。當模擬器處於飛行中,勞倫啟動了一個叫 P01的發射前程式,使模擬器崩潰。宇航員無論如何都不會這麼做,但是,漢密爾頓想增加程式碼來預防崩潰。這個想法被 NASA 否決。“我們被多次告知,宇航員不能犯任何錯誤,”她說。“他們訓練得完美無缺。”於是,漢密爾頓轉而建立了一條程式標註 —— NASA的工程師和宇航員都能看到的一個程式文件附言,上面寫著:“飛行中不要選擇P01”。漢密爾頓想把錯誤檢查程式碼新增到阿波羅系統,防止系統混亂。但這在她的上司看來是多餘的。“所有人說,‘這是永遠不會發生的’” 漢密爾頓回憶道。
但這的確發生了。剛好就在1968 年聖誕節前後——阿波羅8號第一次載著宇航員到月球有人軌道飛行的歷史時刻的第五天——宇航員吉姆·拉威爾在飛行中無意中選擇了P01。當休斯頓的電話打進來,漢密爾頓正在儀器實驗室的二樓會議室。啟動 P01 程式擦掉了拉威爾收集的所有的導航資料。這可是個問題。沒有這些資料,阿波羅計算機沒法把宇航員帶回家。花了九個小時鑽研桌子上厚達8英寸的程式清單後,他們想出了一個方案。休斯頓只要上傳新的導航資料,一切就會恢復正常。感謝漢密爾頓——還有勞倫——阿波羅號宇航員回家了。
也感謝漢密爾頓和她開創的工作,關於人類能夠做什麼、成為什麼這個問題,不僅在外太空被改寫,更給地球帶來深刻變革。軟體工程學,這個漢密爾頓開創的概念,從登月到所有人類活動,都找到了用武之地。到了20世紀70年代,漢密爾頓離開了NASA和阿波羅計劃,之後建立和領導過多個軟體公司。今天,距離她的公司漢密爾頓科技幾條街就是麻省理工,那個她的事業開始的地方——那個程式碼革命的中心,仍然在仰望著星空。
【伯樂線上】再推薦閱讀這篇舊文:《就是這個美女程式設計師,寫出了讓阿波羅成功登陸月球的程式碼!》