1969 年,一位年轻的工程师站在一摞几乎与自己等高的打印纸旁边。
那是阿波罗飞船的机载软件清单。照片后来成了计算机史上的经典画面:人很小,代码很多,仿佛登月这件事终于找到了一个可以计算的尺度。
照片里的人叫玛格丽特·汉密尔顿(Margaret Hamilton)。

1969 年,Margaret Hamilton 与阿波罗登月舱及指令舱机载软件清单。原始照片:Draper Laboratory;影像修复:Adam Cuerden。原图档案、修复说明与授权记录 ↗。
2026 年 9 月 30 日,她以 90 岁高龄辞世。MIT 在 10 月 7 日发布讣告,回顾她如何从气象程序员走到阿波罗软件团队的领导者,以及后来如何持续推动软件工程成为一门被认真对待的专业。
我们当然可以写一篇标准的伟人传记:数学、MIT、登月、总统自由勋章、历史名照。
但我更想从另一件不太光荣、却更接近软件本质的事写起:
她很早就意识到,工程不能以“使用系统的人不会犯错”为前提。
一个四岁孩子,发现了一条通往月球的缺陷#
故事发生在阿波罗计划的软件模拟器前。
汉密尔顿的女儿 Lauren 当时四岁。她在模拟器中误触了一个飞行前程序 P01。这个本应在起飞前执行的程序被放到了飞行途中,模拟器因此出现严重问题。
汉密尔顿意识到,真实任务里也可能发生类似误操作,便主张增加软件防护。
她的建议起初没有被采纳。理由听起来很有信心:经过严格训练的宇航员,不会犯这样的错误。
1968 年,阿波罗 8 号执行任务时,宇航员 Jim Lovell 真的误用了 P01,造成导航数据丢失。团队不得不处理这一意外,之后相关防护才进入程序。
这里最重要的,并不是一个四岁孩子居然比专业宇航员更善于测试。
而是那句反复出现在工程事故里的话:
这种事不可能发生。
它很像一道未经证明、却被写进系统边界的假设。
一个人受过训练,不等于他不会疲劳、误解、分心或按错按钮。用户培训不能代替软件防护;专家身份也不能把人为失误从现实中删掉。
软件应当允许人不完美。这并不是对人的轻视,恰恰是对人的尊重。
登月前的报警:不是不出错,而是知道先保住什么#
1969 年 7 月 20 日,阿波罗 11 号的“鹰”号登月舱正在接近月球表面。
机载计算机接连报告 1202、1201 程序警报。与交会雷达有关的多余处理请求挤占了有限的计算资源。那个年代的飞行计算机,远没有今天一部普通手机充裕。
如果所有任务都被要求一视同仁地完成,计算机可能根本来不及支持登月。
幸好,阿波罗软件团队设计了带优先级的异步执行与恢复机制。计算机在资源紧张时能够放弃或延后非关键工作,重新保住下降控制等重要任务。
地面控制人员依据警报信息、既有测试和专业判断,允许登月继续。
这不是汉密尔顿一个人在最后几秒敲出了一段神奇补丁。那样讲故事虽然动听,却抹掉了长期测试、系统架构,以及 MIT 和 NASA 多个团队的共同努力。
她的贡献在于领导和推动一种极其重要的软件思想:系统必须为异常情况设计行为,而不只是为理想情况设计功能。
关键时刻真正发挥作用的,是平时就被认真安排过的优先级、可恢复性和人的判断。
软件工程,曾经是一个会让人发笑的词#
汉密尔顿并不是一开始就打算把人送上月球。
1958 年,她在 Earlham College 获得数学学位,随后来到波士顿。1959 年,她开始在 MIT 从事气象预测程序的工作,曾与后来以混沌理论闻名的 Edward Lorenz 合作。之后,她参与了美国早期防空系统 SAGE 的相关软件开发。
1965 年,她加入阿波罗项目。到载人任务阶段,她已成为核心软件团队的领导者,承担的远不只是写程序本身。
今天我们习惯说“软件工程”,仿佛它一直与机械、电气、航空工程并列。
当时却并非如此。软件常被看作硬件的附属品,程序员做的工作也不容易获得同等的工程地位。
汉密尔顿坚持使用“software engineering”这个说法,并反复推动业界承认:软件同样需要独立的方法、规范、验证和责任体系。这个主张曾经被当作玩笑。
她并不是凭空发明了所有现代软件方法,更不可能单独完成阿波罗的全部代码。她所做的更难,也更长久:带领团队把那些容易被忽略的程序行为,变成可以正式讨论、设计、测试和追究责任的工程对象。
后来,她创办 Higher Order Software,又创办 Hamilton Technologies,继续研究怎样通过系统化的方法减少错误、提高可靠性。2016 年,她获得美国总统自由勋章。
那张代码合影之外,还有她几十年没有放下的问题:如何在灾难发生之前,让系统知道自己不应假装永远正确?
我们今天又回到了她的问题面前#
六十年后,我们坐在手机前,让 Agent 读代码、改仓库、运行工作流、提交 Pull Request。
变化快得惊人。一个模型可以在几分钟里写出过去需要花更久才能完成的程序,甚至能自己解释为什么它做对了。
但写得快,不等于运行可靠;会描述执行过程,不等于真的留下了执行证据;给出漂亮的最终答案,也不意味着没有破坏原来正常运行的东西。
这不是说今天的 AI Agent 就是阿波罗飞船。两者的风险等级、运行环境和责任结构完全不同,不能生硬类比。
真正相通的是工程态度:
不要让系统的安全性依赖于某个执行者永不犯错。
所以我们在 Mira 的工作里越来越在意冻结任务边界、限制执行权限、让验证独立于写代码的模型,以及把证据留在聊天之外。不是因为已经造出了登月级系统,而是因为越早承认执行者会犯错,越有可能少让人替机器收拾残局。
这也与本期的封面故事构成了一个微妙的对照。
《牛马,起来干活了》关心的是:能不能让机器多承担那些可以替换、重试和验证的工作,而不是继续让人充当整个系统的基础设施?
汉密尔顿的故事则提醒我们:即便把工作交给机器,也不意味着可以把责任一并甩掉。
为错误留退路,不是缺乏信心。
那是工程终于开始成熟的样子。
资料与事实边界
- MIT News:Margaret Hamilton 讣告(2026-10-07)——生平、Lauren/P01 事件、Apollo 8、软件工程理念与团队贡献。
- NASA:2003 年授予 Hamilton Exceptional Space Act Award 的资料——团队贡献、异步软件、优先级调度与可靠性。
- NASA Apollo 11 Lunar Surface Journal:程序警报与工程人员回忆——1201/1202 警报、重启恢复机制及多人决策过程。
本文依据已公开的一手史料写作。阿波罗的软件和登月成功属于集体成果;文中的工程类比是编辑观点,不是对现代 Agent 安全等级的事实认定。
