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