上世紀60年代中期,麻省理工學院(MIT)儀器實驗室的程式設計師們為阿波羅11號登月計劃開發飛行控制軟體,由於當時還沒有開發軟體所需要的技術積累,所以他們必須自己打造一套體系出來。
他們提出了一種存儲電腦程式的新方法,名為「線存儲器」,並創造了一種特殊版本的彙編語言。對於現今的很多程式設計師來說,彙編語言晦澀難懂,其目的是方便計算機理解,而不是便於人類理解。MIT的程式設計師們為阿波羅制導計算機(AGC)編寫了成千上萬行的那種深奧代碼。
從下圖中,可以直觀地感受到他們到底寫了多少代碼。圖為阿波羅登月計劃軟體工程主管瑪格麗特·漢密爾頓(Margaret Hamilton),她旁邊是一大堆的AGC代碼文件。
AGC代碼其實早已公之於眾,最初是由技術研究員羅恩·伯基(Ron Burkey)在2003年上傳到網絡。他根據MIT在網上發布的原始硬拷貝的掃描件進行了轉錄,也就是一行一行地手動打出來。
「掃描的人是一名叫做加裡·內夫(Gary Neff)的飛行員,」伯基在電子郵件中寫道,「MIT得到了掃描件,把它們以網頁圖片的形式放上網。但不幸的是,在此過程中,那些圖片遭到損壞,有些地方無法看清。」伯基利用其工程知識查漏補缺,恢復了無法看清的部分。
「一段時間過後,我從加裡·內夫那裡拿到了備用掃描件,對無法看清的部分進行了核實,幸運地發現我恢復的部分完全正確!」他說。
這使那些想要探究AGC代碼的研究員和愛好者如獲至寶。伯基本人甚至利用AGC代碼創造了一個模仿品。
儘管伯基付出了巨大的努力,成功地重現了無法看清的部分,但對於當今的很多軟體開發者來說,AGC代碼本身仍然有點晦澀難懂,直到7月7日那天,曾在NASA實習的克裡斯·加裡(Chris Garry)將AGC代碼完整地上傳到代碼共享網站GitHub。如今,光顧該網站的程式設計師數不勝數。
幾小時內,程式設計師們開始研究AGC代碼,尤其是AGC原始編程者撰寫的代碼注釋。代碼注釋是用簡單直白的語言描述某個特定時刻執行的任務。Reddit網站程式設計師吐槽欄目的讀者們在找樂子方面一向敏銳,他們發現AGC代碼的很多注釋並不是對代碼本身的枯燥解釋,其中充滿了有趣的笑料和訊息,以及上世紀60年代的很多人和事。
例如,一份原始碼文件名為「BURN_BABY_BURN--MASTER_IGNITION_ROUTINE」(燃燒吧,寶貝,燃燒吧——控制點火程序),開頭的注釋(下圖)這樣寫到:「燃燒吧,寶貝,燃燒吧」可追溯到1965年的洛杉磯騷亂,當時著名DJ、電臺所有者「偉大的蒙塔古」(Magnificent Montague)在打碟時使用了這句話。偉大的蒙塔古是上世紀50年代中期至60年代中期,在芝加哥、紐約和洛杉磯極富感召力的靈歌代表人物。
以下這段代碼也出自控制點火程序,第一行寫著「你好啊」,最後一行寫著「拜拜,歡迎再來哦」。從中可以體會到AGC原始編程團隊有多愛玩。
在名為「LUNAR_LANDING_GUIDANCE_EQUATIONS.s」(月球著陸制導等式)的文件中,程式設計師希望其中的兩行代碼是暫時的,結果卻成了永久的。
也是在那份文件中,出現了讓太空人「轉動那個蠢東西」的注釋。
「那是指轉動著陸雷達的天線,」伯基解釋說,「我覺得那是在提醒太空人調整天線。」
在被描述為「AGC和計算機操作員之間的鍵盤和顯示系統交互程序」的「PINBALL_GAME_BUTTONS_AND_LIGHTS.s」(彈珠遊戲按鈕和顯示)文件中,甚至出現了莎士比亞名著《亨利六世》中的一段話:「我要徑直向你指出,你任用了許多人,讓他們大談什麼名詞呀,什麼動詞呀,以及這一類的可惡字眼兒,這都是任何基督徒的耳朵所不能忍受的。」
Reddit網站的一位用戶指出,這可能是在吐槽AGC的程式語言。這種程式語言利用預先確定的「名詞」和「動詞」來執行操作。例如,動詞37代表「運行程序」,名詞33代表「點火時間」。
既然AGC代碼已經在GitHub網站上公布,程式設計師們現在能夠提出問題和修改建議了。他們當然不會錯過機會。一位程式設計師提出了一個問題,說「低溫貯罐發生了非常嚴重的電路故障」,並列出了再現這個問題的步驟。他補充道,「要小心,這可能對測試者造成危險。」回復非常熱烈。
一位用戶說,問題可能不在於代碼,而在於其他方面:
「是不是只發生在月球轉移軌道(sol-3-a)上?還是在所有的月球軌道上都會發生?問題可能出在月球。試著縮小問題的範圍。」
另一位用戶談到了基本操作:
「你有沒有試過關閉後重啟?」
一位程式設計師認為可能只是軟體需要更新:
「阿波羅14號解決了這個問題。」
翻譯:于波
來源:Quartz
造就:線下劇院式的演講平臺,發現最有創造力的思想
更多精彩內容請關注:造就