1969年7月20日,月球轨道。阿姆斯特朗和奥尔德林正准备执行人类首次登月着陆,飞船计算机突然疯狂闪烁:"1202警报。"接下来278秒内,警报又响了四次:1202、1201、1202、1202。

系统过载了。地面控制中心却让他们继续降落。这个看似疯狂的决策背后,是一个女程序员提前埋下的安全网——玛格丽特·汉密尔顿,以及她用微分方程构建的容错系统。

打开网易新闻 查看精彩图片

当时没人想到,汉密尔顿四岁的女儿或许间接促成了这个救命设计。但先别急着感动,让我们看看她到底在什么样的硬件上写代码。

打开网易新闻 查看精彩图片

阿波罗11号登月舱的机载计算机,只装了74KB的只读存储器(ROM)。今天的智能手机随便就是128GB,是它的两百万倍。而这两百万倍的算力差距,我们主要用来刷短视频。

更离谱的是编程方式。Python、Rust这些人类能读懂的语言当时根本不存在。汉密尔顿得手动管理寄存器:哪个存数字?怎么让寄存器内容交互来完成加减乘除?内存空间怎么分配、怎么隔离?

登月舱要实时计算速度、高度、旋转角度——全是变量。本质上,计算机在解微分方程:不仅涉及x和y,还涉及它们的导数。这类方程描述一切变化的事物,但绝大多数没有精确解,只能靠近似方法硬算。

举个简化例子:飞船以恒定加速度a飞行,已知初始位置x₀和初速度v₀,求时间t后的位移。解这个微分方程需要积分,而计算机只能用数值方法一步步逼近。

汉密尔顿的团队把这种逼近做成了优先级调度系统。当1202警报响起,计算机自动丢弃低优先级任务,保住核心导航计算。阿姆斯特朗看到的不是死机,而是"我在忙,但关键的事没丢"。

这个设计的灵感来源很生活化——汉密尔顿常带女儿去实验室,小女孩有一次误触模拟器按键,导致系统崩溃。汉密尔顿由此强化了容错:系统必须假设人会犯错,甚至假设自己会过载。

打开网易新闻 查看精彩图片

今天看,这是软件工程的常识。但在1960年代,"软件工程"这个词还没被发明。汉密尔顿后来成了NASA软件工程部的负责人,也是最早把软件当作系统工程来对待的人之一。

那个74KB的ROM里,没有一行代码是多余的。每一个近似算法、每一次寄存器分配、每一层错误处理,都对应着月球表面几米甚至几厘米的着陆精度。当阿姆斯特朗手动操控登月舱避开巨石场时,他依赖的正是这些微分方程的数值解——在内存不足、算力枯竭的边缘,依然稳定输出。

警报最终没有阻止登月。278秒后,"鹰"号着陆,人类第一次站在另一个天体上。地面控制中心后来承认,如果当时没有汉密尔顿的优先级系统,他们只能喊中止。

这个故事常被简化成"女程序员拯救登月"的励志叙事。但真正值得记住的是技术细节:在极端约束下,如何用数学近似和系统设计的组合,把不可能变成可能。74KB的ROM不是遗憾,而是倒逼出优雅工程的边界条件。

今天我们的手机有两百万倍的存储,却很少有人关心后台在跑什么算法。汉密尔顿那一代人证明了一件事:算力的贫瘠可以靠思想的密度来弥补。当你下次抱怨电脑卡顿时,想想那个在278秒内响了五次的警报——以及那个让它不必致命的女人。