1936年,瑪格麗特出生于美國一個普通的家庭。大學時,她主修數學。讀書期間,她嫁給了詹姆斯·漢密爾頓。畢業后,瑪格麗特找了一份教師的工作。那時,她的丈夫還在哈佛法學院讀書,她因而承擔起了家庭的重任。
正當兩人的的小日子過得緊緊巴巴時,一個工作機會擺在了瑪格麗特面前,當時計算機科學的先鋒MIT里有一個實驗室在招臨時編碼工,瑪格麗特抱著試試看的態度,就這樣踏進了程序員的殿堂。
一邊看孩子一邊寫程序
一開始,她為天體學系寫天氣預報系統的代碼,后來又去了大名鼎鼎的林肯實驗室,為美國軍方SAGE項目寫代碼——用電腦程序幫助偵查危險的“不友好的飛行物”。
這些毫無頭緒的程序有多難處理呢?對此,當時有人用希臘語和拉丁語寫評論來取樂。而瑪格麗特是全實驗室第一個解決問題的人,她還把調試方法翻譯成希臘語和拉丁語,漂漂亮亮地回敬了一發。
瑪格麗特的女兒勞倫也在這時出生了,繁忙的媽媽不得不將小勞倫帶去工作,讓她睡在實驗室的地板上,醒來后則獨自玩耍。
當時,人們對這樣一個“工作狂媽媽”十分不理解,但瑪格麗特并不在意,她熱愛著這份雖然枯燥卻充滿挑戰和“神秘感”的工作。
挽救飛船的“不重要”程序
由于出色的表現,瑪格麗特獲得了另外一個機會:加入MIT的Charles Stark Draper實驗室,帶領一個小團隊為NASA的阿波羅計劃寫軟件。
在阿波羅最初的預算報告中,根本就沒有“軟件”二字。不過后來,NASA意識到了軟件的重要,逐漸把軟件相關的團隊擴大到了400多人。但瑪格麗特依然是一個無名小卒,她負責的是整個計劃中最不受重視的部分:“萬一”任務失敗之后的后備方案,連這個部分的名字,都被稱作“Forget it”。
“我想為整個系統中加入一旦人工出錯之后的備用糾錯方案,”瑪格麗特說,“但是他們不同意。他們說,宇航員們都經過了嚴格的、完美的訓練,‘絕對不可能出錯。”
那時,計算機的存儲空間和計算能力都十分有限,決策者不希望有任何“累贅”的部分。瑪格麗特無奈,只好在操作系統里做了一個備注:“不要在飛行時選擇P01模式”。
但壞事兒還是發生了。在阿波羅8號環繞月球任務中,宇航員羅威爾一時疏忽,按下了P01模式,所有巡航數據都被清空了,飛船分分鐘迷路。休斯頓緊急打來電話,瑪格麗特領著一群程序員,連夜奮戰了9個小時,才修復了這個問題,使阿波羅8號得以成功返航。
而真正的考驗還在后面。隨著登月計劃緊鑼密鼓的進行,美國政府和NASA都繃緊了弦。瑪格麗特的加班也越來越多。而成就總是伴隨著錯誤和風險——就在阿波羅11號歷史性著陸月面的3分鐘前,忽然警報大作,軌交雷達發來的大量數據涌入電腦存儲區,快把電腦弄崩潰了。而若是系統崩潰,飛船將毫無懸念地墜毀在月球上。
但是,瑪格麗特設計的系統頂住了這個壓力。在大量數據涌入電腦時,最寶貴的計算資源被用于最關鍵的部分,比如安全登陸,而處理不重要的雷達交互數據的任務被砍掉。
這次事件,促使她提出了后來的“異步程序”概念,即程序可以不用等待當前任務響應,先處理其他任務,待到任務處理完成之后再接受任務完成的通知。這可以提高計算效率,防止程序被卡死。
瑪格麗特拯救了人類的登月計劃,不僅是因為她的聰明,更是因為她的努力和心思縝密,她的團隊在每次程序確定之后,都會一遍遍嚴格地測試,使用模擬器來模擬登陸狀況。許多問題她早就考慮到了,畢竟“不出錯”永遠都是一個理想狀態。
“軟件工程”的誕生
在那個年代,程序員工作系統化程度很低,如果出現了錯誤,大多數都是潦草地在“出錯理由”里面填一個“有bug”來解決。但瑪格麗特認為這遠遠不夠,她認為程序員需要理解錯誤,梳理錯誤的原因,并防止下一次程序出錯。
此時,寫程序更像是一門手藝,完全沒有“軟件工程”的概念,而瑪格麗特用自己的實踐,賦予了這個詞現實的意義。她開始用“軟件工程師”來稱呼她在內的程序員,在她的推動下,“軟件工程”成了一門更規范、更系統的科學——瑪格麗特將軟件工程這份事業提升了一個高度。
離開NASA的瑪格麗特自立門戶,她在自己所涉及到的許多領域,都有創見——比如系統設計、軟件開發、過程模型、開發范式、軟件可靠性、周期自動化等。
是的,人們不應該忘記,那個在層疊的代碼背后時常沉默的女孩,也不應忘記那些為早期計算機事業付出辛勞的前輩們——請記住他們,然后在他們鋪下的道路上繼續前進。(編輯/夏冬)