首頁>科學>

1969年UTC(世界統一時間)7月20號晚上8:17'43'',代號為鷹的登月艙著陸在月球寧靜之海(一般稱為靜海地區),這宣示著美國人先蘇聯一步,把人送上了月球。阿姆斯特朗說出了“個人一小步,人類一大步”的名言,現在應該基本編入了世界各國中小學生的課本中,他和他的搭檔奧爾德林與柯林斯值得被人類所紀念。故事發生在他們登月的前刻,是的,前刻,就是在他們著陸在月球前一刻,在登月艙上的發動機點火減速,登月艙開始進入下降軌道的時刻。“1202”“1202”......登月艙的主控計算機開始不斷重複這個編號為1202的碼,這是計算機在報錯。

代號為“鷹”的登月艙

這可嚇壞了阿姆斯特朗和奧爾德林啊,怎麼回事啊,眼看就要降落了,這不會摔在月球上吧。他倆的心情可想而知,同時和他倆一樣急的還有在NASA(美國國家航空航天局)負責決策的貝爾斯。是不理會這個警告繼續著陸程序呢,還是取消登月,就地(月)返回呢?時間是不等人的呀,兩個宇航員精神極度緊張,地面人員著急忙慌地查詢手冊,當時呢不像現在這樣方便,沒有便攜小巧的計算機,技術手冊都是一張一張地打印出來的,那是每一本都比磚塊要厚呀,可以對比下方的圖片,僅僅登月計劃的導航程式就已經是如此高度,在這種時刻要找到一個錯誤程式碼的含義,難度可想而知。所幸呢,工程師加曼之前測試的時候遇到過這種情況,這是計算機處理雷達返回的資料太多,搞得計算機自身崩潰了,

“1202”呢,就是代表系統崩潰重啟來結束阻塞程序以保證登入程式的進行的程式碼。

瑪格麗特·漢密爾頓,旁邊的紙堆就是阿波羅登月計劃的導航程式

加曼就告訴貝爾斯不用管“1202”或是“1201”這倆錯誤程式碼,可以繼續執行登月任務,就這樣阿姆斯特朗他們被中控計算機“虛晃一槍”後有驚無險地降落在月球靜海,開啟了人類的地外探索的新篇章。

而我們的主角呢,大家已經見過了,就是上圖站在紙堆旁的女士,瑪格麗特·密函爾頓,就是她,寫了這個開創性意義的程式碼。

瑪格麗特1958年畢業於厄勒姆學院,由於主修的是數學,她先是去了一所高中任教師,後來呢又打算去布蘭迪斯大學攻讀抽象代數的研究生。在1960年她偶然得到了一份麻省理工學院的軟體程式設計工作,主要編寫一個天氣預報的軟體,就在那裡瑪格麗特累積了大量的軟體程式設計工作實戰經驗,為她後來極為驚豔的人生奏起了紮實的前奏。

1961年,瑪格麗特去了林肯實驗室,也一併為美國空軍劍橋研究實驗室編寫軟體,她一方面照顧女兒,一方面還要參與複雜且累人的專案,但是這位天才對這兩方面“剛剛好”都懂,這些任務她都出色完成!

阿波羅計劃是一個龐大的系統工程,其中“MIT儀器實驗室”是當時服務於登月計劃的一個部分,在這裡瑪格麗特的天分被NASA所發現,在不到一年的時間裡瑪格麗特便成為了首席工程師。1965年瑪格麗特成為軟體程式設計部的部長,但有意思的是,在阿波羅計劃初期,NASA竟然並沒有考慮到“軟體”的事情,隨著專案啟動,他們才後知後覺得意識到軟體的重要,逐步把軟體的團隊擴大到400人左右。當然,在背後推動這一切的人中肯定有瑪格麗特。

由於專案緊迫,瑪格麗特經常帶著女兒勞倫在自己工作的地方。一天,勞倫在指令艙模擬器中玩耍。當她在鍵盤上亂按時,一條錯誤的資訊突然彈出。原因是她不小心啟動了一個叫P01的預執行程式,導致原本還在飛行狀態的模擬器瞬間崩潰。為了解決這種罕見情況,瑪格麗特就提議在整個系統中加一段程式碼,防止類似的狀況發生。若是在飛行過程中,宇航員操作出了什麼失誤,還有挽回的地步。

瑪格麗特和女兒勞倫

但這一提議後來被否決,原因是大家都覺得宇航員是訓練有素,而且不會隨意觸碰裝置,發生這種事情的機率極低,再加上當時計算機極其有限的運存,決策者並不想加上這種近似“累贅”的程式碼,瑪格麗特最終只是在程式碼旁加了“不要在飛行中選擇P01模式”。

但是無巧不成書啊,這種事情偏偏讓阿波羅8號趕上了,1968年12月21日,阿波羅8號發射,它所執行的任務是實現人類的首次繞月飛行,這是為登月前測試阿波羅指揮艙系統在地球和月球軌道之間的太空及繞月軌道上的效能,包括通訊、跟蹤和生命保障各個方面。評估宇航員在開展繞月軌道任務期間的表現。

然而在飛行的第五天,指令艙駕駛員吉姆·洛威爾(Jim Lovell)一不小心就觸發了P01模式,飛船上關於導航的資料一清而空,宇航員們面臨無法返回地球的困境,這時NASA知道瑪格麗特之前對這個情況瞭解,電話八百里加急就打到瑪格麗特那去了,於是可能是世界上的第一個緊急程式維護的加班加點發生了。看來程式設計師的命運在那時候就有所預兆啊。

瑪格麗特帶上MIT的程式設計師們連夜奮鬥9個小時 ,設計出新的返回導航計劃,配合洛威爾計算的導航資料,重新輸入計算機後,宇航員們這才回了家。

這次事之後呢,NASA開始把軟體設計看做一件非常重要的事情,軟體成了美國與蘇聯登月競賽的利器之一。

再一次發揮使瑪格麗特專業價值的事情,便是開文所說的阿波羅11號月球登陸, 鷹號飛船的軌交雷達發來的大量資料湧入了計算機,一下就把記憶體僅僅2k的計算機弄崩潰了,但是瑪格麗特“非同步處理”的思想就已經在她設計系統時就已經應用在其中。非同步處理是按照不同步的程式處理問題,在這裡呢就是計算機處理不了當前任務時,優先保障著陸程式的執行。可以說沒有這個設計,整個阿波羅11號任務可能變成人類航天史代價最大的災難。這一年瑪格麗特不到33歲,事業有成,還有個女兒,比我們現代人厲害多啦!

我們現在耳熟能詳的“軟體工程”這個詞就是瑪格麗特發明的,經過這些航天以及軍方的專案,許多的概念在瑪格麗特腦海裡越發成熟,她不僅提出了軟體工程的概念,同時她還是平行計算、優先順序調配、端對端測試等技術的先驅者,現代院校工科專業中往往都會有“軟體工程”學院。

此外呢,人類第一個卡爾曼濾波器(線性系統的最優估計觀測器)是在阿波羅計劃中實現的,作者是斯坦利施密特,不過瑪格麗特作為首席工程師也是參與討論和開發的,程式碼一定也在這一摞厚厚的紙當中。卡爾曼濾波是航天導航中的核心演算法,數學內容之奧妙讓人回味無窮,這也是我目前學到的同FFT(快速傅立葉變換)在內的極其令人讚歎不已的工程演算法。

卡爾曼濾波演算法的程式設計時需要用到矩陣運算,讓現在任何一個工程師拿C手寫矩陣分解,估計都會讓他痛苦好幾天的,別說上古時代只有電晶體計算機和組合語言了。大家應該能想象出更多艱難的事情了。

瑪格麗特推廣了“軟體工程”一詞,後來領導了為美國第一個空間站Skylab編寫軟體的團隊。她於1976年在劍橋創立了自己的公司,近年來她的成就一再被人們所慶祝。她於2003年獲得美國宇航局的特殊空間法案獎,並於2016年獲得總統自由勳章。

瑪格麗特獲得總統自由勳章

2017年,她獲得了最大的榮譽:Margaret Hamilton Lego minifigure(樂高mini人物角色)。

Margaret Hamilton Lego minifigure

有趣的是,瑪格麗特還引領了1969年黑絲連衣裙的流行

13
最新評論
  • mRNA疫苗可誘導對SARS-CoV-2及其多種擔憂的變體的持久免疫記憶
  • 時空穿越,還是平行宇宙?消失的潘博文到底去了哪裡?