2017年9月15日,土星探測儀卡西尼-惠更斯號已宣告自毀成功,完成了人類探索土星的悲壯史命。
但偉大歸偉大,其實在卡西尼身上也發生過讓人哭笑不得的錯誤。
卡西尼-惠更斯號,那口金色的「鍋」便是惠更斯
當年的卡西尼身上還帶著一枚用於探測土衛六(也稱泰坦星,土星衛星中最大的一個)的「惠更斯」號探測器。
當時「卡西尼-惠更斯」號非常完美地登陸了土衛六,但是地面卻一直沒有收到儀器傳來的數據。
惠更斯探測器登陸模擬圖
經徹查後,結果讓所有人大跌眼鏡,原因竟是地面控制員忘了按啟動接收按鈕。
最後這個小失誤導致了大量的數據丟失,包括原本應收到的700張珍貴圖片,最後也只剩下350張。
而設計者大衛·阿特金森十八年的努力就這樣功虧一簣,而惠更斯號則得名卡西尼的「豬隊友」。
臥薪嘗膽18年的大衛·阿特金森
其實類似這種事情,在航天史上從來沒少發生。
人為錯誤確實低級,但卻難以避免。
像執行人類第一次登月任務的阿波羅計劃,也曾經因為一個按鈕的事,差點導致機毀人亡。
但幸運的是,那次有一位「女程式設計師」挺身而出,拯救這場浩劫。
她在「最無用」的部門裡,卻做了最有用的事情。
只是當年極少人意識到她的貢獻,到現在她的故事才被重新提起。
沒有她,就沒有阿姆斯特朗的一小步和人類的一大步。
瑪格麗特·希菲爾德·漢密爾頓
瑪格麗特·希菲爾德·漢密爾頓,1936年出生於一個美國普通家庭。
她從小就是典型的「別人家的孩子」,成績優異,性格溫和。
高中畢業後,她就順利考上大學,主修數學。
在那裡她也結識了詹姆斯·漢密爾頓,成了漢密爾頓太太。
很自然地,大學畢業後她成了一名老師,教數學和法語。
瑪格麗特
那時,她的丈夫漢密爾頓還在哈佛法學院繼續深造。
所以一邊工作的她,還主動承擔起了所有的家務。
等到丈夫學成後,瑪格麗特才有機會繼續深造,再讀一個抽像數學的學位。
然而,他們小兩口的生活並不富裕。
為了幫補家用,1962年瑪格麗特也額外找了一份在MIT儀表實驗室的臨時編碼工作。
也就是這個決定,讓她一腳踏入了程序的殿堂。
最初,她負責編寫在計算機上運行的天氣預報軟體。
但因為工作異常出色,很快就獲得了轉正資格,並加入著名的林肯實驗室。
那時,她的工作任務也從簡單的程序變到為美國軍方的「賽其」(SAGE)系統*寫代碼。
*註:「賽其」系統,被稱為國際網際網路的鼻祖,也是阿帕網的前身,主要目的是在冷戰時期偵查蘇聯有可能發起的核攻擊。
1962年,瑪格麗特參加SAGE項目時期的照片
在上個世紀60年代,程式設計師可沒有今日這麼風光,更別提「軟體工程師」這樣響亮的頭銜。
和今日科技圈少有的女工程師一樣,當年的瑪格麗特就是一個不折不扣的異類。
雖然名不正言不順,但當年程式設計師們的工作可比現在復雜上幾十倍。
瑪格麗特在打字機上打出的代碼
在那個年代,並不是敲敲鍵盤就能寫出代碼那麼簡單。
瑪格麗特首先需要將代碼用打字機寫到紙上,連Debug(排錯)的功能都只能靠腦力檢查。
在確認無誤後,這些信息才會交給一群精通針線活的「小老太太」(Little Old Ladies)。
她們會像繡花一樣用磁環把信息編到內存裡,當銅線穿過磁芯代表1,繞過磁芯則代表0。
小老太太們被雇傭來專門將程序寫入電腦
然而這些都還不是最難的。
那個年代正是程序的「開荒期」,軟體工程也不是一個拿捏得十分準確的領域,很多東西還未統一。
所以要想為一個軟體編程,至少要學好幾套彙編語言。
而剛進去的瑪格麗特更像一塊白紙,還需要面對各種棘手的程序,任誰都得崩潰。
但也正是這些五花八門的難題,激起了對編程的無限興趣。
瑪格麗特正在手動編程
隨著日漸豐富的編程經驗,瑪格麗特也慢慢成了系統編程的專家。
而另一邊甘迺迪也在1961年發起的阿波羅登月計劃,這就成了瑪格麗特人生重要的轉折點。
那時的她也加入到了阿波羅計劃,為登月太空船寫程序。
在阿波羅計劃的最初,好像並沒有「軟體」什麼事。
就連在原始檔案列出的阿波羅任務的各項需求中,竟從頭到為都沒有提到軟體這個詞,更別提預算什麼的。
之後隨著阿波羅項目逐漸啟動,NASA才意識到軟體的重要,逐漸把軟體團隊擴大到400人。
在1965年,瑪格麗特也成了整個軟體編程部的部長。
隨著責任變重,瑪格麗特的壓力也越來越大。
有一次她甚至還做夢見到,新聞頭條是阿波羅墜毀,最後追查下來竟是自己的程序有誤。
當時她從夢中驚醒,就連夜跑回實驗室,竟然還真的在程序中發現了一個小錯誤並改正。
瑪格麗特與女兒勞倫
在那段日子裡她的女兒勞倫也出生了,所以特別忙的時候瑪格麗特還不得不將女兒帶去實驗室。
她在工作的時候,小女兒就在旁邊玩耍,累了就直接在地板睡覺。
身邊的人都對這位「工作狂媽媽」十分不理解,常問她「你怎麼忍心這麼不顧自己的孩子」。
雖然心有愧疚,但她還是對神秘的程序十分痴迷,不能自拔。
一天,女兒勞倫在指令艙模擬器中玩耍。
當她在鍵盤上亂按時,一條錯誤的信息突然彈出。
原因是她不小心啟動了一個叫P01的預運行程序,導致原本還在飛行狀態的模擬器瞬間崩潰。
看到這種情況,瑪格麗特就提議在整個系統中多加一段代碼,防止類似的狀況發生。
如果在飛行過程中,太空人操作出了什麼差池,還有挽回的地步。
但是當時所有人都覺得太空人是受過嚴格訓練,操作是完美的,「絕對不可能出錯」。
再加上當年的計算機存儲空間和運算能力十分有限,決策者也不想添加任何「累贅」的部分。
所以瑪格麗特也無可奈何,只能在操作系統中添加了一個備註「不要在飛行中選擇P01模式」。
但是可怕的事情,還是發生了。
阿波羅8號繞月飛行軌道
1968年12月21日,人類首次繞月飛行的阿波羅8號發射。
但就在飛行的第5天,太空人Jim Lovell還是在無意間按下了P01模式。
這個模式的啟動後,所有導航數據都會被清空。
這樣下去,飛船將無法把太空人送回地球,在太空中迷路將是瞬眼發生的事。
知道要出大事了,決策者也十萬火急地打電話到瑪格麗特那,讓她想一個補救的辦法。
於是,瑪格麗特也馬上帶著MIT的一群程式設計師,連夜奮戰了9個小時,才設計出了一個新的計劃。
當時這份新的導航數據上傳後,大家才鬆了一口氣。
一切又回到正常的軌道,阿波羅8號也順利載著太空人返航。
這次事件後,決策者與瑪格麗特都更明顯地感受到軟體對登月計劃的重要性。
軟體幾乎成了美國要贏得太空競賽的重要籌碼,瑪格麗特加班的頻率也越來越高,時間也越來越長。
但瑪格麗特最大的挑戰還在後面。
就在阿波羅11號飛船即將登陸月球前的幾分鐘,就是這麼一個關鍵的時刻,危機還是發生了。
登月時期,人類能用的電腦都是超小內存、計算速度極度緩慢的。
系統能永久保存的不過1.2萬位元組(約100兆),而臨時存儲的空間就更小了,只有1024位元組(1兆)。
用瑪格麗特的話來說就是「今天看起來這簡直不可思議」。
所以就在阿波羅11號離月球不遠處時,電腦也因過度運轉,大量地彈出錯誤信息,系統幾近崩潰。
如果電腦扛不住,飛船將毫無疑問墜毀,成為世上最「悲壯」的登月。
瑪格麗特為阿波羅飛船寫的代碼與她嬌小的身軀相比
但就是在這麼「不可思議」的硬體條件下,瑪格麗特設計的系統竟頂住所有壓力。
原因是她首創的「異步處理程序(非同步處理)」,教會了電腦如何「決擇」,為阿波羅11號解決了危機,也為自己贏得了榮譽。
飛船在登月過程中,除了要控制推進外,還會進行著一系列不那麼重要的計算。
那時瑪格麗特就考慮到,當大量數據湧入電腦,系統扛不住時應該怎麼辦。
所以為了保險起見,她細心地在原有的基礎上添加了這個「異步處理程序」,來解決問題。
當沒有足夠空間運行時,電腦最寶貴的存儲空間便會留給最關鍵的部分,比如最重要的——讓鷹號在月球登陸。
而其他低優先級的任務,如雷達交換數據任務將會被暫時切斷。
每個人都看到了阿姆斯壯在月球上的第一步。
然而,不是每個人都知道這背後,有這麼一位女程式設計師也為女性邁出了一大步。
瑪格麗特拯救人類的登月計劃時,年齡不過33歲。
除了登月,這位先驅女極客還曾為廣大「碼農」(寫代碼的農夫)正名,首次使用了「軟體工程師」一詞來稱呼包括自己在內的程式設計師。
她說:「希望給予做軟體的人們以尊重,因為他們和其他做硬體的人一樣,在這個宏大的工程裡各司其職。」
登月成功後,瑪格麗特也功成身退,離開NASA出來創建自己的公司,繼續在軟體行業努力。
2003年,她也因當初的貢獻獲得美國太空人對個人的最高獎勵,NASA傑出太空行動獎。
2016年,她再次獲得美國最高的民事榮譽總統勳章,與蓋茨、喬丹同台領獎。
回顧那段從零開始的程式設計師生活,她說自己是世界上最幸運的人。
因為「別無選擇,只能成為先驅者,沒有時間成為初學者」。