玛格丽特·汉密尔顿:助人类登月的代码女皇

玛格丽特·汉密尔顿并没有被认为参与了发明软件现代概念和将人着陆到月球系列事件。那是1960年,并不是一个鼓励女性参与高强度技术工作的时代。汉密尔顿那时24岁,拥有数学学士学位,在MIT获得了一份程序员的工作,她原本计划通过这项工作资助她丈夫完成哈佛法学院的三年学习,而之后,将会是她的转折——她想要获取数学硕士学位。

但阿波罗计划随之而来,汉密尔顿留在了实验室里,并领导了一项史诗般的工程,而这项工程将会改变不论人力还是数字可能成为现实的未来。

作为60年代工作的女性,汉密尔顿非比寻常,而作为太空飞船程序员,汉密尔顿积极进取。她在晚上和周末的时候会把女儿劳伦带到实验室去。而当四岁的劳伦在坐落于查尔斯河旁的办公室地板上睡觉时,她的母亲就在旁边编程,编写着最终会被添加进阿波罗指令舱计算机的代码。

汉密尔顿回忆道:「人们常常会问我『你怎么能离开你的女儿?你怎么能这样?』」但她热爱她晦涩而又新颖的工作。她喜欢同事们之间的情谊——在工作之后和同事们去俱乐部里喝一杯;极客们之间开开玩笑,比如说她要去走廊里稍微负条件转移一下(译者注:going to branch left minus,负条件转移指令,此处指转移一下负面情绪)。外行人毫无头绪,但在实验室里,她说:「我可是这些人其中之一。」

[caption id="attachment_5771" align="aligncenter" width="1024"]汉密尔顿和她的女儿劳伦 汉密尔顿和她的女儿劳伦[/caption]

之后,正如现在所知,「这些人」为技术和工程做出了贡献。就像是当今的多样性挑战技术行业中的女性编程员一样,汉密尔顿是个杰出的人。可能当今的软件制造者都会大吃一惊,他们的男孩俱乐部创立之父,事实上应该是创立之母——而这会让他们宕机一会,因为他们会思考为什么父系时代的性别不平等居然还持续到了今天。

「当我第一次走进去时,没有人知道我们正在做的会是什么。它就像是蛮荒西部(Wild West)。」——玛格丽特·汉密尔顿

随着汉密尔顿的职业生涯步入正轨,软件世界由于肯尼迪于1961年发射了阿波罗号而即将发生巨大改变。在汉密尔顿工作的MIT仪表实验室,她和她的同事们随着为第一台便携计算机编写代码而逐渐构想出计算机编程的核心想法。她成为系统编程的专家,并赢得了一次重要的技术争论。汉密尔顿说道:「当我第一次走进去时,没有人知道我们正在做的会是什么。它就像是蛮荒西部。没有任何开发过程,他们也不教授这些。」

而微软和马克·安德森观察到软件事实上在「吞噬这个世界」还需要10年和50年。这个世界并没有对早期阿波罗时代的软件想太多。原始档案列出了阿波罗任务的工程需求,但压根没提过软件这个词,MIT航空教授David Mindell在他的书《数字阿波罗》中写道:「软件并没有被包括在这个计划中,也没有含在预算中。」最起码,一开始时是这样的。

[caption id="attachment_5772" align="aligncenter" width="1024"]玛格丽特·汉密尔顿植入阿波罗指令舱模块 玛格丽特·汉密尔顿植入阿波罗指令舱模块[/caption]

但随着阿波罗项目逐渐启封,软件帮助完成了这一任务的确定性开始变得清晰起来。1965年,汉密尔顿开始负责阿波罗计算机的登陆飞行软件。这是个激动人心的时刻,而美国就指望着她的工作了。但有时候,压力常常使汉密尔顿工作至深夜。有一次,在一次深夜聚会之后,她冲回计算机实验室,校正一部分她突然意识到有错的代码。「我总是想象报纸上[阿波罗坠落]的头条,而他们会追查是怎么发生的,最终追查到我头上。」

到了1968年年中,超过400人在开发用在阿波罗上的软件,因为软件是美国赢得月球竞赛的关键。而最终,当然了,软件会帮助世界做出更多。随着汉密尔顿和她的同事们为阿波罗太空舱编程,他们也在开启一项成为价值4000亿美元的产业。

对于汉密尔顿来说,编程意味着给一堆穿孔卡片打孔,这可能会在一台大型霍尼韦尔主机上批量处理上整晚,以便模拟出阿波罗着陆的情景。汉密尔顿回忆道:「我们需要在它起飞前模拟所有事。」一旦代码确定,将会被送往附近的一家雷生公司,在这里,一组女性职业裁缝(在阿波罗项目中,她们被称呼为「小老太太」)会将铜线穿过磁环(铜线穿过内核意味着1,铜线从内核外穿过意味着0。)别管那些RAM或硬盘,在阿波罗上,存储确实是直接连在计算机上的,而且几乎坚不可摧。

[caption id="attachment_5773" align="aligncenter" width="948"]雷生公司的「小老太太」 雷生公司的「小老太太」[/caption]

阿波罗号携带了2台几乎相同的机器:一台被用在登月舱——在月球上着陆的雄鹰号;另一台用在指令舱以携带宇航员往来地球。这些70磅重的阿波罗计算机是绝无仅有的便携计算机。它们由MIT的工程师们(Hal Laning和汉密尔顿的老板Dick Batton等)设计,是第一台采用了集成电路而非晶体管的计算机。正如Mindell所讲述的那个故事,它是第一台计算机车载导航系统,被设计成由人操作,但带有「手动」自动驾驶技术——这是现在用在喷漆客机上的计算机车载导航系统的前身。

这一系统在它的固定存储中存储了超过12,000个「单词」——就是那些雷生公司的工人们穿织的铜「绳」——以及在临时、可擦出存储中存储了1024个单词。在MIT IL工作时编写登陆代码的Don Eyles说道:「这是第一次将计算机用在太空飞船上,并且还赋予了它很多责任。我们相信能行的。我们所做的,在今天看来只是非常小的存储和非常慢的计算速度。」但如果没有它,阿姆斯特朗将无法抵达月球,如果没有汉密尔顿、Eyles和MIT工程团队,计算机也只会是个白痴。

[caption id="attachment_5774" align="aligncenter" width="1024"]汉密尔顿(最左)和同事在MIT筹备阿波罗8的任务 汉密尔顿(最左)和同事在MIT筹备阿波罗8的任务[/caption]

这一点很明显,1969年7月20日,阿波罗11号在「宁静之海」着陆前的几分钟,由于阿波罗软件工程师Don Eyles所称的「文件错误」的原因,阿波罗上的计算机开始在登月任务的关键时刻疯狂吐出一大堆错误的信息。但这正是汉密尔顿赢得的技术争论,而她的同事们挽救了这一天。错误信息的流出是因为计算机不堪重负,进行着大量无用的计算工作,而实际上着陆的工作才是它最需要去做的。返回到休斯顿,工程师们知道由于阿波罗的不同步处理特点,计算机得专注于手头的任务——将「雄鹰号」降落在「宁静之海」。汉密尔顿解释道,当软件意识到自己没有足够的空间去做它需要做的所有功能任务时,它开始运行它的错误检测进程并专注于优先度最高的工作。

「那永远也不可能发生」

一天,劳伦正在摆弄MIT指令舱模拟器的显示与键盘单元(display-and-keyboard,昵称DSKY(dis-key))。正当她戳弄键盘的时候,一个错误信息冒了出来。她在模拟器处于飞行中状态时,随意摆弄键盘,触发了一个预发射项目,P01。宇航员是绝对不会这样做的,但汉密尔顿还是想为这样意外的误触设置一个防错代码。NASA否决了这样的提议。「他们告诉我们很多次,宇航员绝不会犯错。」她说,「他们就是被训练为完美的。」因此,汉密尔顿制作了一个指示提醒,一个嵌进程序文件里的附件,可以被NASA工程师与宇航员看到:飞行时不要选择P01模式——它如此写着。汉密尔顿希望为阿波罗系统加上一个错误检查的代码,预防P01使系统崩溃。但她的上级不这样认为:「所有人都在说,『那根本不会发生的。』」她回忆道。

但是它发生了。就在1968年的圣诞节——首次围绕月球载人飞行的阿波罗8号发射的五天后——宇航员Jim Lovell不小心在飞行中触发了P01。汉密尔顿那时正在仪表实验室的第二层会议室里,来自休斯顿的紧急电话响了。P01的启动使得Lovell收集的所有导航数据被抹去。这可是个大问题,没有这些数据,阿波罗的计算机无法将宇航员带回家。汉密尔顿与MIT程序员需要想出一个对策,而且必须是完美的对策。在用了九个小时研究桌上列着的八英尺厚的项目内容后,他们有了一个计划。休斯顿需要上传新的导航数据。一切都回复了正常。感谢汉密尔顿——还有小劳伦——阿波罗宇航员可以平安回家了。

我们还要感谢汉密尔顿和她所作出的贡献,将人类有所为、有所成的边疆从脚下的土地,开拓到大气层外的太空。软件工程,这个概念由汉密尔顿率先提出,找到了从月球着陆到每一个人努力的方向。到了70年代,汉密尔顿不再从事NASA和阿波罗项目。她继续着开创以及引领数个软件公司。今天她的企业——汉密尔顿科技——距离MIT仅仅几个街区,那是她职业生涯开始的地方——代码革命的核心,并依旧寻觅着群星的方向。

本文选自Wired,作者:Robert Mcmillan,机器之心翻译出品。参与成员:柒柒、Chen。

入门
PSI内容合伙人
PSI内容合伙人

机器之心编辑

返回顶部