当前位置: 首页 > 科技观察

登月50周年-她那串让人类登陆月球的代码是程序员们永远的女神

时间:2023-03-22 10:29:46 科技观察

1969年7月20日下午4点17分42分,美国宇航员阿姆斯特朗左脚小心翼翼地踩在月球表面,这是人类第一次踏上月球。  如今50年过去了,但阿姆斯特朗那句“个人的一小步,人类的一大步”的经典独白仍然深深地烙印在每个人的心中。  她的一串代码让人类登上了月球,并两次解决了太空灾难。她是程序员心中永远的女神。探索土星的悲惨历史。  但伟大就是伟大。事实上,卡西尼号也犯过让人哭笑不得的错误。  卡西尼号还携带了一个“惠更斯号”探测器,用于探测土卫六(土星最大的卫星中也称土卫六)。  当时,“卡西尼-惠更斯号”完美降落在土卫六上,但地面还没有收到仪器的数据。  经过一番排查,结果让所有人都大吃一惊,因为地面控制员忘了按开始接收按钮。  最后这个小失误,造成大量数据丢失,包括原本应该收到的700张珍贵图片,最后只剩下350张。  设计师大卫·阿特金森18年的努力功亏一篑,惠更斯号以卡西尼号的“猪队友”命名。  其实这样的事情在航天史上从来没有发生过。人为错误确实是低级的,但却是不可避免的。  比如第一次登月任务的阿波罗计划,差点因为一个按钮导致飞机失事。  不过还好,一位“女程序员”挺身而出,挽救了这场浩劫。在“最无用”的部门,她做了最有用的事。只是当时很少有人意识到她的贡献,现在才重新提起她的故事。没有她,就没有阿姆斯特朗的一小步,人类的一大步。玛格丽特·希尔菲尔德·汉密尔顿  玛格丽特·希尔菲尔德·汉密尔顿1936年出生在一个普通的美国家庭,从小就是典型的“别人家的孩子”,成绩优异,性格温和。高中毕业后,她顺利考入大学,主修数学。  在那里她还遇到了JamesHamilton,并成为了Hamilton夫人。自然而然,她在大学毕业后成为了一名教师,教授数学和法语。当时,她的丈夫汉密尔顿还在哈佛法学院学习。  于是在工作的同时,她主动承担了所有的家务。丈夫完成学业后,玛格丽特有机会继续深造并获得抽象数学学位。  然而,小两口的生活并不富裕。为了维持生计,玛格丽特还在1962年在麻省理工学院仪器实验室找到了一份临时的编码工作。正是这个决定让她踏入了编程的殿堂。  最初,她负责编写在计算机上运行的天气预报软件。但由于工作出色,他很快获得了成为正式员工的资格,并加入了著名的林肯实验室。  当时,她的工作任务也从简单的编程变成了为美军的“圣人”(SAGE)系统*编写代码。(*注:被誉为互联网鼻祖的“Sage”系统也是Arpanet的前身,其主要目的是探测冷战时期苏联可能进行的核攻击。)1962年,玛格丽特参与SAGE项目期间的照片  1960年代,程序员没有今天这么漂亮,连“程序员”都没有,更别提“软件工程师”这样响亮的头衔了。  和当今科技圈为数不多的女码农一样,玛格丽特是不折不扣的异类。  虽然名字不对,但那时候程序员的工作比现在复杂几十倍。玛格丽特在打字机上打出的代码  ,可不是敲键盘敲代码那么简单。玛格丽特首先需要用打字机把代码写在纸上,连调试功能都只能靠脑力检查。确认后,将资料交给一群精通针线活的“小老太婆”。  他们会用磁环像刺绣一样把信息编织进记忆里。铜线穿过磁芯时代表1,绕过磁芯时代表0。  不过这些还不是最难的。那个时代是程序的“开荒时期”,软件工程不是一个很准确的领域,很多东西还没有统一。所以如果你要编写一个软件,至少要学会几套汇编语言。  刚进去的玛格丽特,更像是一张白纸。她还需要面对各种棘手的程序,任谁都会崩溃。但也正是这些形形色色的问题,引起了人们对编程的无限兴趣。Margaret手工编程  随着编程经验的增加,Margaret逐渐成为系统编程的专家。另一方面,肯尼迪也在1961年启动了阿波罗登月计划,成为玛格丽特人生的重要转折点。  当时,她还加入了阿波罗计划,为登月飞船编写程序。在阿波罗计划之初,似乎还没有“软件”这样的东西。甚至在原文件中列出的阿波罗任务的各种需求中,从头到尾都没有提到软件这个词,更不用说预算了。  后来随着阿波罗计划的逐步启动,NASA意识到了软件的重要性,逐渐将软件团队扩充到400人。1965年,玛格丽特也成为了整个软件编程部门的负责人。  随着责任越来越重,玛格丽特的压力也越来越大。有一次她甚至做了一个梦,新闻头条是阿波罗号坠毁了,结果最后证明是自己的程序错了。当时,她从梦中惊醒,连夜跑回实验室,居然发现了程序中的一个小错误并改正了。  那段时间,她的女儿Lauren也出生了,所以玛格丽特不得不在她很忙的时候带女儿去实验室。工作的时候,小女儿就在旁边玩,累了,就直接睡在地板上。  身边的人都不太理解这个“工作狂妈妈”,经常问她“你怎么忍心这么不理孩子”。虽然心存愧疚,但她对这个神秘的程序还是很着迷,不能自拔。  一天,女儿劳伦在指挥舱模拟器里玩耍。就在她在键盘上摸索的时候,一条错误的信息弹出了。原因是她不小心启动了一个名为P01的预运行程序,导致还在飞行中的模拟器瞬间崩溃。  看到这种情况,玛格丽特提议在整个系统中加入一段代码,以防止类似情况的发生。如果宇航员在飞行过程中操作出了问题,还有恢复的余地。  但当时大家都觉得宇航员接受过严格的训练,操作也很完美,“绝对不可能出错”。再加上当时计算机的存储空间和计算能力有限,决策者不想增加任何“笨重”的部件。  于是玛格丽特只好在操作系统中添加了“飞行中不要选择P01模式”的提示。  但是可怕的事情发生了。1968年12月21日,人类首次绕月飞行的阿波罗8号发射升空。  但是在飞行的第五天,宇航员吉姆洛弗尔不小心按下了P01模式。启动此模式后,所有导航数据将被清除。  再这样下去,飞船将无法将宇航员送回地球,在太空迷路就是分分钟的事情。知道要出大事的决策者紧急给玛格丽特打电话,让她想办法补救。  于是,玛格丽特立即带领一群麻省理工学院的程序员,连夜苦干9个小时,才设计出新的方案。新的导航数据上传后,所有人都松了一口气。  一切回归正常轨道,阿波罗8号也顺利搭载宇航员回国。经过这件事,无论是决策者还是玛格丽特都更加清楚地感受到了软件对于登月计划的重要性。  软件几乎成为美国赢得太空竞赛的重要筹码,而玛格丽特加班的次数越来越多,时间也越来越长。  但玛格丽特最大的挑战还在后头。就在阿波罗11号飞船即将登陆月球的前几分钟,就在这样一个关键时刻,危机发生了。  在登月时期,人类可用的计算机都是内存超小,运算速度极慢。系统永久保存只有12000字节,临时存储空间更小,只有1024字节。  用玛格丽特的话说,“今天看来难以置信”。于是,阿波罗11号在离月球不远的时候,电脑超限,弹出大量错误信息,系统差点崩溃。  如果电脑无法处理,飞船无疑会坠毁,成为世界上最“惨烈”的登月。但在如此“不可思议”的硬件条件下,玛格丽特设计的系统却顶住了一切压力。  原因是她首创了“异步处理程序”,教会了计算机如何“做决定”,为阿波罗11号解决了危机,为自己赢得了荣誉。在登月过程中,飞船除了控制推进力外,还会进行一系列不太重要的计算。  当时,玛格丽特就在想,当大量数据涌入电脑,系统无法处理时,该怎么办。所以为了保险起见,她小心翼翼地在原来的基础上加了这个“异步处理程序”来解决问题。  当没有足够的空间运行时,计算机最宝贵的存储空间被保留给最关键的部分,比如最重要的——登月之鹰。其他低优先级任务,如雷达交换数据任务,将暂时中断。  每个人都看到了阿姆斯特朗在月球上的第一步。然而,并不是所有人都知道,在这背后,还有这样一位同样为女性迈出一大步的女程序员。  玛格丽特拯救人类登月计划时年仅33岁。除了登月,这位先锋女极客还为广大“码农”正名,首次使用“软件工程师”一词来指代包括她自己在内的程序员。  她说:“我希望对做软件的人给予尊重,因为他们和其他做硬件的人一样,在这个宏伟的工程中尽职尽责。”  登月成功后,MargaretHe也退休离开NASA,创建自己的公司,继续在软件行业打拼。  2003年,她还因原创贡献获得美国宇航局个人最高奖项——美国宇航局杰出太空行动奖。2016年,她再次获得美国最高民间荣誉总统勋章,与盖茨、乔丹同台领奖。  回顾一个白手起家的程序员的人生,她说自己是世界上最幸运的人。因为“不得已而为先驱,无暇为始”。

猜你喜欢