玛格丽特·汉密尔顿辞世
文章摘要
MIT News 发布讣告:领导阿波罗登月计划机载飞行软件开发的计算机先驱玛格丽特·汉密尔顿(Margaret Hamilton)于 2026 年 9 月 30 日去世,享年 90 岁。她发表过 130 多篇论文,1959 年至 1970 年代中期在 MIT 工作,此后创业并担任 CEO。她最为人称道的贡献是推动「软件工程」成为一门独立学科。2016 年她获得奥巴马颁发的总统自由勋章,颁奖词称她的软件架构让美国人踏上了月球。
早年经历。 汉密尔顿 1936 年生于印第安纳州,先在密歇根大学读数学,后转到 Earlham 学院,1958 年获数学学士学位(辅修哲学)。1959 年随丈夫来到波士顿,在 MIT 气象系找了份临时工作,为气象学家 Edward Lorenz 编写天气预测程序,这是她第一次接触编程,那段工作还对 Lorenz 后来的混沌理论研究有所贡献。1961 年她进入 MIT 林肯实验室,参与美国第一套防空系统 SAGE,为原型机 AN/FSQ-7(XD-1)编写识别可疑飞机的软件,也正是在那时开始关注「软件可靠性」这个当时几乎没人研究的问题。
阿波罗岁月。 1965 年,她原本准备读研究生,丈夫在报纸上看到 MIT 仪器实验室招人做「把人送上月球」的软件。实验室刚拿到 NASA 的阿波罗机载飞行软件合同,汉密尔顿应聘成为该项目的第一位程序员,也是项目里第一位女性程序员。她先做无人任务的软件,随后升任载人任务机载软件团队负责人;到 1968 年,她已是指令与服务舱团队的助理主任,整个阿波罗软件项目有 400 多人参与。她后来回忆说,因为软件对上层管理者来说是个黑箱,他们反而给了团队完全的自由和信任,「我们是世界上最幸运的人,除了当开拓者别无选择」。
讣告重点讲了两个故事。一是「Lauren 错误」:她四岁的女儿在模拟器上玩,在飞行途中误触发了发射前程序 P01,导致模拟器崩溃。汉密尔顿提议在软件里加防护,却被以「训练有素的宇航员不会犯这种错」为由否决,只能在文档里加一条警告。结果 1968 年阿波罗 8 号飞行中,宇航员 Jim Lovell 真的误启动了 P01,导航数据丢失,团队临危救场,之后她的修复方案才被采纳——这是早期「防御式编程」的典型案例。二是阿波罗 11 号登月前的 1202 报警:硬件开关故障让计算机过载,但团队设计的优先级调度软件能够砍掉不必要的后台任务、保住关键任务,休斯敦因此信任软件、决定继续降落。
此后的事业。 阿波罗计划收尾时,仪器实验室从 MIT 独立为 Draper 实验室。1976 年她创办 Higher Order Software,围绕错误预防与容错理念开展业务;十年后又创办 Hamilton Technologies,核心产品是系统建模语言 USL(Universal Systems Language)。她一直为软件争取「正名」,自述最初使用「软件工程」这个说法时被当成笑话,很久之后软件才获得与其他工程学科同等的尊重。她获得过 NASA 杰出太空法案奖(2003)、计算机历史博物馆院士奖(2017)等荣誉,2022 年入选美国国家航空名人堂。她站在一摞阿波罗代码打印稿旁的照片后来在网络上广为流传,2017 年乐高「NASA 女性」套装还为她制作了人仔。她身后留有女儿 Lauren 等亲属,纪念仪式定于来年春天在剑桥举行。
HN 评论精华
这条讣告在 HN 获得 2100 多分、近 180 条评论。大部分是悼念,也有几条技术讨论较扎实;其中一条支线围绕「她的贡献是否被夸大」争执不下。另有一条长支线跑题到了「engineer 头衔该不该被保护」。
那张照片与「Right Stuff」。 WarOnPrivacy 说,很多人第一次认识她,都是通过那张站在代码打印稿旁的照片。underlipton 顺势推荐了经典文章《They Write the Right Stuff》(讲航天飞机软件团队),说那种严谨程度是消费级软件做梦都达不到的。jshier 指出照片里那摞纸可能不全是 AGC 源码,也有模拟运行的输出,后来他自己补充说大概两者都有。cbm-vic-20、dudewhocodes 给出了 GitHub 上数字化的阿波罗 11 号源码(Comanche055 / Luminary099)。
1202 报警到底意味着什么。 da_chicken 用通俗说法描述:登月时计算机只能实时跑 7 个任务,第 8 个任务进来后,优先级调度器发出报警、杀掉最低优先级任务,继续跑其余任务。setr 质疑这算不上什么了不起的鲁棒性,「拒绝多余任务」本就是该有的处理。随后多人反驳:jonstewart 提醒 AGC 只有 4KB RAM、16KB ROM;bronson 补充其速度约 0.043 MIPS;da_chicken 强调那是 1960 年代,一台功耗不到 70 瓦的机载计算机就实现了带优先级与中断的异步实时调度,而同期只有 IBM OS/360 这样的大型机才有类似能力;rbanffy 说当年这是「从来没有计算机做过的事」,鲁棒来自简单——实现简单、推理简单、调试简单。msl 则提醒,「第 8 个任务」的说法只是好记的简化版,1201/1202 报警的真实原因复杂得多,建议去看 Wikipedia 上的详细说明。codewritinfool 也认为救了这次着陆的是「优先级调度加重启保护」,称之为「错误处理」不太准确;xyzzyz 指出 1950 年代的软件就已有错误处理,tonymet 直言「神话有点失控了」。
「软件工程」一词的来历。 customguy、muunbo 提到她创造了 software engineering 这个说法;catskull 说自己曾追查到这个说法的出处——一本冷门教科书里的访谈,并把它转载到了博客上。EDC9599190 引用《卫报》2019 年的采访:当时软件不被当作正经工程,她「出于无奈」提出这个词,说「嘿,我们也在做工程」,这在很长时间里都被当成笑话。bitwize 补充说,Milt Bryce 的 PRIDE 方法论把类似理念商业化了,而汉密尔顿是其先驱之一。
跑题:engineer 头衔之争。 penskymaterial 调侃这个词后来被「改按钮颜色的人」借用了,引出一长串讨论:Dylan16807 认为「工程师」头衔应该有门槛,以区分真正严谨的工作;altmanaltman 反驳说如果要守门,传统工程师也可以说软件根本不算工程;多位用户介绍各国规定——加拿大多数省份没有执照不能自称 software engineer(Lyngbakr 说自己只能被聘为「数据工程专员」),美国受保护的是 P.E. 而非 engineer,法国需要特定的工程师学位。ifwinterco 指出,如果当年就有这种限制,汉密尔顿本人恐怕也无权创造这个词。
对贡献程度的争议。 groundzeros2015 提到一条被 flag 的评论,引用一条推文质疑她在登月项目中的实际作用。foldr 反驳说这是在最不合适的时候散布不实说法,并引用 ChickeNES 的考证:她或许在优先级任务系统上被过度归功(该系统由 Hal Laning 在 1962—63 年设计,她 1965 年才加入),但源码中有 1966 年署名「M.HAMILTON」的修改记录,1967 年的管理会议纪要抄送了她,1968 年 9 月的组织架构图显示她负责指令舱编程,因此「1968 年才以初级职位入职」之说不成立。groundzeros2015 接受了入职时间的更正,但仍坚持她担任负责人的时间只占项目周期的一小部分,不该夸大。帖子末尾也有少数人直接称她的故事「是假的」,这些发言没有给出依据。
个人回忆与推荐。 diskzero 回忆三十年前因创业融资见过她和 Draper 实验室的老前辈,她谈形式化控制系统,自己完全听不懂,「只是很高兴能在那个房间里」。CyberMacGyver 说多年的钢琴老师恰好是她的妹妹。EvanAnderson 推荐计算机历史博物馆的口述史,并发现 Steven Levy《黑客》里有一段 PDP-1 深夜 hack 搞坏天气模拟程序的故事,当事程序员正是汉密尔顿、程序属于 Lorenz。rootbear、xtajv 推荐了《Digital Apollo》和 Frank O’Brien 的《The Apollo Guidance Computer: Architecture and Operation》。不少人呼吁 HN 为她挂上黑色悼念条。
职业感慨。 101008 说读她的故事有点难过:入行时梦想做有挑战的东西,如今多半在写平庸的 API,有了 AI 更是如此。bandedetrappes 建议去硬件和深科技公司(量子、机器人、核聚变、商业航天);Gravityloss 认为阿波罗这样的项目能让杰出的人发挥能力,而企业环境往往只接受小幅改进;cmrdporcupine 补充说,宏大愿景本身就是让所有人朝同一方向走的「强制函数」。