7 日,一名 NASA 的前实习生 Chris Garry 在 Github 上公开了“阿波罗 11 号”登月专案电脑导引系统的原始程式码,使得普通民众也能一览太空登月系统的内部趋动逻辑(只不过当年编写的程式码,一般人可能看不太懂就是了)。
其实,“阿波罗 11 号”登月专案的原始程式码早在 2003 年就被科技学者 Ron Burkey 公布给大众,那时他不得不从一份原文的扫描版中,人工将程式码一行一行地敲入电脑,并上传到网络。如下图所示,照片右侧一人高的纸上全是阿波罗 11 号登月的程式码,你就可以想像 Ron Burkey 是多么有毅力的一个人。除了上传该程式码,Ron Burkey 还根据自己对程式码逻辑的理解,写了一个阿波罗 11 号导引系统的模拟程式,关于该程式的影片大家可以点这里。
▲ 登月程式编写者之一-玛格丽特·汉密尔顿(Margaret Hamilton),右侧堆起来的阿波罗计算机指导手册(AGC)的原始程式码列表(图片来源:维基百科)
可能由于分享工具的关系,当年程式码上传后并没有被广大的程序员看到(也可能当年的程序员数量比较少)。一直到 7 日程式码被上传到 Github,这才引起广泛关注和热烈讨论。
经过火眼金睛的网友、程序员们的仔细研读,不禁在程式码里发现了许多有趣的段落,现摘录如下。
- 首先是在现代系统程式设计中被明令禁止的“魔鬼数字”(一般都要求在程式码开头用带有明确意义的宏定义代替程式中出现的具体数字,否则会造成他人阅读程式的障碍)。万万没想到,堂堂 NASA 登月计划的程式码里竟然隐藏了“魔鬼数字”,不禁令广大的程序员们咋舌。
2. 另外,阿波罗的程序员们在一段关于点火程式的注释里,竟然讲起了故事,是的,你没有听错,是在讲故事。详细介绍了那句“Burn,Bab!Burn!”的由来(大意是说这句话最先来自一名著名电台主持人 Magnificent Montague,经他之手捧红了一大批美国 Soul Music 歌曲)。
3. 还有,阿波罗的程序员们非常贴心,还在程式码的相关部分写上了太空人此刻在进行相关操作时的注意事项,比如“请展开登录雷达”等(当然,这里阿波罗的程序员用 the silly thing 代指了 landing radar)。
4. 最令人吃惊的是,登月程式码里竟然还隐藏了莎士比亚的名著《亨利六世》中的一个片段:“IT WILL BE PROVED TO THY FACE THAT THOU HAST MEN ABOUT THEE THAT USUALLY TALK OF A NOUN AND A VERB, AND SUCH ABOMINABLE WORDS AS NO CHRISTIAN EAR CAN ENDURE TO HEAR."”大义是说:“我要向你们指出,你任用了许多人,让他们大谈什么名词啊、什么动词啊,以及这一类的可恶字眼,这都是任何一个基督徒的耳朵所不能忍受的。”
关于为什么会在程式码里出现这么一段莎翁“名言”,有人猜测是因为 MIT 的架构师在编写登月程式码时将许多程式指令预设成一个数字,然后透过这些“数字”来进行操作,比如“37”就代表“执行(Run program)”。可能是下面编写程式码的程序员们不胜其烦,整天要查表才能知道这些数字究竟代表什么意思,于是忍不住在程式码里吐槽了一下。
现在,任何人都可以访问 GitHub 来获取阿波罗 11 号导引系统的原始程式码,感兴趣的朋友们不妨去看看吧。
- Apollo 11’s source code is now on GitHub
- The code that took America to the moon was just published to GitHub, and it’s like a 1960s time capsule
- Simple AGC
(本文由 雷锋网 授权转载;首图来源:Flickr/Marc Van Norden CC BY 2.0)