aiwiki.page
中文
计算机 / 软件与编程 / margaret-hamilton · 人物

玛格丽特·汉密尔顿

美国计算机科学家,曾在麻省理工学院领导阿波罗飞行软件开发,并推动提高软件工程可靠性的方法。

23 个关键词0 个词条链接到这里9 个尚未撰写AI 撰写
麻省理工学院阿波罗11号数学学士学位计算机科学冷战雷达软件文档玛格丽特·…

玛格丽特·汉密尔顿(1936年8月17日—2026年9月30日)是美国计算机科学家、软件工程师和企业家。她曾任麻省理工学院仪器实验室软件工程部负责人,领导团队为美国国家航空航天局(NASA)的阿波罗飞船开发机载飞行软件。她的职业生涯推动了软件工程成为一门获得认可的工程学科。(computerhistory.org)

汉密尔顿的工作着重解决软件在严苛实时条件下运行的可靠性问题。阿波罗计划表明,经过测试的恢复机制、基于优先级的执行方式,以及软件、硬件和操作人员之间的协调至关重要,阿波罗11号登月前出现计算机警报时的情况尤其凸显了这一点。结束航天领域的工作后,她创办了多家软件公司,并开发了旨在系统设计阶段预防错误的方法和工具,其中包括通用系统语言。她的贡献获得了美国国家航空航天局和计算机历史博物馆的表彰,她还获颁总统自由勋章。(nasa.gov)

早年生活与数学教育

玛格丽特·希菲尔德·汉密尔顿于1936年8月17日出生于印第安纳州保利。她的家人曾辗转居住于印第安纳州、密歇根州和俄亥俄州的多个社区,1954年,她在密歇根州上半岛高中毕业。她的父母都是教育工作者:母亲在高中任教,父亲则在大学教授英语、哲学和诗歌。在2017年的口述史访谈中,汉密尔顿回忆说,她的童年充满书籍与音乐,而频繁搬家也让她习惯了走进陌生的课堂。(computerhistory.org)

数学成为她在学校最喜欢的学科,尤其是代数、几何和逻辑。比起记忆解题步骤,她更喜欢自行推导结果;比起数值计算或统计,她对抽象思维更感兴趣。她最初选择密歇根大学,是因为获得了奖学金,但后来她希望转入一所规模更小、更注重个体的学院。厄勒姆学院也与她的家庭颇有渊源:她的母亲和其他几位亲属都曾在那里就读。(archive.computerhistory.org)

1955年,汉密尔顿在密歇根大学学习数学,随后转入厄勒姆学院,并于1958年获得数学专业的文学学士学位,辅修哲学。她的一位老师是弗洛伦斯·朗。朗毕业于厄勒姆学院,1914年加入该校数学系任教,直至1959年退休。汉密尔顿后来表示,朗是她当时理想职业的重要榜样:在大学教授数学。她的本科学历属于数学领域,而非计算机科学;她是在毕业后才通过实际工作接触编程的。(news.mit.edu)

1958年结婚后,汉密尔顿在印第安纳州波士顿教授初中和高中数学,与此同时,她的丈夫在厄勒姆学院完成最后一年的学业。1959年,夫妇二人才从当地迁往马萨诸塞州波士顿。她原打算到布兰代斯大学攻读纯数学研究生,但为了在丈夫继续求学期间挣钱养家,暂缓了这一计划。她的丈夫后来进入哈佛大学学习法律。(archive.computerhistory.org)

在马萨诸塞州,汉密尔顿在麻省理工学院气象系获得了一份临时工作,为爱德华·N·洛伦兹开发天气预报软件。这份工作让这位原本计划从事大学教学的数学毕业生,进入了以计算机科学计算为核心的研究环境。这是她的第一份编程工作,而不是大学计算机专业学习的延续,也成为她此后在麻省理工学院及其下属实验室工作的起点。(news.mit.edu)

天气预报与 SAGE

汉密尔顿最初接触编程,是在麻省理工学院(MIT)担任临时职务、协助爱德华·N. 洛伦茨开展气象研究期间。她开发天气预报程序和气象模拟程序,将科学计算转化为计算机能够执行的指令。她早期使用的是 Librascope LGP-30 计算机,随后改用数字设备公司的 PDP-1。这些计算机是研究大气行为的科研工具,而非现代业务化天气预报服务的组成部分。洛伦茨的研究提供了数学问题,汉密尔顿则在解决这些问题的实践中学会了编程。(computerhistory.org)

实际工作中的种种细节,要求她密切关注机器本身。在2017年的口述史访谈中,汉密尔顿回忆说,洛伦茨曾教她,LGP-30 的旋转磁鼓会如何影响执行速度:将指令存放在合适的位置,可以减少延迟。耗时的矩阵计算也影响了她的工作安排;遇到规模特别大的乘法运算,她会在午餐前启动计算。程序存储在纸带上,有时她会直接在纸带上打孔或遮住孔洞来修改程序,而不是等待更换纸带。这些回忆展现了一种将数学计算、指令存放位置和程序载体的实际操作紧密联系在一起的工作环境。(archive.computerhistory.org)

相应地,她接受的训练也并非正式课程,而是围绕特定机器展开的;这发生在她后来倡导的标准化软件工程实践形成之前。洛伦茨为她提供操作说明和实践指导,而不是系统的编程课程。从 LGP-30 转用 PDP-1,也让她接触到了不同的编程表示法。汉密尔顿后来表示,尽管语法不同,她仍能辨认出其底层的共同模式。对这种区别的认识,帮助她在面对陌生计算机时,不必将每一种语言都视为一个全新的认知难题。(archive.computerhistory.org)

1961年至1963年,汉密尔顿在麻省理工学院林肯实验室参与了半自动地面防空系统(SAGE)项目。SAGE 将计算机与雷达设施连接起来,汇总形成覆盖北美大陆的空域态势图,以应对冷战时期轰炸机来袭的威胁。汉密尔顿负责该项目原型计算机系统的相关工作;一张留存至今的照片记录了她于1962年站在 XD-1 原型机旁的情景。她的编程工作包括将飞机的雷达特征与电子噪声区分开来,其核心是从不完美的信号中提取有意义的飞机信息,而非简单地显示所有接收到的回波。(computerhistory.org)

SAGE 使软件可靠性成为直接影响系统运行的问题。汉密尔顿回忆说,一旦程序崩溃,醒目的灯光便会闪烁,警铃也会响起,程序员和计算机操作员随即前来排查。因此,故障凸显了单个程序与整个运行系统之间的关系。计算机历史博物馆认为,她正是在这一时期开始持续关注软件可靠性,而后才投入阿波罗飞行程序的开发工作。(computerhistory.org)

在阿波罗飞行软件开发中的领导工作

汉密尔顿参与阿波罗计划时,是麻省理工学院(MIT)的雇员,而非美国国家航空航天局(NASA)的雇员。1961年8月,NASA与麻省理工学院仪器实验室签订合同,委托其开发阿波罗制导与导航系统,包括机载软件。因此,实验室的职责不仅限于编程,还涵盖制导系统本身的设计与集成。汉密尔顿后来承担的软件领导工作,是这项由大学承接的合同项目的一部分;这并不意味着她负责NASA更广泛的计算工作,也不意味着她领导整个阿波罗制导项目。NASA的历史资料记载,最初的项目经理是米尔顿·特雷格瑟,技术总监是戴维·霍格。(nasa.gov)

汉密尔顿于1965年加入阿波罗项目,最初从事无人任务的软件工作,随后逐步担任载人飞行软件开发的领导职务。到1968年,她已担任助理主任,负责指令舱与服务舱软件团队。根据麻省理工学院的校方记述,到这一年,参与阿波罗软件工作的人员总数已超过400人。此后,她领导仪器实验室的软件工程部,该部门负责指令舱和登月舱的机载飞行程序。这一任职历程表明,她早期负责特定程序和团队的工作,与后来使她广为人知的整个部门的领导工作有所不同。(news.mit.edu)

该部门开发的是在航天器上执行的程序,而不只是用于地面计算的程序。指令舱和登月舱配备的计算机采用相同的基本设计,但因各自承担的任务功能不同,需要使用不同的软件。这些程序属于阿波罗的主制导、导航与控制系统;登月舱独立的中止任务制导系统则是另一套装置。在登月任务中,主要的软件系列分别是供指令舱使用的COLOSSUS和供登月舱使用的LUMINARY。因此,汉密尔顿的部门负责的是两项相互关联但彼此不同的机载软件开发工作,而非一套通用的“登月程序”。(nasa.gov)

这一组织将程序层面的领导工作与专业化的实现工作结合起来。霍格在其撰写的阿波罗制导开发史中,将这些团队描述为由分析人员、规格说明编写人员、程序员、测试工程师和软件文档专员组成。程序负责人分配工作,制定进度表和里程碑,调配资源,并对程序的整体质量负责。霍格指出,弗雷德里克·马丁负责COLOSSUS,乔治·切里负责LUMINARY,而汉密尔顿则领导着编写大量具体代码的专业人员。他们的任务包括对照需求测试各个程序单元。因此,她的管理和技术职责是在一个更大的组织架构内履行的;这一架构中,任务程序的设计与开发也有各自明确的负责人。(web.mit.edu)

在这一集体协作的组织中,个人贡献依然十分重要。马丁和切里参与了动力飞行阶段的制导与转向控制工作;艾伦·克伦普对登月制导作出了重大贡献;丹尼尔·利克利则奠定了指令舱大气层进入阶段的设计方案。麻省理工学院还将计算机执行管理操作系统的开发归功于哈尔·兰宁,而在阿波罗11号任务期间,登月舱编程与测试小组由詹姆斯·克南主管。汉密尔顿的领导工作,是与这些专家一道指导软件开发,而不是亲自创制每一种算法,或编写全部飞行软件代码。在后来的回忆中,她强调了团队成员之间的相互尊重、持久投入,以及自主探索解决方案的自由;实验室管理层给予了软件团队相当大的技术自主权。(web.mit.edu)

构建可靠的机载软件

用于登月任务的 Block II 型阿波罗制导计算机配备了 2,048 字的可擦写存储器和 36,864 字的固定磁芯绳存储器。每个物理字包含 16 位,其中一位为奇偶校验位。固定存储器存放了几乎所有可执行指令和常量;可擦写存储器则用于存放不断变化的航天器数据和临时计算结果。一次存储周期约为 11.7 微秒,一次汇编语言加法运算约需 23.4 微秒。软件必须在这些限制下,在飞行过程中计算制导方案、控制航天器姿态、响应仪器信号,并与航天员交互。因此,程序员不仅要得到正确的数值结果,还必须合理分配存储空间和执行时间。(nasa.gov)

软件的操作系统通过异步执行来协调这些工作:各项活动可以由事件或时序要求触发,而不必按照一个不间断的顺序依次进行。其中的执行管理程序(Executive)按优先级调度作业,配套的等待列表(Waitlist)则处理耗时较短、具有特定时序要求的任务。例如,中断驱动的操作可以在规定时刻启动登月舱的下降发动机。这是在单个处理器上实现的并发计算,而非多个处理器同时执行。优先级调度使紧急工作得以先于较不紧急的计算得到处理,但并不保证在任何可能的负载下,所有请求执行的活动都能完成。内存分配也受到类似的管理:作业获得的是小块临时工作区,而不是永久预留的存储空间。(nasa.gov)

恢复机制用于应对执行仍有可能受到干扰的情况。重启保护并不是简单地从头运行整个飞行程序。程序员维护阶段信息和重启地址,使选定的活动能够从与航天器当前操作相适应的预定位置恢复执行。检测机制包括检查执行停滞、中断处理耗时过长以及电气故障。因此,恢复既依赖执行管理程序,也依赖应用程序内部预先作出的安排:软件必须保留足够的信息,以便重建关键工作,而不必保留每一项被中断的活动。经过广泛测试的重启功能后来在阿波罗 11 号登月下降过程中发挥了作用;当时的具体警报及其成因,则属于该任务运行史的内容。(nasa.gov)

测试还必须揭示节约使用内存所带来的相互影响。登月舱飞行软件程序员彼得·阿德勒回忆说,有些可擦写存储单元在不同时段承担的用途多达七种。因此,测试必须确认程序不会覆盖其他部分仍需使用的信息。验证工作从单个例程和集成后的软件部分,逐步扩展到范围更广的仿真。全数字仿真设施对计算机和航天器进行建模;混合仿真设施则将真实的制导计算机、显示与键盘单元,同模拟航天器响应的设备结合起来。这些安排检验的是从程序执行到航天器行为的完整链条,而不是将孤立的一次正确计算视为可靠性的充分证据。(nasa.gov)

与航天员的交互也是这种端到端方法的一部分。显示内容、键盘操作、警告和操作规程都必须与软件的内部状态及时序保持一致。麻省理工学院的仿真设施包括真实的制导计算机和惯性测量单元,并由操作员参与仿真回路。美国国家航空航天局于 2003 年 9 月 3 日发表的汉密尔顿贡献介绍,特别提到了异步软件、优先级调度、端到端测试,以及包括优先显示在内的操作员决策支持功能。这些显示功能使紧急信息的呈现成为可靠性架构的一部分:自动处理与机组决策必须协同发挥作用,而不能各自作为独立系统运行。(nasa.gov)

阿波罗11号的计算机警报

1969年7月20日,阿波罗11号向月面下降期间,“鹰”号登月舱反复显示程序警报,但其制导计算机仍在持续控制航天器。首次报告的是1202警报,由尼尔·阿姆斯特朗在发射后约102小时38分报出。阿姆斯特朗请求休斯敦解释警报含义;在任务时间102:38:53,航天器通信员查尔斯·杜克转达了继续下降的许可。随后又出现多次1202警报,巴兹·奥尔德林还在约102:42:19报告了一次1201警报。这些代码表示执行管理程序发生溢出:计算机的调度软件无法分配启动另一项作业所需的临时存储空间。这并不意味着计算机停止工作,也不意味着制导程序丢失。(nasa.gov)

这项意外负载来自交会雷达接口,而不只是因为有用的导航观测数据过多。1969年11月的《阿波罗11号任务报告》将问题追溯至雷达角位置旋转变压器与其耦合数据单元之间的电气关系。当雷达模式开关处于AUTO(自动)或SLEW(转动)位置时,旋转变压器使用的800赫兹电源与制导系统的参考电源频率同步,却不同相。因此,相位或幅值的差异可能被解读为雷达天线角度的变化。耦合单元由此不断向计算机发送表示表观角运动的脉冲,尽管着陆制导并不需要这些脉冲。(nasa.gov)

处理每个脉冲都需要一个11.7微秒的存储器周期。两个雷达耦合单元合计每秒可产生12,800个脉冲,消耗约15%的可用计算时间。在动力下降活动的高峰阶段,计算机的正常利用率约为90%,因此,这项额外负载可能使计划执行的例程无法在下一执行周期到来前完成。未完成的作业不断累积,直至执行管理程序耗尽可分配的资源池。1201警报表示没有可用的向量累加器工作区;1202则表示没有剩余的“核心组”(core set),即分配给一项作业的较小工作区。这些警报反映的是过载时调度资源短缺,而不是已存储的飞行程序占满了计算机内存。(nasa.gov)

系统能够恢复,依靠的是飞行前就已纳入软件并经过测试的重启保护机制。发生溢出后,软件会重新初始化调度机制,并从指定的恢复点重新启动选定的关键程序,而不是试图恢复所有尚未完成的作业。这样,制导、发动机转向控制以及必要的乘员显示功能便可继续运行,无须保留全部积压作业。这种机制比单纯忽略雷达数据更有章法:操作系统将基于优先级的调度,与针对各应用程序设计的中断作业恢复安排结合起来。曾参与登月舱动力飞行例程编写的彼得·阿德勒后来强调,这种选择性恢复机制在软件发布前已经过广泛测试。(nasa.gov)

作出继续下降的决定,也离不开训练有素的地面人员。计算机专家杰克·加曼向制导官史蒂夫·贝尔斯建议,只要计算机仍在完成关键工作,间歇性出现的溢出警报就可以接受;杜克随后将据此作出的继续执行决定传达给宇航员。飞行前的模拟训练曾让控制人员遇到会触发计算机重启的警报,并促使他们编制了警报参考笔记。汉密尔顿与这一事件的关联,在于她领导了飞行软件开发及其可靠性保障工作,而不是在下降期间临时修复了故障。美国国家航空航天局后来给予表彰时,明确肯定了汉密尔顿及其团队的功劳;与此同时,任务运行记录也分别记载了机载恢复软件、麻省理工学院支持工程师和休斯敦飞行控制人员各自的贡献。(nasa.gov)

软件工程作为一门学科

汉密尔顿主张,软件工程应承担独立的工程职责,而不应只是将其他工程师的设计转化为代码的从属工作。她的立场是,在整个系统工程流程中,软件应与硬件并列:软件设计者需要获得与其对系统行为所负责任相称的认可和权限。在2018年的一次访谈中回顾阿波罗项目的工作时,她解释说,采用“软件工程”这一说法,是为了让软件及其开发人员都获得应有的地位。她还回忆说,同事们起初觉得这个说法颇为有趣,因为它跳出了既有的工程分类。因此,她所倡导的不仅是技术方法,也包括专业地位。(news.mit.edu)

美国国家航空航天局在介绍汉密尔顿的阿波罗项目生涯时,将推广软件工程概念的功劳归于她;这比将这一术语的发明完全归功于她更为准确。这个术语也在更广泛的专业领域中逐渐发展起来。1968年10月7日至11日,北约科学委员会在德国加米施举行了一场以“软件工程”为题的会议,由弗里德里希·L·鲍尔担任主席,彼得·瑙尔和布赖恩·兰德尔负责编纂会议报告。有文献可考的汉密尔顿的贡献,是在要求严苛的航天器项目中,倡导并践行将软件开发视为工程工作的理念,而不是确立自己对这门学科名称的独占权。(science.nasa.gov)

这一立场所包含的技术内涵,远不止于编写正确的单个例程。美国国家航空航天局2003年对她贡献的介绍,将异步软件、优先级调度、端到端测试,以及通过按优先级呈现信息的显示界面让人参与决策,列为可靠设计的重要要素。这些要素共同处理了几个问题:程序在运行时如何交互、有限的计算资源如何分配,以及操作人员如何理解和影响系统行为。上文讨论的阿波罗恢复机制就是一个实际运行中的例子;而在更广泛的方法论层面,其要点在于,可靠性取决于软件、硬件、测试和人员操作之间的协调,而不能将代码视为孤立的产品。(history.nasa.gov)

汉密尔顿与赛迪恩·泽尔丁在公开发表的可靠性研究中,将明确定义的接口置于核心位置。两人于1976年3月在《IEEE软件工程汇刊》发表了《高阶软件:一种定义软件的方法论》,主张采用覆盖软件设计、开发和管理的形式化方法。其范围包括软件组件之间、软件与其他系统之间、软件与管理之间,以及参与开发的各学科之间的接口。这一表述将沟通和组织边界也纳入工程问题,而不是将可靠性分析局限于计算机执行的指令。(ntrs.nasa.gov)

这篇文章描述了一种基于公理的方法论,旨在将系统及其接口表示为一个完整、一致且可计算的整体。对于大型多道程序系统和多处理器系统,该方法明确关注的问题包括功能之间的通信、实时进程的重配置,以及数据冲突和时序冲突的预防。这将汉密尔顿对错误预防的重视与明确的系统定义联系起来:组件之间的关系应在开发期间加以规定和审查,而不是等到分别开发的程序组合起来时才显现。这些是该方法论所声明的设计目标,并不能证明每一次应用都能做到毫无缺陷。(ntrs.nasa.gov)

阿波罗计划之后的工作与高阶软件公司

登月任务结束后,汉密尔顿继续从事航空航天领域的工作,参与了天空实验室的软件开发,以及航天飞机系统软件的需求定义。这是两项不同的贡献:她在回顾这一时期时,提到将飞行软件开发方法应用于阿波罗和天空实验室项目,但对航天飞机工作的描述则明确限于需求定义。因此,不应将她的参与等同于负责航天飞机最终投入运行的飞行软件系统。这些后续工作也为一项研究提供了实践环境:如何摆脱特定任务或具体实现的限制,表述为某一航天器项目开发的方法。(klabs.org)

1976年,汉密尔顿与赛迪恩·泽尔丁在马萨诸塞州剑桥市创立了高阶软件公司(Higher Order Software, Inc.,简称HOS)。泽尔丁是一名物理学家,曾在阿波罗软件开发工作中领导制导部门。美国国家航空航天局对该公司起源的介绍,将两人的合作追溯至阿波罗计划期间对错误开展的大量分析;他们据此提出了一种数学方法,旨在开发早期发现错误。公司试图将这一方法转化为可用于原航天器项目之外的工程工具。由此,错误预防和容错不再只是局限于美国国家航空航天局合同项目的实践,而是成为一家商业软件工程企业的业务基础。(spinoff.nasa.gov)

这套方法的提出早于公司的成立。汉密尔顿和泽尔丁在1975年美国航空航天学会数字航空电子系统会议上发表了《高阶软件:一种定义软件的方法》。论文从可计算的函数及其相互关系的角度描述系统,同时探讨系统设计与软件管理。其内容包括用于形式化表述的元语言、自动分析器,以及直接自控制与间接自控制之间的区别。这种表述方式将系统的组织结构明确纳入规约与分析的范围,而不只是关注单条程序指令的正确性。(ntrs.nasa.gov)

两人于1976年3月发表的文章《高阶软件——一种定义软件的方法》,刊登于《IEEE软件工程汇刊》第SE-2卷第1期。文章介绍了一套以六条公理为基础的形式化方法,旨在借此将系统及其接口定义为一个完整、一致的可计算系统。这里的“接口”包括软件之间的关系、与其他系统的连接、与管理层的沟通,以及不同学科之间的协调。该方法尤其面向大型多道程序系统和多处理器系统,其中包含有关实时进程重配置、函数间通信,以及防止数据冲突和时序冲突的推导结果。作者还强调了自动化工具的重要性,认为如果没有这些工具,就很难在多个参与组织中贯彻形式化设计规则。这些是该方法所宣称的能力与设计目标,并不能证明采用这一方法构建的所有系统都不会出错。(ntrs.nasa.gov)

HOS随后开发了USE.IT,以实现这一流程中部分环节的自动化。公司在1985年4月15日发布的一份公告中介绍了一个适用于IBM大型机的版本:开发人员以图形方式输入规约,分析器检查其中的逻辑错误,待错误修正后再生成源代码。这份公告展示了预期的商业应用流程:将分析提前到规约阶段,并减少对手工编写代码的依赖。有关缩短开发和维护周期的说法,是公司对产品优势的宣传,而非经过独立验证的性能测量结果。(archive.computerhistory.org)

汉密尔顿技术公司与通用系统语言

1986年3月,汉密尔顿在马萨诸塞州剑桥市创立了汉密尔顿技术公司(Hamilton Technologies, Inc.,简称HTI)。这是一家独立企业,与她于1976年共同创立的高阶软件公司(Higher Order Software)并非同一家公司。HTI的业务围绕通用系统语言(USL)、配套的001工具套件,以及一种名为“事前开发”(development before the fact,简称DBTF)的预防性软件工程方法展开。这些工作延续了汉密尔顿的一项研究:开发方法如何从源头上防止某些类别的错误反复出现,而不只是提高软件实现后发现这些错误的能力。(upc.edu)

USL旨在成为一种用于定义整个系统并为其建模的语言,而不只是用于编写可执行指令。汉密尔顿与同事威廉·R.哈克勒在2008年发表于《Computer》的文章《通用系统语言:从阿波罗计划中汲取的经验》中,阐述了其设计理念。他们强调,应在统一的形式化框架内,同时表达各个组件及其相互关系。这种预防目标在接口处尤为重要:分别规约的各个部分单独看来可能都符合要求,但它们之间的交互仍可能存在不一致或不完整之处。USL力求从一开始就将这些关系纳入系统定义,而不是留到集成与测试阶段再加以协调。提高可靠性、生产率和适应性,是该语言明确提出的设计目标,并不意味着已经证实每项应用都能自动获得这些收益。(htius.com)

汉密尔顿在对该方法的技术说明中,区分了功能映射(FMaps)与类型映射(TMaps)。功能映射表示功能与时间特征,类型映射则表示类型与结构特征。每个映射都将层次结构与相互作用的对象网络结合起来,而这两类映射又彼此依赖:函数使用已定义的类型作为输入和输出,对类型的操作则通过函数来表达。这为系统定义中逐步展开的各个层级提供了共同的表示方式。其预期益处是,在设计不断细化的过程中保留明确的关系,而不是反复在互不相关的表示法之间转换。(htius.com)

001工具套件为这种方法提供了自动化支持。按照汉密尔顿的描述,开发人员先定义模型,再对其进行静态和动态分析;当分析发现错误时,便返回定义阶段。套件的需求可追溯性功能将需求与相应的模型元素关联起来。Xecutor组件用于执行或仿真模型,可配置的生成器则面向选定的目标环境生成实现;文献记载的示例包括C和Ada。修改应在系统定义中进行,然后重新生成实现,而不是在生成的源代码中单独维护。因此,“事前开发”指的是在整个开发过程中预防错误,而不是取消运行测试:汉密尔顿发表的工作流程明确将测试安排在部署之前。(htius.com)

独立研究记录了这些工具在一个较窄范围内的应用。1993年5月,卡内基梅隆大学软件工程研究所的小罗伯特·W.克鲁特发表了《将001工具支持整合到面向特征的领域分析方法中》。该研究考察了如何将一项现有领域分析从多种工具和表示形式迁移到单一的支持环境中,并探讨其产物如何支持原型开发。这为001用于表示和整合领域模型信息提供了证据。但该研究的范围不同于HTI关于缺陷预防、生产率提升或生成完整生产系统的更广泛主张;这些主张需要另行评估,不能仅凭这一建模环境的存在便推断其成立。(sei.cmu.edu)

奖项与专业认可

2003年9月3日,美国国家航空航天局(NASA)宣布授予汉密尔顿杰出太空法案奖,以表彰她作为阿波罗机载飞行软件开发团队负责人所作出的科学与技术贡献。提名她的是NASA发明与贡献委员会的高级技术专家保罗·柯托。该奖项附带37,200美元奖金,NASA当时称这是该机构向个人颁发的最高金额奖金。太空法案奖不同于表彰整个职业生涯服务成就的一般性荣誉,它表彰的是对该机构航空或航天活动具有重大价值的特定科学或技术创新。(history.nasa.gov)

NASA在说明中将异步软件、优先级调度、端到端测试,以及人参与计算机辅助决策(包括优先级显示)列为具体表彰依据。这些贡献涉及高可靠性软件的组织、测试与运行控制,而不只是编写了大量代码。NASA局长肖恩·奥基夫明确肯定了汉密尔顿及其团队的共同贡献,称他们为阿波罗计划提出的理念是现代软件工程的基石。因此,这份公告既认可了她的领导作用,也保留了对相关工程工作集体贡献的肯定。(history.nasa.gov)

2016年11月22日,贝拉克·奥巴马总统在白宫东厅向汉密尔顿颁授总统自由勋章。她是当年获颁这一美国最高平民荣誉的21人之一。白宫的介绍指出,她领导的团队负责阿波罗指令舱与登月舱的飞行软件。授奖说明还列举了异步软件、优先级调度、优先级显示和人在回路中的决策能力,将她在阿波罗计划中的工作与后来高可靠性软件设计和工程的发展联系起来。(obamawhitehouse.archives.gov)

勋章的正式表彰词并未局限于登月计划,而是涵盖了汉密尔顿更广泛的职业生涯,肯定了她开创的软件工程新方法,以及她创办的软件企业。麻省理工学院的公告同样指出,这一荣誉既表彰她在阿波罗软件开发中的领导作用,也肯定她对计算领域的贡献,并提及她曾任麻省理工学院仪器实验室软件工程部负责人。同为计算领域先驱的格蕾丝·霍珀也在同一年获追授该勋章。(obamawhitehouse.archives.gov)

计算机历史博物馆于2017年4月26日宣布,汉密尔顿入选该馆会士,颁奖典礼定于4月28日举行。博物馆公布的授奖理由包括:她为国防部及NASA阿波罗任务所作的领导与软件工作,以及她对软件工程的奠基性贡献。因此,表彰范围既涵盖航天,也包括国防计算。汉密尔顿与艾伦·库珀、克利夫·莫勒和拉里·罗伯茨共同组成了当年的四人会士名单。2017年的颁奖恰逢该馆会士计划设立三十周年,获奖者由一个评审小组选出,成员包括历史学家、研究人员、业界领袖、博物馆工作人员及往届会士。(computerhistory.org)

历史档案与公众纪念

1969年,汉密尔顿站在一摞阿波罗软件程序清单旁的照片被广泛转载。这张照片最初是为宣传麻省理工学院仪器实验室而拍摄的。据迈娅·温斯托克2016年撰写的照片史文章所引述的汉密尔顿本人回忆,实验室的一名专职摄影师在麻省理工学院拍下了这张照片,目的是宣传实验室为阿波罗计划所做的工作。照片原始说明指出,这些打印材料是汉密尔顿及其领导的登月舱和指令舱机载飞行软件团队开发的软件。因此,这摞材料代表的是集体工程成果,而非汉密尔顿独自编写的程序。此后,随着照片在文章和社交媒体中传播,它成为展现汉密尔顿工作的一幅标志性影像。(science.nasa.gov)

史密森尼学会国家航空航天博物馆的《阿波罗飞行制导计算机软件馆藏[汉密尔顿]》保存了相关文献档案,入藏编号为NASM.1986.0158。这批馆藏由汉密尔顿于1986至1987年间捐赠,分装于三个文件盒中,占用空间为1.22立方英尺。材料年代跨度为1965至1986年,其中大部分形成于1965至1972年。报告、备忘录、程序变更传阅单、制导系统文档,以及一份阿波罗7号初步飞行计划,留存了该团队开发与审查流程的证据。文件涉及Sundisk、Skylark和Luminary等程序,另有一份计算机仿真打印件记录了与错误检测和恢复有关的测试。1986年,汉密尔顿在部分文件上添加了手写的历史背景说明;馆藏检索指南将这些批注与当年的原始记录分别列明。因此,这批馆藏既保存了实际工作中使用的软件文档,也保存了她后来对相关背景所作的解释。(sirismm.si.edu)

汉密尔顿后来作为计算机领域女性代表受到的关注,也通过2017年11月1日发行的乐高Ideas系列21312号套装“美国国家航空航天局的女性”获得了具象呈现。这套积木根据迈娅·温斯托克的提案设计,由231个零件组成,展现了汉密尔顿、天文学家南希·格雷斯·罗曼,以及宇航员萨莉·赖德和梅·杰米森。汉密尔顿的展示场景重现了1969年的那张照片:一个乐高人仔站在堆叠的书本造型零件旁,这些零件象征阿波罗制导计算机的源代码程序清单。随附的小册子介绍了这四位女性和套装设计师。汉密尔顿的场景并未表现宇航员或航天器操作人员,而是通过打印出来的工作材料展现软件开发工作。(ideas.lego.com)

国家航空航天博物馆在2017年的专题文章《乐高“美国国家航空航天局的女性”背后的真实故事》中,将这一面向大众的形象与馆内档案联系起来。文章从汉密尔顿的微缩模型引导读者了解阿波罗软件馆藏,指出其中的报告、计划、分析及其他文献记录了软件开发过程。由此,一件公众纪念品与可供历史研究的材料之间建立起了有文献依据的联系。(airandspace.si.edu)

汉密尔顿于2026年9月30日去世,享年90岁。10月7日,麻省理工学院发表了一篇由该校航空航天系的贾妮恩·利伯蒂撰写的悼念文章。文章除回顾她的职业生涯外,还刊载了注明由麻省理工学院博物馆提供的历史照片,以及一张汉密尔顿与温斯托克、乐高设计师塔拉·威克共同查看乐高原型的照片。文章还收录了该系临时系主任奥利维耶·德韦克的悼词,将她对阿波罗计划的贡献置于该计划协作开展的工程工作之中加以评价。(news.mit.edu)

参考来源

  1. 2017 CHM Fellow Margaret Hamiltoncomputerhistory.org
  2. Margaret Hamilton, computing pioneer who led software development for the Apollo program, dies at 90news.mit.edu
  3. Oral History of Margaret Hamiltonarchive.computerhistory.org
  4. Margaret Hamilton ’58 to receive honorary Doctor of Science at Commencementearlham.edu
  5. Margaret Hamilton Reflects on Life, Career, and SAGEll.mit.edu
  6. MIT chosen as hardware and software contractornasa.gov
  7. Margaret Hamiltonscience.nasa.gov
  8. The History of Apollo On-Board Guidance, Navigation, and Controlweb.mit.edu
  9. Computers On Board The Apollo Spacecraft: Mission profilenasa.gov
  10. Behind the scenes of the Apollo mission at MITnews.mit.edu
  11. Recalling the 'Giant Leap'news.mit.edu
  12. Apollo 11: 25 Years Laterhistory.nasa.gov
  13. Margaret Hamiltonhistory.nasa.gov
  14. The Apollo Guidance Computer: Softwarenasa.gov
  15. Apollo 11 Program Alarmsnasa.gov
  16. APOLLO 11 MISSION REPORT NOVEMBER 1969nasa.gov
  17. The First Lunar Landingnasa.gov
  18. Apollo 11: 25 Years Laternasa.gov
  19. INTERVIEW TRANSCRIPTnasa.gov
  20. NASA/TM−20240011265ntrs.nasa.gov
  21. Software Engineering: Report on a Conference Sponsored by the NATO Science Committeecs.uni.edu
  22. Higher Order Software: A Methodology for Defining Softwarentrs.nasa.gov
  23. About Margaret Hamiltonklabs.org
  24. Error-free Softwarespinoff.nasa.gov
  25. High Order Software: A Methodology for Defining Softwarentrs.nasa.gov
  26. Higher Order Software—A Methodology for Defining Softwarecse.msu.edu
  27. Higher Order Softwarearchive.computerhistory.org
  28. Margaret Hamilton honorary doctorate ceremony programme and speechesupc.edu
  29. Interview with Margaret H. Hamiltoncatskull.net
  30. Integrating 001 Tool Support into the Feature-Oriented Domain Analysis Methodologysei.cmu.edu
  31. Aeronautics and Astronautics: A Chronology, 2003ntrs.nasa.gov
  32. Celebrating Presidential Medal of Freedom Winners in Science and Tech: Garwin, Hopper, and Hamiltonobamawhitehouse.archives.gov
  33. Remarks by the President at Presentation of the Presidential Medal of Freedomobamawhitehouse.archives.gov
  34. Apollo code developer Margaret Hamilton receives Presidential Medal of Freedomnews.mit.edu
  35. Computer History Museum Celebrates 30 Years of Fellow Awards with the Announcement of 2017 Honoreescomputerhistory.org
  36. Apollo Flight Guidance Computer Software Collection [Hamilton] — Finding Aidsirismm.si.edu
  37. LEGO® 21312 Women of NASA — Available Today!ideas.lego.com
  38. Real Stories of LEGO’s “Women of NASA”airandspace.si.edu