1969年7月20日,经过4天飞行的阿波罗11号终于来到了最关键的时刻:降落到月球表面。


就在这个时候,飞船计算机突然开始闪烁报警。


全球6亿人在观看电视直播,NASA飞行控制中心的气氛让人窒息。


人类的首次登月计划面临着艰难的抉择:降落还是放弃。


幸运的是,控制中心的人对飞行控制软件有着高度的信心,指示阿波罗11号继续降落。


图片



飞行控制软件不负众望,它忽略了那些低优先级的情况,专注于最高优先级的任务,引导着阿姆斯特朗和奥尔德林穿过坑坑洼洼的月球表面,成功着陆。


事后分析发现,是因为一个开关被放置到了错误的位置,导致计算机进入了过载的状态。 


那个只有2K内存的计算机既得执行降落所需的计算,又得处理开关错误引起的额外数据。


但是这个程序居然实现了抢占式任务:用高优先级的着陆任务打断了低优先级的,实在太厉害了。


这个飞行控制软件是玛格丽特·汉密尔顿和她的团队编写的。


图片

(代码等身)


这无疑是玛格丽特人生的最高光时刻。


后来乐高公司根据那张著名的照片开发了乐高玩具套装:NASA中的女性,玛格丽特成为其中的一员。



1、2K内存的计算机



玛格丽特1936年出生于美国印第安纳州,后来全家搬到了密歇根,1958年她获得了密歇根大学的数学学士学位,随后她在MIT找了一份工作,成为了一名程序员,开发气象预测软件。


这是软件开发的蛮荒岁月,计算机科学和软件工程还没有建立,一切全靠程序员在工作的实践中学习。


1961年,玛格丽特开始参与国防项目SAGE,协助开发了美国第一个空中防御系统,通过雷达来搜索飞机。


玛格丽特在这个项目上展示自己的天赋:“当一个新人进入项目时,总是会被分配一些没有人能搞清楚的程序,我也被分了一个非常怪异的程序,最早写程序的人甚至用希腊语和拉丁语来写注释!不过我还是成为了第一个让这个程序跑起来的人!”


正是在SAGE项目上的成就让玛格丽特的人生发生了转折。


1965年,她的丈夫在当地报纸上看到了一则消息:NASA正在寻找程序员,开发程序,把人类送上月球。 


图片


玛格丽特非常兴奋:“哇,那我一定得去!”。 


这一年玛格丽特28岁,加入了阿波罗项目,成为了项目的第一个程序员。


阿波罗项目需要开发一个精简的计算机AGC(Appollo Guidance Computer),用来控制登月飞船。


这是一件艰难的任务,因为当时的计算机通常要占据一间屋子,但是AGC被限制到只有一立方英尺那么大。


图片


项目组被分为两拨人,一拨设计硬件,另外一拨开发软件。 


玛格丽特自然成为了软件组的负责人。


AGC只有可怜巴巴的2K内存,36K的ROM,更匪夷所思的是那个ROM是Core rope memory(芯绳存储器?),也就是说,0和1是通过电线和微小的环形磁芯表示。


电线穿过磁芯表示1,没有穿过表示0。


我们现在想把程序存盘,只需要按一个Ctrl + S就可以,但是想把阿波罗飞行软件存盘,只有一种办法:像纺织工那样细心地把电线和磁芯给编织起来。


这个工作不能出一点儿差错,要不然,无论代码写得多么正确,最终都会功亏一篑。


事实上,这个工作的确是由新英格兰纺织厂的女工们完成的,绳索存储器被一些程序员戏称为Little Old Lady memory。


2、软件工程



在NASA工作的大多数软件工程师都是男性,有人在家里照顾孩子,但是玛格丽特没有办法,在周末和晚上她会带女儿劳拉来到办公室。


劳拉经常看到她的妈妈在飞船中扮演宇航员来测试软件,好奇心大起,也想试一试,结果突然间整个系统崩溃了,原来劳拉在飞船“飞行”期间,选择了一个叫做P01的功能。


图片


玛格丽特意识宇航员也有可能犯类似错误,希望修改软件防止它。 


但是NASA的人说,宇航员都是训练过的,绝对不会犯类似错误。当然,修改软件也非常难,想想芯绳存储器!


但是,在阿波罗8号绕月飞行的时候,宇航员恰恰犯了和她女儿一样同样的错误,飞船在太空“迷路”,无法将宇航员送回地球。得知消息的玛格丽特带领团队,突击9个小时,终于让阿波罗8号回到正常轨道。


图片

(支援阿波罗8号)


此后,软件都内置了保护功能,防止类似事件的发生。 


玛格丽特开始将整个阿波罗任务视为一个系统,这个系统由3部分组成:软件,硬件,人。


在开发飞行控制软件的过程中,玛格丽特创造了“软件工程”这一术语,她要赋予“软件”的合法性,就像硬件以及其他类型的工程一样,构建软件的人也应该得到应用的尊重。


在刚开始的时候,大家认为这是一个笑话:软件开发是工程吗? 


随着时间的推移,NASA逐渐意识到,软件工程会成为它们的重要工具,能够抢先苏联一步完成登月。


图片




3、除了成为先行者别无选择



“回想起来,我们是世界上最幸运的人,除了成为先行者别无选择” ---玛格丽特·汉密尔顿


玛格丽特就是软件工程领域的先行者,开发阿波罗飞行软件这种对正确性、可靠性要求极高的软件,没人任何经验可以遵循,没有任何学校可以学习,软件不仅要工作,而且必须第一次就正确工作。软件不仅要可靠,而且必须能进行实时的错误检测和恢复。


玛格丽特带领团队出色地完成了这个软件,在关键时刻把人类送上了月球。


2016年11月22日,玛格丽特获得了奥巴马总统颁发的总统自由勋章,以表彰她在阿波罗登月任务开发机载飞行软件所做的工作,以及对软件工程的基础性贡献。


图片



玛格丽特说:当我想了解新事物或者做新东西的时候,一定不要让恐惧成为障碍。


一个人不应该害怕说“我不知道”,“我不理解”,或者问“愚蠢的问题”。


即使事情看起来不可能,即使所谓专家说这不可能,也要继续下去。


不要害怕犯错,只有敢于失败的人才能取得更大的成就。