前言
代码整洁之道:程序员的职业素养
1986年1月28日,美国东部时间上午11:39,“挑战者”号航天飞机在发射仅73.124秒后,因右侧固体火箭推进器的故障,在1.5万米的高空化成碎片。7名航天勇士魂断苍穹,其中包括高中教师克丽斯塔·麦考利芙。麦考利芙的母亲亲眼目睹女儿在1.5万米高空中不幸罹难,当时她脸上的表情,至今印刻在我的心头无法拂去。
挑战者号之所以解体,是由于高热气体从出现故障的固体火箭推进器的外壳接缝处泄露出来,喷到外部燃料舱体上。主液氢燃料舱底部发生爆炸,液氢被点燃,并将液氢燃料推入上方的液氧燃料舱中。与此同时,固体火箭推进器脱离了下支架,开始绕上支架滚动。推进器的机头捅破了液氧舱。异位滚动的推进器导致整个飞行器逆向气流旋转,但同时仍然以1.5马赫的速度飞行。在巨大的过载下,挑战者号迅速被撕成碎片。
在火箭推进器的圆形接缝处,有两个由合成橡胶制成的同心密封圈。当壳体通过螺栓连接在一起时,密封圈被压缩,起到密封作用,确保气体不会从接缝处逸出。
但在发射前夜,发射台气温降到了-8℃,比密封圈的最低承限温度低了13℃,比以往发射气温低了18℃。这个气温下的密封圈已经硬得失去了弹性,无法很好地密封高热气体。推进器点火后,高热气体迅速累积,对壳腔形成了压力脉冲。助推器壳体向外膨胀开来,密封圈受到的压力变小。但是硬化的密封圈缺乏弹性无法保持密封,一些高热气体就泄漏出来,并且将密封圈上超过1/6的部分都气化了。
设计推进器的莫顿·赛奥科公司的工程师事前已经知道密封圈有问题,并早在7年前就已经将这些问题报告给莫顿·赛奥科公司和美国宇航局的管理人员。事实上,在以前的发射中,密封圈就曾出现过类似的损坏,只是没有引发灾难而已。发射气温越低,后果就越严重。工程师们已经针对该问题设计了修复方案,但修复方案却迟迟未得以实施。
工程师们知道密封圈在低温的时候会硬化。也知道挑战者号发射时的气温比以往任何一次发射时的都要低,远低于红色警戒线。简而言之,这次发射的风险太高了,他们不能对危险视而不见。于是他们写了备忘录,发出高危预警信号。他们强烈要求赛奥科公司和美国宇航局的管理人员们取消此次发射任务。在临发射数小时前所开的紧急会议上,这些工程师展示了最有说服力的数据。他们摆事实、讲道理,软硬兼施,拒绝执行这次发射任务。但最后,管理人员们却对此无动于衷。
发射时,一些工程师不忍观看现场直播,因为他们担心发射台上会发生爆炸惨剧。但是,随着挑战者号优雅升空,他们开始有点安心了。就在挑战者号解体前的瞬间,看着飞行器已经迈过1马赫的关口时,一位工程师还说他们已经“躲过一劫”。
管理人员们听不进去工程师们的抗议,也不看备忘录,更没有命悬一线的危急感。他们认为自己更了解情况,认为工程师们小题大做了,他们不相信工程师们的数据和结论。他们之所以进行这次发射任务,是因为面临着很大的财务和政治压力。他们对此心存侥幸,希望一切都能平安无事。
这些管理人员不只是愚蠢至极,他们是在草菅人命。他们以为自己才是专家,他们的恐惧、希望和直觉才是准的。恰恰是因为他们的自以为是,七名优秀宇航员的生命以及一代人对太空旅行的梦想,都在那个寒冷的早晨一起灰飞烟灭了。他们篡夺了真正了解情况的工程师们的权力。
而那些工程师呢?当然,工程师做了他们应该做的事情。他们通知了管理人员,并且极力捍卫自身立场。他们经由适当的渠道,调用了所有合适的沟通协议。他们做了在体系内力所能及的事情,只是最后不得不听从领导的决定。因此,看起来工程师可以问心无愧了。
但是,我不知道那些工程师之中,是否有人会躺在床上夜不能寐,眼前浮现克丽斯塔·麦考利芙母亲脸上的惨痛表情,为之前没有给丹·拉瑟[1]打电话而悔恨不已。