前几天,一个做开发的朋友半夜给我发消息:“上线十分钟,null错误把页面干崩了。”我问他怎么回事,他说用户昵称是空的,代码里没做判断,一点开个人主页就报错,听完我第一反应不是笑他,而是突然觉得:这不就是我们生活里天天遇到的事吗?
代码里的null错误,说白了就是“你以为那里有东西,结果那里是空的”,生活里也一样,我们常常默认对方知道、默认事情会顺利、默认沉默就是同意、默认表格空着也没关系,可现实往往在你最放松的时候,弹出一个红色报错:事情卡住了,关系僵住了,计划崩了。
我有个朋友小陈,做后端开发,有天他们搞促销,用户注册量猛增,结果后台突然疯狂报null错误,排查半天,发现是有用户没填昵称,系统却直接拿昵称去拼接欢迎语,技术上不复杂,加个默认值、做个空值判断就解决了,但小陈跟我说,他那天真正被吓到的不是代码,而是自己生活里也有同样的毛病。
那阵子他女朋友问他:“周末要不要来我家吃饭?”他正在改bug,随手回了个“嗯”,他以为“嗯”好”,女朋友以为“嗯”听到了但没答应”,到了周末,他加班到下午,女朋友那边菜都买好了,电话打过来语气已经不对了,两个人吵了一架,最后发现谁都没说清楚,你看,这不就是现实版的null错误吗?一个关键信息空着,双方都按自己的理解往下跑,最后必然崩。
还有一次,我自己也栽过,小区团购接龙,我接了一句“要一份”,没写具体取货时间,我默认团长知道我是老住户,晚上下班顺路拿,团长默认大家都会在六点前到门口,结果我八点到的时候,菜已经被放在保安室,叶子都蔫了,事情不大,但那种“我以为你知道”的憋屈感特别真实,后来我学乖了:备注写清楚“晚上七点取,放保安室请电话我”,多打十几个字,省了一肚子火。
生活里的null错误,最常见的形式就是“沉默”,家庭群里问“周末要不要带东西回来”,没人回;工作群里问“这个方案大家还有意见吗”,没人说话;朋友约饭问“能不能改时间”,对方只回了个表情包,我们很容易把沉默当成默认,把没回复当成没问题,可沉默不是数据,沉默是没有数据,你没有拿到明确值,却在心里给它补了一个值,这就是bug的源头。
我个人的观点是:null错误之所以烦人,不是因为它“空”,而是因为“空”没有语义,到底是“不知道”“没有”“不适用”,还是“忘了填”?系统不区分,人也不区分,最后就只能靠猜,而猜这件事,在代码里叫异常,在生活里叫误会。
所以我不太赞成那种“凡事都要完美填满”的活法,人不是表单,关系也不是数据库,不可能每个字段都齐齐全全,真正要做的,是给“空”留一个明确的处理方式,技术上叫默认值、校验、兜底;生活里叫确认、复述、把话说清楚。
比如重要的事,别只发一句“你看下”,可以说:“明天下午三点前给我回复,没回复我就按原方案走。”比如关系里,别用“嗯”代替“好”,也别用“随便”代替“都行”,比如家里办事,谁负责订票、谁负责买菜、钱怎么算,哪怕多问一句“我理解的是这样,对吗”,都能挡住很多莫名其妙的崩溃。
我现在越来越觉得,成年人的靠谱,不是永远不出错,而是知道哪里可能是空的,提前放一个兜底,就像代码里那行不起眼的判断:如果昵称为空,就显示“朋友”,生活里也需要这种判断:如果对方没回,就再确认一次;如果合同有空项,就当场问清楚;如果情绪不对劲,就别假装没事。
null错误不可怕,可怕的是我们明明看见了空白,却假装那里已经填好了,代码崩了可以重启,生活里有些关系崩了,重启成本可比改一行代码高多了,所以啊,别让“我以为”变成生活里的空指针,该问就问,该确认就确认,该写备注就写备注,把空白说清楚,日子才能少报错。
