一位女程序员用代码把人类从地球送上了月球

移动开发
玛格丽特·汉密尔顿(Margaret Hamilton)本无意提出软件的现代概念,也没想过要将人类送上月球。要知道1960年的社会并不鼓励女性从事高科技行业。那时24岁的玛格丽特数学系本科刚毕业,她计划节衣缩食3年供丈夫入读哈佛法学院,然后自己再去读数学研究生。

[[153119]]

没有她,就没有阿姆斯特朗的一小步和人类的一大步。

玛格丽特·汉密尔顿(Margaret Hamilton)本无意提出软件的现代概念,也没想过要将人类送上月球。要知道1960年的社会并不鼓励女性从事高科技行业。那时24岁的玛格丽特数学系本科刚毕业,她计划节衣缩食3年供丈夫入读哈佛法学院,然后自己再去读数学研究生。

但是阿波罗登月计划就在那个时候启动了。玛格丽特在实验室带领一次史诗般的工程壮举,这项工程将改变人类和科技的未来。

在1960年代做职场妈妈已经是件很不寻常的事,而玛格丽特竟然还是个给太空飞船写代码的程序员。在周末或者平常的夜晚,玛格丽特会把女儿劳伦带来实验室。在俯瞰查尔斯河的办公室里,四岁的劳伦在地板上熟睡,而玛格丽特忙着编写代码——这些代码,最终都会添加到阿波罗控制舱的计算机里。
 

玛格丽特回忆说,“他们对我说,你怎么能离得开女儿啊?”。但是她深爱这份工作的神秘和新奇,她也很喜欢同事之间的情谊——下班后他们会在MIT的职员俱乐部一起喝点小酒,讲只有技术宅才能听懂的笑话。旁人听得一头雾水,但在实验室里,她说,“我是兄弟们的一员”。

那时的技术与工程领域也由“兄弟们”主导。跟今天科技圈少有的女码农一样,当时的玛格丽特就像是个不折不扣的异类。现在的软件开发者也该惊讶,这个“男孩俱乐部”的其中一个奠基人竟然是个女人。他们或许也该停下来想一想,这种《广告狂人》时代的性别不平等何以持续至今。
 

玛格丽特的事业发展渐渐上了轨道,而此刻的软件世界——由于肯尼迪在1961年发起的阿波罗登月项目——也身处巨变的边缘。玛格丽特就职于MIT的仪器实验室,在那里,她和同事一起为世界上***部便携式计算机写代码,同时也创造了计算机编程的核心理念。玛格丽特成了系统编程的专家,也在多场重要的技术争论中得到认可。“我最开始研究编程的时候,没人知道我们在干嘛。我们就像身处美国荒凉的大西部,没有这样的课程,也没有任何一个教授教这个”。玛格丽特说。

这个时候离微软的出现还有10年,离马克·安德森(Marc Andreessen,这家伙是世界上最早开发浏览器的人)发现软件正在“吞噬世界”也还有将近50年。在阿波罗计划的早期,人们并没有过多思考软件是怎么一回事。MIT航天学教授大卫·曼德尔(David Mindell)在《数字阿波罗》(Digital Apollo)一书中写道,那些记录阿波罗计划相关工程要求的文件甚至都没有提到“软件”这个词。“软件并不包括在计划里,因此也不在预算内”。反正一开始,软件并没有受到重视。

但随着阿波罗计划的推进,软件在这个任务中的重要性也明晰起来。1965年,玛格丽特开始负责“阿波罗”号计算机的飞行软件。对玛格丽特而言,这是一段激动人心的日子,整个美国都指望着她的工作成果。但是有时候压力也会让她夜里睡不着。有一次,在参加过一个深夜派对之后,玛格丽特又冲回实验室去修改一段突然想起来出错了的代码。“我总是在幻想报纸的新闻标题,它们会追问错误是如何发生的,而最终原因会指向我”。
图为1962年4月19日,玛格丽特和她的前同事。玛格丽特当时正在林肯实验室的***台AN/FSQ-7电脑上研发软件,一个雷达监测软件,用以监测敌机。图片来源:Margaret Hamilton  图为1962年4月19日,玛格丽特和她的前同事。玛格丽特当时正在林肯实验室的***台AN/FSQ-7电脑上研发软件,一个雷达监测软件,用以监测敌机。图片来源:Margaret Hamilton

软件成了美国要赢登月竞赛的重要筹码。在1968年,已经有超过400人参与研发阿波罗号的软件。当然,最终人们发现软件为世界带来的远超于此。当玛格丽特和同事在为阿波罗飞船编程的时候,他们也在孵化这个未来估值4000亿美元的产业。

对玛格丽特来说,编程就像是在一沓穿孔卡片上穿孔,可以整夜整夜分批在一台模仿阿波罗登月工作的霍尼韦尔(Honeywell)大型主机上进行。玛格丽特回忆说,“我们必须在飞船起飞之前模拟各种可能发生的情况”。一旦代码确定后,就会被送往附近一家雷神公司(Raytheon)的厂房。那里有一群“擅长针线活”的妇女,她们在阿波罗项目中被称为“小小老妇人”,她们将铜线穿过磁环(穿过磁心的代表1,绕过磁心的代表0)。没有RAM,也没有磁盘驱动器;在阿波罗号上,存储器靠的就是硬接线,而且可以说是无坚不摧。
 

阿波罗飞行器上载着两个近乎一样的机器:一个用于登月舱——也就是登陆月球的鹰号,另一个是用于载着宇航员往返地球的操作舱。跟其他庞大的计算机不同,这些重达70磅的计算机是便携的。由MIT工程师哈尔·兰宁(Hal Laning)和玛格丽特的老板迪克·贝顿(Dick Batton)设计,这是首批使用集成电路而非晶体管的重要计算机。正如曼德尔在书中所写,这是***个由人工操作、但带有计算机控制自动驾驶技术的机载导航系统,可谓是如今喷气客机标配的导航系统的老前辈。

这个系统可以***保存超过1.2万个字节——也就是雷神公司的女孩们用铜线穿绕的环——临时存储的空间为1024个字节。“这是***次将一台重要的计算机搬到飞船上,还赋予了它极大的责任,”当时在MIT仪器实验室负责编写登月舱代码的唐·埃尔斯(Don Eyles)说,“我们证明了这是可以实现的。我们用今天看起来不可思议、超小的内存和非常缓慢的计算速度做到了这一切。”缺了这一切,尼尔·阿姆斯特朗(Neil Armstrong)不可能登上月球;而如果没有玛格丽特、埃尔斯和MIT工程师们编写的软件,计算机于此也不过是一件无用之物。

这一点在1969年的6月20号得到了充分体现。在阿波罗11号飞船即将登陆月球前的几分钟,这么关键的时刻,阿波罗计算机却开始突然不断出现错误信息。而正是接下来发生的一切为玛格丽特赢得认可,为团队成功解决了危机。错误信息的大量出现是因为计算机的过度运转,除了控制舱登陆月球表面所需的进程以外,计算机还进行着一系列不必要的计算。而在休斯顿,工程师很清楚,因为阿波罗号特有的异步处理,这部计算机会集中处理手边这项任务——让鹰号在月球登陆。玛格丽特说,当软件意识到没有足够空间去运行进程的时候,它会自己进行错误检查,然后集中处理权重***的工作。

“不可能发生的事”

一天,劳伦在摆弄MIT控制舱模拟器的显示器键盘一体机DSKY。当她在键盘上乱按的时候,一条错误信息突然出现。劳伦不知怎地启动了一个叫做P01的预运行程序,原本正在飞行状态的模拟器一下子崩溃了。虽然一般来说宇航员不会犯这样的错,但玛格丽特还是想加一段代码防止这种状况的发生。这一提议被NASA否决,“他们一遍又一遍地跟我说宇航员不会犯任何错误,他们被训练得近乎***,”玛格丽特说。她转而加了一句程序说明,所有NASA工程师和宇航员都能看到:“不要在飞行过程中按下P01”。她回忆说,“所有人都说,‘那样的事情永远都不会发生’。”

但事情的的确确发生了。时间大约在1968年的圣诞节,进入阿波罗8号飞船的第五天飞行,宇航员吉姆·洛威尔(Jim Lovell)不小心在飞行中启动了P01程序。当电话从休斯顿打来的时候,玛格丽特正在仪器实验室的2层会议室。启动P01程序导致此的导航数据全部清空,阿波罗计算机无法计算出如何返回地球。玛格丽特和MIT的程序员们需要想出一个补救的办法,必须是无错漏的***办法。在花费9小时钻研过面前8英寸厚的程序列表后,他们有了一个计划。休斯顿方面需要上传一份新的导航数据,而后一切都会顺利进行。多亏了玛格丽特,还有调皮的劳伦,阿波罗号上的宇航员才得以重返地球。
 

同样值得感激的是玛格丽特和她开创的工作,这些让人类认清自己在太空和地面能做些什么。而软件工程这个由玛格丽特***的概念,从人类登月到现在几乎进入人类生活的方方面面。到1970年代,玛格丽特已经超越了之前在NASA和阿波罗计划中的研究。她后来成立并领导了多家软件公司。如今她的公司汉米尔顿科技距离她开始职业生涯的地方只有几个街区远——MIT,那个至今仍***代码革命、仍然仰望星辰的地方。

责任编辑:chenqingxiang 来源: 新浪科技
相关推荐

2023-03-08 09:43:42

2013-12-05 13:41:15

女程序员奋斗

2013-11-04 10:32:01

Facebook女程序员

2011-03-03 20:53:28

程序员人才

2021-03-08 16:14:03

程序员技能开发者

2018-01-03 14:59:44

IT外包程序员

2019-04-17 09:14:39

程序员 996马云

2015-04-14 09:29:25

CTO程序员

2011-09-06 13:48:09

程序员

2021-02-20 10:37:43

代码编码开发

2015-10-20 10:37:47

程序员困惑 总结

2015-12-22 15:49:28

程序员互动访谈

2015-06-02 04:38:54

程序员俄罗斯程序员

2015-10-28 09:11:31

Python导师级程序员

2015-03-12 14:38:13

程序员女程序员美国的女程序员

2015-12-24 18:00:45

资深程序员

2013-03-19 10:18:07

程序员

2014-06-27 09:17:53

程序员

2020-12-07 14:58:50

程序员开源开发者

2022-03-09 09:50:18

程序员计算机编程
点赞
收藏

51CTO技术栈公众号