登月50年|阿波羅11號險墜毀!是她的代碼讓人類成功登月

2021-01-14 快科技

「那時瑪格麗特就考慮到,當大量數據湧入電腦,系統扛不住時應該怎麼辦。所以為了保險起見,她細心地在原有的基礎上添加了這個「異步處理程序」,來解決問題。」

編者按:

1969年7月20日下午4時17分42秒,美國太空人阿姆斯特朗將左腳小心翼翼地踏上了月球表面,這是人類第一次踏上月球。

如今時間已經過去了50年,但阿姆斯特朗那句「我的一小步,人類的一大步」的經典獨白,仍然深深地刻在每個人的心裡。

騰訊科技聯合知乎發起「登月50年」系列策劃,聚焦人類探索月球的點點滴滴,一起回顧人類和月球的往事。

第三期:她的一串代碼讓人類登月,兩次化解航天災難,是程式設計師永恆的女神

文/知乎專欄作者:SME情報員

2017年9月15日,土星探測儀卡西尼已宣告自毀成功,完成了人類探索土星的悲壯史命。

但偉大歸偉大,其實在卡西尼身上也發生過讓人哭笑不得的錯誤。

當年的卡西尼身上還帶著一枚用於探測土衛六(也稱泰坦星,土星衛星中最大的一個)的「惠更斯」號探測器。

當時「卡西尼-惠更斯」號非常完美地登陸了土衛六,但是地面卻一直沒有收到儀器傳來的數據。

經徹查後,結果讓所有人大跌眼鏡,原因竟是地面控制員忘了按啟動接收按鈕。

最後這個小失誤導致了大量的數據丟失,包括原本應收到的700張珍貴圖片,最後也只剩下350張。

而設計者大衛·阿特金森十八年的努力就這樣功虧一簣,而惠更斯號則得名卡西尼的「豬隊友」。

其實類似這種事情,在航天史上從來沒少發生。人為錯誤確實低級,但卻難以避免。

像執行人類第一次登月任務的阿波羅計劃,也曾經因為一個按鈕的事,差點導致機毀人亡。

但幸運的是,那次有一位「女程式設計師」挺身而出,拯救這場浩劫。她在「最無用」的部門裡,卻做了最有用的事情。只是當年極少人意識到她的貢獻,到現在她的故事才被重新提起。沒有她,就沒有阿姆斯特朗的一小步和人類的一大步。

瑪格麗特·希菲爾德·漢密爾頓

瑪格麗特·希菲爾德·漢密爾頓,1936年出生於一個美國普通家庭。她從小就是典型的「別人家的孩子」,成績優異,性格溫和。高中畢業後,她就順利考上大學,主修數學。

在那裡她也結識了詹姆斯·漢密爾頓,成了漢密爾頓太太。很自然地,大學畢業後她成了一名老師,教數學和法語。那時,她的丈夫漢密爾頓還在哈佛法學院繼續深造。

所以一邊工作的她,還主動承擔起了所有的家務。等到丈夫學成後,瑪格麗特才有機會繼續深造,再讀一個抽象數學的學位。

然而,他們小兩口的生活並不富裕。為了幫補家用,1962年瑪格麗特也額外找了一份在MIT儀表實驗室的臨時編碼工作。也就是這個決定,讓她一腳踏入了程序的殿堂。

最初,她負責編寫在計算機上運行的天氣預報軟體。但因為工作異常出色,很快就獲得了轉正資格,並加入著名的林肯實驗室。

那時,她的工作任務也從簡單的程序變到為美國軍方的「賽其」(SAGE)系統*寫代碼。(*註:「賽其」系統,被稱為國際網際網路的鼻祖,也是阿帕網的前身,主要目的是在冷戰時期偵查蘇聯有可能發起的核攻擊。)

1962年,瑪格麗特參加SAGE項目時期的照片

在上個世紀60年代,程式設計師可沒有今日這麼風光,連「程序猿」都比不上,更別提「軟體工程師」這樣響亮的頭銜。

和今日科技圈少有的女碼農一樣,當年的瑪格麗特就是一個不折不扣的異類。

雖然名不正言不順,但當年程式設計師們的工作可比現在複雜上幾十倍。

瑪格麗特在打字機上打出的代碼

在那個年代,並不是敲敲鍵盤就能寫出代碼那麼簡單。瑪格麗特首先需要將代碼用打字機寫到紙上,連Debug(排錯)的功能都只能靠腦力檢查。在確認無誤後,這些信息才會交給一群精通針線活的「小老太太」(Little Old Ladies)。

她們會像繡花一樣用磁環把信息編到內存裡,當銅線穿過磁芯代表1,繞過磁芯則代表0。

然而這些都還不是最難的。那個年代正是程序的「開荒期」,軟體工程也不是一個拿捏得十分準確的領域,很多東西還未統一。所以要想為一個軟體編程,至少要學好幾套彙編語言。

而剛進去的瑪格麗特更像一塊白紙,還需要面對各種棘手的程序,任誰都得崩潰。但也正是這些五花八門的難題,激起了對編程的無限興趣。

瑪格麗特正在手動編程

隨著日漸豐富的編程經驗,瑪格麗特也慢慢成了系統編程的專家。而另一邊甘迺迪也在1961年發起的阿波羅登月計劃,這就成了瑪格麗特人生重要的轉折點。

那時的她也加入到了阿波羅計劃,為登月飛船寫程序。在阿波羅計劃的最初,好像並沒有「軟體」什麼事。就連在原始檔案列出的阿波羅任務的各項需求中,竟從頭到尾都沒有提到軟體這個詞,更別提預算什麼的。

之後隨著阿波羅項目逐漸啟動,NASA才意識到軟體的重要,逐漸把軟體團隊擴大到400人。在1965年,瑪格麗特也成了整個軟體編程部的部長。

隨著責任變重,瑪格麗特的壓力也越來越大。有一次她甚至還做夢見到,新聞頭條是阿波羅墜毀,最後追查下來竟是自己的程序有誤。當時她從夢中驚醒,就連夜跑回實驗室,竟然還真的在程序中發現了一個小錯誤並改正。

在那段日子裡她的女兒勞倫也出生了,所以特別忙的時候瑪格麗特還不得不將女兒帶去實驗室。她在工作的時候,小女兒就在旁邊玩耍,累了就直接在地板睡覺。

身邊的人都對這位「工作狂媽媽」十分不理解,常問她「你怎麼忍心這麼不顧自己的孩子」。雖然心有愧疚,但她還是對神秘的程序十分痴迷,不能自拔。

一天,女兒勞倫在指令艙模擬器中玩耍。當她在鍵盤上亂按時,一條錯誤的信息突然彈出。原因是她不小心啟動了一個叫P01的預運行程序,導致原本還在飛行狀態的模擬器瞬間崩潰。

看到這種情況,瑪格麗特就提議在整個系統中多加一段代碼,防止類似的狀況發生。如果在飛行過程中,太空人操作出了什麼差池,還有挽回的地步。

但是當時所有人都覺得太空人是受過嚴格訓練,操作是完美的,「絕對不可能出錯」。再加上當年的計算機存儲空間和運算能力十分有限,決策者也不想添加任何「累贅」的部分。

所以瑪格麗特也無可奈何,只能在作業系統中添加了一個備註「不要在飛行中選擇P01模式」。

但是可怕的事情,還是發生了。1968年12月21日,人類首次繞月飛行的阿波羅8號發射。

但就在飛行的第5天,太空人Jim Lovell還是在無意間按下了P01模式。這個模式的啟動後,所有導航數據都會被清空。

這樣下去,飛船將無法把太空人送回地球,在太空中迷路是分分鐘的事。知道要出大事了,決策者也十萬火急地打電話到瑪格麗特那,讓她想一個補救的辦法。

於是,瑪格麗特也馬上帶著MIT的一群程式設計師,連夜奮戰了9個小時,才設計出了一個新的計劃。當時這份新的導航數據上傳後,大家才鬆了一口氣。

一切又回到正常的軌道,阿波羅8號也順利載著太空人返航。這次事件後,決策者與瑪格麗特都更明顯地感受到軟體對登月計劃的重要性。

軟體幾乎成了美國要贏得太空競賽的重要籌碼,瑪格麗特加班的頻率也越來越高,時間也越來越長。

但瑪格麗特最大的挑戰還在後面。就在阿波羅11號飛船即將登陸月球前的幾分鐘,就是這麼一個關鍵的時刻,危機還是發生了。

登月時期,人類能用的電腦都是超小內存、計算速度極度緩慢的。系統能永久保存的不過1.2萬字節,而臨時存儲的空間就更小了,只有1024位元組。

用瑪格麗特的話來說就是「今天看起來這簡直不可思議」。所以就在阿波羅11號離月球不遠處時,電腦也因過度運轉,大量地彈出錯誤信息,系統幾近崩潰。

如果電腦扛不住,飛船將毫無疑問墜毀,成為世上最「悲壯」的登月。但就是在這麼「不可思議」的硬體條件下,瑪格麗特設計的系統竟頂住所有壓力。

原因是她首創的「異步處理程序」,教會了電腦如何「抉擇」,為阿波羅11號解決了危機,也為自己贏得了榮譽。飛船在登月過程中,除了要控制推進外,還會進行著一系列不那麼重要的計算。

那時瑪格麗特就考慮到,當大量數據湧入電腦,系統扛不住時應該怎麼辦。所以為了保險起見,她細心地在原有的基礎上添加了這個「異步處理程序」,來解決問題。

當沒有足夠空間運行時,電腦最寶貴的存儲空間便會留給最關鍵的部分,比如最重要的——讓鷹號在月球登陸。而其他低優先級的任務,如雷達交換數據任務將會被暫時切斷。

每個人都看到了阿姆斯特朗在月球上的第一步。然而,不是每個人都知道這背後,有這麼一位女程式設計師也為女性邁出了一大步。

瑪格麗特拯救人類的登月計劃時,年齡不過33歲。除了登月,這位先驅女極客還曾為廣大「碼農」正名,首次使用了「軟體工程師」一詞來稱呼包括自己在內的程式設計師。

她說:「希望給予做軟體的人們以尊重,因為他們和其他做硬體的人一樣,在這個宏大的工程裡各司其職。」

登月成功後,瑪格麗特也功成身退,離開NASA出來創建自己的公司,繼續在軟體行業努力。

2003年,她也因當初的貢獻獲得美國宇航局對個人的最高獎勵,NASA傑出太空行動獎。2016年,她再次獲得美國最高的民事榮譽總統勳章,與蓋茨、喬丹同臺領獎。

回顧那段從零開始的程式設計師生活,她說自己是世界上最幸運的人。因為「別無選擇,只能成為先驅者,沒有時間成為初學者」。

文章來源:騰訊科技&知乎

相關焦點

  • 阿波羅11號:登月50年
    1969年7月20日,在「阿波羅11號」環月飛行了12圈、並釋出登月艙「鷹」之後,這一句久等的話,讓許許多多在場的工作人員熱淚盈眶。如今,刻畫宇宙探索的科幻大片層出不窮,月球已經不算是冒險家的樂園了,觀眾也不會更感興趣。
  • 阿波羅11號登月50周年紀念,人類為什麼自此不再登月了?
    2019年7月20是人類登月50周年紀念日。50年前的7月16日,巨大的「土星5號」火箭載著 「阿波羅11號」宇宙飛船從美國的甘迺迪航天中心點火升空。開始了人類首次的登月徵程。美國太空人阿姆斯特朗、奧爾德林和柯林斯乘坐宇宙飛船飛越了38萬公裡徵程。最終於7月20日踏上了月球表面。
  • 人類登月五十年,憶阿波羅11號的奇妙冒險。
    阿姆斯特朗鄭重宣讀:「1969年7月,來自地球的人類首次登上月球,我們是為全人類的福祉而來!」之後,這塊紀念匾被留在月球上,見證著人類對月球的探索。拋棄掉登月艙上升段之後,阿波羅11號飛船隻剩下了指令服務艙。於是,踏著歡快又愜意的步伐,阿波羅11號走上了回家的路。
  • 耗時三年,14萬行,50年前阿波羅11號登月的全部代碼都能在GitHub找到了!
    大數據文摘出品作者:易琬玉50年前的今天,美國太空人尼爾森·阿姆斯特朗從阿波羅11號飛船登月艙走出,在月球表面留下了人類登月的第一個腳印。AR應用「JFKmoonshot」模擬的從Apollo11太空艙走出的視頻美國總統甘迺迪1961年就設定了登月目標。阿波羅計劃歷時9年,經歷了10次失敗,Apollo11號才終於將人類的蹤跡帶到了月球。
  • 人類登月40年「阿波羅11號」登月八大內幕(組圖)
    1969年7月20日,美國太空人尼爾·阿姆斯特朗從「阿波羅11號」飛船登月艙走出,在月球表面留下人類登月的第一個腳印,實現了人類登月夢想。
  • 人類登月50年|阿波羅11號完成了不可能的任務
    編者按:今年是阿波羅11號登月50周年紀念日。值此之際,詳細記述人類登月全過程的新書《登月使命》出版。經出版社授權,澎湃新聞特摘錄《登月使命》「第11章 飛向月球」,以饗讀者。《登月使命》書影準備做大事1969年7月,休斯頓,倒計時的時鐘嘀嗒不停。人們正在快速處理最後的細節。所有人都在聚精會神地迎接即將到來的阿波羅11號任務。
  • 阿波羅 11 號登月 50 周年,回顧阿波羅號探月計劃
    北京時間7月15日消息,據美國宇航局網站報導,阿波羅11號飛船登月50周年紀念日臨近,讓我們再次回顧一下阿波羅號計劃的探月歷史。儘管他們表現出身體不舒服,但是努力完成了任務目標,展示了人類在太空中所需的韌性和適應性。機組人員:指揮官沃爾特·希拉,月球艙駕駛員沃爾特·坎寧安、飛行艙指揮員多恩·艾塞爾。發射時間:1968年10月11日返程時間:1968年10月22日,3名太空人安全返回地面。
  • 阿波羅11號登月50周年,阿波羅計劃電影盤點
    50年前的7月21日(北京時間),阿波羅11號登陸月球,太空人尼爾·阿姆斯特朗在月球寧靜海邁出的一小步,成為了人類探索宇宙的一大步。50年來,圍繞阿波羅計劃的讚頌和陰謀論從未間斷,從這些電影就可見一斑。
  • 你不知道的阿波羅登月秘聞
    阿波羅計劃在1960年公布時,最初的計劃是將幾位航天員送入月球軌道,而不是月球表面,但是美國總統約翰·甘迺迪在1961年發表了著名演講,宣布他和美國將會在10年之內將人類送上月球。 執行阿波羅11號任務的航天員的心率出奇的正常。
  • 李會超:阿波羅登月50年,美國還能在月球上再次偉大嗎
    (文/觀察者網專欄作者 李會超) 美國東部時間1969年7月20日16時17分(北京時間1969年7月21日4時17分),阿波羅11號飛船的「老鷹」號登月艙成功在月球著陸,太空人阿姆斯特朗留下了人類在月球上的第一個腳印。自此之後,首次登月成為人類歷史上的一個重要裡程碑,「我的一小步、人類的一大步」的登月感慨也成為了深入人心的名言。
  • 阿波羅11號登月秘密(一):原來他並非登月的最佳人選
    作者 | 辰辰出品 | 網易科技《知否》欄目組(公眾號:tech_163)今年是阿波羅11號任務50周年,這無疑是改變人類科技歷史進程的一個裡程碑事件。50年前,在不計成本的瘋狂投入後,人類首次踏上了月球表面,但這「全人類的一小步」,前後花費了十多年的時間。
  • 阿波羅登月是真實的嗎?其實鐵證如山
    UTC時間20:17,阿波羅11號「鷹」號登月艙平安降落在月球上,太空人完成了人類初次登月,他們還在月球外表上裝置了第一臺來自地球人類的特殊反光鏡,這是一個大約60釐米寬的設備,上面配置了100個稜鏡,被稱為月球雷射測距反射器陣列。
  • 為什麼1972年後再沒有人類登月?阿波羅登月究竟是不是假的?
    中新網7月20日電 (卞磊)「霍金再發警告不要登月?」「阿波羅11號登月是在攝影棚偽造的騙局?」1969年7月20日,阿波羅11號載3名太空人成功登月;49年前的今天,人類首次完成登月壯舉。眼下,披著「真相」外衣的登月陰謀論仍在盛行,阿波羅計劃的細節經不起推敲?為何人類在1972年最後一次登月後,再未踏上月球表面?
  • 阿波羅登月再遭質疑——當初成功登月憑的是運氣?
    這兩種解釋,算是暫時平息了人們對於美國阿波羅登月真假的爭議。50年來,關於美國登月真假的質疑從來沒有平息過。比如最大的疑點是:美國1961年才開始登月計劃,短短的8年間就趕超蘇聯,成功登月,這不能不讓人懷疑。疑點雖然很多,但卻從沒有人拿出真正有力的證據,推翻美國登月的事實。
  • 登月50年 | 一文看盡人類首次登月:別讓陰謀論毀了這次壯舉
    如今時間已經過去了50年,但阿姆斯特朗那句「我的一小步,人類的一大步」的經典獨白,仍然深深地刻在每個人的心裡。 騰訊科技聯合知乎發起「登月50年」系列策劃,聚焦人類探索月球的點點滴滴,一起回顧人類和月球的往事。
  • 阿波羅11號登月原始碼公布,其中竟隱藏莎翁名言
    「阿波羅11號」登月項目計算機制導系統的原始碼,使得普通民眾也能一覽航天登月系統的內部實現邏輯。(只不過當年用彙編寫的代碼,一般人可能看不太懂就是了)其實,「阿波羅11號」登月項目的原始碼早在2003年就被科技學者Ron Burkey公布於眾,那時他不得不從一份原文的掃描版中人工將代碼一行一行地敲入計算機,並上傳到網絡。如下圖所示,照片右側一人高的紙上全是阿波羅11號登月的代碼,你就可以想像Ron Burkey是多麼有毅力的一個人。除
  • 阿波羅登月50年,美國還能在月球上再次偉大嗎
    (文/觀察者網專欄作者 李會超)美國東部時間1969年7月20日16時17分(北京時間1969年7月21日4時17分),阿波羅11號飛船的「老鷹」號登月艙成功在月球著陸,太空人阿姆斯特朗留下了人類在月球上的第一個腳印。自此之後,首次登月成為人類歷史上的一個重要裡程碑,「我的一小步、人類的一大步」的登月感慨也成為了深入人心的名言。
  • 阿波羅11號登月飛船原始碼:除了代碼還有笑料和吐槽
    上世紀60年代中期,麻省理工學院(MIT)儀器實驗室的程式設計師們為阿波羅11號登月計劃開發飛行控制軟體,由於當時還沒有開發軟體所需要的技術積累,所以他們必須自己打造一套體系出來。對於現今的很多程式設計師來說,彙編語言晦澀難懂,其目的是方便計算機理解,而不是便於人類理解。MIT的程式設計師們為阿波羅制導計算機(AGC)編寫了成千上萬行的那種深奧代碼。 從下圖中,可以直觀地感受到他們到底寫了多少代碼。圖為阿波羅登月計劃軟體工程主管瑪格麗特·漢密爾頓(Margaret Hamilton),她旁邊是一大堆的AGC代碼文件。
  • 美國副總統彭斯慶祝阿波羅11號登月50周年的演講
    登月來之不易,也不是沒有代價的。不經歷嚴酷的風險或犧牲,登月是不可能實現的。 至今,美國人仍在悼念阿波羅1號的三位勇敢的太空人,他們於1967年1月在發射臺的火災中喪生。直到今天,我們仍然懷念他們和他們的家人。 阿波羅號面臨的風險是如此之大,成功的機率是如此之小,以至於很多人擔心,即使我們的太空人成功登月,也可能無法重返地球。
  • 登月是偽造的嗎?阿波羅11號科學家在50年後揭露真相
    關於登月的真實性已經爭論了50多年,但一位致力於開發登月計算機系統的人澄清了這個問題。他的主要工作之一是監督1969年傳奇的阿波羅11號登月任務中使用的NASA作業系統,即通用模擬系統(GPSS)。Sakakeeny先生聲稱,在降落到月球表面的過程中,系統中出現了一個「嚴重的錯誤」,導致了一次故障。 作為前麻省理工學院儀器實驗室的計算機操作員,我可以毫不含糊地說,登月是真實的。