预警程序停止运行的那天,李想起得很早。
他住在城东一个老小区的五楼,一室一厅,家具很少。客厅里一张桌子、一把椅子、一个书架,书架上全是技术类书籍,按出版年份排列。卧室里一张床、一个衣柜,衣柜里五件同款白衬衫、三条同款黑裤子。厨房里一口锅、一把刀、一个砧板,冰箱里只有鸡蛋、牛奶和速冻水饺。他的生活就像一个被精简到极限的算法——每一个变量都有存在的必要,没有多余的东西。
这是他写代码的方式,也是他生活的方式。
早上六点半,他坐在桌前打开笔记本电脑。屏幕上弹出一条系统提醒:“预警程序检测到长期无新关键词触发,建议归档或删除。”他点开程序日志,最后一次触发记录停留在五月二十日——林悦的婚礼。触发关键词是“甜品台”和“伴手礼”,优先级标注为“高”,处理结果是“全部交付”。之后日志里只有一行又一行的“运行正常,无新关键词触发”,每天一条,从不间断。
他往上翻。日志从三年前开始。
第一条:2022年7月21日,23:49。关键词:螺蛳粉、酸笋、不臭。优先级:S。这是陈哲把林悦的小红书截图发到群里的那个深夜。李想记得自己当时正在调试一套库存预测模型,看到截图后花了四分钟写完了关键词抓取脚本。脚本的原理很简单:对特定用户的主页进行文本抓取,拆解关键词,匹配内部产品数据库,如果现有产品无法满足需求则自动生成工单。他用了一个现成的自然语言处理框架,改动不超过五十行代码。写完他测试了一遍,跑通了,然后发到群里:“工单已生成。”
他从来没说过这五十行代码后来被他反复优化过多少次。从关键词匹配到语义理解,从被动抓取到主动预测——如果用户连续三次搜索“不臭”“酸辣”“速食”,即使没有直接表达愿望,程序也会自动推演可能的需求方向并生成预备工单。他写过一份内部文档,标题是“基于社交文本的用户需求预测模型”,在技术分享会上讲过。张伟听完说“一个字没听懂”,赵凯问“能不能预测她下次想吃啥”,陈哲说“不要预测,让她自己发现”。他把陈哲的意见写进了模型优化备注里:“不做预判性推送,仅做需求识别与分类。让用户自己发现。”
他继续往下翻日志。
2022年8月:关键词“酸辣粉”“酸豆角”。优先级A。同年9月上线清香酸辣粉。
2022年10月:关键词“切洋葱不流泪”“净菜”。优先级b。q系列净菜产品线启动调研。
2023年1月:关键词“酸菜鱼”“酸菜太腥”。优先级A。供应商谈判周期较长,2023年8月上线清香酸菜鱼。
2023年7月:关键词“穿堂风”“冰西瓜”。无匹配产品。工单转发至配送端。次日赵凯在群内回复:“铁皮桶加冰块,老王已执行。”
2023年9月:关键词“心意盲盒”“男朋友”“放松的夜晚”。优先级S。这是林悦第一次给江一航下单。他记得那晚他正要关电脑下班,看到提醒后重新坐下来,用一分钟查了库存,把降噪耳机和颈部按摩仪的SKU截图发到群里。陈哲说“正常流程”,他说“好”。
2024年5月20日:关键词“婚礼”“甜品台”“伴手礼”。优先级高。全部交付。这是最后一次触发。那天他站在婚礼现场的银杏树下,手里端着桂花酒酿芝士蛋糕,赵凯说“不用记了”,他说“要记”。他打开手机,在程序里手动写入了最后一条日志。
他在日志的最底部停留了很久。光标一闪一闪地等着他。他打字向来很快,但这次每个字都敲得很慢,像是要把每个字都刻进磁盘里。
“SF-2024-0721,最终状态:全部交付。”
他保存日志,关闭程序窗口。然后打开代码编辑器,翻到预警程序的主文件。这个程序在他的硬盘里躺了三年,从五十行脚本变成了一套完整的需求预测系统,被正式收编进大象超市的用户洞察产品矩阵,服务于上百万用户。他为无数人写过代码,但只有这一套程序,他记得每一行是怎么写出来的,每一次迭代是因为她的哪一条笔记。现在程序不会再被触发了。不是因为她不再许愿,是因为她的愿望换了一个人接收。
他打开程序文件的头部注释。那里有一段他三年前写的说明,每次迭代都会更新版本号和修改记录,但最上面的那几行字从来没改过。
“程序名称:projectElephant(大象计划)。功能:特定用户需求识别与响应。创建日期:2022年7月21日。创建人:李想。备注:用户不知道这个程序的存在。程序本身也不重要。重要的是程序背后的东西。”
他在备注下面加了一行新的注释,日期写的是今天。“此程序不再需要运行。但她永远是最高优先级。”他写完之后检查了一遍拼写,确认没有任何错误,然后按下了ctrl+S。
张伟曾经问他,为什么做所有事都要记录。他说,因为人脑不可靠,数据才可靠。张伟说你以后会忘记吗。他没有回答。现在他知道答案了——他不会忘,但他仍然要记录。因为数据不只是用来记忆的,是用来证明的。证明那些事确实发生过,证明一碗螺蛳粉的起源不是用户调研报告,而是一个女孩的深夜牢骚。
他关掉编辑器,打开内部服务器。预警程序的所有文件——源代码、运行日志、迭代记录、备注文档——被压缩成一个不到三百兆的文件夹。他在服务器上新建了一个目录,命名为“归档/projectElephant”。他把文件夹拖进去,在目录说明里写了一行字:“该程序已完成使命。保留所有日志作为产品史档案。任何人不得删除。”然后他把服务器链接发给了陈哲。
“预警程序已归档。文件保留,权限移交给你。你想删的话,我不会拦。但我不建议删。”
陈哲在三分钟后回复:“不删。”
李想收到这两个字之后,靠回椅背。清晨的阳光从窗户照进来,照在笔记本电脑的屏幕上,照亮了归档完成的那行提示。他看了一眼时间——早上七点十五分。该上班了。
他站起来,穿好衬衫,扣扣子的时候从衣领上捻下一小截线头,扔进垃圾桶里。然后出门,锁门,走过五层楼梯。在楼梯口遇到了隔壁刚搬来的年轻租户,一个穿格子衫的男生,手里提着大象超市的配送袋,袋子里露出螺蛳粉的淡绿色包装。男生冲他点了点头,他也点了点头。他认出了那个包装——清香螺蛳粉。
他站在楼梯口,看着那个男生掏出钥匙开门。有那么几秒钟,他想说“那个螺蛳粉不臭,酸笋用的是植物乳杆菌发酵”。但他没有说。不是所有的事都需要解释,不是所有的心意都需要让接收者知道来源。
他转身往公司走。上午九点,他准时坐在研发部的工位上,面前的屏幕亮着,左边是代码编辑器,右边是昨天的系统运行日志。工位旁边的墙上贴着一张便签,是小艾离职前留的,上面画了一只卡通大象,旁边写了一行字:“李工,记得按时吃饭。”便签已经贴了大半年,边角有点卷了,但他一直没有撕掉。
他看了一眼便签,然后继续写下一行代码。