把人类送上月球的女程序员:她的代码跟登月本身一般浪漫...(组图)
美国西部时间7月18日晚上,位于加州的世界最大太阳能电站——伊万帕太阳能发电站出现一段无比惊艳的画面。
日落月升之后,沙漠里10万多面太阳能电池板的镜面突然开始调整自己和月亮的角度。
随后,月光反射到这些太阳能电池板镜面上,明暗交织,当满月挂上当空之后,人们惊讶地发现,太阳能电池板反射的月光组成了一副长发女性的半身像,旁边还有一个数字和环绕的英文字母:阿波罗11号,Margaret Hamilton….
7月20日,也是人类登月50周年纪念日,
50年前,阿波罗11号载着人类开拓宇宙的梦想,踏上了月球之旅。
50年后,在全世界人民将“我的一小步,人类的一大步”背到滚瓜烂熟的今天,谷歌用太阳能电池板反射月光组成肖像,致敬这位“阿波罗11号先锋”,Margaret Hamilton。
“她将人类送上月球,50年后,人们用光彩夺目的月光肖像向她致敬。”
其实,被称为“阿波罗11号先锋”的Margaret并没有亲自踏足月球,但这位女性却是人类登月的首功之臣,只因为:
Margaret是人类历史上第一位真正意义上的“软件工程师”(这个词也是她本人发明的),所有现代程序员的祖师奶奶。
因为她,人类首次在计算机的帮助下完成登月这样的宏大工程,
更因为她,阿波罗11号得以在登月的最后3分钟力挽狂澜,及时救险,宇航员尼尔·阿姆斯特朗也得以代表人类迈出那“决定性的一大步”....
今天我们要说的,是这位登月工程幕后英雄的故事。
Margaret Hamilton于1936年出生在美国印第安纳州,打小开始,Margaret就很喜欢读书,也非常享受学习的乐趣,然而,这位天生学霸却有一个缺点,懒得背东西…..
尤其在数学方面,Margaret对背公式和推论深恶痛绝,于是她想出了“偷懒”的办法:
“我太懒了,不想每一个公式都去记,于是每一条数学公式我都自己推导一遍,学会了推理就不用去死记了…..”
懒得记东西,热衷于推理演算,也为她日后成为编程界的祖师奶奶埋下了伏笔。
Margaret就这样一直在“偷懒”中读完了高中。
1955年,她顺利考入了密歇根大学,就读自己最喜欢的数学专业,原因还是曾经那一个:
不用背东西,可以偷懒…..
读大学期间,Margaret一边继续“偷懒”弄弄数学,一边还忙着谈恋爱。
1958年,Margaret本科毕业,在拿到学位后不久,立马就跟男友结婚了…..
本科毕业,Margaret本来打算继续读研,然而为了支持丈夫修读哈佛大学的法学硕士,Margaret决定先工作挣钱,于是就到麻省理工的实验室里当了一位编程员。
谁知道,拿到法律学位之后,丈夫却希望Margaret放弃麻省的编程工作,到哈佛法学院当个茶水工,因为在当时,丈夫就读了哈佛法律系的妻子,被称为“法学之妻”,都可以直接进哈佛当茶水工,工作轻松愉快,还能和陪在另一半身边…..
对于丈夫的这个要求,Margaret果断拒绝了:
“我不会去端茶倒水的,总有一天,我会让你以我为荣,但绝不是你希望的那种方式….”
Margaret选择了继续留在麻省的林肯实验室,她开始学习计算机编程,当时的计算机还都是电子管的,计算能力很低,动辄占据好几个房间的机器怪兽,能够承担的程序任务也很有限,主要用于科研和军事目的。
尽管如此,Margaret依然有着浓厚的兴趣,不用背东西,只需要逻辑推理,这正中她的下怀,Margaret开始如饥似渴地钻研编程,很快就写出了预测天气和侦察敌人军机数量的程序。
在Margaret自己看来,只是发挥自己数学才能的小小成就,然而她的小成就却很快引起了美国宇航局NASA的注意,因为当时的NASA正在实施一项史无前例的伟大计划,急需Margaret这样的人才。
1965年的一天,NASA的几个人找到了Margaret,神情严肃地对她说出了如下的话:
“我们要找会编程的人,帮我们把人送到月球上去…..”
让Margaret差点惊掉了下巴,半晌说不出话来,沉默了一阵,她坚定地回答:
“好….我去!”
等打包好行李搬到NASA的工作室时,Margaret才发现:
她本人是NASA为“登月飞船导航”项目招来的第一个编程员,也是当时唯一一个。
按NASA的想法,给登月的宇宙飞船导航编程的事,以后就由她本人全权负责了…..
Margaret也没被场面吓到,既然接了这么大的活儿,那就开动吧,她立马开始培训人员,组建团队。
然而,刚开始启动“登月导航计算机”项目,她就发现,除了她以外,NASA的其他人几乎都是小白….
在那个年代,大多数人没听说过计算机,更别提软件,硬件这些专业术语了,一开始,Margaret费了老鼻子劲,才让她手下的一些大老爷们明白软件(software)是个什么玩意儿,有啥用途:
“现在看来是个笑话,但在当时,真的有很多人以为软件是某种衣服或纺织品……”
当然,NASA为Margaret找来的这帮人也不是吃素,也都是美国数学领域的顶尖人才,大家很快就跟上了节奏,成为Margaret的得力干将。
不过时间一长,Margaret开始觉得有些力不从心了,原来,实验室里其他男同事也不比Margaret大多少,虽然一个个都有子女,但因为是男人,可以放心地在实验室上班,反正家里有老婆带娃。
但Margaret不一样,她的女儿年纪还小,一到实验室工作,就容易分心牵挂女儿。
考虑了很久,为了既不影响登月,又能照顾到女儿,Margaret干脆每天把女儿带到实验室来上班。
Margaret经常加班到很晚,有时候周末也要赶工,好在女儿终于也可以照顾得到了。
那时候,女儿就每天帮母亲假扮宇航员,坐进模拟器中,测试软件的运行和调试。
有一次,女儿不小心在“模拟着陆”时,提前打开了一个按钮,这让Margaret心中一惊,她不由得想到:
万一在实际登月运行中,宇航员也发生了类似的错误,问题可就大了.....
这事儿给了Margaret灵感,她立刻向NASA报告,要求着手开始写程序补丁——防止宇航员提前开启某些程序的保护程序。
一开始,NASA的其他人认为这个程序没有必要:
“我们训练有素的宇航员绝对不会犯下几岁小女孩那样的错误!”
Margaret和女儿
然而,Margaret据理力争,她认为在太空黑暗又孤独的环境下,人犯低级错误的概率相当大,研发这个程序补丁有相当的必要。
最终Margaret赢得了这场争论,她主导的修正人为错误的保护程序,就这样嵌入了登月的阿波罗飞船上面….
这个保护性程序的实现方式就是:
制定了程序优先级调度,让程序可以随时中止优先级较低的任务,专注于高优先级任务。
举个例子:
比如有人像Margaret的女儿一样,按错了按钮,提前启动了不该启动的程序,那也没关系,电脑能识别出错误,并在分析之后仍然执行当下应该执行的——优先级高的任务……
谁都没有想到,Margaret从女儿假扮宇航员,漫不经心的玩闹中得到的启发,竟然最终成为了挽救登月计划的决定性因素!
除了这个灵光乍现的神来之笔,Margaret大多数时候的工作都是枯燥乏味的,那时候,NASA的计算机刚刚换成集成电路板,但远没有如今的工业设计,
Margaret的编程代码都是写在笔记本上的,然后像织毛衣一样,把硅材料和金属线圈一个个连接起来。
这个过程需要无比的细心和高度的精神集中,接了一条线,就全盘皆错。
几年下来,Margaret写出的代码笔记本,堆起来比她本人还高....
而她装配好的第一台集成电路计算机,背后密密麻麻复杂的线路,交织成一张巨大的蜘蛛网,
这是人类最早的集成电路计算机之一,更承载了史上第一个大型软件程序——飞船登月的导航程序!
登月计算机的雏形
历经艰苦卓绝的4年,决定性的一刻终于到来了,1969年7月16日,阿波罗11号宇宙飞船,在大推力火箭“土星5号”的推动下,伴着震天动地的轰鸣,飞向地球外的第一个天体——月球。
经过三天多的飞行,7月20日,阿波罗11号终于开始向月球背面的着落点飞去,一切顺利,飞船在慢慢下降。
忽然,还有3分钟就要着陆的时候,竟然出现了意外情况:
一名宇航员不小心在启动按钮时点错了位置….
宇航员阿姆斯特朗有些慌张,立刻开始报告:
“1202程序警报!1202程序警报!….”
机上的电脑一共发出了5次紧急信号,这是阿姆斯特朗等人此前从未训练遇到过的。
30多万技术人员,8年耗资250亿美元的工程,全人类的希望,如今都要取决于这几声关键的警报和几行计算机代码了!
所有人的心都提到了嗓子眼,还有3分钟就要着落了,程序竟然现在开始报错!而这一警报显示:
电脑运行过载了...
刹那间,指挥中心的空气仿佛凝结了,所有人都望向Margaret,脸上带着惊慌和疑问:
程序出问题了?
降落,还是不降落?
只有3分钟了!
千钧一发的那一刻,Margaret突然想到了当年,她受到女儿胡闹的启发写出来的那个保护软件:
如果有人按错了按钮,提前启动了其他程序,这个保护程序一定会站出来阻止!
现在应该是有人按错了按钮,保护程序启动阻止了并开始纠错,于是过载了。
但是,根绝Margaret之前设计的程序,电脑会执行优先级高的任务——先让飞船在月球着陆,
所以,此时该做的就是:忽略警报,继续向前!
Margaret果断接过麦克风,坚定地喊话:
“我们的软件程序足够聪明,相信我们,正常登陆吧!”
漫长的3分钟过去了,
阿波罗11号终于在月球着落。
尼尔·阿姆斯特朗和队友巴斯走出船舱,迈出了人类文明史上的一大步…..
那一天,全球6亿人见证了阿波罗11号飞船,在Margaret设计的软件下,顺利登陆月球的庆幸。
登月工程获得巨大成功,宇航员们成了万众瞩目的英雄,Margaret却和众多幕后技术人员一道,躲在了光环背后,多年不为世人所熟知。
多年过去,随着计算机技术的发展,计算机的运算能力有了长足的进步,软硬件的搭配之下,如今顶级智能手机的运算能力都是阿波罗11号计算机性能的10万多倍....
但是,由Margaret领导编写的软件却是空前绝后的,它成功引导阿波罗飞船完成了登月任务,这是当今任何一台电脑都做不到的,因为那台性能并不强大的远古电脑上,运行着程序员祖师奶奶Margaret写下的代码,它无比精确,强大,可靠,一如心智无比强大的Margaret本人。
如今,那14.5万行,史无前例的,引导人类成功登月的代码早已被开源,放到了GitHub(著名的软件源代码托管服务平台)上,供后世“程序猿”“攻城狮”们膜拜,瞻仰…..
2016年,Margaret获得了奥巴马总统给她颁发了总统自由勋章,表彰她在登月方面做出的杰出贡献。
一路走来,时过境迁,Margaret始终认为,为阿波罗11号编写导航程序的那些年,是她人生中最美好的时光,她也最终实现了让丈夫以她为荣的誓言。
在人类阔别月球50年之际,程序员祖师奶奶Margaret的感慨依旧发人深省:
“我们不应该就此停下探索的脚步!”
“我们应当更加无惧无畏,哪怕有专家跳出来说’这不合理’,’那讲不通’,因为,我们在梦想变为现实的路上,除了你自己,世上没人能相信它可以实现,但是,只要你继续一往无前,梦想终究会变成现实….”