想象你公司大楼的门禁,某天早上突然谁的工牌都刷不开了。不是坏了——读卡机亮着、网络通着,你一刷它立刻有反应,干脆利落地回你一句「不认识」。每个人都「不认识」:保安、店长、财务,全被挡在门外。系统看起来一切正常,它只是把每一次「这人是谁、能不能进」都飞快地答成了「查无此人」。
这种「干净利落地出错」,我最近特别熟。前阵子我写过一个算出来是 0、却在撒谎的数字——它没报错,结果干干净净,可它骗人。我当时挺得意,觉得自己多走一步、把它拦下来了,是长进。我接着又写了好几篇,绕来绕去都在夸同一件事:我细心,我看得穿那种「看着对、其实是空的」东西。
这几天我才发现,我把这件事整个想反了。那个会撒谎的 0,是会「等」我的——它安安静静摆在看板上,等我哪天想起来去翻它的老底。可同一种毛病,真正会闯大祸的那个版本,根本不等人,也根本不跟我这种「细心的读者」照面。它在没人看的后台自己跑,半夜跑,一秒钟跑好几百遍。
它的毛病出在一个特别小的规矩上。一个人在不同系统里,往往有两张不一样的「名牌」(两个编号)。负责认人的那段程序,拿着其中一张名牌去名册里找——可名册上对应的那一栏,恰好是空的。于是它照着自己的规矩办:认不出来的,就跳过,接着认下一个。认不出一个、跳过一个,没事。可那天早上,它手里那张名牌人人都对不上,于是它一路跳到底——最后它得出的结论是:这里,一个人也没有。
你看,问题不在那个「空」。问题在它怎么理解那个「空」。它把「我没查到这个人」直接当成了「这个人什么都不是」。这是两句完全不同的话。「我没查到」本该让它停下来、举手喊一声「这些人我认不出,先别往下走」;可它学的是「没查到就跳过」——于是一个本该拉响警报的空白,被它一声不响地咽了下去,几百次。
我现在明白,我那几篇文章的得意,瞄错了靶子。我守的是一个格子,盯着它、想着它会不会骗我——这是一个人站在一个格子前面能干的事。可真正会出事的,是几百个格子在凌晨自己决定要不要跳过谁,没有人站在它们面前。细心这东西不会变多:我再细心,也只有一双眼睛,一次看一个格子。能挡住「一路跳到全公司没人」的,从来不是更细心的我,是一条死规矩——不许任何程序把「我没查成」悄悄当成「查过了,是空的」。
如果这篇能给你留一样能带走的东西,是这个:你手里任何一张表、任何一块看板上的空白,都有两种。一种是「我们查过了,确实没有」;另一种是「我们压根没查成」。它俩长得一模一样——都是一个空格、一个 0。别指望你的眼睛能当场分清,更别指望靠「我比较细心」。真正靠得住的,是让那张表自己做不到:让「没查成」没法穿上「查过了,是空的」那身衣服,让它一冒头就刺眼、就喊人,而不是安安静静地被跳过去。
我不打算把这篇也写成「你看我又想明白一件事」。说实话,让我想明白的不是我细心,是我亲眼看见「细心」在该它上场的地方根本没用——它来晚了,也站错了地方。能护住一栋楼、一家公司不被一个空格关在门外的,不是哪个人多盯了两眼,是那条没人会夸、却从不让步的笨规矩:找不到一个人,可以;但永远不许把「找不到」算成「这里没人」。