11月27日,印尼公布了“狮航”失事波音737飞机的初步调查结果。调查显示,飞机从起飞到失事的11分钟内,最后两分钟里,飞行员和飞机进行了不下二十次“搏斗”,最后败给了飞机。

事情是这样的:最新款的波音737,也就是737 Max,安装了名为“机动能力增强系统”(maneuvering characteristics augmentation system,简称M.C.A.S.)的系统。如果驾驶员操作不当,这套系统可以自动介入,修正飞行姿势。不幸的是,这架飞机的攻角(angle-of-attack,即仰角)传感器一直有问题,总是发出错误数据,虽然之前已经替换了一个,但也不是新的,而是经检测“可用”的传感器。

在本次飞行中,攻角传感器持续发出错误数据,导致M.C.A.S.认为飞机攻角太大,必须压低机头——然而实际上并不需要这样做,所以飞行员不断拉动操纵杆,避免飞机进入俯冲姿势。两分钟内,这种“博弈”进行了大约二十多次,最后飞行员败给了系统,飞机以20度的俯冲角,一头栽入大海。

狮航失事飞机的飞行记录。来源:FlightRadar24

按道理说,如果飞行员发现系统异常,可以按动操作面板上的按钮关掉M.C.A.S.系统,但是本次事故中飞行员有没有这样操作,目前还不知道。据波音的说法,此类问题的处理程序已经写在新型号飞机的飞行手册里了,但飞行员们认为,起码这一点是不清楚的,也没有说明新型号波音737和老型号在处理攻角异常时的重要差别。

长期以来,波音和空客的飞行理念都有很大的不同。简单说,波音更相信飞行员,而空客更相信系统。在波音飞机上,飞行员的操作都会获得“传统”的直接反馈,比如操作飞机左右转弯,转弯角度越大,反馈力越强——虽然这种反馈力是电子系统自动计算给出的阻力。而在空客飞机上,飞行员更像飞机的管家,转弯时只要简单发出指令“转向xx度”,飞控系统就会自动完成,因此也被许多人认为飞起来任何“手感”。有段子说,波音飞机最合适的是配德国机长,作风严谨,一丝不苟;空客飞机只要不配韩国机长就不会有大事,当然最好是再配一条狼狗,机长的责任就是喂狗,狗的责任就是当机长想自己动手的时候咬他。

在飞行中,到底是更相信人,还是更相信系统,一直以来是争论不休的问题。波音出过的事故中,有明显人为错误但系统无法修正的;空客出过的事故中,有明显系统错误但飞行员无法介入的。从逻辑上说,单纯靠人和靠系统都不放心:系统当然可能出故障,人也可能紧张误操作,甚至幻视幻听。奇特的是,从本次的事故来看,波音似乎扮演了空客的角色——系统出错,但飞行员纠正失败。

照道理说,现在机载计算机已经相当先进了。虽然其CPU运行频率大概只相当于586的水平,但可靠性极高,事故概率已经可以降低到保证一架飞机7×24小时安全飞行15年。而且现在机载系统一般都采用“多余度”设计,也就是说同时有N套系统在独立工作,如果出现冲突,需要“民主投票”来决策。如果你留意波音777飞机的驾驶舱,会发现宝贵的面板空间“竟然”安排了三台姿态指示仪,道理就在这里——如果只有一台,出了问题就束手无策,如果有两台,仍然无从判断对错,有三台就放心多了。

但是,即便有这样安全的系统,航空事故——尤其是机载系统引起的航空事故,仍然无法避免。这样想起来,开发普通的程序还是挺“安全”的一件事。无论如何,哪怕出现再麻烦的情况,大不了断网、关机,然后慢慢调试、修正。但是车载、机载系统可不是闹着玩的,一出事就是大事。如果你留意,经常可以发现有人报告,新兴的“互联网品牌汽车”在路上遇到各种异常情况,虽然停车、重启系统就恢复正常,但也足够把人吓得不轻。

当然,即使开发“安全”的程序,也不难遇到“人与系统搏斗”的场景。我就不止一次看到,系统出现异常之后,程序员手工介入,或者不断删文件,或者不断杀进程,但是如果找不出根本原因,这样的手段也只能保得了一时而已——毕竟,系统的能力比人强大太多了,最后的结果往往是程序员被如潮的文件或进程所淹没,系统崩溃,与本次的事故有几分相似。

我有个朋友,大学学的是编程,毕业后去生产线看了一圈,发现一个小的程序错误就可能致残致死,吓得从此离开了这个行业——虽然这是特例,但也提醒我们,无论做什么程序,都应当对技术有敬畏之心,都应当小心谨慎。哪怕在互联网行业,简单粗暴的“先开火再瞄准”也不是全无风险的。