阿波羅11號登月秘密番外:登月任務中的隱藏英雄
四天后,阿姆斯特朗和奧爾德林將阿波羅11號登月艙“鷹”號降落在月球上的靜海,成為首次踏上月球表面的人類。
今年是阿波羅11號登月任務50週年,網易科技《知否》欄目組特別推出“你不知道的登月秘密”系列文章,一起回顧人類探月進程中那些鮮為人知卻值得紀念的瞬間。
今天推出系列文章番外篇《阿波羅11號登月秘密番外:登月任務中的隱藏英雄》。
作者| 樂邦
出品| 網易科技《知否》欄目組
也許阿波羅11號登月任務中最具戲劇性的時刻是,當鷹號登月艙開始進入降落月球表面的最後階段時,艙載計算機超載了。沒有人比編寫著陸代碼的年輕計算機程序員更緊張了。在阿波羅11號登月50週年紀念日到來之際,《華爾街日報》採訪了程序員唐·埃爾斯。
阿波羅11號登月是計算歷史上最重要的時刻之一,為我們的數字世界奠定了基礎。
1969年7月20日,尼爾·阿姆斯特朗(Neil Armstrong)在離月球表面幾英里的高空懸浮,準備尋找一個安全的著陸地點來創造歷史。
此時,月球艙僅剩下幾分鐘的燃料,兩名宇航員還沒有安全降落於另一個世界。在阿波羅11號狹窄的登月艙上,一個功率計失靈了。通訊斷斷續續。然後,警告燈開始閃爍:程序警報。
艙載計算機發出了五次緊急信號,而這是阿姆斯特朗和機組成員布茲·奧爾德林(Buzz Aldrin)從未練習過的情況。
在那一刻,兩名宇航員的生命,30多萬名技術人員的努力,8年耗資250億美元的工作,以及一個國家的驕傲,都維繫在幾行開創性的計算機代碼上面。
人類從來沒有在軟件程序上冒過這麼大的風險。然而,他們決定相信計算機和二位數字代碼,最終阿姆斯特朗和奧爾德林成為第一批登上月球的人類,收穫巨大的榮耀。
“軟件拯救了這項任務。”現年85歲的、負責管理大部分阿波羅計劃軟件開發的弗雷德·馬丁(Fred Martin)說。
50年後來看,我們把跨越到另一個世界看作是人類的一項非同凡響的成就。然而,幾乎以任何標準來看,這也是計算機的勝利,標誌著計算歷史上最重要的15分鐘。
“他們將計算機置於這個雄心勃勃的項目的中心位置。”計算機歷史博物館軟件歷史中心主任大衛·布洛克(David C. Brock)說,“這是對這項技術的真正考驗,也是對每個人對其的信念和願望的真正考驗。”
在阿波羅11號的鷹號登月艙分離開始在計算機引導下降落到月球表面以後,從指令艙上拍攝到的畫面
阿波羅制導計算機——第一台數字通用的、可多任務處理的、交互式便攜式計算機——奠定了我們今天所知的大部分數字世界的基礎,從商用噴氣式飛機的電傳操縱駕駛艙到我們口袋裡攜帶的智能手機。
在月球上方的無空氣空間裡,驅動該計算機的極薄矽晶片和代碼已然成熟。
讓“孩子們”茁壯成長
今年早些時候,唐·埃爾斯(Don Eyles)在他位於波士頓海濱的房子裡的一張桌子上展開了一堆有半個世紀歷史、18英寸厚的計算機打印文件。
這位75歲的老人用手指指著上面迷宮般複雜的簡潔指令,他為登月所需的環環相扣的任務和例行程序需要的內存如此之少而感到自豪。
1966年夏天,他23歲,主修數學,喜歡歌劇和跑車,在找工作。剛從大學畢業,他有很多關於生活的東西需要學習。計算機代碼便是其中之一,太空旅行亦然。
埃爾斯申請加入麻省理工學院的儀器實驗室,該實驗室的任務是引導阿波羅宇航員往返月球。他們告訴他,把人類送上月球需要的不僅僅是大型火箭,還需要代碼。
1960年代的丹·利克利,他曾說,找到像埃爾斯這樣的人才是一門藝術,他們可以把工程方程轉化為開啟通往另一個世界的旅程的代碼。
那個實驗室被稱為I-Lab,坐落在一個俯瞰查爾斯河的舊內衣工廠裡。阿波羅計劃的工程師和程序員們在小隔間裡磨損的金屬辦公桌前工作,黑板上亂寫著代碼,桌子上放著計算尺,油氈地上放著煙頭。計算機打印出來的薄書寫紙堆起來有6英尺高,就像白蟻堆一樣。
該實驗室開創了用於冷戰時期核彈頭導彈的慣性制導系統,比如潛艇發射的北極星洲際彈道導彈。在美國空軍的資助下,它還在20世紀50年代末制定了將一個用計算機控制的探測器發射到火星並返回的計劃。
麻省理工學院獲得了第一份重大的阿波羅合同,這是唯一一份授予大學的合同,也是唯一一份沒有競標的合同。
在一個計算機使用易碎管子、運行在穿孔卡上、佔據整個房間的時代,I-Lab的工程師們發明了一個公文包大小的數字大腦,裡面裝滿了尖端的集成電路和存儲器,它強大到可以承受閃電的衝擊——它可以說是今天幾乎所有計算機的先祖。
拉爾夫·雷根(左)和埃爾登·霍爾(右)幫助領導了麻省理工學院實驗室的阿波羅工作,他們在阿波羅控制模型前檢查制導計算機的組件。
與同時代的其他機器不同的是,它可以同時處理許多任務,能夠在事件展開時選擇優先處理哪些任務。
阿波羅任務攜帶了兩台這樣的計算機,一台在指令艙,一台在登月艙上,二者運行幾乎相同的軟件。不過,只有登月艙需要額外的代碼才能安全降落在月球上。
現年86歲的、當時負責軟件開發的丹·利克利(Dan Lickly)說,找到像埃爾斯這樣的人才是一門藝術,他們可以把工程方程轉化為開啟通往另一個世界的旅程的代碼。
達納·丹斯莫爾(Dana Densmore)於1965年加入I-Lab,後來成為登月艙軟件的控制主管。“你無法獲得如何飛向月球的學位,你必須得讓那些知道如何思考、有創造力和警覺性的人參與進來。”
现年79岁的物理学家塞迪恩·塞尔丁(Saydean Zeldin)曾为通用电气的导弹和航天部门研究弹头再入问题。1966年,在她的第三个孩子出生后,她回复了麻省理工学院的月球项目发布的招聘广告。
她回忆说,当时她告诉面试她的项目经理,“我有点担心自己能否胜任这份工作。”
不久以后,她就成为十几名制导工程师的主管,负责诸多的阿波罗任务。“每天一大早,保姆一到我家,我就去上班了。下午我通常很晚才下班回家。晚上,当孩子们吃完蛋糕,喝完牛奶,听我讲完故事以后,我立刻驱车回到实验室。”
到阿波罗11号的时候,实验室的员工数量已经从1966年埃尔斯上任时的130人增加了两倍多,达到了600人左右。
代码中的奇思妙想
代码的力量令人陶醉。航天工程师们发现,它们可以用它来执行那些原来需要用上棒、电缆和执行器的任务。代码成本更低,适应性更强,最重要的是,没有重量。
“人们开始使用软件来解决他们所有的问题。”84岁的詹姆斯·克南(James Kernan)说。他曾负责为阿波罗9号组装月球模块软件。
既然计算机可以绘制路线,为什么不让它也来引导方向呢?渴望“减重”的美国宇航局在1964年决定淘汰用于操纵火箭发动机和推进器的机电飞行控制装置。
早期版本的阿波罗制导计算机,被称为AGC-3,后来麻省理工学院实验室将其浓缩成一个可用的模型
该举增加了三分之一对小型计算机的需求,这种计算机的设计目的是使用不超过一封普通电子邮件的文本的内存往返月球。他们重新设计了计算机,增加了一倍的内存——但软件仍然超载。
“当时NASA真的陷入了困境。”现年78岁的、曾从事数字自动导航装置开发的唐·弗雷泽(Don Fraser)说。I-Lab的工程师们回忆说,在一系列所谓的“黑色星期五”会议中,NASA的管理人员下令压缩软件,摒弃不那么重要的任务,且就每一个变化争论一番。
阿波罗计算机最终总共需要14.5万行代码,作为对比,今天Facebook和谷歌的业务运转则分别需要6200万行和20多亿行代码。
在登月舱的众多例行程序中,埃尔斯与人合作编写了一个主点火顺序程序。该程序与一系列相关的登月例行程序一起计算并控制登月舱降落月球的过程。埃尔斯插入了解释性的注释,以便他和他的同事能够记住这串命令的目的是什么。
就在这时,奇思妙想产生了。他把点火顺序标注为“BURN_BABY_BURN”。
当计算机想要重新定位着陆雷达天线时,代码指出:“宇航员请把这个愚蠢的东西转动起来。”然后,它进行了计算,以确定宇航员是否正确地移动了它。“看看他是不是在撒谎。”代码指出。
“我没有想到将来会有人出于历史目的查看我们的代码。”埃尔斯说。
当数十名麻省理工学院的工程师听到尼尔·阿姆斯特朗在阿波罗11号登月舱开始动力登月时报告了一个计算机问题时,奇思妙想消失了。
“程序警报,”指挥官用无线电对休斯敦的任务控制中心说,声音里带着一丝紧迫感,“上面显示1202。这是什么?”
震惊与警报
当玛格丽特·汉密尔顿(Margaret Hamilton)听到宇航员们喊出1202时,她的血压瞬间飙升。她非常清楚是什么回事,因为警报代码是她亲手编写的。
“我们从未想到会发生那个警报。”她回忆道,“我当时很震惊。这怎么可能在着陆前发生呢?我在想:天哪,这不是真的。”
现年82岁的汉密尔顿当时和她的同事们挤在对讲机和遥测继电器周围,这些装置把实验室的任务转换、会议和监控安排室与休斯顿的飞行控制人员以及近25万英里外的登月舱上的宇航员连通起来。
她知道,那个警报表明,计算机超载了,按照程序设计,为了保证飞行安全,它正在清除一些不重要的任务。它可以处理断电,可以在不中断着陆或任何其他重要操作的情况下开关电源。大约在登月前一年,NASA要求本已忙不过来的I-Lab工程师在软件中加入这种所谓的重启保护。
当宇航员接近月球表面时,某种东西持续地使得计算机超负荷工作。房间里没有人确切知道这个问题是什么,它可能会变得多严重,又或者在计算机超出其恢复范围之前该如何进行修复。
“大家的心像提到了嗓子眼。”时任任务发展小组高级经理的马丁博士说。在数千次测试运行中,没有人看到过这些警报。“我记得我看着汉密尔顿,我们都非常肯定会出现一次中断。”
上世纪60年代初,汉密尔顿加入麻省理工学院的阿波罗计划时,她是不可多得的新雇员——一位经验丰富的程序员。她天生厌恶程序错误。
作为一名数学家,她通过为麻省理工学院的气象学家爱德华·洛伦茨(Edward Lorenz)进行计算学会编程。洛伦茨是被称为“混沌理论”的新研究领域的发现者。
她给他价值4.6万美元的LGP-30计算机编程,在纸带上键入由0和1组成的二进制代码。她对用这种方法重新编写和重新提交错误程序所耗费的时间感到不耐烦,于是她学会了用铅笔在纸带上戳出新孔来创建“1”,或者用胶带把已有的孔封住,把“1”变成“0”,从而纠正自己的错误。
玛格丽特·汉密尔顿的麻省理工仪器实验室员工卡
之后,她给史上最庞大的计算机编写代码。那是一台250吨重、四层楼高的军用庞然大物,是造价270亿美元的国家防空系统的核心所在。
在登月计划中,她的第一项任务是为异常终止程序编写代码。她没多久便负责飞船的系统软件。到了阿波罗11号,利克利博士让她负责所有的太空舱和登月舱软件。
随着登月计划的临近,汉密尔顿对最糟糕的情况进行了探究。“我一直在思考各种万一出现的情况,如果出现错误,要怎么办?如果人类宇航员遇到紧急情况,却没有办法告诉宇航员他们遇到了麻烦,要怎么办?”她说,“我想出了一个办法,让他们从软件中知道出现紧急情况。”
她的1202程序警报是着陆时可能触发的29个程序警报之一。当它在登月舱的数字计算机显示器上闪烁时,巴兹·奥尔德林和尼尔·阿姆斯特朗只知道他们遇到了麻烦。
“给我们解释一下1202程序警报。”阿姆斯特朗说,声音有些尖锐。他和奥尔德林在离月球3万英尺的高空,在降落中。
27秒的时间滴答滴答地过去了,他们还没有从地球上的人得到任何的回应。
‘执行’,再’执行’
在那一刻,地球上只有一個人有權叫停登月,他就是NASA休斯頓任務控制中心的飛行指揮官吉恩·克蘭茲(Gene Kranz)。他竭力聽著。與登月艙的通訊異常失真,充斥著靜電干擾。
現年86歲的克蘭茲回憶說,在他耳邊說話的還有來自6個通訊環路和空對地通訊頻道的十幾個聲音。
“我們在那個警報上’執行’(Go)?”克蘭茲問他的團隊能否繼續著陸。
在登月任務執行前的最後一次演習中,克蘭茨和他的團隊就這些警報進行了測試,測試結果非常糟糕。他們猝不及防,錯誤地命令宇航員中止著陸。那次演習讓他的團隊認識到,這些警報意味著計算機仍然可以依靠。
在宇航員們等待回應的時候,25歲的美國宇航局工程師傑克·加曼(Jack Garman)查看了他在麻省理工學院的筆記,並給26歲的、負責月球著陸導航控制台的史蒂夫·貝爾斯(Steve Bales)傳話。然而,貝爾斯再給克蘭茲傳話。
“執行。”克蘭茨命令道。計算機再次發出警報。再“執行”。警報發出五次以後,計算機自動復位,繼續飛行。艾爾斯的代碼運行得完美無缺。阿姆斯特朗操控登月艙,尋找安全的地方著陸。
作為太空艙通訊員,阿波羅宇航員查理·杜克(Charlie Duke)是任務控制中心唯一一個被允許與飛行中的宇航員直接通話的人。他回憶道,“我們距離叫停著陸一度只有17秒的時間,”因為燃料供應接近耗盡。
最終,宇航員們讓他們的鷹號(Eagle)登月艙停在靜海(Sea of Tranquility)上。“緊張過後,阿姆斯特朗非常冷靜地說,’休斯頓,這裡是靜海基地(Tranquility Base)。鷹號已經著陸了。’他的聲音冷靜地讓人難以置信。”杜克說道。
直到第二天,才有人弄清楚是什麼觸發了1202程序警報。電源與雷達裝置不匹配,錯誤地觸發了一系列幾乎恆定的計算,使得計算機過載。一年前添加到軟件中的重啟保護措施挽救了這次任務,避免了宇航員在著陸前不必要地中止任務。
阿波羅8號時期的四位工程師諾曼·西爾斯、瑪格麗特·漢密爾頓、菲利斯·拉伊和艾因·拉茨(從左至右)。黑板上是一個指令艙導航程序。
11月,在麻省理工學院,7月登月成功的喜悅被抗議聲音所掩蓋。因為I-Lab的軍用武器研發工作,學生在該實驗室外與警察發生衝突。到1973年,麻省理工學院切斷了與I-Lab的聯繫,並將該校所有的機密軍事研究搬到了校外。之後,該實驗室更名為查爾斯·斯塔克·德雷珀實驗室(Charles Stark Draper laboratory)。
大約在同一時間,NASA取消了最近的三次阿波羅任務,無限期結束人類對近地軌道外太空的探索。
那些計算機大都報廢了。NASA從未公佈過它的阿波羅代碼。人們可以在坎布里奇和華盛頓的博物館裡找到它,計算機愛好者們已經把它發佈到了網上。
然而,今天,它的遺產幾乎存在於每個口袋、車道、家庭和辦公室裡。它的衍生品幫助重塑了整個世界學習、工作、娛樂、交流、消費和社交的方式。
阿波羅代碼本身也許最能詮釋它所帶來的奇蹟。
50年前,隨著月球塵埃滾滾落在登月艙周圍,登月艙上的計算機滴答滴答地執行著P68登月確認程序中的指令。在最後幾行代碼中,軟件程序說,“宇航員:現在看看你落在什麼地方了。”