255 亿美元的登月计划差点搞砸,幸亏这个美女出手
1969 年 7 月 20 日,休斯顿时间下午 4 点 14 分,静海基地附近。
飞船电脑忽然发出连续的警报声,一连串错误信息像潮水般涌来,电脑系统发给宇航员的警报似乎都带着怒气:
我过载了!都这会儿了,让我干这个?!我马上得执行最要紧的任务——登月!!!
此时,离阿波罗 11 号登陆月球表面只剩下 3 分钟。
黄金时代的阴云
对美国人来说,整个 1950 年代是一个金子般的年代。奢华的汽车,大彩电和大冰箱,还有久违的和平,美国人享受着空前的繁荣和悠闲。虽然贫富差距越来越明显,冷战乌云挥之不去,种族冲突有激化的迹象,但是对于大多数普通美国人来说,生活仍旧富裕、平静、美好。
在这段黄金岁月中,美丽的姑娘玛格丽特(Margaret)在厄勒姆学院(Earlham College)认识了詹姆士·考克斯·汉密尔顿(James Cox Hamilton)。尽管他只是个不起眼的男孩,而她在校园里已有 “舞会皇后” 的美名,他们还是很相爱,并在不久后结婚了。
毕业后,玛格丽特·汉密尔顿一边在高中教数学和法语,一边等着丈夫拿到学士学位;然后,他们搬到波士顿,玛格丽特在布兰代斯大学做抽象数学方面的研究。
从一个学校到另一个学校,读书、做研究、嫁人,还打算要个孩子,玛格丽特虽然比当时的职业家庭妇女显得 “高知” 了一些,但总归还不太离经叛道。毕竟,时代在进步,女性多读点书也不是什么大不了的事。
生活就这么继续下去的话,无疑很美好。
但是,上帝并不总是公平的,有时他不光让你长得漂亮,还让你懂得写代码。
阿波罗来了
1960 年,玛格丽特在麻省理工找了一份临时的程序员工作。他们两口子计划好了,妻子先支持丈夫在哈佛法学院读三年,然后丈夫再工作,支持她去拿一个数学研究生学位。
这一年,她 24 岁。
在这个年头,一个姑娘家做程序员这种 “高科技” 工作,估计没多少人赞赏。不过,整个美国以及欧洲的社会风气都在发生越来越明显的变化:嬉皮士运动兴起了,随之而来的是摇滚乐、性解放和两性平权。世界变得多彩而又喧嚣,女人到底该不该干高科技工作,似乎也没那么受关注了。
一年以后,玛格丽特又转而去了成立刚 10 年的林肯实验室。在这里,玛格丽特给北美防空司令部的半自动地面防空系统(Semi-Automatic Ground Environment)项目工作。这个重达 300 吨的庞然大物,是个不折不扣的冷战怪物。
在林肯实验室,她的工作也极具 “冷战气质”:给第一台 AN/FSQ-7 计算机编程,搜索美军始终提防着的 “不友好的飞机”。
1963 年,玛格丽特加入麻省理工查尔斯·斯塔克德雷珀实验室(Charles Stark Draper Laboratory)。当时,这个实验室正在为阿波罗计划,也就是大名鼎鼎的人类登月计划而工作。
此时,玛格丽特已经是一位母亲了,女儿劳伦(Lauren)4 岁,正是喜欢缠着妈妈的时候。玛格丽特没办法,只好把劳伦带到查尔斯河畔的办公室里。孩子自己玩,玩累了就自己睡觉,妈妈则在旁边给阿波罗飞船的软件写代码。
1960 年代美国的家庭观念,认为玛格丽特的行为有些不妥。把孩子扔在一边,自己忙于工作,在他们看来不是一件可取的事。可是,玛格丽塔无法放弃她的工作,因为,她太喜欢这种新奇的事了:把人类送上月球,这是一件多么前所未有的挑战。如果不是冷战,不是美苏两国疯了一般的太空竞赛,恐怕很多年之后人们也不会想到要去做这样的事。
她喜欢这里的氛围,喜欢她的 geek 同事们,她说自己是他们的一份子。更重要的是,她在这里所做的事情,很多都是人类的 “第一”:
- 给世界上第一台便携式电脑编写软件。
- 他们编程对象中有第一台使用集成电路的电脑。
- 第一次实现了卡尔曼滤波器。
- 最重要的是,第一次把人类送往 38 万公里外的月球表面。
而她,是这项伟大工程中至关重要的角色。她已经是阿波罗计划首席软件工程师了。
史无前例的工程
当然了,一开始事情并不顺利。怎么给登月飞船编写软件?这是件从来没有过的事啊。玛格丽特说:
我刚到那儿的时候,没人知道我们到底在做什么,感觉像去了蛮荒的西部。没有教程,也没人教我们任何东西。
其实,当时整个世界在计算机科学和软件工程学的课程和训练方面,都是一片空白。甚至连 “软件工程” 这个词,还要等着玛格丽特来发明。
而有点可笑的是,最早的时候,阿波罗计划的设计者压根就没想到软件这回事儿,在项目计划书上没提到软件,没有预算,没有工作计划。这事儿放在今天看,着实难以想象。
不过,随着阿波罗计划逐步展开,软件工程重要性越来越凸显,玛格丽特也越来越紧张了。毕竟,苏联人加加林代表了全人类第一次进入太空,美国政府压力得多大,全美国都在看着她。而在玛格丽特的想象中,全人类都在看着她呢。夜里,她总是梦见飞船出了什么事,然后电视新闻和报纸头条就指名道姓地说,这是玛格丽特·汉密尔顿造成的问题……
于是,半夜起床加班成了家常便饭。
今天的程序员们,对着大大的显示器,使用高级语言,用一种近乎优雅的方式编程。可是在那个年头,完全是另外一番景象:
记录代码,要么用磁芯线,要么用纸片打孔机。磁盘?想都别想。
编程用的是汇编语言,而且,因为计算机世界还缺乏统一和规范,A 公司的电脑使用一种汇编语言,B 公司用另一种。到阿波罗飞船上,每个模块所用的都不一样,可以想象,作为软件主管的玛格丽特,每一种都得能看能写,这种难度可想而知。
而且,这是给飞船写软件啊,程序行就行、不行就不行,你总不能让它给你试飞吧?
给阿波罗飞船写导航和登陆程序,代码量有多大呢?
玛格丽特扶着的,正是阿波罗的软件代码清单。
差点迈不出的 “一大步”
某种程度上说,玛格丽特也许不算一个天才的程序员。但她却足够聪明,甚至可以说是智慧。
她首先发展了 “异步程序” 的概念,实现程序优先级调度,让程序可以随时中止低优先级任务,专注于高优先级任务。这样一来,软件系统的容错度和稳定性自然提高了。此外,电脑不仅能识别出错误,还把恢复方案纳入进去了。不客气地说,正是她的这一开创性工作,挽救了阿波罗 11 号的登月任务。
让我们回到文章开头的电脑危机。
登月飞船起飞前,不知是谁犯了个低级错误,把飞船上的交会雷达安错了位置;然后,又不知是谁犯了另一个低级错误,用了一本有误的检查清单,放过了前面一个错误。
随后,这个蠢蠢的雷达交互系统一路在给电脑发提示:“我出错了,我出错了。” 结果,电脑一边要执行正常登陆程序的所有功能,一边还得挪出 15% 的计算时间去处理它的错误信息,差点儿崩溃。
幸好,玛格丽特把软件设计得足够聪明,它了解自己完全可以不管雷达交互系统这种低优先级任务,而把所有系统资源都用在登陆这件事上。毕竟,全世界都看着呢。于是,它警告了宇航员之后,就把雷达交互系统的事儿抛在脑后了。
3 分钟之后,4 点 17 分,阿波罗 11 号成功在月球表面静海基地着陆。
这才有了第二天凌晨宇航员阿姆斯特朗左脚踏上月球土地后说出的那句名言:“这是我的一小步,却是人类的一大步。”
如果没有玛格丽特的工作,没有她开发的异步软件,很难想象人类的这一大步要多久之后才能迈出。甚至,整个阿波罗计划,这个 30 万人持续了 11 年,耗资超过 255 亿美元的超级工程,会以何种方式收场?
她改变了世界,尽管悄无声息
在 NASA 那几年,玛格丽特大大拓展了自己的专业知识覆盖的领域,随便举几个例子:
系统设计和软件开发、形式系统建模语言、自动化生命周期系统、软件可靠性和最大化重复使用的方法论、错误检测和恢复技术、操作系统、人机界面、端到端测试技术、域名分析……
这些技术,在今天的计算机世界早已变得不可或缺。玛格丽特和她的同事们创造的工作,成为后来者的路标。他们开发的登月飞船导航软件,如今在客运飞机上使用——当然,是作了很多改变。
1968 年中,为阿波罗计划工作的程序员已经超过 400 人。等这项工作结束后,计算机科学已经让整个世界发生了翻天覆地的变化,而这 400 人所做的工作,已经转化为规模超过 4000 亿美元的巨大产业。分摊下来,相当于每个人都开启了一个 “独角兽公司”。
想想那个计算机的蛮荒时代,就能懂得玛格丽特和同事们的工作多富有开创性。
离开 NASA 之后,玛格丽特仍旧专注于软件开发。不过,她换了一种新的方式。
1976 年,玛格丽特创办了 HOS 软件公司(Higher Order Software),开发了一款叫 USE.IT 的产品。直到 1984 年,玛格丽特一直担任 HOS 公司的 CEO。两年后,她又创办了汉密尔顿技术公司并担任 CEO,领导团队围绕通用系统语言和相关的自动化环境进行开发,为系统设计和软件开发者们提供著名的 “ 001 工具套件”。
玛格丽特在计算机软件开发上的工作,也为她带来很多荣誉:
1986 年,她获得奥古斯塔·艾达·洛夫莱斯奖(Augusta Ada Lovelace Award)。这是一项专门颁给计算机领域杰出女性的奖项。
2003 年,获得 NASA 外太空奖(NASA Exceptional Space Act Award),37200 美元的奖金是 NASA 史上最高的一次。
2009 年,获得厄勒姆学院杰出校友奖。
可能对玛格丽特来说,这一切都不如阿姆斯特朗那一句名言来得更安慰。这是对她的开创性工作的最高褒奖,毕竟,跨越了 38 万公里的征程后,任何一个微不足道的错误都足以断送一项超越人类、超越时代的工程。
而她,拯救了这个工程。
从某个角度看,今天我们面临的世界和 1960 年代并没有多大不同。人类文明的进程,就像放大了的阿波罗登月计划,向着更深、更广袤的洪荒宇宙进发。到处是未知的领域,到处是开拓的机遇。
可是像玛格丽特这样既漂亮、又智慧的程序员,却不是随时都有的。