255 億美元的登月計劃差點搞砸,幸虧這個美女出手
1969 年 7 月 20 日,休斯頓時間下午 4 點 14 分,靜海基地附近。
飛船電腦忽然發出連續的警報聲,一連串錯誤信息像潮水般湧來,電腦系統發給宇航員的警報似乎都帶着怒氣:
引用我過載了!都這會兒了,讓我幹這個?!我馬上得執行最要緊的任務——登月!!!
此時,離阿波羅 11 號登陸月球表面只剩下 3 分鐘。
黃金時代的陰雲
對美國人來説,整個 1950 年代是一個金子般的年代。奢華的汽車,大彩電和大冰箱,還有久違的和平,美國人享受着空前的繁榮和悠閒。雖然貧富差距越來越明顯,冷戰烏雲揮之不去,種族衝突有激化的跡象,但是對於大多數普通美國人來説,生活仍舊富裕、平靜、美好。
在這段黃金歲月中,美麗的姑娘瑪格麗特( Margaret )在厄勒姆學院( Earlham College )認識了詹姆士·考克斯·漢密爾頓( James Cox Hamilton )。儘管他只是個不起眼的男孩,而她在校園裏已有“舞會皇后”的美名,他們還是很相愛,並在不久後結婚了。
畢業後,瑪格麗特·漢密爾頓一邊在高中教數學和法語,一邊等着丈夫拿到學士學位;然後,他們搬到波士頓,瑪格麗特在布蘭代斯大學做抽象數學方面的研究。
從一個學校到另一個學校,讀書、做研究、嫁人,還打算要個孩子,瑪格麗特雖然比當時的職業家庭婦女顯得“高知”了一些,但總歸還不太離經叛道。畢竟,時代在進步,女性多讀點書也不是什麼大不了的事。
生活就這麼繼續下去的話,無疑很美好。
但是,上帝並不總是公平的,有時他不光讓你長得漂亮,還讓你懂得寫代碼。
阿波羅來了
1960 年,瑪格麗特在麻省理工找了一份臨時的程序員工作。他們兩口子計劃好了,妻子先支持丈夫在哈佛法學院讀三年,然後丈夫再工作,支持她去拿一個數學研究生學位。
這一年,她 24 歲。
在這個年頭,一個姑娘家做程序員這種“高科技”工作,估計沒多少人讚賞。不過,整個美國以及歐洲的社會風氣都在發生越來越明顯的變化:嬉皮士運動興起了,隨之而來的是搖滾樂、性解放和兩性平權。世界變得多彩而又喧囂,女人到底該不該幹高科技工作,似乎也沒那麼受關注了。
一年以後,瑪格麗特又轉而去了成立剛 10 年的林肯實驗室。在這裏,瑪格麗特給北美防空司令部的半自動地面防空系統( Semi-Automatic Ground Environment )項目工作。這個重達 300 噸的龐然大物,是個不折不扣的冷戰怪物。
在林肯實驗室,她的工作也極具“冷戰氣質”:給第一台 AN/FSQ-7 計算機編程,搜索美軍始終提防着的“不友好的飛機”。
1963 年,瑪格麗特加入麻省理工查爾斯·斯塔克德雷珀實驗室( Charles Stark Draper Laboratory )。當時,這個實驗室正在為阿波羅計劃,也就是大名鼎鼎的人類登月計劃而工作。
此時,瑪格麗特已經是一位母親了,女兒勞倫( Lauren )4 歲,正是喜歡纏着媽媽的時候。瑪格麗特沒辦法,只好把勞倫帶到查爾斯河畔的辦公室裏。孩子自己玩,玩累了就自己睡覺,媽媽則在旁邊給阿波羅飛船的軟件寫代碼。
1960 年代美國的家庭觀念,認為瑪格麗特的行為有些不妥。把孩子扔在一邊,自己忙於工作,在他們看來不是一件可取的事。可是,瑪格麗塔無法放棄她的工作,因為,她太喜歡這種新奇的事了:把人類送上月球,這是一件多麼前所未有的挑戰。如果不是冷戰,不是美蘇兩國瘋了一般的太空競賽,恐怕很多年之後人們也不會想到要去做這樣的事。
她喜歡這裏的氛圍,喜歡她的 geek 同事們,她説自己是他們的一份子。更重要的是,她在這裏所做的事情,很多都是人類的“第一”:
- 給世界上第一台便攜式電腦編寫軟件。
- 他們編程對象中有第一台使用集成電路的電腦。
- 第一次實現了卡爾曼濾波器。
- 最重要的是,第一次把人類送往 38 萬公里外的月球表面。
而她,是這項偉大工程中至關重要的角色。她已經是阿波羅計劃首席軟件工程師了。
史無前例的工程
當然了,一開始事情並不順利。怎麼給登月飛船編寫軟件?這是件從來沒有過的事啊。瑪格麗特説:
引用我剛到那兒的時候,沒人知道我們到底在做什麼,感覺像去了蠻荒的西部。沒有教程,也沒人教我們任何東西。
其實,當時整個世界在計算機科學和軟件工程學的課程和訓練方面,都是一片空白。甚至連“軟件工程”這個詞,還要等着瑪格麗特來發明。
而有點可笑的是,最早的時候,阿波羅計劃的設計者壓根就沒想到軟件這回事兒,在項目計劃書上沒提到軟件,沒有預算,沒有工作計劃。這事兒放在今天看,着實難以想象。
不過,隨着阿波羅計劃逐步展開,軟件工程重要性越來越凸顯,瑪格麗特也越來越緊張了。畢竟,蘇聯人加加林代表了全人類第一次進入太空,美國政府壓力得多大,全美國都在看着她。而在瑪格麗特的想象中,全人類都在看着她呢。夜裏,她總是夢見飛船出了什麼事,然後電視新聞和報紙頭條就指名道姓地説,這是瑪格麗特·漢密爾頓造成的問題……
於是,半夜起床加班成了家常便飯。
今天的程序員們,對着大大的顯示器,使用高級語言,用一種近乎優雅的方式編程。可是在那個年頭,完全是另外一番景象:
記錄代碼,要麼用磁芯線,要麼用紙片打孔機。磁盤?想都別想。
編程用的是彙編語言,而且,因為計算機世界還缺乏統一和規範,A 公司的電腦使用一種彙編語言,B 公司用另一種。到阿波羅飛船上,每個模塊所用的都不一樣,可以想象,作為軟件主管的瑪格麗特,每一種都得能看能寫,這種難度可想而知。
而且,這是給飛船寫軟件啊,程序行就行、不行就不行,你總不能讓它給你試飛吧?
給阿波羅飛船寫導航和登陸程序,代碼量有多大呢?
瑪格麗特扶着的,正是阿波羅的軟件代碼清單。
差點邁不出的“一大步”
某種程度上説,瑪格麗特也許不算一個天才的程序員。但她卻足夠聰明,甚至可以説是智慧。
她首先發展了“異步程序”的概念,實現程序優先級調度,讓程序可以隨時中止低優先級任務,專注於高優先級任務。這樣一來,軟件系統的容錯度和穩定性自然提高了。此外,電腦不僅能識別出錯誤,還把恢復方案納入進去了。不客氣地説,正是她的這一開創性工作,挽救了阿波羅 11 號的登月任務。
讓我們回到文章開頭的電腦危機。
登月飛船起飛前,不知是誰犯了個低級錯誤,把飛船上的交會雷達安錯了位置;然後,又不知是誰犯了另一個低級錯誤,用了一本有誤的檢查清單,放過了前面一個錯誤。
隨後,這個蠢蠢的雷達交互系統一路在給電腦發提示:“我出錯了,我出錯了。”結果,電腦一邊要執行正常登陸程序的所有功能,一邊還得挪出 15% 的計算時間去處理它的錯誤信息,差點兒崩潰。
幸好,瑪格麗特把軟件設計得足夠聰明,它了解自己完全可以不管雷達交互系統這種低優先級任務,而把所有系統資源都用在登陸這件事上。畢竟,全世界都看着呢。於是,它警告了宇航員之後,就把雷達交互系統的事兒拋在腦後了。
3 分鐘之後,4 點 17 分,阿波羅 11 號成功在月球表面靜海基地着陸。
這才有了第二天凌晨宇航員阿姆斯特朗左腳踏上月球土地後説出的那句名言:“這是我的一小步,卻是人類的一大步。”
如果沒有瑪格麗特的工作,沒有她開發的異步軟件,很難想象人類的這一大步要多久之後才能邁出。甚至,整個阿波羅計劃,這個 30 萬人持續了 11 年,耗資超過 255 億美元的超級工程,會以何種方式收場?
她改變了世界,儘管悄無聲息
在 NASA 那幾年,瑪格麗特大大拓展了自己的專業知識覆蓋的領域,隨便舉幾個例子:
系統設計和軟件開發、形式系統建模語言、自動化生命週期系統、軟件可靠性和最大化重複使用的方法論、錯誤檢測和恢復技術、操作系統、人機界面、端到端測試技術、域名分析……
這些技術,在今天的計算機世界早已變得不可或缺。瑪格麗特和她的同事們創造的工作,成為後來者的路標。他們開發的登月飛船導航軟件,如今在客運飛機上使用——當然,是作了很多改變。
1968 年中,為阿波羅計劃工作的程序員已經超過 400 人。等這項工作結束後,計算機科學已經讓整個世界發生了翻天覆地的變化,而這 400 人所做的工作,已經轉化為規模超過 4000 億美元的巨大產業。分攤下來,相當於每個人都開啟了一個“獨角獸公司”。
想想那個計算機的蠻荒時代,就能懂得瑪格麗特和同事們的工作多富有開創性。
離開 NASA 之後,瑪格麗特仍舊專注於軟件開發。不過,她換了一種新的方式。
1976 年,瑪格麗特創辦了 HOS 軟件公司( Higher Order Software ),開發了一款叫 USE.IT 的產品。直到 1984年,瑪格麗特一直擔任 HOS 公司的 CEO。兩年後,她又創辦了漢密爾頓技術公司並擔任 CEO,領導團隊圍繞通用系統語言和相關的自動化環境進行開發,為系統設計和軟件開發者們提供著名的“ 001 工具套件”。
瑪格麗特在計算機軟件開發上的工作,也為她帶來很多榮譽:
1986 年,她獲得奧古斯塔·艾達·洛夫萊斯獎( Augusta Ada Lovelace Award )。這是一項專門頒給計算機領域傑出女性的獎項。
2003 年,獲得 NASA 外太空獎( NASA Exceptional Space Act Award ),37200 美元的獎金是 NASA 史上最高的一次。
2009 年,獲得厄勒姆學院傑出校友獎。
可能對瑪格麗特來説,這一切都不如阿姆斯特朗那一句名言來得更安慰。這是對她的開創性工作的最高褒獎,畢竟,跨越了 38 萬公里的征程後,任何一個微不足道的錯誤都足以斷送一項超越人類、超越時代的工程。
而她,拯救了這個工程。
從某個角度看,今天我們面臨的世界和 1960 年代並沒有多大不同。人類文明的進程,就像放大了的阿波羅登月計劃,向着更深、更廣袤的洪荒宇宙進發。到處是未知的領域,到處是開拓的機遇。
可是像瑪格麗特這樣既漂亮、又智慧的程序員,卻不是隨時都有的。
題圖來自:NASA 插圖來自:Wired Wikipedia
資料來源:愛範兒(ifanr)
作者/編輯:邱 雷