1969年7月20日下午4时17分42秒,美国宇航员阿姆斯特朗小心翼翼地将左脚从登月舱放到了月球的表面,阿波罗11号登月任务成功执行。这是有史以来人类第一次踏上外星球,虽然已过去整整50年,但那句“我的一小步,人类的一大步”的经典独白,仍然回荡在每个人心中。
(阿波罗11号登月照片)
可正是这样一个具有跨时代里程碑意义的阿波罗计划,却曾两度因为程序问题差点机毁人亡。幸运的是,有一位女程序员临危受命、挺身而出,拯救了这两场浩劫。可以说没有她,就没有阿姆斯特朗的成功登月。这位女性就是玛格丽特·希菲尔德·汉密尔顿,世界上健在的最伟大的程序员。
(玛格丽特·希菲尔德·汉密尔顿)
玛格丽特出生在美国一个普通家庭,从小成绩优异的她大学毕业后,为了补贴家用,先是在MIT仪表实验室兼职临时编码,由此走进程序的殿堂;工作上的异常出色,又让她很快加入到著名的林肯实验室,开始为美国军方的赛其系统(即因特网前身)编写代码。
但上世纪60年代正值程序“开荒期”,领域不明确、定义不统一、汇编语言五花八门、科技受限、工作复杂以及其他棘手难题不断阻碍着软件编程的发展,这种情形直到玛格丽特成为系统编程专家并加入阿波罗登月计划的初期也没有改变。等到阿波罗项目逐渐启动,后知后觉的NASA才意识到软件的重要性,并把团队扩大到400人。1965年,玛格丽特成为软件编程部部长,开始为登月飞船编写程序,两次事故的拯救也从这里开始。
(玛格丽特和她为阿波罗11号飞船写的源代码)
成为部长后的玛格丽特责任与压力越来越大。她经常将女儿劳伦带去实验室,因为只有在那里她才能一边照顾孩子,一边继续工作。某天,劳伦在指令舱模拟器上玩耍,忽然弹出了一条错误信息。经过排查后,玛格丽特发现原因在于一个叫P01的预运行程序,它的启动会导致飞行状态的模拟器瞬间崩溃。因此,她提议在整个系统中多加一段代码,防止真实飞行过程中宇航员操作失误,造成不可挽回的局面。但由于对宇航员的过度崇拜和当时硬件条件的限制,方案最终被否决,玛格丽特只能无奈在操作系统备注“不要在飞行中选择P01模式”。
但事故还是发生了。1968年12月21日,人类首次绕月飞行的阿波罗8号发射升空;飞行第5天,宇航员误触P01模式,所有导航数据瞬间清空。在失去导航的情况下,飞船根本无法回到地球轨道,只能成为宇航员的太空坟墓。如此绝境下,玛格丽特带着MIT的程序员们连夜奋战9小时,设计出了一份新的导航数据并上传到阿波罗8号,让它回到正轨,顺利返航。
(从海中打捞阿波罗8号指令舱)
阿波罗8号事件后,NASA和玛格丽特明显认识到了软件编程对登月计划的重要性,但更大的挑战随之而来。1969年7月20日,在阿波罗11号飞船登陆月球前几分钟这样一个关键时间点上,危机发生了。
上世纪60到70年代,电脑不仅内存超小,计算速度也极度缓慢,系统只能永久保存12000字节的数据,临时存储空间更是只有1024字节。所以在阿波罗11号登月舱离月球不远处时,电脑系统因过度计算几近崩溃。而一旦崩溃,飞船将毫无疑问地坠毁在月球,成为史上最“悲壮”的登月。
在这样的硬件条件下,玛格丽特设计的系统顶住所有压力。因为在系统设计之初,她就考虑到了当大量数据涌入电脑、系统扛不住时要怎么办。为了保险起见,她在原有的基础上首创并添加了异步处理程序:当电脑没有足够空间运行时,最宝贵的存储空间便会留给最关键的部分——阿波罗11号最重要的任务当然是成功登月,而其他如雷达交换数据等低优先级的任务便会暂时切断。
通过这个程序,电脑学会了如何“抉择”,阿波罗11号解决了危机,玛格丽特也为自己赢得了荣耀。在阿姆斯特朗为人类迈出一大步的同时,这位阿波罗11号背后的女程序员也为全人类的女性迈出了一大步。
拯救阿波罗计划时,玛格丽特年仅33岁。在这之后她离开了NASA,创办了自己的公司,并带领自己的团队设计出许多程序框架,广泛应用于航天航空领域。同时,她也为过去不受重视的程序员们正名,并首次使用了软件工程师一词来称呼包括自己在内的程序员,她说:“希望能给予做软件的人们以尊重,因为他们和其他做硬件的人一样,在这个宏大的工程里各司其职。”
(《WIRED》上近期的她)
在回顾过去那段程序员生涯时,她认为自己是世界上最幸运的人,因为“别无选择,只能成为先驱者,没有时间成为初学者”。而随着时代的发展,也有越来越多的女性开始加入IT工程师的队伍。所以,当我们在享受着5G时代万物智联给生活带来的便利时,请不要忘记还有这么一群人,她们在前人铺下的道路上行进,在层叠的代码上默默无闻地铭刻属于女程序员的光荣与辉煌。