专栏名称: 赛先生
科学知识普及
分享
今天看啥  ›  专栏  ›  公众号  ›  赛先生

[原创]拯救阿波罗的程序媛

赛先生  · 公众号  · 科学  · 2019-07-17 18:00

在阿波罗11号飞船着陆月球的前几分钟,意外出现了。由于着陆器雷达的电源出现问题,计算机出现过载现象,程序报警显示“执行溢出”,这意味着导航计算机不能实时完成所有任务。系统近乎崩溃,难道这次挑战要以船毁人亡的惨剧结束吗?

撰文 | 李唐


1969年7月16日,搭载着阿波罗11号的土星5号火箭在肯尼迪航天中心发射升空。这是人类的首次登月尝试。7月21日,阿姆斯特朗和奥尔德林成功踏上了月球的表面,在完成考察任务后顺利返回地球。


这一伟大创举的背后,是无数科学家和工作人员的辛勤努力。在他们之中,就有一位堪称传奇的程序员。如果没有她的智慧,阿波罗计划便会毁于一旦。她就是程序员们的“女神”——玛格丽特·海菲尔德·汉密尔顿(Margaret Heafield Hamilton)。


学业与家庭

玛格丽特于1936年8月17日在印第安纳州的保利出生。高中毕业后的第二年(1955年),她开始在密歇根大学学习数学。在这里,她结识了詹姆斯·汉密尔顿,并在毕业后与他结为夫妻。1958年,玛格丽特获得数学学士学位。同时,她还在厄勒姆学院( Earlham College)完成了辅修哲学的学业。玛格丽特说,是她的父亲(哲学家、诗人)和祖父(校长、贵格会牧师)激励了她学习哲学。


大学毕业后,为支持丈夫在哈佛大学攻读本科学位,她在一所高中教了一段数学和法语。后来,她搬到了马萨诸塞州的波士顿,并打算在布兰迪斯大学(Brandeis University)读研。这次,她选择抽象数学作为主攻方向,她的理想是成为一名数学教授。当时,詹姆斯·汉密尔顿在哈佛大学修读法律。为了缓解经济压力,1959年的夏天,玛格丽特开始在麻省理工学院的气象系为爱德华·诺顿·洛伦茨(Edward Norton Lorenz)工作。在她看来,这只是暂时性的一步,过不了多久她还会继续研究生的学业。玛格丽特并未预料到,这份临时的工作竟为她打开了一个充满乐趣的全新领域。


初涉编程

在为洛伦茨工作期间,她为Marvin Minsky的MAC项目开发了预测天气的软件——这项工作对洛伦兹在混沌理论方面的成果做出了直接贡献:混沌理论关注于初始条件的细微变化所引起的结果上的巨大差别,天气预报是混沌理论研究的典型案例。


在1961年,由于能力出色,玛格丽特进入了著名的林肯实验室,成为SAGE( Semi-Automatic Ground Environment )项目的研发成员。SAGE项目的初衷是利用计算机系统模拟气流的运动,对天气状况进行预测,后来其被美国军方用于防空,以抵御苏联可能发动的攻击。


当时,计算机科学和软件工程还没有成为系统的学科,程序员往往在工作中通过实践经验来学习,编写程序的复杂度和现代编程也不在一个量级上。由于新兴的编程行业还缺乏完善的统一标准,每个程序员必须掌握多种汇编语言。他们首先将代码用打字机写到纸上,再依靠人力对程序进行排错(debug),这往往需要数遍检查。在确认无误后,这些程序才会被专职人员用手工编成的磁环存入电脑。尽管如此,玛格丽特依然乐此不疲,她已经沉醉在了这个崭新的世界之中。她说道:

当你作为一个初学者进入这个组织时,他们通常会给你分配一个没人能想出或者运行的程序。当我接手这个项目时,它的确很棘手,但我真的让它运作了起来,我是第一个使它工作的人。


正是她在SAGE项目上的努力,使她成为美国宇航局阿波罗飞行软件首席开发员的候选人。


(图源:MIT Museum)


在“荒野”上工作的母亲

麻省理工学院的查尔斯·斯塔克·德雷珀实验室当时正在进行阿波罗计划的研究,玛格丽特加入了这个实验室。作为编程专家,玛格丽特担任一支研发团队的领导。


就在这段日子里,她的女儿劳伦出生了。在2015年的一次采访中,玛格丽特表示,在工作的同时担当母亲的角色的确充满了挑战性。在工作繁忙的时候,她不得不将仅有几岁的女儿带到实验室里,专注的母亲和在一旁玩耍的小女儿成为实验室里一道别样的风景。


在这个关于计算的新世界中,许多地方并没有前人的脚步,路要靠自己去开拓。“那里就像是原始的西部,没有航线,没有人教你东西。”正是在这种情况下,她的团队成功开发出了飞行软件,其中包括由多位资深科学家为阿波罗指令舱、月球着陆器和随后的天空实验室(Skylab)设计的算法。


化解危机

我们知道,计算机的处理速度与作为临时存储空间的内存有很大关系,而在那个时代,计算机内存都很小,阿波罗飞船上的电脑也不例外,这意味着其运行能力的上限较低。


在阿波罗11号飞船着陆月球的前几分钟,意外出现了。由于着陆器雷达的电源出现问题,计算机出现过载现象,程序报警显示“执行溢出”,这意味着导航计算机不能实时完成所有任务。系统近乎崩溃,难道这次挑战要以船毁人亡的惨剧结束吗?


在这个紧要关头,玛格丽特编写的程序竟然顶住了压力。她的算法为各个进程分配优先级,确保所有任务能以正确的顺序进行。玛格丽特写道:

在这种情况下,软件的作用是清除优先级较低的任务,并重新执行更重要的任务……如果计算机没有意识到这个问题并采取恢复措施,我怀疑阿波罗11号能否成功登月。


正是玛格丽特设计的程序挽救了阿波罗飞船,使阿姆斯特朗迈出了“人类的一大步”。资深技术专家保罗·库托(Paul Curto)提名玛格丽特获得美国宇航局太空行动奖,称她的工作是“超可靠软件设计的基础”。在玛格丽特的程序拯救人类的登月计划时,她其实只有33岁。


荣誉永远属于她

后来,玛格丽特离开了NASA,并与他人一同创建了一家名为high Order Software 的公司,继续进行软件开发的工作。她提出的算法思想为后来的很多程序设计提供了不可或缺的灵感。


玛格丽特与Anthony Oettinger、Barry Boehm一道被认为是提出 “软件工程”这一学科名称的人。她想赋予编程以“合法性”,这样它(以及程序员)就会得到应有的尊重。因此,她创造了“软件工程”这个术语,以区别于其他类型的工程学科。随着时间的推移,“软件工程”获得了与其它任何技术学科相同的重视。


《连线》杂志的凯伦·特根·帕迪尔(Karen Tegan Padir)评价道,玛格丽特为更多女性进入软件等STEM领域并取得成功打开了大门。为此,我们应该送上额外的赞誉。


2003年,玛格丽特被授予NASA杰出太空行动奖;该奖项包含37200美元的奖金,是NASA历史上授予个人的最高数额。在2016年,她又得到了美国最高平民荣誉——总统自由勋章。颁奖典礼上,奥巴马总统说,汉密尔顿夫人“象征着一代帮助人类进入太空的默默无闻的女性”。


(图源:Official White House photo by Lawrence Jackson)


人类的历史是充满进步的历史。在闪耀的舞台上,我们看到了英雄的风采。这时,我们不妨将聚光灯稍稍后移,让它也照亮幕后的英雄。他们同样闪耀,他们的努力同样不可或缺。人类的一大步中,包含了每位英雄迈出的一步,鲜花和掌声永远属于他们。


参考资料

[1] https://en.wikipedia.org/wiki/Margaret_Hamilton_(software_engineer)

[2] https://www.smithsonianmag.com/smithsonian-institution/margaret-hamilton-led-nasa-software-team-landed-astronauts-moon-180971575/

[3] http://news.mit.edu/2016/scene-at-mit-margaret-hamilton-apollo-code-0817

[4] http://wap.sciencenet.cn/blog-2966991-1076583.html?mobile=1



文章头图及封图片来源:hackaday.com


赛先生

启蒙·探索·创造

如果你拥有一颗好奇心

如果你渴求知识

如果你相信世界是可以理解的

欢迎关注我们

投稿、授权等请联系

saixiansheng@zhishifenzi.com


今天看啥 -
本文地址:http://www.jintiankansha.me/t/c7dwSJuPyE