登月舱准备进入点火流程前,要确认一件很具体的事:着陆雷达的天线,是否已经转到了规定位置。
程序先读硬件状态。如果位置不对,就提示宇航员处理。写程序的人在旁边留下一句心里话:“请把那个蠢东西转过去。”等宇航员选择继续,下一行注释又说:
PROCEED — SEE IF HE'S LYING
继续——看看他有没有撒谎。
初读时,很容易只记住这份不客气。但真正值得停下来看的,是玩笑左边的指令:它把程序送回刚才检查天线的位置。
宇航员说“好了”,程序就再看一次。
确认之后,仍然看看世界
这段代码来自阿波罗11号登月舱的 Luminary099 程序。在公开转录中,检查天线的入口叫 P63SPOT3。后面的几行读取硬件通道,判断天线位置;满足条件,才跳往下一步。等待人的回应之后,PROCEED 对应的分支又回到 P63SPOT3。
不用懂汇编,也可以沿着两个相同的名字,看懂这个小小的回环。

图片暂时无法载入,可通过上方出处查看原作。
人按下一个键,只能证明他发出了“继续”的意思。天线有没有到位,是另一个问题。可能操作还没完成,可能拨错了开关,也可能设备没有按预期动作。这些是我们理解这段设计时可以想到的情境;代码本身并没有给宇航员的动机下诊断。
它做了一件更有用的事:把是否继续的判断,重新接到可读取的硬件状态上。
这里的分寸在于,程序没有要求人反复保证自己认真,也没有用一段更严肃的警告替代检查。它留给人一个操作入口,再让机器完成机器能够完成的核对。
今天,许多界面仍会把“我已完成”当成事情完成的证据。一份文件显示上传成功,真正要紧的却是对方能否打开;一项设置显示保存成功,真正要紧的是下一次使用时是否生效。并非所有事情都能自动验证,但能验证的部分,值得接回实际结果。
这段源码让人欣赏的,正是这种非常具体的负责。
玩笑贴着工作,才有意思
另一份文件的标题更出名:BURN, BABY, BURN — MASTER IGNITION ROUTINE,可以译作“烧吧,宝贝,烧吧——主点火例程”。
但往下读几行,语气立刻变了。说明列出这套例程服务于哪些程序、覆盖点火前后哪个时间区间、不同程序如何通过表格传入各自的参数。再往后,还明确写出:它由 Adler 和 Eyles 构思、实现,并且——请注意——由他们维护。
“燃烧吧”把人拉近,接下来的说明则让接手者知道该怎样使用、该找谁。
同样,“看看他有没有撒谎”之所以比随手写一个笑话更好,是因为它紧贴着返回检查的动作。读者笑过之后,反而更容易记住:这一行不能只看人的回答。
这也有代价。带刺的语气未必适合公开界面,文化典故会让不熟悉它的人多绕一步。源码中的这句玩笑是写给读代码的人看的,并不是登月舱显示器真的向宇航员说了这句话。欣赏它,不必把同一种口吻搬进每个产品。
可借鉴的是两种声音如何放在一起:人在语言里保留性格,程序在行为上交代清楚。轻松的标题下面,有足够精确的说明托着。
连感动,也值得再检查一次
围绕这些源码的文章常把许多故事串在一起:古怪的名字、莎士比亚、极小的内存、写着“希望”的临时代码。它们很容易组成一幅“从前的人无所不能”的画面。
但打开文件,会遇到一个很有意思的提醒。键盘与显示程序开头明确说明:某一类标记的注释,是 Virtual AGC 项目在21世纪加上的,并非原始源码。
例如,关于“动词+名词”界面如何从实验室演示延续到飞行软件的那段故事,署名是 Ron Burkey,时间是2009年7月。主点火例程名称与电台主持人口头禅之间的渊源,也被标明是2009年补入的回忆说明。
名称本身属于老代码;解释名称的这段文字,属于后来的人对历史的整理。两者都有价值,但分开读,才能听清是谁在什么时候说话。
这也让那座 GitHub 仓库多出一层值得欣赏的东西。它不只是展示一群天才留下的漂亮遗物,还保留了整理者的劳动:原件来自哪里,谁做了数字化,谁在转录,哪里修正过错字,哪些话是后来补充的。仓库甚至明确欢迎大家对照纸本扫描,找出转录的差异。
工程师留下了检查硬件的回环,整理者留下了检查文本的入口。前者不把一次按键当成天线已经到位,后者也不要求读者把眼前的转录奉为不可质疑的原件。
我愿意把这种品质叫作可靠的体贴:给使用者一条走得下去的路,也给后来的人一次重新确认的机会。
再看那句“看看他有没有撒谎”,它最动人的部分,仍然是左边那条朴素的返回指令。
本文由新智物种的阿波罗源码介绍引出,独立核对了仓库说明、天线检查代码、主点火例程及键盘与显示程序的后补说明。英文短句的中文译意与设计判断由本文作者提供;本次为源码文本细读,未运行飞行软件或模拟器。
留一句读后感 只给你品,不公开
收到了,谢谢你。可以继续慢慢读。
这条读后感只会私下查看,不会公开。收件编号: