當前位置:
首頁 > 知識 > 計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球

雖然現在程序員看似是個男女數量極其不平均的崗位,但就在不遠的過去,在計算機拓荒的年代,卻是有不少女性程序員為此貢獻了智慧與青春。


瑪格麗特·希菲爾德·漢密爾頓(Margaret Heafield Hamilton)就是其中一個。

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球


一邊看孩子


一邊寫程序


瑪格麗特本姓希菲爾德。她1936年生於美國一個普通家庭,普通地讀完了高中和大學,主修數學。在讀書的時候,她嫁給了詹姆斯·漢密爾頓(James Cox Hamilton),成了漢密爾頓太太。

她畢業之後找了一份教師的工作,教數學和法語。那時候,她的丈夫還在哈佛法學院讀書,她勇敢地承擔起了家庭的責任。不過,她讀書深造的願望並沒有因此熄滅。待丈夫安定下來,兩人一起搬去了波士頓,瑪格麗特準備去再讀一個抽象數學的學位。


然而,兩人的小日子還是太緊張了。此時一個工作機會擺在了她面前。當時計算機科學的先鋒MIT里一個實驗室在招臨時編碼工。瑪格麗特抱著試試看的態度,就這樣踏進了程序員的殿堂。


一開始,她為天體學系寫天氣預報系統的代碼。因為工作出色,轉為正式工,後來又去了大名鼎鼎的林肯實驗室,為美國軍方SAGE項目寫代碼——在冷戰之弦拉得最緊的1960年代,用電腦程序幫助偵查危險的「不友好的飛行物」。

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球


那時候還沒有「軟體工程」這個學科,更沒有「軟體工程師」這種高洋上的名頭,沒人像今天的「計算概論」一樣教,辛苦在計算機硬體上直接編寫程序的程序員們,就像從前的手工業工人一樣,靠的大多是一點點摸索出來的經驗。


而一張白紙的瑪格麗特,面前的都是前人扔給她的棘手程序。這些毫無頭緒的程序有多難處理呢?前人不得不用希臘語和拉丁語寫評論來取樂。而瑪格麗特是全實驗室第一個解決問題的人,還把調試方法翻譯成希臘語和拉丁語,漂漂亮亮地回敬了一發。


瑪格麗特的女兒勞倫(Lauren),也在這時候出生了。繁忙的媽媽瑪格麗特不得不將小勞倫帶去工作,讓她睡在查爾斯河畔實驗室的地板上,醒來的時候兀自玩耍。

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球


當時的人們對於這樣一個「工作狂媽媽」十分不理解。「你怎麼這麼不顧你的小孩?」


瑪格麗特並不在意。她熱愛著她這份雖然不時枯燥,但卻充滿挑戰和「神秘感」的工作。她也喜歡著實驗室,喜歡每個人開的極客冷笑話,工作結束之後和每個人去喝酒。「就跟實驗室里其他男孩子一模一樣。」


而勤奮的瑪格麗特,還會在喝完酒之後,忽然想起程序里的一個小錯誤,連夜飛奔回實驗室修改。


「不重要」的程序

救了阿波羅一命


由於出色的表現,瑪格麗特獲得了另外一個機會:加入MIT的Charles Stark Draper實驗室,帶領一個小團隊,為NASA的阿波羅計劃寫軟體。


在阿波羅的最初的預算報告中,根本就沒有「軟體」二字。不過後來,NASA意識到了軟體的重要,逐漸把軟體相關的團隊擴大到了400多人。但瑪格麗特依然是一個無名小卒。她負責的,大概是整個計劃當中最不受重視的部分:「萬一」任務失敗之後的後備方案。但所有人都不重視,覺得這不可能發生。連這個部分的名字,都被稱作「Forget it」。

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球



「我想為整個系統中加入一旦人工出錯之後的備用糾錯方案,」瑪格麗特說,「但是他們不同意。他們說,宇航員們都經過了嚴格的、完美的訓練,『絕對不可能出錯』。」


也的確,那時候計算機的存儲空間和計算能力都十分有限,決策者不希望有任何「累贅」的部分。瑪格麗特無奈,只好在操作系統里做了一個備註,「不要在飛行的時候選擇P01模式」


但是,壞事兒還是發生了。阿波羅8號環繞月球的任務中,宇航員羅威爾(Jim Lovell)一時疏忽,按下了P01模式,所有的巡航數據都被清空了,飛船分分鐘迷路。休斯頓緊急打來電話,瑪格麗特領著一群程序員,連夜奮戰了9個小時,過了每一行代碼,修復了這個問題,數據被重新上傳上去。阿波羅8號得以成功返航。


而真正的考驗還在後面。隨著登月計劃緊鑼密鼓的進行,美國政府和NASA都繃緊了弦,蘇聯就在背後,一刻也不能停止。瑪格麗特加班工作的時候也越來越多了。而成就總是伴隨著錯誤和風險——就在阿波羅11號歷史性著陸月面的3分鐘之前,忽然警報大作,軌交雷達發來了大量的數據湧入電腦存儲區,快把電腦弄崩潰了。若是系統崩潰,飛船將毫無懸念地墜毀在月面,「人類的一小步」可能是一個大坑和兩條生命。

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球



但是,瑪格麗特設計的系統頂住了這個壓力。在大量的數據湧入電腦的時候,最寶貴的計算資源,被用於最關鍵的部分,比如安全登陸本身,而處理不重要的雷達交互數據的任務被砍掉,讓程序可以隨時中止低優先順序任務,專註於高優先順序任務。


這次的事件,也讓她提出了後來的「非同步程序」的概念。即程序可以不用等待當前任務響應,先處理其它任務,待到任務處理完成之後再接受任務完成的通知。這也提高計算效率,防止程序被卡死。用開發術語來說,瑪格麗特的程序「魯棒性」(Robust)非常高,在出錯的時候更穩定、更可靠。


瑪格麗特拯救了人類的登月計劃。她不僅努力、聰明,而且心思縝密,她的團隊在每次程序確定之後,都會一遍遍嚴格地測試,使用模擬器(儘管還非常初級、簡陋)來模擬登陸狀況。許多問題她早就考慮到了,畢竟「不出錯」永遠都是一個理想狀態。


當時的程序員們工作系統化程度很低,如果出現了錯誤,程序員們就潦草地往「出錯理由」裡面填一個「有bug」完事兒。瑪格麗特認為這遠遠不夠。她認為程序員們需要理解錯誤,梳理錯誤的原因,並防止下一次程序出錯。這種我們現在看來完全是常識的東西,在計算機的「蠻荒年代」,需要一顆清醒而負責的頭腦來制定最初的規範。


瑪格麗特打趣說,自己如此努力,是因為「不想在報紙頭版頭條上看到『阿波羅計劃失敗,瑪格麗特團隊難辭其咎』」。「責任感」三個字,或許在她身上,比什麼都清晰。

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球



這就是她寫的代碼,反覆修改的版本,幾乎快要超過她嬌小的身軀了。就是這些代碼,寫好之後列印出來,然後被送到另外一個小工作室,在那兒有一幫精於針線活兒的女士,用銅圈「寫」到硬體上……


(也不要再想當然地說計算機是男人的事業了。)


「軟體工程師」


一個程序員的自我修養


勤奮,充滿責任感,又一直對自己的事業抱有熱愛。這就是一個軟體工程師的自我修養。


前面不是說到,那個年代不是還沒有「軟體工程」的概念么?在瑪格麗特之前,寫程序是一門手藝,彷彿變法術或者憑經驗拼湊一般,而且沒有實體的東西產出——感覺就像在寫文章,沒人稱呼一個作者為「文字工程師」吧。

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球



而瑪格麗特用自己的實踐,賦予了這個詞全新的現實意義。她說,「希望給予給做軟體的人們以尊重,與做硬體和其它的人一樣,在這個宏大的工程里各司其責」。她開始用「軟體工程師」來稱呼她在內的程序員


一開始,大家都帶著一點開玩笑的態度在用這個詞,然而,在她的推動下,「軟體工程」成了一門科學,更規範、更系統,瑪格麗特將程序員這份事業提升了一個高度。瑪格麗特團隊寫的程序框架,也用在了許許多多其它的太空計劃、乃至後來的客機系統上,就連你坐的飛機,也該感謝她的代碼呢。而她在自己所涉及到的許多領域,都有創見——比如系統設計、軟體開發、過程模型、開發範式、軟體可靠性、周期自動化等等等等。當時400人團隊所做的事,已經轉化為規模超過 4000 億美元的巨大產業。


然後我們現在的程序員們,就有了「軟體工程師」這個真正的工程師頭銜。

計算機是男人的事?她邊看孩子邊寫程序,把阿波羅送上了月球



《WIRED》上最近的她。


離開NASA的瑪格麗特自立門戶,繼續在軟體工程領域發光發熱,2003年,她因技術和科學貢獻獲NASA傑出太空行動獎(Exceptional Space Act Award。該獎獎金37,200美元,是美國宇航局史上對個人的最大獎賞)。是的,人們都不應該忘記,在層疊的代碼背後,那個時常沉默的女孩,也不要忘記為早期的計算機事業付出辛勞的女性們。即使現在也一樣。


記住你的前人,然後在她/他們鋪下的道路上前進。

您可能感興趣

是她!把人類送上了月球,了不起的「程序媛」
男友說要帶我去吃飯,結果卻把我送上了其他男人的床
男子幫狗狗紋了個身,不久有人把他送上法庭!
搞笑段子:哥們,妹子都送上門來了,你卻扮起了柳下惠?
媽媽生氣 順手打了一下女兒的這個部位,竟把自己的親閨女送上了"死亡之路"!
五歲兒子被人拐走,父親發尋人啟事,編了個謊言,小偷竟然送上門
她毅然把一對兒女送上了選美的道路,堅持說這一切是為了孩子好……
老公車禍去世之後,小三把孩子送上門來,婆婆跪求我留下撫養孩子
女生這樣健身,看完沒有不服的,我是男的,默默送上膝蓋!
老人這樣沖奶粉,親手將孫子送上手術台!
親老爹漫威將兒子們送上戰場,就為了下一局棋?
喵主子就這樣被狗子送上了餐盤,喵:真是日了狗了……
別因為手機,把你的女人送上別人的床
爸爸把我送上陌生男人的床,限我半年內懷上孩子……
「閃電俠」去哪兒重要嗎?他可是那個即便被隊友坑了,也還是會送上祝福的人
搞笑段子:妹子看你的表情是要用洪荒之力把閨蜜送上天了
媽媽給孩子從1歲開始補鈣,半年後卻把孩子送上了手術台
送上柴刀?妹子怎麼看待男友的前女友
這4種女人就是送上門也不能要,娶了後悔一輩子!