为什么伟大的技术会造成巨大的错误

作者:三联生活周刊

(文 / 三联生活周刊)

第一代计算机编程人员选择用两位数表示年份无疑是对的:这样可以在穿孔卡中节省宝贵的空间,从而使昂贵的存储能力获得更好的用途。不幸的是,由于令人惊异的偶然性在起作用,当初的正确决定导致了历史上代价最高的一起工业事故。

政府和公司会对将来如何避免这类失误倍感兴趣。有一条教训十分明显。随着公司把它们计划花在信息技术上的资金中的很大一部分用于消灭千年虫,这种资金的规模开始暴露于世。到2000年前,公司花在计算机上的钱将达3万亿美元之巨。千年虫也使世人认识到公司和机构——不论是公共的还是私人的——倚重计算机已经达到了什么样的程度:机器发生故障以后,这些机构不仅仅是活动不便,而是完全陷于瘫痪。

虽然投入计算机的资金令人咋舌,虽然社会对计算机近乎完全依赖,但有多少经理人了解信息技术呢?今天更加开明的老板们也许会自豪地展露他们的电脑技能,甚至亲自回复电子邮件,然而鲜有人能充满自信地说,他们刚刚花在客户一服务器软件上的钱是用在了刀刃上。许多人是“技术盲”,不得不依靠技术经理们,他们对拉进办公室和工厂的那些线路一无所知。

这种情况刚刚在发生改变,至少比理想预期晚了10年。但是,千年虫引发的恐慌还给了我们另一个更加深远的教训——那就是说,对精通技术的经理们也不要存太多的指望。受过更好教育的经理们会更早着手解决千年虫问题,解决时可能也更加得心应手,但他们不能在一开始就避免问题的出现。关键是,在程序中留下千年错误当时似乎——也的确——合情合理。此种“错误”是许多技术创新中固有的,我们最好牢记这一点。

缓慢的革命

在许多技术中,看重实效的决策所引发的后果能够持续相当长时间,不管当时赖以作出决策的环境是否发生了改变。在19世纪上半期,英国的铁路人员选择了史蒂芬森的窄轨设计而放弃了布鲁内尔的宽轨设计,美国和大多数欧洲国家也是如此。这一标准是由英国矿山使用马拉车推演出来的,尽管铁路工程技术已经历了150年的变迁,它却始终保持原样。毫不奇怪,它不能满足后来的需要。为了充分发挥现代高速列车的功效,工程师们宁肯在车身的倾斜和特殊的、没有急转弯的轨道上做文章:这也比拆除现有的铁路,重起炉灶来得便宜。

这样的决策经久不变是因为基本的技术是在缓慢的过程中发展起来的。空间探索是通信技术和精密工程的奇迹;即便如此,俄国发射第一颗人造卫星之后40年,男女宇航员们仍搭乘易于爆炸的液体燃料火箭升入太空。汽车有严重的污染,噪音很大,效率也不高。在它问世以后一个世纪,它依然要靠点燃一种燃料与空气的混合物来提供动力。

全新的技术仿佛弃儿,除了少数几个疯子外无人认识。19世纪80年代,发电机发明以后,足足用了40年的时间,工厂的生产率才因电力得到提高。科学家们不得不改善其他技术,比如发电和输送设备;投资者不得不在新基础设施上加大投入:工厂主不得不报废原有设备;发明家不得不找出利用技术的方法,而企业家则需为发明找到新的市场。当技术终于进入了鼎盛的壮年期,惯性也就随之出现。

所有这一切使得技术变革带有非常大的不确定性。作为技术基础的科学本身就蕴含风险,各种主张之间的竞争变化莫测,再加上新技术采用过程中可能出现的种种事故和老技术的惯性,错误似乎在所难免。

这并不是要我们对技术感到绝望。技术变革的不确定性使我们的社会易于遭受千年虫的残害和QWERTY键盘的嘲弄。然而,奇怪的巧合与令人兴奋的意外是每一个成功技术的组成部分。每天公司都必须猜测技术的发展方向,这样的赌博令一些人破产,却使另外的人发财。多数尝试会在市场上遭到惨败,但那并不是一种浪费,而是一种发现的过程。有时候某种选定的“标准”后来会被证明是错误的(比方说两位数的日期表示法、窄轨铁路),但市场力量会遏制这种浪费,最终这样的标准因错误昭彰而被取代。

我们应该以谦恭而不是灰心的态度对待千年虫。像其他异乎寻常的事情一样,千年虫只有在事后才能预测出来。

道德上的义务

计算机以及在其上运行的复杂软件使得事情出错的可能性骤然加大。计算机在现代环境中造成的新情况向我们提出了“责任”问题。但凡事故发生之后,我们总是想弄清是谁的责任,这既是为了找到谴责对象,也是为了保证问题不再发生。如果事故的起因是计算机的话该怎么办呢?这意味着两层疑问:第一,到底准该为计算机产生的错误负责?第二,我们是否不该在某些领域中依赖计算机?这样的领域存在吗?

计算机程序可能出现两类问题。第一类是供电系统所引发的系统失败,比如用以持续监测病人或核反应堆的系统因停电而陷入全面瘫痪。这种情况通常较为罕见,但一旦发生,会造成难以弥补的损失。对这类物理问题采取保护措施并不很难。一个金科玉律是“备份、备份、再备份”。

第二类问题则微妙得多,发现和改正的过程也困难得多,并常在改正之前就已造成巨大损失。错误出在程序本身。它可能使用了不正确的方程式,也可能未对某些特殊条件进行充分考虑。人们平常所说的计算机错误实际上是程序错误,在某些情况下是设计上的错误,即编入系统中的程序模型有错误。也就是说,这一模型未能反映真实的世界。

如果供电局或电话公司发给你的账单有金额上的出入,他们通常会辩称那是因为计算机出了错(然后你会期待计算机改正这一错误)。其实计算机不会做任何超出程序规定之外的事情,错误要么发生在程序员身上,要么发生在向系统中输入数据的人身上。不管怎样,它们都是一种人为错误,而非计算机错误。程序错误是程序写作过程中未能察觉的“臭虫”,因为它不是一种形式上的错误,而是一种逻辑上的错误。换言之,它不是句法错误,而是语义错误。

十分明显,如果我们继续听从那些老话“这是计算机干的”,“是计算机的毛病造成的”,计算机系统的设计者就不会吸取教训,采取一种比现行做法更加小心翼翼的态度。在许多情况下,他们会把获利和尽快拿出产品作为自己唯一的指导原则我们应该从伦理学的角度衡量这些设计者的动机。如果他们完全是为了钱,那么他们的视角是有缺陷的。金钱只是一种手段——挣钱的目的是什么?为了致富?(还是一种手段。) 致富是为了什么呢?(为了幸福?)但在冰冷的钱币中能找到幸福吗?友谊、知识、美与健康的价值在哪里?他们对自己的客户应当承担的义务在哪里?即使不是出于同情心,一个人也应遵守他与服务对象之间的无形契约。

那些设计计算机系统、写作程序的人对用户有一种道德上的义务。一个诺言被许下了——用户可以使用计算机干出漂亮的活计。这一诺言必须由良好的用心和称职的技术来支持。一些可能的错误看上去微不足道,此如在一个字处理程序中文字无法对齐,但即使这样的错误也关系重大,因为用户在期待着诺言的实现。更不必说我们应该怎样慎而又慎地对待那些可能对社会造成大规模损害的错误。计算机最好也不过是一种手段而非目的(尽管有些计算机迷把它当成目的)。关键的问题是,计算机和可靠的软件如何能够更好地改变人类的生活?

不是所有的人都在为千年虫问题焦虑。在太平洋中的斐济岛,人们为在电视上实况转播下一千年的到来而奔忙,因为斐济地处国际日界线上,世纪之交的时候会有大批游客前往迎接21世纪的第一次日出。愤世嫉俗的人警告说,实况转播在午夜时分会因千年虫作祟而陷于死寂,但狂欢活动的组织者却说,组委会将架起计算机,以便让人们体验千年虫袭击的一刹那。

这也许是我们对待技术错误的立场的最好观照。我们不会丧失全部的希望,我们仍然坚信技术的力量。生活会继续,不过,我们的生活态度是否过于轻佻,过于放肆?

美国《新闻周刊》说,面对千年虫有两种人:“一种人是不研究解决2000年难题,因而也不担忧的人,另一种人是研究解决2000年难题,因此心里感到害怕的人。”看来,即使是为了让我们心有所惧,也需要有更多的人类关注技术,思索技术。 电脑千年虫