Skip to content

第一百五十章 58%的回声

数据是从周三下午开始烂的。

王总公司的三十辆货车,每辆车一个数据文件夹。林知行打开第一个文件夹的时候,还以为自己点错了——里面是一张手机拍的照片,拍的是一本软抄本,纸页发黄,字迹歪歪扭扭,记录着某辆车过去三个月的出车时间、油耗、里程。

他打开第二个文件夹。Excel表格,格式倒是规整,但列名是"出车时间""跑了多少""油钱""备注"——不是标准字段,没法直接入库。

第三个文件夹里是三十七张微信群截图。

"王总公司的数据比预想的差十倍。"林知行坐在折叠桌前,盯着屏幕,把这句话跟方小满说了一遍。方小满正在沙发上回客户消息,头都没抬:"意料之中。小物流公司嘛,能有数据就不错了。"

问题是不能只"有数据"。调度算法需要标准化的输入——车牌号、司机ID、出车时间、线路编号、油耗、里程,这些字段缺一个,模型就跑不起来。

三十辆车,十五种数据格式。有的用纸质记录拍照上传,有的用Excel但列名不统一,有的根本没有历史数据只有微信群里的口头汇报。

林知行在白板上画了一个表:左边是"需要的字段",右边是"现有数据"。对应关系一目了然——大部分是错位的,有些干脆对不上。

他花了一下午写了一个数据清洗脚本,试图用正则表达式从微信群截图里提取关键信息。试了三辆车的数据,准确率大概60%——还有四成需要人工校对。

脚本跑完之后他盯着输出结果看了一会儿,把椅子往后推了推。

"周然,"他喊了一声。

周然的工位在客厅角落,一张折叠桌上摆着笔记本电脑和三个显示器支架——支架是方小满从旧货市场淘的,三十块一个,有一个摇摇晃晃,底下垫了半本《三体》。

"在。"周然抬起头,眼镜片上反射着屏幕的光。

"数据格式的事,你能处理吗?"林知行把脚本的输出结果发给他,"脚本只能解决一部分,剩下的得人工对。三十辆车的数据,我估计得花点时间。"

周然把输出结果看了一遍。

"行,"他说,"我来。"

没有问"为什么是我",没有问"什么时候要",没有问"有没有文档"。

林知行想起了自己刚入职灵犀的时候——周睿给他的第一份工作也是数据清洗,五十万条用户交互数据,格式乱得像垃圾堆。他也没问,只是坐下来开始干。

区别在于,那时候他有两周时间。周然没有。

周四晚上十一点,林知行去厨房倒水,路过客厅,看到周然还坐在工位上。屏幕亮着,他面前摊着一叠打印出来的数据表——纸质记录的那一部分,他从照片里手动抄录的。

"周然,"林知行说,"今天先到这里。"

周然没抬头:"还有几辆车的数据没对完。"

"明天再说。"

"明天还有别的事。"周然把一条数据手动输入Excel,"方哥说下周要去长沙跟王总开会,数据不整理完没法做演示。"

林知行想说"我来帮你",但他看了一眼自己的屏幕——明天上午要跟陆可盈汇报财务数据,下午要调调度算法的参数,晚上还要给贺记粉面的贺总写一份菜品优化方案。

他没有多余的时间。

"那你别太晚。"他说。

周然点了点头。

林知行端着水杯回了自己的工位。

周五晚上,他在行军床上躺下来的时候,听到客厅那边还有键盘声。手机显示凌晨一点十二分。

周六早上他起来的时候,周然已经在工位上了。桌上多了一个塑料袋,里面是两个冷掉的包子和一盒豆浆。

"吃了没?"林知行问。

"吃了。"周然说。

林知行看了一眼他的屏幕——数据表已经从十五种格式统一成了三种。进度比他预想的快。

"还有多少?"他问。

"还有八辆车的数据。"周然揉了揉眼睛,"有几辆车的纸质记录字太潦草,我得打电话跟司机确认。"

林知行点了点头。

他想说"辛苦了",但这两个字卡在嗓子眼里,没有出来。

周日下午,数据终于跑通了。

三十辆车,七百三十二条出车记录,全部清洗完毕,字段统一,格式规范,可以直接导入调度系统。周然把最终的数据集发到群里,附了一行消息:"数据整理完了,30辆车,732条记录,已验证。"

林知行打开数据集,抽查了十辆车的数据——准确率接近百分之百。有些字段周然还做了补充标注,比如"该司机周三固定休息""该线路高峰期绕行"之类的备注,是从微信群聊天记录里挖出来的信息。

他盯着屏幕,想打三个字——做得好。

手指放在键盘上,停了两秒。

然后他打了一行字:

"还有五辆车的数据没有做交叉验证。"

消息发出去之后,他盯着聊天窗口看了三秒。

周然秒回:"好,我现在做。"

林知行把手机放在桌上,走到窗边。

窗外四环路上车流不断,傍晚的阳光从西边打过来,把客厅的墙壁照成橘红色。方小满坐在沙发上,手里的烟烧了半截,灰掉在了裤子上。

他看了林知行一眼。

"你刚才在群里说什么了?"方小满问。

"说还有五辆车没做交叉验证。"

方小满把烟灰弹掉,站起身,走到林知行旁边。

他没有立刻说话。

"怎么了?"林知行问。

方小满看着窗外,沉默了几秒。

"知行,"他说,"你对周然说话的方式,跟周睿对你说话的方式一模一样。"

林知行的手指停在了手机壳上。

"周然三天没怎么睡觉,"方小满继续说,"把三十辆车的数据从垃圾堆里捡出来,整理成能用的样子。你看到了,你心里也知道他做得好。但你说出口的,是'还有五辆车没做交叉验证'。"

他转过头,看着林知行。

"周睿当年怎么对你的?你做完五十万条数据清洗,他说什么了?他说'格式还有一处不规范'。你做完可信度评分模块,他说什么了?他说'理论基础不足'。你每次做出成果,他只看到你没做到的部分。"

林知行的喉咙发紧。

"你现在对周然做的,是一样的事。"

方小满没有提高音量。他的语气平得像在念一份清单。

林知行没有反驳。

因为方小满说的是对的。

他站在窗边,阳光照在他脸上,但感觉不到温度。他的手攥着手机,指节发白。

"我去抽根烟。"方小满拍了拍他的肩膀,往门口走。

门关上之后,客厅安静下来。

林知行走到折叠桌前坐下。桌上摊着那个三块钱的笔记本——他习惯随手记东西,记完就翻过去,很少回头看。

他把笔记本翻到前面,一页一页地找。

翻到第四十七页的时候,他停住了。

那一页的纸已经发黄了,边角卷起来,有些字迹因为手汗变得模糊。但最上面那行字还看得清——

我在做O(1)的工作,但我的能力是O(n log n)的。

这行字是三年前写的。那时候他刚发现自己的算法思维在简单任务上被浪费了——接的小项目太浅,用不着他真正的本事。他在灵犀的角落工位上,在灰色工牌的阴影里,在周睿给他的边缘工作中,写下这行字。

O(1)的工作——数据清洗、跑脚本、整理文档。

O(n log n)的能力——问题拆解、系统架构、技术决策。

他那时候觉得自己被浪费了。

现在他看着这行字,忽然意识到——

周然在做O(1)的工作。三十辆车的数据清洗,手动抄录纸质记录,打电话跟司机确认潦草的字迹。这是最基础、最枯燥、最不被看见的工作。

周然的能力是O(n log n)的——他能从微信群聊天记录里挖出有用信息,能给数据做补充标注,能把十五种混乱的格式统一成标准字段。这不是简单的执行,这是判断力。

但林知行看到的,只是"还有五辆车没做交叉验证"。

他把笔记本翻回刚才的页面。

上面写着——

算法能算出最优路线,但算不出人心。

三年了。我还是在等别人告诉我变量是什么。

他在下面加了一行——

现在的周然,就是当年的我。

笔尖在纸上停了两秒。

他又写了一行——

但我没有变成周睿。我只是以为自己没有。

写完之后他盯着这两行字看了很久。

方小满推门进来的时候,他把笔记本合上了。

"想通了?"方小满问。

"没有,"林知行说,"但我知道该做什么了。"

他拿起手机,打开跟周然的聊天窗口。

输入框里周然的最后一条消息是:"好,我现在做。"时间是十七分钟前。

林知行打了一行字——

"今天辛苦了。明天放半天假。"

发送。

他盯着屏幕,等回复。

三十秒后,周然回了:

"不用,我还有一辆车的数据没整理完。"

林知行看着这条消息,心里忽然涌上来一种说不清的东西。

不是感动。不是心疼。是一种苦涩的认同——

三年前,沈渡说"你可以休息一下",他也是这么回答的:"不用,还有代码没写完。"那时候他觉得这是勤奋,后来他才明白,那是一个没有退路的人不敢停下来的本能。

周然也是。

二十五岁,大专学历,第一份正经的技术工作,老板是一个创业公司的创始人——他不敢休息。不是因为他不想,是因为他不确定"休息"会不会变成"不被需要"。

林知行盯着屏幕,打了一行字,删掉了。又打了一行,又删掉了。

最后他发了一条消息:

"放半天假。这不是商量,是命令。"

发完之后他盯着屏幕,心跳比平时快了一点。

周然的回复来得比上次慢。过了五分钟,屏幕上弹出一个字:

"好。"

林知行把手机放在桌上,靠在椅背上。

方小满站在旁边,把刚才的对话都看在了眼里。

"你刚才那条消息,"方小满说,"比你过去三个月对周然说的所有话加起来都有用。"

林知行没有接话。

他看着天花板,想起今天下午的数据——三十辆车,七百三十二条记录,准确率接近百分之百。

也想起另一组数据——长沙十家门店的第一批库存预测,准确率58%。

58%。

那是一个让人心凉的数字。比扔硬币好不了多少。

但58%不是终点。三个月后,那个数字从58%到了72%,再到82%。每一次提升,都是一条一条数据喂出来的,一个一个夜晚熬出来的。

周然做的这些数据清洗,看起来是O(1)的重复劳动。但没有这些劳动,调度算法连58%都跑不出来。

有些人负责造火箭,有些人负责拧螺丝。

但火箭上天的时候,功劳不能只记在造火箭的人头上。

林知行没有把这句话说出来。他知道说出来太刻意了——周然不需要他表扬,周然需要的是不被当成螺丝钉。

他能做到吗?

他不知道。

但他至少可以做一件事——让周然明天睡到自然醒。

方小满把烟盒扔在沙发上,去厨房热剩饭。

林知行一个人坐在折叠桌前,笔记本翻开着。

今天的页面上多了四行字——

算法能算出最优路线,但算不出人心。

三年了。我还是在等别人告诉我变量是什么。

现在的周然,就是当年的我。

但我没有变成周睿。我只是以为自己没有。

他把笔记本合上,塞进枕头底下。

窗外的天已经全黑了。四环路上的车灯还亮着,从这边流向那边,像一条永远不会停的数据流。

他躺在行军床上,盯着天花板。

58%。

那是一个起点。不是终点。

他闭上眼睛。

明天还有很多事要做。但今晚,他允许自己什么都不想。

方小满在厨房喊了一句:"吃饭了。"

林知行翻身起来。

折叠桌上摆着两碗泡面,方小满往里面加了两个鸡蛋。

"周然呢?"林知行问。

"他回房间了,"方小满说,"我让他先歇着。"

林知行点了点头。

两个人坐下来吃面。没有说话。

吃到一半,方小满忽然说了一句:

"知行,你今天那个'命令',不错。"

林知行抬头看了他一眼。

"但下次,"方小满用筷子指了指他,"可以在发命令之前,先说一句'做得好'。"

林知行愣了一下。

然后他笑了。

不是苦笑,是那种被人戳中了的、有点不好意思的笑。

"行,"他说,"下次。"

方小满把最后一个鸡蛋夹给他,自己把面汤喝干净了。

(本章完)