编者按:1969年7月16日,宇航员尼尔阿姆斯特朗(NeilArmstrong)、巴兹奥尔德林(BuzzAldrin)和迈克尔柯林斯(MichaelCollins)从位于美国佛罗里达州的NASA肯尼迪航天中心的39A发射台起飞,踏上了月球之旅,同时也被载入史册。四天后,阿姆斯特朗和奥尔德林将阿波罗11号登月舱鹰号降落在月球上的静海,成为首次踏上月球表面的人类。 今年是阿波罗11号登月任务50周年,网易科技《知否》栏目组特别推出你不知道的登月秘密系列文章,一起回顾人类探月进程中那些鲜为人知却值得纪念的瞬间。 今天推出系列文章番外篇《阿波罗11号登月秘密番外》。 阿波罗11号登月是计算历史上最重要的时刻之一,为我们的数字世界奠定了基础。 1969年7月20日,尼尔阿姆斯特朗(NeilArmstrong)在离月球表面几英里的高空悬浮,准备寻找一个安全的着陆地点来创造历史。 此时,月球舱仅剩下几分钟的燃料,两名宇航员还没有安全降落于另一个世界。在阿波罗11号狭窄的登月舱上,一个功率计失灵了。通讯断断续续。然后,警告灯开始闪烁:程序警报。 也许阿波罗11号登月任务中最具戏剧性的时刻是,当鹰号登月舱开始进入降落月球表面的最后阶段时,舱载计算机超载了。没有人比编写着陆代码的年轻计算机程序员更紧张了。在阿波罗11号登月50周年纪念日到来之际,《华尔街日报》采访了程序员唐埃尔斯。 舱载计算机发出了五次紧急信号,而这是阿姆斯特朗和机组成员布兹奥尔德林(BuzzAldrin)从未练习过的情况。 在那一刻,两名宇航员的生命,30多万名技术人员的努力,8年耗资250亿美元的工作,以及一个国家的骄傲,都维系在几行开创性的计算机代码上面。 唐艾尔斯的阁楼上的18英寸厚的打印文件,上面是控制阿波罗登月舱降落到月球的部分计算机代码。 人类从来没有在软件程序上冒过这么大的风险。然而,他们决定相信计算机和二位数字代码,最终阿姆斯特朗和奥尔德林成为第一批登上月球的人类,收获巨大的荣耀。 软件拯救了这项任务。现年85岁的、负责管理大部分阿波罗计划软件开发的弗雷德马丁(FredMartin)说。 50年后来看,我们把跨越到另一个世界看作是人类的一项非同凡响的成就。然而,几乎以任何标准来看,这也是计算机的胜利,标志着计算历史上最重要的15分钟。 他们将计算机置于这个雄心勃勃的项目的中心位置。计算机历史博物馆软件历史中心主任大卫布洛克(DavidC。Brock)说,这是对这项技术的真正考验,也是对每个人对其的信念和愿望的真正考验。 在阿波罗11号的鹰号登月舱分离开始在计算机引导下降落到月球表面以后,从指令舱上拍摄到的画面 阿波罗制导计算机第一台数字通用的、可多任务处理的、交互式便携式计算机奠定了我们今天所知的大部分数字世界的基础,从商用喷气式飞机的电传操纵驾驶舱到我们口袋里携带的智能手机。 在月球上方的无空气空间里,驱动该计算机的极薄硅晶片和代码已然成熟。 让孩子们茁壮成长 今年早些时候,唐埃尔斯(DonEyles)在他位于波士顿海滨的房子里的一张桌子上展开了一堆有半个世纪历史、18英寸厚的计算机打印文件。 这位75岁的老人用手指指着上面迷宫般复杂的简洁指令,他为登月所需的环环相扣的任务和例行程序需要的内存如此之少而感到自豪。 唐埃尔斯刚从大学毕业,就到麻省理工学院的仪器实验室工作,帮助编写指引人类登月的代码。 1966年夏天,他23岁,主修数学,喜欢歌剧和跑车,在找工作。刚从大学毕业,他有很多关于生活的东西需要学习。计算机代码便是其中之一,太空旅行亦然。 埃尔斯申请加入麻省理工学院的仪器实验室,该实验室的任务是引导阿波罗宇航员往返月球。他们告诉他,把人类送上月球需要的不仅仅是大型火箭,还需要代码。 1960年代的丹利克利,他曾说,找到像埃尔斯这样的人才是一门艺术,他们可以把工程方程转化为开启通往另一个世界的旅程的代码。 那个实验室被称为ILab,坐落在一个俯瞰查尔斯河的旧内衣工厂里。阿波罗计划的工程师和程序员们在小隔间里磨损的金属办公桌前工作,黑板上乱写着代码,桌子上放着计算尺,油毡地上放着烟头。计算机打印出来的薄书写纸堆起来有6英尺高,就像白蚁堆一样。 该实验室开创了用于冷战时期核弹头导弹的惯性制导系统,比如潜艇发射的北极星洲际弹道导弹。在美国空军的资助下,它还在20世纪50年代末制定了将一个用计算机控制的探测器发射到火星并返回的计划。 麻省理工学院获得了第一份重大的阿波罗合同,这是唯一一份授予大学的合同,也是唯一一份没有竞标的合同。 在一个计算机使用易碎管子、运行在穿孔卡上、占据整个房间的时代,ILab的工程师们发明了一个公文包大小的数字大脑,里面装满了尖端的集成电路和存储器,它强大到可以承受闪电的冲击它可以说是今天几乎所有计算机的先祖。 拉尔夫雷根(左)和埃尔登霍尔(右)帮助领导了麻省理工学院实验室的阿波罗工作,他们在阿波罗控制模型前检查制导计算机的组件。 与同时代的其他机器不同的是,它可以同时处理许多任务,能够在事件展开时选择优先处理哪些任务。 阿波罗任务携带了两台这样的计算机,一台在指令舱,一台在登月舱上,二者运行几乎相同的软件。不过,只有登月舱需要额外的代码才能安全降落在月球上。 现年86岁的、当时负责软件开发的丹利克利(DanLickly)说,找到像埃尔斯这样的人才是一门艺术,他们可以把工程方程转化为开启通往另一个世界的旅程的代码。 达纳丹斯莫尔(DanaDensmore)于1965年加入ILab,后来成为登月舱软件的控制主管。你无法获得如何飞向月球的学位,你必须得让那些知道如何思考、有创造力和警觉性的人参与进来。 曾在通用电气导弹部门工作的物理学家塞迪恩塞尔丁响应了麻省理工学院实验室的招聘广告,没多久就管理起了12名制导工程师。 现年79岁的物理学家塞迪恩塞尔丁(SaydeanZeldin)曾为通用电气的导弹和航天部门研究弹头再入问题。1966年,在她的第三个孩子出生后,她回复了麻省理工学院的月球项目发布的招聘广告。 她回忆说,当时她告诉面试她的项目经理,我有点担心自己能否胜任这份工作。 不久以后,她就成为十几名制导工程师的主管,负责诸多的阿波罗任务。每天一大早,保姆一到我家,我就去上班了。下午我通常很晚才下班回家。晚上,当孩子们吃完蛋糕,喝完牛奶,听我讲完故事以后,我立刻驱车回到实验室。 到阿波罗11号的时候,实验室的员工数量已经从1966年埃尔斯上任时的130人增加了两倍多,达到了600人左右。 代码中的奇思妙想 代码的力量令人陶醉。航天工程师们发现,它们可以用它来执行那些原来需要用上棒、电缆和执行器的任务。代码成本更低,适应性更强,最重要的是,没有重量。 人们开始使用软件来解决他们所有的问题。84岁的詹姆斯克南(JamesKernan)说。他曾负责为阿波罗9号组装月球模块软件。 既然计算机可以绘制路线,为什么不让它也来引导方向呢?渴望减重的美国宇航局在1964年决定淘汰用于操纵火箭发动机和推进器的机电飞行控制装置。 早期版本的阿波罗制导计算机,被称为AGC3,后来麻省理工学院实验室将其浓缩成一个可用的模型 该举增加了三分之一对小型计算机的需求,这种计算机的设计目的是使用不超过一封普通电子邮件的文本的内存往返月球。他们重新设计了计算机,增加了一倍的内存但软件仍然超载。 当时NASA真的陷入了困境。现年78岁的、曾从事数字自动导航装置开发的唐弗雷泽(DonFraser)说。ILab的工程师们回忆说,在一系列所谓的黑色星期五会议中,NASA的管理人员下令压缩软件,摒弃不那么重要的任务,且就每一个变化争论一番。 阿波罗计算机最终总共需要14。5万行代码,作为对比,今天Facebook和谷歌的业务运转则分别需要6200万行和20多亿行代码。 在登月舱的众多例行程序中,埃尔斯与人合作编写了一个主点火顺序程序。该程序与一系列相关的登月例行程序一起计算并控制登月舱降落月球的过程。埃尔斯插入了解释性的注释,以便他和他的同事能够记住这串命令的目的是什么。 就在这时,奇思妙想产生了。他把点火顺序标注为BURNBABYBURN。 早期登月舱的阿波罗制导计算机 当计算机想要重新定位着陆雷达天线时,代码指出:宇航员请把这个愚蠢的东西转动起来。然后,它进行了计算,以确定宇航员是否正确地移动了它。看看他是不是在撒谎。代码指出。 我没有想到将来会有人出于历史目的查看我们的代码。埃尔斯说。 当数十名麻省理工学院的工程师听到尼尔阿姆斯特朗在阿波罗11号登月舱开始动力登月时报告了一个计算机问题时,奇思妙想消失了。 程序警报,指挥官用无线电对休斯敦的任务控制中心说,声音里带着一丝紧迫感,上面显示1202。这是什么? 震惊与警报 当玛格丽特汉密尔顿(MargaretHamilton)听到宇航员们喊出1202时,她的血压瞬间飙升。她非常清楚是什么回事,因为警报代码是她亲手编写的。 我们从未想到会发生那个警报。她回忆道,我当时很震惊。这怎么可能在着陆前发生呢?我在想:天哪,这不是真的。 现年82岁的汉密尔顿当时和她的同事们挤在对讲机和遥测继电器周围,这些装置把实验室的任务转换、会议和监控安排室与休斯顿的飞行控制人员以及近25万英里外的登月舱上的宇航员连通起来。 玛格丽特汉密尔顿知道1202号警报是什么:那些警报代码是她编写的。 她知道,那个警报表明,计算机超载了,按照程序设计,为了保证飞行安全,它正在清除一些不重要的任务。它可以处理断电,可以在不中断着陆或任何其他重要操作的情况下开关电源。大约在登月前一年,NASA要求本已忙不过来的ILab工程师在软件中加入这种所谓的重启保护。 当宇航员接近月球表面时,某种东西持续地使得计算机超负荷工作。房间里没有人确切知道这个问题是什么,它可能会变得多严重,又或者在计算机超出其恢复范围之前该如何进行修复。 大家的心像提到了嗓子眼。时任任务发展小组高级经理的马丁博士说。在数千次测试运行中,没有人看到过这些警报。我记得我看着汉密尔顿,我们都非常肯定会出现一次中断。 上世纪60年代初,汉密尔顿加入麻省理工学院的阿波罗计划时,她是不可多得的新雇员一位经验丰富的程序员。她天生厌恶程序错误。 作为一名数学家,她通过为麻省理工学院的气象学家爱德华洛伦茨(EdwardLorenz)进行计算学会编程。洛伦茨是被称为混沌理论的新研究领域的发现者。 她给他价值4。6万美元的LGP30计算机编程,在纸带上键入由0和1组成的二进制代码。她对用这种方法重新编写和重新提交错误程序所耗费的时间感到不耐烦,于是她学会了用铅笔在纸带上戳出新孔来创建1,或者用胶带把已有的孔封住,把1变成0,从而纠正自己的错误。 玛格丽特汉密尔顿的麻省理工仪器实验室员工卡 之后,她给史上最庞大的计算机编写代码。那是一台250吨重、四层楼高的军用庞然大物,是造价270亿美元的国家防空系统的核心所在。 在登月计划中,她的第一项任务是为异常终止程序编写代码。她没多久便负责飞船的系统软件。到了阿波罗11号,利克利博士让她负责所有的太空舱和登月舱软件。 随着登月计划的临近,汉密尔顿对最糟糕的情况进行了探究。我一直在思考各种万一出现的情况,如果出现错误,要怎么办?如果人类宇航员遇到紧急情况,却没有办法告诉宇航员他们遇到了麻烦,要怎么办?她说,我想出了一个办法,让他们从软件中知道出现紧急情况。 她的1202程序警报是着陆时可能触发的29个程序警报之一。当它在登月舱的数字计算机显示器上闪烁时,巴兹奥尔德林和尼尔阿姆斯特朗只知道他们遇到了麻烦。 给我们解释一下1202程序警报。阿姆斯特朗说,声音有些尖锐。他和奥尔德林在离月球3万英尺的高空,在降落中。 27秒的时间滴答滴答地过去了,他们还没有从地球上的人得到任何的回应。 39;执行39;,再39;执行39; 在那一刻,地球上只有一个人有权叫停登月,他就是NASA休斯顿任务控制中心的飞行指挥官吉恩克兰兹(GeneKranz)。他竭力听着。与登月舱的通讯异常失真,充斥着静电干扰。 现年86岁的克兰兹回忆说,在他耳边说话的还有来自6个通讯环路和空对地通讯频道的十几个声音。 我们在那个警报上‘执行’(Go)?克兰兹问他的团队能否继续着陆。 在手下团队在一次演习中错误地要求中止着陆后,飞行指挥官吉恩克兰兹敦促他们学习计算机警报。这在阿波罗11号降落时得到了回报。 在登月任务执行前的最后一次演习中,克兰茨和他的团队就这些警报进行了测试,测试结果非常糟糕。他们猝不及防,错误地命令宇航员中止着陆。那次演习让他的团队认识到,这些警报意味着计算机仍然可以依靠。 在宇航员们等待回应的时候,25岁的美国宇航局工程师杰克加曼(JackGarman)查看了他在麻省理工学院的笔记,并给26岁的、负责月球着陆导航控制台的史蒂夫贝尔斯(SteveBales)传话。然而,贝尔斯再给克兰兹传话。 执行。克兰茨命令道。计算机再次发出警报。再执行。警报发出五次以后,计算机自动复位,继续飞行。艾尔斯的代码运行得完美无缺。阿姆斯特朗操控登月舱,寻找安全的地方着陆。 作为太空舱通讯员,阿波罗宇航员查理杜克(CharlieDuke)是任务控制中心唯一一个被允许与飞行中的宇航员直接通话的人。他回忆道,我们距离叫停着陆一度只有17秒的时间,因为燃料供应接近耗尽。 最终,宇航员们让他们的鹰号(Eagle)登月舱停在静海(SeaofTranquility)上。紧张过后,阿姆斯特朗非常冷静地说,‘休斯顿,这里是静海基地(TranquilityBase)。鹰号已经着陆了。’他的声音冷静地让人难以置信。杜克说道。 直到第二天,才有人弄清楚是什么触发了1202程序警报。电源与雷达装置不匹配,错误地触发了一系列几乎恒定的计算,使得计算机过载。一年前添加到软件中的重启保护措施挽救了这次任务,避免了宇航员在着陆前不必要地中止任务。 阿波罗8号时期的四位工程师诺曼西尔斯、玛格丽特汉密尔顿、菲利斯拉伊和艾因拉茨(从左至右)。黑板上是一个指令舱导航程序。 11月,在麻省理工学院,7月登月成功的喜悦被抗议声音所掩盖。因为ILab的军用武器研发工作,学生在该实验室外与警察发生冲突。到1973年,麻省理工学院切断了与ILab的联系,并将该校所有的机密军事研究搬到了校外。之后,该实验室更名为查尔斯斯塔克德雷珀实验室(CharlesStarkDraperlaboratory)。 大约在同一时间,NASA取消了最近的三次阿波罗任务,无限期结束人类对近地轨道外太空的探索。 那些计算机大都报废了。NASA从未公布过它的阿波罗代码。人们可以在坎布里奇和华盛顿的博物馆里找到它,计算机爱好者们已经把它发布到了网上。 然而,今天,它的遗产几乎存在于每个口袋、车道、家庭和办公室里。它的衍生品帮助重塑了整个世界学习、工作、娱乐、交流、消费和社交的方式。 阿波罗代码本身也许最能诠释它所带来的奇迹。 50年前,随着月球尘埃滚滚落在登月舱周围,登月舱上的计算机滴答滴答地执行着P68登月确认程序中的指令。在最后几行代码中,软件程序说,宇航员:现在看看你落在什么地方了。