文/李嵩
▲瑪格麗特·漢密爾頓
50年前的7月20日,“阿波羅11號”的“鷹號”登月艙制動火箭點火,開始進入月表著陸的最后程序。這時候軟件報警的紅燈突然亮起,接著緊促的警報聲開始鉆進兩名航天員尼爾·阿姆斯特朗和巴茲·奧爾德林的耳鼓?!板e誤代碼1202?”,兩名航天員即使訓練有素,也都沒有想起來這個代碼代表的是什么錯誤類型。正在聚精會神駕駛“鷹號”的阿姆斯特朗見登月艙似乎一切正常,抬手就關(guān)閉了報警按鍵。沒多久,軟件報警燈再次亮起,這次的錯誤代碼是“1201”。阿姆斯特朗這次沒有關(guān)閉警報,他的注意力都集中在控制降落艙和即將用盡的燃料指示器上。在警報聲中,“鷹號”依靠阿姆斯特朗的手動控制,平穩(wěn)地降落在了月球表面?!靶菟诡D,這里是靜?;?,‘鷹號’著陸成功!”幾十萬公里外的休斯頓歡聲雷動,兩名航天員的手也緊緊握在一起。他倆想不到的是,一位女程序員設(shè)計的控制軟件剛剛拯救了他們兩個的生命,也拯救了這次創(chuàng)造人類歷史的航天行動。這位女程序員的名字叫做瑪格麗特·漢密爾頓。
在事后調(diào)查中發(fā)現(xiàn),軟件錯誤代碼的含義是“執(zhí)行溢出”,原因是登月艙的軌道對接雷達在降落中沒有被關(guān)閉,其傳過來的大量無用數(shù)據(jù)占滿了計算機的存儲空間,使計算機不堪重負。好在控制計算機軟件具有“異步”功能,優(yōu)先選擇處理了安全著陸方面的任務,而終止了處理無用的雷達數(shù)據(jù)的工作,使“鷹號”的計算機始終堅持在為阿姆斯特朗的著陸服務。這都得益于軟件設(shè)計者瑪格麗特·漢密爾頓超前的認識與異乎尋常的責任感,她設(shè)計的軟件在錯誤出現(xiàn)時,經(jīng)受住了考驗。
▲瑪格麗特為阿波羅計劃編寫的軟件代碼摞起來超過了她的身高,這張照片也成為阿波羅計劃的經(jīng)典瞬間之一
瑪格麗特在少年時代就在數(shù)學方面展現(xiàn)出了特殊的天分,每個數(shù)學公式她都會詳細推導,這樣理解了過程就不用死記硬背了。1960年,24歲的瑪格麗特憑借自己的數(shù)學才能在麻省理工學院謀得了一份編寫程序的工作,賺取報酬資助自己的丈夫完成了法學進修,之后她的丈夫想讓她去哈佛做個兼職,但瑪格麗特回絕了,“我會讓你以我為榮的,但絕不是你希望的那種方式。”瑪格麗特把自己邏輯推理方面的才華應用到了編程方面,并漸漸在業(yè)內(nèi)有了名氣。
不久后,“阿波羅計劃”正式啟動,美國宇航局找到了瑪格麗特,“我們要找會編程的人,幫我們把人送到月球上去?!爆敻覃愄氐娜松纱硕淖?。
當時并沒有“軟件工程”這一學科,甚至在“阿波羅計劃”最早的預算中,根本就沒有軟件這一門類,給登月飛船上的計算機編寫控制指令程序應該做什么,又要怎么做,沒有人知道。用瑪格麗特的話來說,“我們走進去的時候,沒有人知道我們正在做的是什么,它就像是蠻荒的西部,沒有被開發(fā)過,也沒有人教我們?!?/p>
▲瑪格麗特(左二)與同事一起討論阿波羅飛船的導航軟件
▲瑪格麗特在阿波羅指令艙模擬機內(nèi)調(diào)試程序
瑪格麗特就這樣成為了“阿波羅計劃”的第一個程序員。她從“軟件”的概念開始培訓,帶領(lǐng)一群美國宇航局四處搜羅來的數(shù)學天才“摸著石頭過河”,開創(chuàng)了整套軟件設(shè)計與測試的全部開發(fā)流程,甚至“軟件工程師”這個詞都是由她自己創(chuàng)造出來的。美國宇航局后來逐漸意識到了軟件的重要性,并視其為在登月競賽中擊敗蘇聯(lián)的關(guān)鍵環(huán)節(jié)之一。到了1968年,與瑪格麗特一起從事與軟件相關(guān)工作的人員已經(jīng)達到了400人之眾。
瑪格麗特十分鐘愛這份有時枯燥,但卻充滿神秘感和挑戰(zhàn)性的工作。工作之余她會和團隊里的人講講冷笑話,還會在深夜工作結(jié)束后去喝一杯,也常在喝完酒后興沖沖的趕回實驗室修改一段突然想到的代碼錯誤。
▲瑪格麗特(前排左一)和同事們一起關(guān)注阿波羅8號飛行任務
▲2016年底,時任美國總統(tǒng)奧巴馬為瑪格麗特頒發(fā)自由勛章
在每次程序確定后,瑪格麗特都要求她的團隊使用模擬器一遍一遍地測試,雖然很多問題她早就想到了,但是畢竟“不出錯”只是一個理想狀態(tài)。被問起為什么如此有“責任感”,瑪格麗特打趣說,是因為“不想在報紙頭條上看到《阿波羅計劃失敗,瑪格麗特團隊難辭其咎》”。
在上世紀60年代的美國,女性婚育后還出來工作被認為是難以理解的事情。瑪格麗特經(jīng)常被鄰居們責問:“你怎么能這么不顧你的小孩?”為了兼顧家庭和工作,瑪格麗特在工作忙時都會把女兒勞倫帶到實驗室。每個挑燈夜戰(zhàn)的晚上,勞倫都會在實驗室的地板上睡著,醒來后獨自玩耍。
一天,小勞倫照常在實驗室陪母親工作,無所事事的她開始擺弄控制艙模擬器鍵盤上的按鍵,正處在飛行狀態(tài)的模擬器一下子就失靈了。原來小勞倫偶然啟動了一個叫做“P01”的預運行程序,這個程序會刪除導航系統(tǒng)內(nèi)的數(shù)據(jù)。
雖然訓練有素的航天員不會犯小勞倫這樣的錯誤,但瑪格麗特還是想在軟件中增加一段代碼,來防止這種事情的發(fā)生。但是這一想法被美國宇航局否決了,因為“航天員絕不會犯錯,他們的訓練近乎完美”,于是瑪格麗特轉(zhuǎn)而增加了一行操作說明,讓所有美國宇航局的工程師和航天員都可以看到:“不要在飛行過程中啟動P01”。但所有人都告訴她說,“那樣的事情永遠都不會發(fā)生”。
可是“墨菲定律”再次應驗了。在“阿波羅8號”環(huán)繞月球飛行的任務中,航天員吉姆·洛威爾不小心啟動了P01程序,所有導航數(shù)據(jù)都被清空,“阿波羅8號”找不到回家的路了。
瑪格麗特和她的程序員們需要想出一個辦法帶航天員回家,而且還必須是一個完美無缺的辦法。在花費9個小時研究了2000多頁的程序列表后,瑪格麗特向美國宇航局提交了她們的辦法,休斯頓重新上傳了一份新的導航數(shù)據(jù),終于重啟了“阿波羅8號”的導航系統(tǒng)?,敻覃愄爻晒Φ刈尯教靻T們找到了回家的路,這之后,瑪格麗特進一步完善了控制程序,使系統(tǒng)具有更強的防錯能力,保證阿姆斯特朗穩(wěn)健地邁出了人類的“一大步”。
2016年底,美國總統(tǒng)奧巴馬為表彰瑪格麗特在計算機編程領(lǐng)域做出的貢獻,向她頒發(fā)了自由勛章。奧巴馬在頒獎典禮上表示,瑪格麗特代表了為人類航天事業(yè)默默無聞奮斗著的一代女性。
▲伊凡帕電站用太陽能電池板組成瑪格麗特的月光肖像
當?shù)貢r間2019年7月18日日落時分,美國莫哈韋沙漠內(nèi)出現(xiàn)了十分壯觀的場面。伊凡帕太陽能發(fā)電站的10多萬面太陽能電池板開始自動調(diào)整角度,初生的月光照到這些角度不一的鏡面上,明暗交織,滿月時分,太陽能電池板反射的月光形成了由瑪格麗特的半身像、“鷹號”登月艙及“阿波羅11號”、“瑪格麗特·漢密爾頓”等字樣組成的巨型畫面。CNN評價道:“她用代碼將人類送上月球,50年后,人類用月光肖像向她致敬?!?/p>
▲為紀念瑪格麗特的杰出貢獻,著名玩具制造商樂高按照她的經(jīng)典照片制作的場景