50年前的程序员女神,用代码把人类送上月球

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

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

图片

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

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

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

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

责任编辑:武晓燕 来源: 码农翻身
相关推荐

2015-10-23 10:53:39

代码航天程序员

2019-07-11 08:53:11

代码开发程序员

2021-05-14 09:10:20

脑机接口机器人工智能

2021-04-20 12:26:35

SpaceX月球

2020-05-25 14:58:36

程序员自动化编码

2020-01-13 10:23:08

程序员技能开发者

2019-12-24 09:25:09

程序员技能开发者

2015-06-19 15:21:59

程序员

2020-10-16 19:07:33

Windows 10微软回应

2023-11-06 07:19:11

程序员GitHub社交媒体

2022-08-01 09:43:19

程序员Googlefacebook

2014-07-14 10:26:02

JQueryJQuery插件

2013-05-31 09:05:47

2019-04-16 15:00:13

前端程序员薪资

2009-07-08 09:08:37

2017-03-13 09:07:05

测定代码基因

2016-04-20 10:41:08

VR虚拟现实

2011-03-07 15:38:33

3月编程语言排行榜

2018-07-04 13:00:58

雷军代码程序员

2020-08-13 13:45:08

程序员技能开发者
点赞
收藏

51CTO技术栈公众号