9月15日,土星探测仪卡西尼已宣告自毁成功,完成了人类探索土星的悲壮史命。
但伟大归伟大,其实在卡西尼身上也发生过让人哭笑不得的错误。
卡西尼-惠更斯号,那口金色的“锅”便是惠更斯
当年的卡西尼身上还带着一枚用于探测土卫六(也称泰坦星,土星卫星中最大的一个)的“惠更斯”号探测器。
当时“卡西尼-惠更斯”号非常完美地登陆了土卫六,但是地面却一直没有收到仪器传来的数据。
惠更斯号登陆模拟图
经彻查后,结果让所有人大跌眼镜,原因竟是地面控制员忘了按启动接收按钮。
最后这个小失误导致了大量的数据丢失,包括原本应收到的700张珍贵图片,最后也只剩下350张。
而设计者大卫·阿特金森十八年的努力就这样功亏一篑,而惠更斯号则得名卡西尼的“猪队友”。
卧薪尝胆18年的大卫·阿特金森
其实类似这种事情,在航天史上从来没少发生。
人为错误确实低级,但却难以避免。
像执行人类第一次登月任务的阿波罗计划,也曾经因为一个按钮的事,差点导致机毁人亡。
但幸运的是,那次有一位“女程序员”挺身而出,拯救这场浩劫。
她在“最无用”的部门里,却做了最有用的事情。
只是当年极少人意识到她的贡献,到现在她的故事才被重新提起。
没有她,就没有阿姆斯特朗的一小步和人类的一大步。
玛格丽特·希菲尔德·汉密尔顿
玛格丽特·希菲尔德·汉密尔顿,1936年出生于一个美国普通家庭。
她从小就是典型的“别人家的孩子”,成绩优异,性格温和。
高中毕业后,她就顺利考上大学,主修数学。
在那里她也结识了詹姆斯·汉密尔顿,成了汉密尔顿太太。
很自然地,大学毕业后她成了一名老师,教数学和法语。
玛格丽特
那时,她的丈夫汉密尔顿还在哈佛法学院继续深造。
所以一边工作的她,还主动承担起了所有的家务。
等到丈夫学成后,玛格丽特才有机会继续深造,再读一个抽象数学的学位。
然而,他们小两口的生活并不富裕。
为了帮补家用,1962年玛格丽特也额外找了一份在MIT仪表实验室的临时编码工作。
也就是这个决定,让她一脚踏入了程序的殿堂。
最初,她负责编写在计算机上运行的天气预报软件。
但因为工作异常出色,很快就获得了转正资格,并加入著名的林肯实验室。
那时,她的工作任务也从简单的程序变到为美国军方的“赛其”(SAGE)系统*写代码。
*注:“赛其”系统,被称为国际互联网的鼻祖,也是阿帕网的前身,主要目的是在冷战时期侦查苏联有可能发起的核攻击。
1962年,玛格丽特参加SAGE项目时期的照片
在上个世纪60年代,程序员可没有今日这么风光,连“程序猿”都比不上,更别提“软件工程师”这样响亮的头衔。
和今日科技圈少有的女码农一样,当年的玛格丽特就是一个不折不扣的异类。
虽然名不正言不顺,但当年程序员们的工作可比现在复杂上几十倍。
玛格丽特在打字机上打出的代码
在那个年代,并不是敲敲键盘就能写出代码那么简单。
玛格丽特首先需要将代码用打字机写到纸上,连Debug(排错)的功能都只能靠脑力检查。
在确认无误后,这些信息才会交给一群精通针线活的“小老太太”(Little Old Ladies)。
她们会像绣花一样用磁环把信息编到内存里,当铜线穿过磁芯代表1,绕过磁芯则代表0。
小老太太们被雇佣来专门将程序写入电脑
然而这些都还不是最难的。
那个年代正是程序的“开荒期”,软件工程也不是一个拿捏得十分准确的领域,很多东西还未统一。
所以要想为一个软件编程,至少要学好几套汇编语言。
而刚进去的玛格丽特更像一块白纸,还需要面对各种棘手的程序,任谁都得崩溃。
但也正是这些五花八门的难题,激起了对编程的无限兴趣。
玛格丽特正在手动编程
随着日渐丰富的编程经验,玛格丽特也慢慢成了系统编程的专家。
而另一边肯尼迪也在1961年发起的阿波罗登月计划,这就成了玛格丽特人生重要的转折点。
那时的她也加入到了阿波罗计划,为登月飞船写程序。
在阿波罗计划的最初,好像并没有“软件”什么事。
就连在原始档案列出的阿波罗任务的各项需求中,竟从头到为都没有提到软件这个词,更别提预算什么的。
之后随着阿波罗项目逐渐启动,NASA才意识到软件的重要,逐渐把软件团队扩大到400人。
在1965年,玛格丽特也成了整个软件编程部的部长。
随着责任变重,玛格丽特的压力也越来越大。
有一次她甚至还做梦见到,新闻头条是阿波罗坠毁,最后追查下来竟是自己的程序有误。
当时她从梦中惊醒,就连夜跑回实验室,竟然还真的在程序中发现了一个小错误并改正。
玛格丽特与女儿劳伦
在那段日子里她的女儿劳伦也出生了,所以特别忙的时候玛格丽特还不得不将女儿带去实验室。
她在工作的时候,小女儿就在旁边玩耍,累了就直接在地板睡觉。
身边的人都对这位“工作狂妈妈”十分不理解,常问她“你怎么忍心这么不顾自己的孩子”。
虽然心有愧疚,但她还是对神秘的程序十分痴迷,不能自拔。
一天,女儿劳伦在指令舱模拟器中玩耍。
当她在键盘上乱按时,一条错误的信息突然弹出。
原因是她不小心启动了一个叫P01的预运行程序,导致原本还在飞行状态的模拟器瞬间崩溃。
看到这种情况,玛格丽特就提议在整个系统中多加一段代码,防止类似的状况发生。
如果在飞行过程中,宇航员操作出了什么差池,还有挽回的地步。
但是当时所有人都觉得宇航员是受过严格训练,操作是完美的,“绝对不可能出错”。
再加上当年的计算机存储空间和运算能力十分有限,决策者也不想添加任何“累赘”的部分。
所以玛格丽特也无可奈何,只能在操作系统中添加了一个备注“不要在飞行中选择P01模式”。
但是可怕的事情,还是发生了。
阿波罗8号绕月飞行轨道
1968年12月21日,人类首次绕月飞行的阿波罗8号发射。
但就在飞行的第5天,宇航员Jim Lovell还是在无意间按下了P01模式。
这个模式的启动后,所有导航数据都会被清空。
这样下去,飞船将无法把宇航员送回地球,在太空中迷路是分分钟的事。
知道要出大事了,决策者也十万火急地打电话到玛格丽特那,让她想一个补救的办法。
于是,玛格丽特也马上带着MIT的一群程序员,连夜奋战了9个小时,才设计出了一个新的计划。
当时这份新的导航数据上传后,大家才松了一口气。
一切又回到正常的轨道,阿波罗8号也顺利载着宇航员返航。
这次事件后,决策者与玛格丽特都更明显地感受到软件对登月计划的重要性。
软件几乎成了美国要赢得太空竞赛的重要筹码,玛格丽特加班的频率也越来越高,时间也越来越长。
但玛格丽特最大的挑战还在后面。
就在阿波罗11号飞船即将登陆月球前的几分钟,就是这么一个关键的时刻,危机还是发生了。
登月时期,人类能用的电脑都是超小内存、计算速度极度缓慢的。
系统能永久保存的不过1.2万字节,而临时存储的空间就更小了,只有1024字节。
用玛格丽特的话来说就是“今天看起来这简直不可思议”。
所以就在阿波罗11号离月球不远处时,电脑也因过度运转,大量地弹出错误信息,系统几近崩溃。
如果电脑扛不住,飞船将毫无疑问坠毁,成为世上最“悲壮”的登月。
玛格丽特为阿波罗飞船写的代码与她娇小的身躯相比
但就是在这么“不可思议”的硬件条件下,玛格丽特设计的系统竟顶住所有压力。
原因是她首创的“异步处理程序”,教会了电脑如何“决择”,为阿波罗11号解决了危机,也为自己赢得了荣誉。
飞船在登月过程中,除了要控制推进外,还会进行着一系列不那么重要的计算。
那时玛格丽特就考虑到,当大量数据涌入电脑,系统扛不住时应该怎么办。
所以为了保险起见,她细心地在原有的基础上添加了这个“异步处理程序”,来解决问题。
当没有足够空间运行时,电脑最宝贵的存储空间便会留给最关键的部分,比如最重要的——让鹰号在月球登陆。
而其他低优先级的任务,如雷达交换数据任务将会被暂时切断。
每个人都看到了阿姆斯特朗在月球上的第一步。
然而,不是每个人都知道这背后,有这么一位女程序员也为女性迈出了一大步。
玛格丽特拯救人类的登月计划时,年龄不过33岁。
除了登月,这位先驱女极客还曾为广大“码农”正名,首次使用了“软件工程师”一词来称呼包括自己在内的程序员。
她说:“希望给予做软件的人们以尊重,因为他们和其他做硬件的人一样,在这个宏大的工程里各司其职。”
登月成功后,玛格丽特也功成身退,离开NASA出来创建自己的公司,继续在软件行业努力。
2003年,她也因当初的贡献获得美国宇航局对个人的最高奖励,NASA杰出太空行动奖。
2016年,她再次获得美国最高的民事荣誉总统勋章,与盖茨、乔丹同台领奖。
回顾那段从零开始的程序员生活,她说自己是世界上最幸运的人。
因为“别无选择,只能成为先驱者,没有时间成为初学者”。
转载本文请联系原作者获取授权,同时请注明本文来自张磊科学网博客。
链接地址:https://wap.sciencenet.cn/blog-2966991-1076583.html?mobile=1
收藏