文/李嵩

▲瑪格麗特·漢密爾頓
50年前的7月20日,“阿波羅11號”的“鷹號”登月艙制動火箭點火,開始進入月表著陸的最后程序。這時候軟件報警的紅燈突然亮起,接著緊促的警報聲開始鉆進兩名航天員尼爾·阿姆斯特朗和巴茲·奧爾德林的耳鼓。“錯誤代碼1202?”,兩名航天員即使訓練有素,也都沒有想起來這個代碼代表的是什么錯誤類型。正在聚精會神駕駛“鷹號”的阿姆斯特朗見登月艙似乎一切正常,抬手就關閉了報警按鍵。沒多久,軟件報警燈再次亮起,這次的錯誤代碼是“1201”。阿姆斯特朗這次沒有關閉警報,他的注意力都集中在控制降落艙和即將用盡的燃料指示器上。在警報聲中,“鷹號”依靠阿姆斯特朗的手動控制,平穩地降落在了月球表面。“休斯頓,這里是靜海基地,‘鷹號’著陸成功!”幾十萬公里外的休斯頓歡聲雷動,兩名航天員的手也緊緊握在一起。他倆想不到的是,一位女程序員設計的控制軟件剛剛拯救了他們兩個的生命,也拯救了這次創造人類歷史的航天行動。這位女程序員的名字叫做瑪格麗特·漢密爾頓。
在事后調查中發現,軟件錯誤代碼的含義是“執行溢出”,原因是登月艙的軌道對接雷達在降落中沒有被關閉,其傳過來的大量無用數據占滿了計算機的存儲空間,使計算機不堪重負。好在控制計算機軟件具有“異步”功能,優先選擇處理了安全著陸方面的任務,而終止了處理無用的雷達數據的工作,使“鷹號”的計算機始終堅持在為阿姆斯特朗的著陸服務。這都得益于軟件設計者瑪格麗特·漢密爾頓超前的認識與異乎尋常的責任感,她設計的軟件在錯誤出現時,經受住了考驗。

▲瑪格麗特為阿波羅計劃編寫的軟件代碼摞起來超過了她的身高,這張照片也成為阿波羅計劃的經典瞬間之一
瑪格麗特在少年時代就在數學方面展現出了特殊的天分,每個數學公式她都會詳細推導,這樣理解了過程就不用死記硬背了。1960年,24歲的瑪格麗特憑借自己的數學才能在麻省理工學院謀得了一份編寫程序的工作,賺取報酬資助自己的丈夫完成了法學進修,之后她的丈夫想讓她去哈佛做個兼職,但瑪格麗特回絕了,“我會讓你以我為榮的,但絕不是你希望的那種方式。”瑪格麗特把自己邏輯推理方面的才華應用到了編程方面,并漸漸在業內有了名氣。
不久后,“阿波羅計劃”正式啟動,美國宇航局找到了瑪格麗特,“我們要找會編程的人,幫我們把人送到月球上去。”瑪格麗特的人生由此而改變。
當時并沒有“軟件工程”這一學科,甚至在“阿波羅計劃”最早的預算中,根本就沒有軟件這一門類,給登月飛船上的計算機編寫控制指令程序應該做什么,又要怎么做,沒有人知道。用瑪格麗特的話來說,“我們走進去的時候,沒有人知道我們正在做的是什么,它就像是蠻荒的西部,沒有被開發過,也沒有人教我們。”

▲瑪格麗特(左二)與同事一起討論阿波羅飛船的導航軟件

▲瑪格麗特在阿波羅指令艙模擬機內調試程序
瑪格麗特就這樣成為了“阿波羅計劃”的第一個程序員。她從“軟件”的概念開始培訓,帶領一群美國宇航局四處搜羅來的數學天才“摸著石頭過河”,開創了整套軟件設計與測試的全部開發流程,甚至“軟件工程師”這個詞都是由她自己創造出來的。美國宇航局后來逐漸意識到了軟件的重要性,并視其為在登月競賽中擊敗蘇聯的關鍵環節之一。到了1968年,與瑪格麗特一起從事與軟件相關工作的人員已經達到了400人之眾。
瑪格麗特十分鐘愛這份有時枯燥,但卻充滿神秘感和挑戰性的工作。工作之余她會和團隊里的人講講冷笑話,還會在深夜工作結束后去喝一杯,也常在喝完酒后興沖沖的趕回實驗室修改一段突然想到的代碼錯誤。

▲瑪格麗特(前排左一)和同事們一起關注阿波羅8號飛行任務

▲2016年底,時任美國總統奧巴馬為瑪格麗特頒發自由勛章
在每次程序確定后,瑪格麗特都要求她的團隊使用模擬器一遍一遍地測試,雖然很多問題她早就想到了,但是畢竟“不出錯”只是一個理想狀態。被問起為什么如此有“責任感”,瑪格麗特打趣說,是因為“不想在報紙頭條上看到《阿波羅計劃失敗,瑪格麗特團隊難辭其咎》”。
在上世紀60年代的美國,女性婚育后還出來工作被認為是難以理解的事情。瑪格麗特經常被鄰居們責問:“你怎么能這么不顧你的小孩?”為了兼顧家庭和工作,瑪格麗特在工作忙時都會把女兒勞倫帶到實驗室。每個挑燈夜戰的晚上,勞倫都會在實驗室的地板上睡著,醒來后獨自玩耍。
一天,小勞倫照常在實驗室陪母親工作,無所事事的她開始擺弄控制艙模擬器鍵盤上的按鍵,正處在飛行狀態的模擬器一下子就失靈了。原來小勞倫偶然啟動了一個叫做“P01”的預運行程序,這個程序會刪除導航系統內的數據。
雖然訓練有素的航天員不會犯小勞倫這樣的錯誤,但瑪格麗特還是想在軟件中增加一段代碼,來防止這種事情的發生。但是這一想法被美國宇航局否決了,因為“航天員絕不會犯錯,他們的訓練近乎完美”,于是瑪格麗特轉而增加了一行操作說明,讓所有美國宇航局的工程師和航天員都可以看到:“不要在飛行過程中啟動P01”。但所有人都告訴她說,“那樣的事情永遠都不會發生”。
可是“墨菲定律”再次應驗了。在“阿波羅8號”環繞月球飛行的任務中,航天員吉姆·洛威爾不小心啟動了P01程序,所有導航數據都被清空,“阿波羅8號”找不到回家的路了。
瑪格麗特和她的程序員們需要想出一個辦法帶航天員回家,而且還必須是一個完美無缺的辦法。在花費9個小時研究了2000多頁的程序列表后,瑪格麗特向美國宇航局提交了她們的辦法,休斯頓重新上傳了一份新的導航數據,終于重啟了“阿波羅8號”的導航系統。瑪格麗特成功地讓航天員們找到了回家的路,這之后,瑪格麗特進一步完善了控制程序,使系統具有更強的防錯能力,保證阿姆斯特朗穩健地邁出了人類的“一大步”。
2016年底,美國總統奧巴馬為表彰瑪格麗特在計算機編程領域做出的貢獻,向她頒發了自由勛章。奧巴馬在頒獎典禮上表示,瑪格麗特代表了為人類航天事業默默無聞奮斗著的一代女性。

▲伊凡帕電站用太陽能電池板組成瑪格麗特的月光肖像
當地時間2019年7月18日日落時分,美國莫哈韋沙漠內出現了十分壯觀的場面。伊凡帕太陽能發電站的10多萬面太陽能電池板開始自動調整角度,初生的月光照到這些角度不一的鏡面上,明暗交織,滿月時分,太陽能電池板反射的月光形成了由瑪格麗特的半身像、“鷹號”登月艙及“阿波羅11號”、“瑪格麗特·漢密爾頓”等字樣組成的巨型畫面。CNN評價道:“她用代碼將人類送上月球,50年后,人類用月光肖像向她致敬。”

▲為紀念瑪格麗特的杰出貢獻,著名玩具制造商樂高按照她的經典照片制作的場景