跳到主要内容
没人接的那条通知

没人接的那条通知

夜航船
夜航船

· 阅读约 5 分钟

手机是扣着放的。这个毛病有些年头了,大概是从"你有一条新消息"这种小红点开始哪儿都往外冒的那阵子落下的,扣下去,屏幕朝下,震一下就震一下,眼不见心不烦。前天夜里我又这么扣下去的时候,顺手想起来一篇前些日子读到的东西,是个印度那边的年轻工程师写的,讲 AI 编程。

那篇东西大半篇幅在讲一件我不太有共鸣的事,大意是有人拿一句提示词糊出个页面,往免费主机上一挂,当天就管自己叫创始人,工程活一样没干。这种话我听着总觉得隔着一层,不是不认同,是觉得说来说去也就那样,犯不上再跟着添一句。真正让我在桌边多坐了一会儿的,是他在后半段自己招出来的一个 bug。

他那个项目原本是大学里的一份作业,一个书友会的小应用,交完就搁在 GitHub 上不动了,搁了好几个月;后来借着别人办的一个"把没做完的项目做完"的活动,才重新翻出来往生产环境上搬。搬的过程里添了不少东西,聊天从轮询改成了真的 socket,阅读室做成实时的,数据库也换了地方,这些做完都挺顺,一直到上线几个礼拜之后,开始有用户说漏私信。

他给推送通知写过一段自认为很聪明的处理:如果那个标签页这会儿是看得见的,就别再弹桌面提醒了,同一条消息提示两遍,烦。逻辑干净,跑起来也没毛病。问题出在他把"屏幕能把这个像素画出来"当成了"有人正看着它"。有人把页面开在第二块显示器上,一整天不去碰,那个标签页在系统眼里始终是"可见"的,提醒就一直被压着不下去,消息一条一条地漏。他在本地怎么都复现不出来,因为代码完全按设计跑着,一个字符都没错。

最后他把这段优化删了。理由我记到现在:多弹一下顶多是烦,被悄没声丢掉的消息,是这东西已经坏了。他宁可要那个烦。

这个 bug 不在代码里,在他对"可见"这两个字的理解里。测试是绿的,演示是漂亮的,Copilot 在这个项目里也确实搭了手,socket 那一摊、迁移时候冒出来的导入错误、还有几个他本来也得翻文档才能写顺的 UI 写法,都是它帮的。可这个忙它帮不上。不是它不够聪明,是这个 bug 压根不在它被叫来看的那个地方。你写多少提示词也问不出来,因为该问的那句话是"我们说的可见,到底指什么",而这句话得由人来问,还得是出了事、被人骂过之后才问得出口。

代码能跑通,和你知道它凭什么跑通,中间隔着的不是一段解释,是一段时间,一段愿意对着一个完全正常的系统发呆的时间。这话说出来有点绕,我自己也不是每次都做得到。我从前也干过类似的聪明事,为了把日志收拾干净,把重复的报错合并成一条,后来线上出事那天,日志里干干净净地躺着一行"以上错误重复若干次",而那若干次恰好散在不同的钟点上,正是最要紧的信息。教训跟了我很多年,跟到今天也还是偶尔犯。

那篇文章开头还提了件我起初以为是客套的事,9 月 15 号是印度、斯里兰卡、坦桑尼亚那边的工程师节,纪念一个叫 Visvesvaraya 的人。我特意去看了看这人的来路。他修过大坝,在好几处做过灌溉和水资源的事,最早那套自动水闸就装在一座水库上。他从来不自称创业者,一辈子基本就干一件事:让水真的蓄得住。蓄水这件事有个好处,它不表演。闸门开合得漂不漂亮没人拍,水位上没上去,一眼就看得出来。

我们现在做的很多东西,恰好是反过来的那一面。演示的时候满堂彩,至于第三天有没有水,那是另一回事,而且往往要到第三天才会有人问。我觉得这跟用不用 AI 关系不大,AI 只是把这条缝拉得更顺手了:从前糊一个页面好歹还得自己敲上半天,如今那半天也省了,省下来的时间本来可以用来问一句"可见到底指什么",可惜多数时候不会,因为没出事的时候,没人觉得这句话有问的必要。

那篇东西底下评论不少,我大概翻了翻,说的多半是同一个意思,只是各人有各人的说法。有一条我觉得说到了点子上,大意是这种 bug 之所以能过测试,是因为它压根不是代码的毛病,是一个词上的假设站不住脚,而演示和生产之间的那段距离,量的就是这种东西。这话我认。但也得承认,这种话谁都能说,真轮到自己项目上,还是照样把那个标签页开着不看。

他文末留了个问题,问的是用 AI 造东西,和看着 AI 替你造东西,界线该划在哪儿。这问题问得好,可我觉得答案大概不在"用不用"上。他自己那个项目,Copilot 写的也不少,没人会说那不算他的活,因为漏消息的那几个礼拜是他熬的,删掉那段优化的是他,第二天要跟用户交代的也是他。界线就在这儿:出事的时候,是谁的名字挂在门口。

天快亮的时候我把手机翻了过来,屏幕朝上,静音顺手也关了。没漏掉什么要紧的,几条推送,一条广告,一个群里有人半夜发了张猫的照片。我倒也说不好为什么要关静音,可能就是这个岁数了,越来越受不了什么东西在背地里悄没声地漏过去,哪怕漏掉的只是几条无关痛痒的提醒,也想让它响一声,好让我知道它来过。