實現人類登月夢想的代碼

前幾天Github上發布了曾經帶領美國踏上月球的代碼,它猶如一顆時間膠囊,將人們帶入到了20世紀60年代。

20世紀60年代中期,在麻省理工學院(MIT)儀器實驗室的程序員們開始為阿波羅11號太空計劃研發飛行軟體的時候,世界上還不存在任何登月必需的技術。因此他們不得不自己去發明。

程序員們提出了一種新的存儲計算機程序的方式,叫「磁心線存儲器」,並且創建了一種特別版彙編語言。如今很多程序員都不清楚彙編是什麼東西。彙編語言讀起來非常困難,但是計算機容易理解。為了研發阿波羅導航計算機(AGC),MIT的程序員們寫了成千上萬行這種難懂的代碼。

讓我們通過數據可視化看看在20世紀60年代他們到底寫了多少代碼——下面這位女士是Margaret Hamilton,太空計劃的軟體工程主管,正站在一堆寫滿代碼的紙邊上。

AGC代碼已經公開了有一段時間了——第一次是由技術研究人員Ron Burkey在2003年上傳的,他根據MIT放到網上的原始硬拷貝的掃描圖片謄抄了一份。也就是說,他是手動一行一行地敲出來的。

「是科羅拉多州的一名叫Gary Neff的飛行員掃描的,」 Burkey在郵件中說道。「MIT手裡有這些掃描件,然後把它們以頁面圖片的形式放到了網上,不幸的是在這過程中一些地方殘損了,難以辨識。」Burkey利用自己的工程技能填補了這些空白,修復了這些殘損的部分。

「後來過了很長時間,難讀的部分,我從Gary Neff那裡得到了一些替代掃描件,幸運的是,我發現我填的那部分完全正確。」他說。

這使得這些代碼可供任何想要研究它的研究人員或者業餘愛好者使用。Burkey他自己甚至利用這軟體創建了一個模擬AGC(simulation of the AGC)。

雖然和Burkey的計劃一樣龐大和成功,但是代碼本身對於許多今天的軟體開發者而言仍然有些難懂。直到上周四(7月7日),前NASA實習生Chris Garry將軟體完整地上傳到了 GitHub,一家目前有數百萬程序員訪問的代碼分享網站。

數小時內,開發者們就開始仔細分析這一軟體。AGC以前的程序員編寫的注釋受到了特別關注。在編程中,注釋是對某一定點執行任務的易懂的英語描述。但是正如在Reddit的r/ProgrammerHumor 中一貫敏銳的笑話偵探發現的那樣, 在AGC代碼中,許多注釋遠遠不止是軟體本身無趣的解釋,反而充滿了漫不經心的笑話和留言以及極具20世紀60年代特色的引用。

比如,一個源代碼文件叫BURN_BABY_BURN - - MASTER_IGNITION_ROUTINE,公開注釋(opening comments)是這麼解釋的:

【這要追溯到1965年,洛杉磯暴亂,其靈感來自於非凡的唱片騎師(DJ)兼廣播電台老闆Magnificent Montague。在搓盤最受歡迎的新唱片的時候,Magnificent Montague就會說「燃燒吧,寶貝,燃燒起來!」 在20世紀50年代中期到60年代中期,Mangificent Montague 是芝加哥、紐約和洛杉磯黑人樂的魅力之音。】

子程序有900多行,從下面這段代碼的第一條和最後一條注釋就可以看出原編程團隊多麼有趣。

【嗨,你好.......再見,再來啊。】

在LUNAR_LANDING_GUIDANCE_EQUATIONS.s文件中,兩行代碼是臨時的意思,最後結束卻是永久的意思,與程序員的希望完全相反。

【臨時的,我希望....;臨時的,我希望...;准許X-AXIS覆蓋】

在同一個文件中,也有代碼似乎是命令宇航員「啟動周圍的這笨傢伙」(「crank the silly thing around」)。

【宇航員:請啟動這個笨傢伙

「代碼全是為LR(登錄雷達)定位天線的,」 Burkey解釋道。「我猜這顯示的代碼是提醒宇航員重新定位。」

在PINBALL_GAME_BUTTONS_AND_LIGHTS.s文件(被稱為鍵入和顯示系統計劃...AGC和計算機操作人員之間交流)中,有一個很特殊的莎士比亞名言引用(Shakespeare quote):

【以下引文承蒙作者提供。(後文大意就是)「事實將會當面向你證明,你那些人常談論的名詞、動詞,這一些令人厭惡的字眼,基督徒是沒法忍受的。

這可能是對AGC編程語言本身的引用,就像一位Reddit用戶指出(pointed out)的那樣。 語言使用了預定的「名詞」和「動詞」來執行操作。比如,動詞37意思是「運行計劃」,然而名詞33意思是「點火時間」。

既然代碼在Github上都有了,程序員們實際上就可以提建議更改和提問題了。當然,他們也已經這麼做了 (they have)。一個開發者提了一個問題,「一名客戶遇到了很嚴重的問題,攪拌低溫貯罐的時候出現了電路故障。」並且列出了重現該問題的步驟。「注意,這對嘗試的測試者可能會造成危險,」他補充說。下面獲得了大量回答。

一個用戶提議說可能不是代碼的問題,而是其它問題。

【是只有在超月軌道線(sol-3-a)有問題,還是月球岸線也有?可能月球的問題。只管試圖縮小問題範圍吧。】

另外一個人給了一個基礎性的回答:

【你有沒有再試試開關?】

另有開發者覺得可能是軟體需要更新(updated):

【(更新到)阿波羅14號就沒問題了】

翻譯:李法見 from 程序員客棧 proginn.com/?

原文章:qz.com/726338/the-code-


推薦閱讀:

海上回收火箭首獲成功,民營航天發展勢不可擋
太陽系發現未知行星?這還真不怪冥王星
為什麼尋找外星生命,先找宜居帶、液態水、碳基生命?
瞧瞧2017年都有誰要登月?
2020年這下火星可熱鬧了!

TAG:太空探索 | 代码 | GitHub |