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