一位女程序員用代碼把人類從地球送上了月球
沒有她,就沒有阿姆斯特朗的一小步和人類的一大步。
瑪格麗特·漢密爾頓(Margaret Hamilton)本無意提出軟件的現(xiàn)代概念,也沒想過要將人類送上月球。要知道1960年的社會(huì)并不鼓勵(lì)女性從事高科技行業(yè)。那時(shí)24歲的瑪格麗特?cái)?shù)學(xué)系本科剛畢業(yè),她計(jì)劃節(jié)衣縮食3年供丈夫入讀哈佛法學(xué)院,然后自己再去讀數(shù)學(xué)研究生。
但是阿波羅登月計(jì)劃就在那個(gè)時(shí)候啟動(dòng)了?,敻覃愄卦趯?shí)驗(yàn)室?guī)ьI(lǐng)一次史詩般的工程壯舉,這項(xiàng)工程將改變?nèi)祟惡涂萍嫉奈磥怼?/p>
在1960年代做職場媽媽已經(jīng)是件很不尋常的事,而瑪格麗特竟然還是個(gè)給太空飛船寫代碼的程序員。在周末或者平常的夜晚,瑪格麗特會(huì)把女兒勞倫帶來實(shí)驗(yàn)室。在俯瞰查爾斯河的辦公室里,四歲的勞倫在地板上熟睡,而瑪格麗特忙著編寫代碼——這些代碼,最終都會(huì)添加到阿波羅控制艙的計(jì)算機(jī)里。
瑪格麗特回憶說,“他們對我說,你怎么能離得開女兒啊?”。但是她深愛這份工作的神秘和新奇,她也很喜歡同事之間的情誼——下班后他們會(huì)在MIT的職員俱樂部一起喝點(diǎn)小酒,講只有技術(shù)宅才能聽懂的笑話。旁人聽得一頭霧水,但在實(shí)驗(yàn)室里,她說,“我是兄弟們的一員”。
那時(shí)的技術(shù)與工程領(lǐng)域也由“兄弟們”主導(dǎo)。跟今天科技圈少有的女碼農(nóng)一樣,當(dāng)時(shí)的瑪格麗特就像是個(gè)不折不扣的異類?,F(xiàn)在的軟件開發(fā)者也該驚訝,這個(gè)“男孩俱樂部”的其中一個(gè)奠基人竟然是個(gè)女人。他們或許也該停下來想一想,這種《廣告狂人》時(shí)代的性別不平等何以持續(xù)至今。
瑪格麗特的事業(yè)發(fā)展?jié)u漸上了軌道,而此刻的軟件世界——由于肯尼迪在1961年發(fā)起的阿波羅登月項(xiàng)目——也身處巨變的邊緣?,敻覃愄鼐吐氂贛IT的儀器實(shí)驗(yàn)室,在那里,她和同事一起為世界上***部便攜式計(jì)算機(jī)寫代碼,同時(shí)也創(chuàng)造了計(jì)算機(jī)編程的核心理念?,敻覃愄爻闪讼到y(tǒng)編程的專家,也在多場重要的技術(shù)爭論中得到認(rèn)可。“我最開始研究編程的時(shí)候,沒人知道我們在干嘛。我們就像身處美國荒涼的大西部,沒有這樣的課程,也沒有任何一個(gè)教授教這個(gè)”。瑪格麗特說。
這個(gè)時(shí)候離微軟的出現(xiàn)還有10年,離馬克·安德森(Marc Andreessen,這家伙是世界上最早開發(fā)瀏覽器的人)發(fā)現(xiàn)軟件正在“吞噬世界”也還有將近50年。在阿波羅計(jì)劃的早期,人們并沒有過多思考軟件是怎么一回事。MIT航天學(xué)教授大衛(wèi)·曼德爾(David Mindell)在《數(shù)字阿波羅》(Digital Apollo)一書中寫道,那些記錄阿波羅計(jì)劃相關(guān)工程要求的文件甚至都沒有提到“軟件”這個(gè)詞。“軟件并不包括在計(jì)劃里,因此也不在預(yù)算內(nèi)”。反正一開始,軟件并沒有受到重視。
但隨著阿波羅計(jì)劃的推進(jìn),軟件在這個(gè)任務(wù)中的重要性也明晰起來。1965年,瑪格麗特開始負(fù)責(zé)“阿波羅”號計(jì)算機(jī)的飛行軟件。對瑪格麗特而言,這是一段激動(dòng)人心的日子,整個(gè)美國都指望著她的工作成果。但是有時(shí)候壓力也會(huì)讓她夜里睡不著。有一次,在參加過一個(gè)深夜派對之后,瑪格麗特又沖回實(shí)驗(yàn)室去修改一段突然想起來出錯(cuò)了的代碼。“我總是在幻想報(bào)紙的新聞標(biāo)題,它們會(huì)追問錯(cuò)誤是如何發(fā)生的,而最終原因會(huì)指向我”。
圖為1962年4月19日,瑪格麗特和她的前同事?,敻覃愄禺?dāng)時(shí)正在林肯實(shí)驗(yàn)室的***臺AN/FSQ-7電腦上研發(fā)軟件,一個(gè)雷達(dá)監(jiān)測軟件,用以監(jiān)測敵機(jī)。圖片來源:Margaret Hamilton 圖為1962年4月19日,瑪格麗特和她的前同事。瑪格麗特當(dāng)時(shí)正在林肯實(shí)驗(yàn)室的***臺AN/FSQ-7電腦上研發(fā)軟件,一個(gè)雷達(dá)監(jiān)測軟件,用以監(jiān)測敵機(jī)。圖片來源:Margaret Hamilton
軟件成了美國要贏登月競賽的重要籌碼。在1968年,已經(jīng)有超過400人參與研發(fā)阿波羅號的軟件。當(dāng)然,最終人們發(fā)現(xiàn)軟件為世界帶來的遠(yuǎn)超于此。當(dāng)瑪格麗特和同事在為阿波羅飛船編程的時(shí)候,他們也在孵化這個(gè)未來估值4000億美元的產(chǎn)業(yè)。
對瑪格麗特來說,編程就像是在一沓穿孔卡片上穿孔,可以整夜整夜分批在一臺模仿阿波羅登月工作的霍尼韋爾(Honeywell)大型主機(jī)上進(jìn)行?,敻覃愄鼗貞浾f,“我們必須在飛船起飛之前模擬各種可能發(fā)生的情況”。一旦代碼確定后,就會(huì)被送往附近一家雷神公司(Raytheon)的廠房。那里有一群“擅長針線活”的婦女,她們在阿波羅項(xiàng)目中被稱為“小小老婦人”,她們將銅線穿過磁環(huán)(穿過磁心的代表1,繞過磁心的代表0)。沒有RAM,也沒有磁盤驅(qū)動(dòng)器;在阿波羅號上,存儲器靠的就是硬接線,而且可以說是無堅(jiān)不摧。
阿波羅飛行器上載著兩個(gè)近乎一樣的機(jī)器:一個(gè)用于登月艙——也就是登陸月球的鷹號,另一個(gè)是用于載著宇航員往返地球的操作艙。跟其他龐大的計(jì)算機(jī)不同,這些重達(dá)70磅的計(jì)算機(jī)是便攜的。由MIT工程師哈爾·蘭寧(Hal Laning)和瑪格麗特的老板迪克·貝頓(Dick Batton)設(shè)計(jì),這是首批使用集成電路而非晶體管的重要計(jì)算機(jī)。正如曼德爾在書中所寫,這是***個(gè)由人工操作、但帶有計(jì)算機(jī)控制自動(dòng)駕駛技術(shù)的機(jī)載導(dǎo)航系統(tǒng),可謂是如今噴氣客機(jī)標(biāo)配的導(dǎo)航系統(tǒng)的老前輩。
這個(gè)系統(tǒng)可以***保存超過1.2萬個(gè)字節(jié)——也就是雷神公司的女孩們用銅線穿繞的環(huán)——臨時(shí)存儲的空間為1024個(gè)字節(jié)。“這是***次將一臺重要的計(jì)算機(jī)搬到飛船上,還賦予了它極大的責(zé)任,”當(dāng)時(shí)在MIT儀器實(shí)驗(yàn)室負(fù)責(zé)編寫登月艙代碼的唐·埃爾斯(Don Eyles)說,“我們證明了這是可以實(shí)現(xiàn)的。我們用今天看起來不可思議、超小的內(nèi)存和非常緩慢的計(jì)算速度做到了這一切。”缺了這一切,尼爾·阿姆斯特朗(Neil Armstrong)不可能登上月球;而如果沒有瑪格麗特、埃爾斯和MIT工程師們編寫的軟件,計(jì)算機(jī)于此也不過是一件無用之物。
這一點(diǎn)在1969年的6月20號得到了充分體現(xiàn)。在阿波羅11號飛船即將登陸月球前的幾分鐘,這么關(guān)鍵的時(shí)刻,阿波羅計(jì)算機(jī)卻開始突然不斷出現(xiàn)錯(cuò)誤信息。而正是接下來發(fā)生的一切為瑪格麗特贏得認(rèn)可,為團(tuán)隊(duì)成功解決了危機(jī)。錯(cuò)誤信息的大量出現(xiàn)是因?yàn)橛?jì)算機(jī)的過度運(yùn)轉(zhuǎn),除了控制艙登陸月球表面所需的進(jìn)程以外,計(jì)算機(jī)還進(jìn)行著一系列不必要的計(jì)算。而在休斯頓,工程師很清楚,因?yàn)榘⒉_號特有的異步處理,這部計(jì)算機(jī)會(huì)集中處理手邊這項(xiàng)任務(wù)——讓鷹號在月球登陸?,敻覃愄卣f,當(dāng)軟件意識到?jīng)]有足夠空間去運(yùn)行進(jìn)程的時(shí)候,它會(huì)自己進(jìn)行錯(cuò)誤檢查,然后集中處理權(quán)重***的工作。
“不可能發(fā)生的事”
一天,勞倫在擺弄MIT控制艙模擬器的顯示器鍵盤一體機(jī)DSKY。當(dāng)她在鍵盤上亂按的時(shí)候,一條錯(cuò)誤信息突然出現(xiàn)。勞倫不知怎地啟動(dòng)了一個(gè)叫做P01的預(yù)運(yùn)行程序,原本正在飛行狀態(tài)的模擬器一下子崩潰了。雖然一般來說宇航員不會(huì)犯這樣的錯(cuò),但瑪格麗特還是想加一段代碼防止這種狀況的發(fā)生。這一提議被NASA否決,“他們一遍又一遍地跟我說宇航員不會(huì)犯任何錯(cuò)誤,他們被訓(xùn)練得近乎***,”瑪格麗特說。她轉(zhuǎn)而加了一句程序說明,所有NASA工程師和宇航員都能看到:“不要在飛行過程中按下P01”。她回憶說,“所有人都說,‘那樣的事情永遠(yuǎn)都不會(huì)發(fā)生’。”
但事情的的確確發(fā)生了。時(shí)間大約在1968年的圣誕節(jié),進(jìn)入阿波羅8號飛船的第五天飛行,宇航員吉姆·洛威爾(Jim Lovell)不小心在飛行中啟動(dòng)了P01程序。當(dāng)電話從休斯頓打來的時(shí)候,瑪格麗特正在儀器實(shí)驗(yàn)室的2層會(huì)議室。啟動(dòng)P01程序?qū)е麓说膶?dǎo)航數(shù)據(jù)全部清空,阿波羅計(jì)算機(jī)無法計(jì)算出如何返回地球?,敻覃愄睾蚆IT的程序員們需要想出一個(gè)補(bǔ)救的辦法,必須是無錯(cuò)漏的***辦法。在花費(fèi)9小時(shí)鉆研過面前8英寸厚的程序列表后,他們有了一個(gè)計(jì)劃。休斯頓方面需要上傳一份新的導(dǎo)航數(shù)據(jù),而后一切都會(huì)順利進(jìn)行。多虧了瑪格麗特,還有調(diào)皮的勞倫,阿波羅號上的宇航員才得以重返地球。
同樣值得感激的是瑪格麗特和她開創(chuàng)的工作,這些讓人類認(rèn)清自己在太空和地面能做些什么。而軟件工程這個(gè)由瑪格麗特***的概念,從人類登月到現(xiàn)在幾乎進(jìn)入人類生活的方方面面。到1970年代,瑪格麗特已經(jīng)超越了之前在NASA和阿波羅計(jì)劃中的研究。她后來成立并領(lǐng)導(dǎo)了多家軟件公司。如今她的公司漢米爾頓科技距離她開始職業(yè)生涯的地方只有幾個(gè)街區(qū)遠(yuǎn)——MIT,那個(gè)至今仍***代碼革命、仍然仰望星辰的地方。