玛格丽特·汉密尔顿:为软件命名的工程师
在距离月球表面三分钟的地方,阿波罗11号制导计算机开始发出警报。巴兹·奥尔德林(Buzz Aldrin)向一台设计用于处理七项任务的机器发出了第八个同时发生的任务请求。本可以在那里中止登月。但事实并非如此,因为负责该软件的女性几年前就曾假设过完全类似的情况会发生,并编写了计算机程序,使其在遇到故障时能够卸载自身非核心的工作,而不是直接崩溃。“如果计算机没有识别出这个问题并采取恢复措施,”她后来表示,“我怀疑阿波罗11号能否像实际那样成功登月。”
印第安纳州保利
玛格丽特·伊莱恩·海菲尔德(Margaret Elaine Heafield)于1936年8月17日出生于印第安纳州保利(Paoli, Indiana),父母是肯尼斯(Kenneth)和露丝·埃丝特·海菲尔德(Ruth Esther Heafield)。全家搬到了密歇根州,她于1954年从汉考克高中(Hancock High School)毕业。她的父亲是一名诗人,祖父是一名校长,家庭引导她走向哲学正如引导她走向数学一样坚定——她最终两门学科都修读了。她于1955年在密歇根大学学习,随后转入厄勒姆学院(Earlham College),并于1958年获得数学文学士学位兼辅修哲学。她将自己引向抽象数学和学术生涯归功于厄勒姆学院数学系主任弗洛伦斯·朗(Florence Long)的鼓励。她于1958年6月与詹姆斯·考克斯·汉密尔顿(James Cox Hamilton)结婚;他们的女儿劳伦(Lauren)于次年出生。
天气、混沌、希腊语和拉丁语
她在计算领域的首份工作是从1959年中期开始在麻省理工学院(MIT)气象系与爱德华·诺顿·洛伦兹(Edward Norton Lorenz)一起工作,为LGP-30和PDP-1机器编写天气预测软件。洛伦兹后来承认了她对后来成为混沌理论的工作的贡献。从1961年到1963年,她在麻省理工学院林肯实验室(MIT Lincoln Laboratory)为半自动地面防空系统(Semi-Automatic Ground Environment)编程原型AN/FSQ-7,在那里她接手了一个出了名棘手的程序,其注释是用希腊语和拉丁语编写的——并成为了让其成功运行的第一人。这两项工作都有一个将定义她一生的共同特征:她被赋予了没有人能让其正常运作的系统。
仪器实验室
1965年,她加入麻省理工学院仪器实验室(Instrumentation Laboratory,后来的查尔斯·斯塔克·德雷珀实验室〔Charles Stark Draper Laboratory〕),成为阿波罗计划中雇用的第一位程序员——也是第一位女性程序员。她晋升为软件工程部门主任,负责指挥舱和登月舱中阿波罗制导计算机的机载飞行软件,随后负责天空实验室系统。这是绝无第二次机会的代码:没有补丁,在下降轨道上不能重新启动,一旦离开发射台就无法接触机器。
1202
汉密尔顿的应对方法是将错误不视为异常,而是视为设计假设。她的软件包括错误检测和恢复程序,至关重要的是,还有一个“优先级显示”方案:当计算机过载时,它会放弃较低优先级的任务,并保留着陆所需的职能。她还考虑到了环路中的人类因素,设计了这样一套程序:宇航员看到优先级显示时要数到五,为软件的处理滞后留出时间。
1969年7月20日,机制完全按设计运行。警报响起,计算机丢弃了它能够承受失去的东西,美国国家航空航天局任务控制中心的计算机工程师杰克·加尔曼(Jack Garman)识别出了这些代码并高呼:“继续,继续!”“鹰号”成功着陆。
命名一个学科
汉密尔顿被认为在阿波罗计划的早期确立了“软件工程”(software engineering)这一术语。她的目的既是管辖性的,也是描述性的。“我开始使用‘软件工程’这个词来将其与硬件和其他类型的工程区分开来,”她解释说,“同时将每种类型的工程都视为整个系统工程过程的一部分。”硬件人员对此并不买账。“这很长一段时间都是一个进行中的笑话,”她回忆道,“他们喜欢拿我激进的想法开玩笑。”这个笑话如今已成为一个拥有数千万从业人员的产业名称。
事前开发
她的余生都在追求这一理念的含义。1976年,她与赛迪安·泽尔丁(Saydean Zeldin)共同创立了“高阶软件公司”(Higher Order Software),以将阿波罗教给她的防错方法形式化;他们的USE.IT产品支持了包括航天飞机和空军ICAM项目在内的政府项目。1986年3月,她在马萨诸塞州剑桥创立了汉密尔顿技术公司(Hamilton Technologies),在那里她围绕她称之为“事前开发”(development before the fact)的范式开发了通用系统语言(Universal Systems Language)和001工具套件——这一论点认为,错误应该在设计时就使其成为不可能,而不是在测试期间去寻找。
认可来得很慢,随后纷至沓来:1986年的奥古斯塔·阿达·洛夫莱斯奖(Augusta Ada Lovelace Award);2003年美国国家航空航天局杰出太空法案奖(NASA Exceptional Space Act Award),以37,200美元成为该机构历史上最大的个人奖项;2016年巴拉克·奥巴马(Barack Obama)颁发的总统自由勋章(Presidential Medal of Freedom);2017年计算机历史博物馆院士奖(Computer History Museum Fellow Award);2019年华盛顿奖(Washington Award);2022年入选美国国家航空名人堂(National Aviation Hall of Fame)。
为什么玛格丽特被称为天才
这种才能彻底颠覆了她所在领域的思考方式。在20世纪60年代,软件被理解为应该能正常工作的指令,错误则被视为以后会被发现的令人遗憾的事件。汉密尔顿将失效作为主要的设想对象:当支撑系统的假设不再成立时,系统应该做什么?优先级显示是这种思维最清晰的产物。它不能阻止过载,因为过载是无法阻止的;它在尚未有人经历过的情况下,提前决定了一台机器为了保持做那件唯一重要的事情,应该愿意放弃什么。这既是一个哲学上的举动,也是一个技术上的举动。她的第二个成就是概念创作:在因“软件工程”一词而受到嘲笑的同时,它重塑了一个整个专业如何理解自身的方式。
客观的评价如下。她的荣誉记录虽然广泛,但并未正式使用“genius”(天才)这个词;它记录的是影响深远的功绩。阿波罗11号的拯救是一个系统,而不是独奏——她的软件拉响了警报,但杰克·加尔曼必须识别出代码,飞行控制员必须说继续,并且设计依赖于宇航员遵循人类的程序。而且行业接受她的词汇远比接受她的方法更彻底:“软件工程”是普遍存在的,而“事前开发”仍然是小众的。她的天才最好体现在对问题的构架上,这一构架比她为解决该问题而构建的任何工具都要长寿。
遗产
她所指导编写的代码是“1202警报”成为一场胜利而非墓志铭的原因。更大的遗产是一种假设——如今它是如此标准以至于隐形——即软件是经过工程设计、符合公差并有望优雅失效的东西。她同时提供了这个名称和第一个伟大的证明。

