50年前的程序員女神,用代碼把人類送上月球
?1969年7月20日,經過4天飛行的阿波羅11號終于來到了最關鍵的時刻:降落到月球表面。
就在這個時候,飛船計算機突然開始閃爍報警。
全球6億人在觀看電視直播,NASA飛行控制中心的氣氛讓人窒息。
人類的首次登月計劃面臨著艱難的抉擇:降落還是放棄。
幸運的是,控制中心的人對飛行控制軟件有著高度的信心,指示阿波羅11號繼續降落。
飛行控制軟件不負眾望,它忽略了那些低優先級的情況,專注于最高優先級的任務,引導著阿姆斯特朗和奧爾德林穿過坑坑洼洼的月球表面,成功著陸。
事后分析發現,是因為一個開關被放置到了錯誤的位置,導致計算機進入了過載的狀態。
那個只有2K內存的計算機既得執行降落所需的計算,又得處理開關錯誤引起的額外數據。
但是這個程序居然實現了搶占式任務:用高優先級的著陸任務打斷了低優先級的,實在太厲害了。
這個飛行控制軟件是瑪格麗特·漢密爾頓和她的團隊編寫的。
(代碼等身)
這無疑是瑪格麗特人生的最高光時刻。
后來樂高公司根據那張著名的照片開發了樂高玩具套裝:NASA中的女性,瑪格麗特成為其中的一員。
1、2K內存的計算機
瑪格麗特1936年出生于美國印第安納州,后來全家搬到了密歇根,1958年她獲得了密歇根大學的數學學士學位,隨后她在MIT找了一份工作,成為了一名程序員,開發氣象預測軟件。
這是軟件開發的蠻荒歲月,計算機科學和軟件工程還沒有建立,一切全靠程序員在工作的實踐中學習。
1961年,瑪格麗特開始參與國防項目SAGE,協助開發了美國第一個空中防御系統,通過雷達來搜索飛機。
瑪格麗特在這個項目上展示自己的天賦:“當一個新人進入項目時,總是會被分配一些沒有人能搞清楚的程序,我也被分了一個非常怪異的程序,最早寫程序的人甚至用希臘語和拉丁語來寫注釋!不過我還是成為了第一個讓這個程序跑起來的人!”
正是在SAGE項目上的成就讓瑪格麗特的人生發生了轉折。
1965年,她的丈夫在當地報紙上看到了一則消息:NASA正在尋找程序員,開發程序,把人類送上月球。
瑪格麗特非常興奮:“哇,那我一定得去!”。
這一年瑪格麗特28歲,加入了阿波羅項目,成為了項目的第一個程序員。
阿波羅項目需要開發一個精簡的計算機AGC(Appollo Guidance Computer),用來控制登月飛船。
這是一件艱難的任務,因為當時的計算機通常要占據一間屋子,但是AGC被限制到只有一立方英尺那么大。
項目組被分為兩撥人,一撥設計硬件,另外一撥開發軟件。
瑪格麗特自然成為了軟件組的負責人。
AGC只有可憐巴巴的2K內存,36K的ROM,更匪夷所思的是那個ROM是Core rope memory(芯繩存儲器?),也就是說,0和1是通過電線和微小的環形磁芯表示。
電線穿過磁芯表示1,沒有穿過表示0。
我們現在想把程序存盤,只需要按一個Ctrl + S就可以,但是想把阿波羅飛行軟件存盤,只有一種辦法:像紡織工那樣細心地把電線和磁芯給編織起來。
這個工作不能出一點兒差錯,要不然,無論代碼寫得多么正確,最終都會功虧一簣。
事實上,這個工作的確是由新英格蘭紡織廠的女工們完成的,繩索存儲器被一些程序員戲稱為Little Old Lady memory。
2、軟件工程
在NASA工作的大多數軟件工程師都是男性,有人在家里照顧孩子,但是瑪格麗特沒有辦法,在周末和晚上她會帶女兒勞拉來到辦公室。
勞拉經常看到她的媽媽在飛船中扮演宇航員來測試軟件,好奇心大起,也想試一試,結果突然間整個系統崩潰了,原來勞拉在飛船“飛行”期間,選擇了一個叫做P01的功能。
瑪格麗特意識宇航員也有可能犯類似錯誤,希望修改軟件防止它。
但是NASA的人說,宇航員都是訓練過的,絕對不會犯類似錯誤。當然,修改軟件也非常難,想想芯繩存儲器!
但是,在阿波羅8號繞月飛行的時候,宇航員恰恰犯了和她女兒一樣同樣的錯誤,飛船在太空“迷路”,無法將宇航員送回地球。得知消息的瑪格麗特帶領團隊,突擊9個小時,終于讓阿波羅8號回到正常軌道。
(支援阿波羅8號)
此后,軟件都內置了保護功能,防止類似事件的發生。
瑪格麗特開始將整個阿波羅任務視為一個系統,這個系統由3部分組成:軟件,硬件,人。
在開發飛行控制軟件的過程中,瑪格麗特創造了“軟件工程”這一術語,她要賦予“軟件”的合法性,就像硬件以及其他類型的工程一樣,構建軟件的人也應該得到應用的尊重。
在剛開始的時候,大家認為這是一個笑話:軟件開發是工程嗎?
隨著時間的推移,NASA逐漸意識到,軟件工程會成為它們的重要工具,能夠搶先蘇聯一步完成登月。
3、除了成為先行者別無選擇
“回想起來,我們是世界上最幸運的人,除了成為先行者別無選擇” ---瑪格麗特·漢密爾頓
瑪格麗特就是軟件工程領域的先行者,開發阿波羅飛行軟件這種對正確性、可靠性要求極高的軟件,沒人任何經驗可以遵循,沒有任何學校可以學習,軟件不僅要工作,而且必須第一次就正確工作。軟件不僅要可靠,而且必須能進行實時的錯誤檢測和恢復。
瑪格麗特帶領團隊出色地完成了這個軟件,在關鍵時刻把人類送上了月球。
2016年11月22日,瑪格麗特獲得了奧巴馬總統頒發的總統自由勛章,以表彰她在阿波羅登月任務開發機載飛行軟件所做的工作,以及對軟件工程的基礎性貢獻。
瑪格麗特說:當我想了解新事物或者做新東西的時候,一定不要讓恐懼成為障礙。
一個人不應該害怕說“我不知道”,“我不理解”,或者問“愚蠢的問題”。
即使事情看起來不可能,即使所謂專家說這不可能,也要繼續下去。
不要害怕犯錯,只有敢于失敗的人才能取得更大的成就。?