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