50年前的登月程序和程序員有多硬核

50年前的登月程序和程序員有多硬核

我們細看一下,這些文件的日期是,1969年7月14日,而Apollo 11登月的日期是1969年7月16日起程,7月19日經過月球背面,7月20日下午8點登月。 代碼 寫好,兩天後就直接上生產,然後就登月,還是導航代碼,這代碼寫的的 健壯性 得有多強。

如果你仔細比較一下這兩個目錄中的文件,你會發現有些文件是一樣的,不但文件名一樣,而且內容也一樣。這說明這兩個模塊中的一些東西是相似的。

50年前的登月程序和程序員有多硬核

打開源文件,你還可以看到每個文件都有很多很多的註釋,非常友好,但是也有一些註釋比較有趣。這裡有一組短視頻帶你讀這些代碼 – Exploring the Apollo Guidance Computer(AGC) Code,一供10個小視頻,每個2分鐘左右,如果你英文聽邊還行(我覺得很容易聽懂),可以看看,瞭解一下AGC的工作方式,挺有趣意思的。

當時的AGC有32公斤,主頻只有2MHz,2K的RAM,36K的ROM。嗯,當年就是這麼一個小玩意,把人送上了月球,今天,一個聊天 程序 就佔內存幾GB……

下面是AGC在Apollo 1指揮艙裡的樣子(圖片截自上面的視頻),這個高質量的3D掃描來自 Simithsonian 3D: Apollo 11 Command Module (我覺得美國人幹這些事幹就是很漂亮啊,這種高清的3D掃描太牛了,如果你仔細看,這個艙裡還有宇航員在艙壁上的手寫)

50年前的登月程序和程序員有多硬核

這個AGC的操作界面又叫DSKY – Display 和 Keyboard的縮寫,下圖是一個 AGC 模擬器,其官方主頁在
https://www.ibiblio.org/apollo/ 源代碼 在 Github/VirtualAGC。在這個界面上我們可以看到:下面的鍵盤上左邊有兩個鍵,一個是動詞Verb一個是名詞Noun,Verb指定操作類型,Noun指定要由Verb命令修改的數據。右邊的顯示器下面有三個5位的數字,這三個數值顯示錶示航天器姿態的矢量,以及所需速度變化的顯示矢量。是的,當年的導航就靠這三個數字和裡面的程序了。

50年前的登月程序和程序員有多硬核

另外,我在Youtube上找到了一個講當時Apollo電腦的紀錄片 – Navigation Computer,太有趣了。比如:21分51秒開始講存儲用的 Rope Memory 繞線內存,Hamilton 也出來講了一下在這種內存上編程,畫面切到一個人用個比較長的金屬針在一個像主板一樣的東西上,左右穿梭,就像刺繡一樣,但是繡的不是圖案,而是程序……太 硬核 了,真正的通過“硬編織”的方式來寫程序。

50年前的登月程序和程序員有多硬核

看完上面這個紀錄篇,我是非常之驚歎,驚歎於50年前的工程能力,驚歎於50年前這些人面對技術的的一絲不苟,對技術的尊重和嚴謹的這種精神和方法,一點都不比較今天差。

不過,最牛的還不是這個,我在Hamilton的Wikipedia詞條上找到了他說的一個事件—— 當年Apollo登陸雷達開關放在了錯誤的位置,導致AGC收到了不少錯誤的信號。結果就是AGC既得執行著陸必須的計算,又要接受這些佔用其15%時間的額外數據。但是AGC的程序居然可以用高優先級的任務打斷低優先級的任務,於是,AGC自動剔除了低級別的任務以保證了重要的任務完成。Hamilton 原話說—— 如果當時的程序不能識別錯誤並從錯誤中恢復,我懷疑阿波羅不能成功登月。if the computer hadn’t recognized this problem and taken recovery action, I doubt if Apollo 11 would have been the successful moon landing it was。

看到這裡,你有沒有覺得——“這個女程序員的一小步,是整個人類的一大步”?

Hamilton 的牛逼之外還在於,她是第一個將“軟件工程”提出來的人,在MIT,她想讓軟件開發就像其它工程一樣,有相應的工程紀律,給於相關的尊重,於是她創造了Software Engineering這個詞。2018年,IEEE在紀念軟件工程50週年的時候,他們把 Hamilton 請過去講了一個叫 What the Errors Tell Us 的主題。她絕對可以稱得上是 程序員 的Pioneer。

三年前,Apollo的源代碼被開源時候,Twitter有個叫 Lin Clark 的人發了一條推:“我媽50年前的代碼被放到Github上了”,雖然,她不是 Hamilton 的女兒,但她媽媽也是Apolload其中一個程序員,現在Lin Clark同樣也是一個程序員,目前在 Mozilla工作,Staff Engineer,專長 WebAssembly, Rust, 和 JavaScript ,也是個非常厲害的程序,Youtube上各種演講,也是一個跟他媽媽一樣牛的人。

當她在Twitter上這麼自豪地發了一條這樣的推後,我不知道各位有什麼想法?想不想你的後代在未來也會這樣自豪的發條微博?

50年前的登月程序和程序員有多硬核

最後,尤其是想對那些到Apollo源代碼的issue裡發spam垃圾信息的人說一下,你看看人家,再看看你們自己,你們是不是想讓你們的孩子在登月100週年紀念的時候說——50年前我爹那個傻叉在Apollo的github的issue列表時寫了些垃圾,還以為自己多機靈?!


分享到:


相關文章: