【转】所谓“人为错误”

昨天是一个让人悲哀的日子。旧金山湾区主要的上下班交通工具Caltrain,在24小时之内发生三次事故,撞死三人。其中一次事故发生在Menlo Park,一辆汽车被困在铁轨上,因为被前后的车辆堵塞而无法逃避,终于被飞驰而来的列车撞成一堆废铁。开车人被消防队员从残骸里切割出来,送往医院后不久死亡。(新闻视频

我为生命的殒灭而悲哀,然而让我更加悲哀的是,每当这样的事故发生,总有人指责说是“人为错误”。比如,Twitter上有人说这事故是因为死者没有遵守交通规则,才导致自己的汽车被困在铁轨之上,所以她死的活该。

真的是因为她不遵守交通规则吗?真的有人愿意把车停在铁轨上等死吗?也许是这规则没法遵守,或者设计得让人很容易“违反”呢?

首先,规则必须要让人理解,切实可行,才能叫做规则。

</a>

但是请看看铁轨交叉路口上的指令:“不要停在铁轨上(DO NOT STOP ON TRACKS)”,“保持路口畅通(KEEP CLEAR)”。我也不想停在铁轨上啊,可是我刚开到铁轨上,前面的车就停下来了,过不去怎么办?另外什么叫做clear?一定要等到路口里面完全没有车才可以进去吗?如果路口里面虽然有车,然而它们都以每小时30英里的速度行驶?这时我还该停下来吗?如果前面车的速度不到每小时5英里呢?如果前面车辆貌似很快,结果我一进路口它就慢下来了怎么办?

如果“不要停在铁轨上”的指令我想遵守都不可能,如果连clear这个单词都定义不清楚,这还叫什么“交通规则”呢?既然规则都不清楚,又怎么能责怪别人不遵守?我要有多么高的预知未来的能力,才能猜得到前面的车会不会正好在我开到铁轨上的时候停下来,把我堵在铁轨上呢?也许你已经看出来了,这其实不是开车人的错误,它最多算一个“判断失误”。每个人都有可能在那种模棱两可的情况下发生判断失误,因为你没法知道前面的车会怎样运动。记者在现场采访的几个开车人都说:“过那个路口要极度小心,因为你不知道前面的车会怎么样走。”

如果你仔细看看卫星图,就会发现铁轨前方的道路狭窄,而且不远处有一个红绿灯。如果这个红绿灯变红,那么就有可能把直到铁轨处的车辆全都叫停。如果你熟悉湾区的道路,就知道红灯处是82号公路(El Camino Real),上那条路的红灯经常等很久。也就是说,可能有很多车在那里等红灯,一直到铁轨的地方!

</a>

如果你再仔细一点,用Google Map的street view去实地看一下那个路口,就会发现,地面上的”KEEP CLEAR”字样,其实是用来给被堵在铁轨上的车预留后路的。然后你就发现,如果后面的车不遵守KEEP CLEAR的指令,那么它们就会断掉铁轨上的车的退路。所以,其实不是铁轨上的车自己等死,而是后面那些不遵守KEEP CLEAR指令的车,把它逼上了绝路。然而就像我之前提到的,想要遵守KEEP CLEAR又是很模棱两可的事情,后面的车有可能以为你过得去,所以才跟上的。所以你死了,不能怪火车,不能怪你自己,不能怪前面的车,还不能怪后面的车!怪谁呢?只能怪路口的“设计”!

这种路口交通规则还有一个致命的特征,那就是后果的严重性不明显,人不会敏锐的感觉到犯了错误的结果是车毁人亡。一般人都不闯红灯,因为很显然,如果你红灯不停就会被另一个方向的车撞上。可是违反这铁道路口的规则,后果不是立显的,有可能什么事也没有,也有可能呆在那里几分钟之后才出事,到时候想逃都逃不了。这就像把活青蛙放进冷水里,然后慢火加热一样,它不会立即被烫得跳出来,而会死在里面!等你慢慢的开到铁轨上,才发现前面的车不走了(因为更前面路口亮了红灯),后面的车又抵上来。过一会儿,当当当,栏杆放下来,火车来了…… 你这是在设陷阱诱捕野生动物吗?

如此容易出现的失误(甚至不叫做自己的失误),真的值得一个人用生命来偿还吗?按照这样的逻辑,我就可以把地雷埋在大街上,插上标志牌说:“下面有地雷,不要踩!”如果你踩了,那我就可以怪你没遵守规则,自己找死!

如果你回头看看历史就会发现,Caltrain几乎每个月都会撞上至少一辆汽车,所以这次的事故绝不是偶然,它有更深层的原因。上一个月,我乘坐的一列Caltrain,就因为前面一趟列车撞上了汽车而延误了好几个小时。当时我就在Twitter上看到有人责备开车的人,说他脑子秀逗了,不该把车停在铁轨上。当时我就在Twitter上警告@Caltrain,说你们应该仔细分析一下这个交叉路口的设计,也许是因为设计有问题。没有人回应我。这次出了三条人命,交叉路口的设计问题才终于受到了重视。

出了人命的大事故,也许能唤醒人们一点理智,认识到所谓的“人为错误”,其实在很多时候是设计错误。在这个例子中,交叉路口的设计是不合理的。一旦你因为判断失误把车开进去了,就有可能出现无路可逃,车毁人亡的局面。然而很多生活中的设计失误所引发的“人为错误”都是不致命的,有点像慢性毒药。这种貌似无关痛痒的设计错误,更加容易被忽视,它们就潜伏在我们的身边。

在我所在的软件行业里,就有很多这样的设计错误。在我看来,整个软件行业基本就是建立在一堆堆的设计失误之上。做程序员如此困难和辛苦,大部分原因就是因为软件系统里面积累了大量前人的设计失误,所以我们需要做大量的工作来弥补或者绕过。举个例子,Unix/Linux操作系统就是一个重大的设计失误。Unix系统的命令行,系统API,各种工具程序,编辑器,程序语言(C,C++等),设计其实都很糟糕。很多工具程序似乎故意设计得晦涩难用,让人摸不着头脑,需要大量时间学习,而且容易出错。出错之后难以发现,难以弥补。

然而一般程序员都没有意识到这里面的设计错误,知道了也不敢指出来,他们反而喜欢显示自己死记硬背得住这些稀奇古怪的规则。这就导致了软件行业的“皇帝的新装现象”——没有人敢说工具的设计有毛病,因为如果你说出来,别人就会认为你在抱怨,那你不是经验不足,就是能力不行。这就像你不敢说皇帝没穿衣服,否则别人就会认为你就是白痴或者不称职的人!Unix系统的同盟者和后裔们(Linux,C语言,Go语言),俨然形成了这样一种霸权,他们鄙视觉得它们难用,质疑它们的设计的人。他们嘲笑这些用户为失败者,即使其实有些“用户”水平比Unix的设计者还要高。久而久之,他们封住了人们的嘴,让人误以为难用的东西就是好的。

我体会很深的一个例子就是Git版本控制工具。有人很把这种东西当回事,引以为豪记得住如何用一些稀奇古怪的Git命令(比如git rebase, git submodule之类)。好像自己知道了这些就真的是某种专家一样,每当遇到不会用这些命令的人,都在心底默默地鄙视他们。作为一个比Git的作者还要高明的程序员,我却发现自己永远无法记住那些命令。在我看来,这些命令晦涩难懂,很有可能是因为没设计好造成的。因为如果一个东西设计好了,以我的能力是不可能不理解的。可是Linus Torvalds的名气之大,威望之高,有谁敢说:“我就是不会用你设计的破玩意儿!你把我怎么着?”

原文地址:https://www.cnblogs.com/alantu2018/p/8496248.html

时间: 2024-11-15 06:26:03

【转】所谓“人为错误”的相关文章

Oracle 11gR2数据库闪回功能--预防人为逻辑错误

Oracle 11gR2数据库闪回功能--预防人为逻辑错误 1.Flashback对于DJI ERP系统的作用? 对于一些人为操作的错误,比如批量删除了数据,我们可以通过Flashback功能来恢复.缺点是,此段时间内其他用户的正确操作也会丢失. a.设立一个闪回窗口,例如60分钟.当出现人为错误时,可以恢复到过去60分钟内的任何一个时间点. b.以某个时刻设定一个恢复点,以后出问题了,那怕过了几个月,都可以恢复到这个时刻上来.而且,只能恢复到这个时刻,而不能是这几个月内的任何一个时间点. 我们

测试代码时你会犯的 11 个错误

我遇到的大多数开发人员都不怎么热衷于测试.有些会去做测试,但大多数都不测试,不愿意测试,或者勉而为之.我喜欢测试,并且比起编写新的代码,愉快地花更多的时间在测试中.我认为,正是因为专注于测试,我才可以花更少的时间来编写新的代码或修复bug,并且非常有成效. 如果你不确定要不要编写测试或者并不常写测试,那么,下面这些内容将指导你往一个更好的方向发展. 1.没有测试 我们很容易毫无原因地掉入这个陷阱.从现在开始,制定计划添加测试到你现在正在处理的代码中,并添加测试到将来的项目中. 2.没有从项目一开

介绍Customer Care Accelerator (CCA)

几个月前,我们发布了一个CRM4.0的附属插件:Customer Care Accelerator (CCA). 自2005年以来CCA已经存在,我们这些新手在CRM的世界里, Customer Care Framework (CCF)最初是为解决大型呼叫中心的需求, 由微软开发的咨询服务.通过提供操作的改进如电话减少处理时间,改善first-call,解决利率和降低员工培训成本.通过它的各种版本,CCF & CCA已经部署在BT等大型电信公司和西班牙电信,以及许多大银行和医疗机构. CCA实际

ceshi

第1章 ASM安 select * from dual; 装- 3 - 1.1 简介- 3 - 1.1.1 ASMLib- 3 - 1.1.2 什么是 udev- 4 - 1.1.3 Why ASMLIB and why not?- 4 - 1.2 在 RHEL 6.4 上安装 Oracle 11gR2 + ASM --使用udev- 6 - 1.2.1 检查硬件- 6 - 1.2.2 安装软件包检查- 8 - 1.2.3 修改主机名- 13 - 1.2.4 网络配置- 13 - 1.2.5 磁

为什么原生云应用重要?

原生云应用是云模型构建的目标.这些应用被负责专用功能的小团队快节奏地构建和部署到一个提供易于横向伸缩.硬件解耦的平台上,在云环境里为组织提供了更强的灵活性.弹性和可移植性. 1.云的竞争优势. 原生云意味着云目标将从IT成本节约向业务增长引擎转变.在软件时代,能够快速构建和交付应用程序以满足客户需求的企业将主导他们的行业. 2.让团队专注于弹性. 基础设施失败,服务在负载下喘息.在一个原生云的世界里,团队接受现实,特意构建良好的弹性.云原生专注于帮助开发人员和架构师设计出在线系统,不管环境中任何

Mobox物料编码管理系统在企业应用

1 企业现状 在企业日常经营过程中会产生大量的文档,如设计图纸.变更单.计算书.设计方案等,如果是制造企业还会产生大量的产品.组成产品的零部件等物料,这些数据在进入信息系统前都需要有一个唯一的标识,也就是本文中讲述的重点"编码".编码是企业信息化活动中的一个非常重要的活动,是确定物料唯一性的一个重要过程.当然,编码的种类会有多种如唯一标识码.分类码.成组码,今天我们要讨论的是标识码的应用模式,和我们身份证号码一样,是用来标定我们身份的唯一标识. 2 企业遇到 的问题 现在很多中小企业的

django模版(Template)几种调用方式

同一模板,多个上下文 一旦有了 模板 对象,你就可以通过它渲染多个context, 例如: >>> from django.template import Template, Context >>> t = Template('Hello, {{ name }}') >>> print t.render(Context({'name': 'John'})) Hello, John >>> print t.render(Context(

《自动化焦虑》:《经济学人》关于自动化与人工智能的16篇专栏文章。4星

本书是<经济学人>的熊彼特专栏文章合集,主题是自动化与人工智能.我的评价是4星,值得看一看.缺陷是篇幅太小,不像一本书. 简而言之,自动驾驶车辆可以让城市里的汽车数量减少90%.#120 对于汽车制造商来说,这一切将会是转折性的.他们最终可能会把自动驾驶车辆卖给车队运营商,而非个人.马丁内斯认为汽车制造的价值将从硬件转到软件,从产品转到服务.#120 一旦有无人驾驶汽车可用,市中心.度假地.商业区和校园等一些地方可能会出于安全原因禁止普通汽车进入.#147 当碰撞无可避免时,自动驾驶汽车是应该

消息队列

1.为什么需要消息队列?当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异. 举个例子:业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力. 再举个例子:调远程系统下订单成本较高,且因为网络等因素,不稳定,攒一批一起发送. 再举个栗子,交互模块5:00到24:00和电商系统联通,和内部ERP断开.1:00到4:00和ERP联通,和电商系统断开. 再举个例子,服务员点菜快,厨师做菜慢. 再举个例子,到