1969年7月20日下午4時17分42秒,美國宇航員阿姆斯特朗小心翼翼地將左腳從登月艙放到了月球的表面,阿波羅11號登月任務成功執行。這是有史以來人類第一次踏上外星球,雖然已過去整整50年,但那句“我的一小步,人類的一大步”的經典獨白,仍然回蕩在每個人心中。
(阿波羅11號登月照片)
可正是這樣一個具有跨時代里程碑意義的阿波羅計劃,卻曾兩度因為程序問題差點機毀人亡。幸運的是,有一位女程序員臨危受命、挺身而出,拯救了這兩場浩劫。可以說沒有她,就沒有阿姆斯特朗的成功登月。這位女性就是瑪格麗特·希菲爾德·漢密爾頓,世界上健在的最偉大的程序員。
(瑪格麗特·希菲爾德·漢密爾頓)
瑪格麗特出生在美國一個普通家庭,從小成績優異的她大學畢業后,為了補貼家用,先是在MIT儀表實驗室兼職臨時編碼,由此走進程序的殿堂;工作上的異常出色,又讓她很快加入到著名的林肯實驗室,開始為美國軍方的賽其系統(即因特網前身)編寫代碼。
但上世紀60年代正值程序“開荒期”,領域不明確、定義不統一、匯編語言五花八門、科技受限、工作復雜以及其他棘手難題不斷阻礙著軟件編程的發展,這種情形直到瑪格麗特成為系統編程專家并加入阿波羅登月計劃的初期也沒有改變。等到阿波羅項目逐漸啟動,后知后覺的NASA才意識到軟件的重要性,并把團隊擴大到400人。1965年,瑪格麗特成為軟件編程部部長,開始為登月飛船編寫程序,兩次事故的拯救也從這里開始。
(瑪格麗特和她為阿波羅11號飛船寫的源代碼)
成為部長后的瑪格麗特責任與壓力越來越大。她經常將女兒勞倫帶去實驗室,因為只有在那里她才能一邊照顧孩子,一邊繼續工作。某天,勞倫在指令艙模擬器上玩耍,忽然彈出了一條錯誤信息。經過排查后,瑪格麗特發現原因在于一個叫P01的預運行程序,它的啟動會導致飛行狀態的模擬器瞬間崩潰。因此,她提議在整個系統中多加一段代碼,防止真實飛行過程中宇航員操作失誤,造成不可挽回的局面。但由于對宇航員的過度崇拜和當時硬件條件的限制,方案最終被否決,瑪格麗特只能無奈在操作系統備注“不要在飛行中選擇P01模式”。
但事故還是發生了。1968年12月21日,人類首次繞月飛行的阿波羅8號發射升空;飛行第5天,宇航員誤觸P01模式,所有導航數據瞬間清空。在失去導航的情況下,飛船根本無法回到地球軌道,只能成為宇航員的太空墳墓。如此絕境下,瑪格麗特帶著MIT的程序員們連夜奮戰9小時,設計出了一份新的導航數據并上傳到阿波羅8號,讓它回到正軌,順利返航。
(從海中打撈阿波羅8號指令艙)
阿波羅8號事件后,NASA和瑪格麗特明顯認識到了軟件編程對登月計劃的重要性,但更大的挑戰隨之而來。1969年7月20日,在阿波羅11號飛船登陸月球前幾分鐘這樣一個關鍵時間點上,危機發生了。
上世紀60到70年代,電腦不僅內存超小,計算速度也極度緩慢,系統只能永久保存12000字節的數據,臨時存儲空間更是只有1024字節。所以在阿波羅11號登月艙離月球不遠處時,電腦系統因過度計算幾近崩潰。而一旦崩潰,飛船將毫無疑問地墜毀在月球,成為史上最“悲壯”的登月。
在這樣的硬件條件下,瑪格麗特設計的系統頂住所有壓力。因為在系統設計之初,她就考慮到了當大量數據涌入電腦、系統扛不住時要怎么辦。為了保險起見,她在原有的基礎上首創并添加了異步處理程序:當電腦沒有足夠空間運行時,最寶貴的存儲空間便會留給最關鍵的部分——阿波羅11號最重要的任務當然是成功登月,而其他如雷達交換數據等低優先級的任務便會暫時切斷。
通過這個程序,電腦學會了如何“抉擇”,阿波羅11號解決了危機,瑪格麗特也為自己贏得了榮耀。在阿姆斯特朗為人類邁出一大步的同時,這位阿波羅11號背后的女程序員也為全人類的女性邁出了一大步。
拯救阿波羅計劃時,瑪格麗特年僅33歲。在這之后她離開了NASA,創辦了自己的公司,并帶領自己的團隊設計出許多程序框架,廣泛應用于航天航空領域。同時,她也為過去不受重視的程序員們正名,并首次使用了軟件工程師一詞來稱呼包括自己在內的程序員,她說:“希望能給予做軟件的人們以尊重,因為他們和其他做硬件的人一樣,在這個宏大的工程里各司其職。”
(《WIRED》上近期的她)
在回顧過去那段程序員生涯時,她認為自己是世界上最幸運的人,因為“別無選擇,只能成為先驅者,沒有時間成為初學者”。而隨著時代的發展,也有越來越多的女性開始加入IT工程師的隊伍。所以,當我們在享受著5G時代萬物智聯給生活帶來的便利時,請不要忘記還有這么一群人,她們在前人鋪下的道路上行進,在層疊的代碼上默默無聞地銘刻屬于女程序員的光榮與輝煌。