精彩小说尽在丛林文学网! 手机版

您的位置 : 丛林文学网 > 男生生活 > 《顶班骑手混入代码丛林》_精选章节

精选章节

更新时间:2026-11-09 03:22:53

电动车轮胎碾过科创大道上的减速带时,陈默的膝盖旧伤被颠得一阵发酸。

后座保温箱里的麻辣烫是今晚第十一单,取餐时老板娘多塞了包纸巾,说这是给“那个总加班的小伙子”的赠品。他抬头看了眼目的地——星驰大厦B座,电梯只能刷到十七层,十八层往上要用人脸识别。保安老赵认得他,摆摆手放行,嘴里嘟囔:“又是十八楼的,这礼拜第三个骑手了。”

陈默没细问。电梯上行的时候他检查了一遍封签,完好。汤底是微辣,备注栏写着“不要香菜不要葱,多加一份豆泡”。他送过三次这家的麻辣烫到十八楼,收餐人从来没露过面,全是让放前台。

但今晚前台没人。

整层亮着冷白色的灯,工位空了大半,靠窗还剩两盏屏幕在黑暗中发着蓝光。陈默喊了声“外卖”,最里面那盏屏幕后面探出半张脸,眼镜片反光得看不清五官,头发像被静电吸在头皮上。

“放这儿。”声音哑得不像活人。

陈默走过去,瞥见那人的屏幕上密密麻麻的彩色字块,窗口开得层层叠叠。他把餐袋搁在桌角,对方忽然伸手攥住他手腕,指甲几乎掐进皮肤。

“你明天还送吗?”

这问题问得没头没脑。陈默抽回手,说看排班。那人拉开抽屉掏出一张工牌拍在桌上,照片明显不是他本人,卡面印着“星驰科技·技术中台·周远航”。

“替我上三天班。不用写代码,就坐那儿,屏幕上开着项目文档,有人问就说不舒服去洗手间。一天两千,现结。”

陈默愣了两秒。这栋楼里通宵赶版本的程序员他见多了,但让人替班的头一回碰见。

“你们没打卡?”

“外包组不打卡。”那人——真正的周远航——从双肩包里翻出一件皱巴巴的文化衫,印着星驰的Logo,“穿这个就行,工位在十八楼C区37号,靠消防通道那个角落,摄像头拍不到人脸。主管周一才来,你混到周三,钱我今晚先付一半。”

微信转账的提示音当场响了,一千块,备注写“跑腿费”。

陈默盯着那行字。他妹妹下学期的学费还差八千,电动车换电池的钱也一直没着落。可这事儿听着就不对劲——万一被发现,算诈骗还是算入侵办公楼?

“你人呢?白天不出面?”

周远航灌了口麻辣烫的汤,烫得直吸溜嘴:“我在住院。心律失常,医生不让熬了。但版本发布不能停,我要是报病假,绩效直接打C,年终奖打水漂。”

他说这话时手指还在键盘上敲,屏幕右下角的倒计时显示离代码冻结还有六小时零七分。

“你随便找个懂点电脑的人也能顶,为什么找我?”

“这栋楼里送外卖的,只有你每次都会把汤和面分袋装。”周远航推了推眼镜,“我观察你三个月了。你细心,不废话,而且骑手身份最不会引起怀疑——谁会查一个送餐的有没有坐过工位?”

陈默把文化衫抖开看了看。胸口印着“用科技让复杂的世界更简单”,领口泛黄,腋下还有汗渍。

“我不懂代码。”

“不用懂。你就坐那儿刷手机,有人安排任务你就说‘收到,晚点看’,拖到下班。”

消防通道的绿灯箱在角落嗡嗡响。陈默想起上个月送餐到二十二楼,亲眼看两个HR架着一个面色蜡白的男生往外走,那男生工牌还挂在脖子上,人已经哭不出来了。

“三天之后呢?”

“周四我出院,我自己回来接着弄。你什么都不用交接,消失就行。”周远航把工牌推过来,“就当送了个跨夜的订单,收货人是我,送的是我的工位。”

陈默盯着那张工牌。照片上的周远航比现在胖一圈,头发也茂密。姓名栏下面印着工号,末尾是“0047”,像是某种排序。

“万一被逮住,我怎么说?”

“你就说你是新来的外包测试,第一天报到,走错工区了。外包公司名字我发你,背熟了就行。最坏的结果也就是被轰出去,他们不会为难送外卖的——上回有骑手错走到研发区,保安还帮他指路。”

这话听着像安慰,更像免责声明。

陈默把工牌揣进兜里,文化衫搭在手臂上。往外走的时候经过C区37号工位,桌面上落了一层灰,显示器侧边贴了张便利贴,写着“编译过了就是胜利”。旁边搁着半瓶眼药水和一只空了的外卖碗,跟他手里拎的这袋一模一样。

电梯下行时他给周远航发了条微信:“明天几点到?”

“九点半,别早。太早来没人,保安会盘问。”

“工位电脑能联网?”

“能。但别乱翻文件,只看项目主页的文档就行。有权限提示一律点取消。”

陈默盯着屏幕,突然觉得那只保温箱轻了不少。一千块已经到账,剩下的一千等周三晚上结——条件是“没被识破”。

夜风灌进领口时他打了个哆嗦。手机又震了一下,周远航补了句:“对了,如果有个叫老徐的胖子问我怎么瘦了,你就说我最近在节食。”

陈默把这条消息反复读了三遍,忽然笑出声来。他给周远航回了个“OK”的表情包,跨上电动车,拧把手的动作比平时利落了几分。

保温箱空了,但兜里多了张工牌。星驰大厦的灯光在后视镜里越来越小,陈默盘算着明天穿哪双鞋——送餐那双鞋底太滑,在写字楼地砖上老打趔趄。

可转念一想,他坐的是工位,又不是跑道。

1

清晨七点四十,星驰大厦B座闸机口排起长队。陈默把周远航的工牌挂在脖子上,照片里的人比他瘦两圈,他下意识缩了缩下巴。

前面那个穿格子衫的男人刷完卡没走两步,突然回头扫了他一眼。陈默心提到嗓子眼,对方却只是抬手:“哥们儿,你鞋带开了。”

他低头蹲下去系鞋带,发现自己的回力鞋在一地运动鞋里确实扎眼。电梯里没人说话,所有人盯着手机,陈默也掏出手机假装回消息,实际上在备忘录里狂敲:七楼右转第二排靠窗,椅子是黑的,邻座是个扎马尾的女生。

工位比他想象中窄。显示器已经亮着,桌面整整齐齐,只多了一杯凉透的咖啡和一张便利贴,上面写着“远航,昨天的构建又挂了,帮忙看下日志”。陈默把便利贴翻了个面盖住,掏出昨晚周远航给的文档截图,对着屏幕找了半天才找到那个所谓“项目主页”。

代码编辑器满屏绿字黑底,像下饺子时锅里的翻滚。他滚动鼠标滚轮,满眼都是英文缩写和尖括号,唯一能看懂的只有每行末尾的感叹号——周远航在交接文档里说过,“报错的地方都是感叹号”。

可整屏全是感叹号。

邻座马尾女生突然探过头:“远航哥,你那个构建到底修不修啊?老徐一会要来看。”

陈默喉咙发干,学周远航的语气嗯了一声:“在看了。”马尾女生狐疑地多看了他两秒,转身走了。他趁没人注意,偷偷拍了张屏幕照片发给周远航,配文:“哪个是构建?”

回复在三分钟后才来:“你他妈别拍我电脑屏幕发微信,有监控。”

又过了十秒:“最左边那列绿色的图标,点第三个,看最近一次运行记录。”

陈默点开第三个图标,弹出一大串时间戳和红色叉号。最近一条是昨晚十一点,备注写着“依赖包版本冲突”。他完全不懂什么叫依赖包,但盯着那行红色叉号看了半分钟后,脑子里忽然冒出个念头:这跟送餐时遇到封路绕行不是一回事吗——你以为是这条路不通,其实是前面那个路口在修,得从后面那条街倒着推回来。

他打开周远航交接文档的第五页,上面写着“构建命令最后一行是拉取依赖”,又对照屏幕上红叉前面那行字,发现它反复提到一个名字:node_modules。陈默在搜索栏里敲下这个词,跳出来一个文件夹,里面几十个子文件夹,每个里面又是几十个。

他想起送餐时老小区那种信报箱,大铁箱套小铁箱,一户一格。周远航的文档里写着一行备注:“如果提示找不到某个包,去共享盘找同事之前缓存的版本,路径在群公告里。”陈默切到聊天软件,翻了三分钟群公告,果然在一条“新人必看”的长消息末尾找到了那个路径。

他把路径复制进命令行窗口的时候手都在抖。回车按下去,屏幕开始滚字,滚了整整两分钟没报错。最后跳出来一行绿色提示:BUILD SUCCESSFUL。邻座马尾女生又探过头,正好看见那行绿字,咦了一声:“你修好了?怎么修的?”

“就……清了清缓存。”陈默把工牌翻了个面,假装低头系鞋带。

马尾女生哦了一声,在群里发了条消息:“远航哥把构建修好了,大家拉最新代码吧。”群里陆续冒出七八个“收到”“给力”“远航今天来得够早的”。

陈默靠在椅背上,后背全是汗。他给周远航发了条消息:“修好了,但我不知道修的对不对。”

周远航秒回语音,压着嗓子:“老徐刚才在群里@我了,说你修得对,还夸我最近技术进步了。兄弟,你他妈是个天才。”

陈默把手机扣在桌上,盯着屏幕上那行绿色提示看了很久。旁边马尾女生在跟别人说“远航今天怪怪的”,他假装没听见,从包里摸出周远航留下的那本《Java入门到入土》,把书立起来挡住半边脸。

书里夹着一张超市小票当书签,停在第47页。那一页上有人用红笔画了个圈,旁边写着一行歪歪扭扭的小字:“别慌,编译报错先看最后一行。”

陈默把这句话拍进手机备忘录,顺手把书签往后挪了十页。

2

陈默在第三天傍晚才见到周远航本人。

时间是六点四十分,写字楼B座货梯间,陈默刚送完最后一单奶茶,保温箱还没卸。周远航从消防通道探出半个身子,招手让他进来,反手把防火门带上,动作像接头。

“老徐出差了,明天回。”周远航从兜里掏出一个信封,鼓鼓囊囊的,“这周的,你点一下。”

陈默没接。

“你先说清楚,你人到底怎么了。”他靠着货梯间的墙壁,保温箱搁在脚边,“第一天代班你说发烧,第二天你说家里有事,今天你亲自来了,让我替你上楼——周远航,你到底在忙什么?”

周远航抓了把头发,二十七八岁的人,黑眼圈比送外卖的还重。他犹豫了五秒。

“我接了私活。”他说,“三个小项目,加起来够我半年工资。但公司这边不能断——老徐要是发现我接私活,绩效直接打C,年终奖就泡汤了。”

陈默看着他。

“所以你就找人顶班。”

“就这一周,最多十天。”周远航把信封塞进他手里,“你白天跑单,晚上帮我盯工位,不用干什么活,就坐着,有人找我就说在忙。老徐不在的时候你甚至可以提前走。”

陈默捏了捏信封厚度,差不多是他跑四天单的收入。

“那昨天那个部署问题呢?”陈默问,“我瞎弄的,你说老徐夸了?”

周远航的表情变得复杂,像在纠结什么。

“这就是我要跟你说的第二件事。”他压低声音,“组里其实都知道我最近状态不对。不只是我——整个项目组都在赶一个交付节点,三月底上线,现在缺人缺疯了。老徐上面还有总监压着,HC冻结了,招不了人。”

他顿了顿。

“大刘上个月猝死在工位上,你知道吧。”

陈默点头。他送过那天的餐,楼底下停了两辆救护车,保安拦着不让上电梯。

“大刘走了之后,他手上的活分给三个人做,谁都不吭声,但谁都扛不住。”周远航的声音更低了,“后来是小赵提了个方案——我们私下凑钱,找外面的人来顶大刘的坑。不用坐班,就每天来几个小时,把大刘留下的那些模块维护住就行。”

陈默花了三秒钟消化这段话。

“你们凑钱。”

“一人出一点,走组内经费——其实就是大家自己摊。”周远航苦笑,“我也出了一份,然后我发现自己实在没精力,就把我这摊子也外包给你了。”

“所以我是外包的外包。”

“你别说得那么难听。”

“你给的钱,是你从组里那份里抽了水吧。”

周远航没否认。他靠在防火门上,双手插进卫衣口袋,像个被拆穿的中介。

陈默低头看了看手里的信封。他想起昨天晚上在周远航工位上看到的那些代码注释,想起那个叫老徐的主管在群里夸“远航最近进步很大”,想起大刘工位上还贴着一张全家福没撕干净。

“我不白拿你的钱。”陈默说。

周远航抬头看他。

“你的私活我不管,但公司的活我正经干。”陈默把信封揣进冲锋衣内兜,拉好拉链,“大刘的模块我昨天看了,注释写得稀烂,但逻辑不复杂。给我两周,我把它重写一遍,你到时候自己交差也体面。”

周远航张了张嘴。

“你一个送外卖的——”

“我送外卖之前在大专学过两年计算机,后来家里出事才退的学。”陈默弯腰拎起保温箱,“你书架上那本Java,前四章我昨晚看完了。第五十七页到九十三页你折了角,我猜重点在那几页,今晚看。”

周远航的表情像被人往嘴里塞了个柠檬。

“你要多少?”

“不要额外加钱。”陈默背起保温箱,推开防火门,“但有个条件——你们组里如果有没人愿意看的文档、没人想写的注释、没人想测的边角功能,全丢给我。我白天跑单,晚上来消化。哪天老徐觉得大刘那摊子活需要个正经外包编,你第一个报我名字。”

周远航沉默着看他走进消防通道。

“你图什么?”他在后面喊。

陈默没回头,声音从楼梯间传上来,混着保温箱里塑料杯碰撞的响动。

“送外卖一天爬五十层楼,图什么?图个往上走的门。”他说,“你们大厂的门我翻不进去,但你们组后门不是开着吗。”

那天晚上九点半,陈默送完最后一单夜宵,在城中村的出租屋里翻开那本《Java入门到入土》。他把手机架在泡面盖上,屏幕里是周远航发来的一个压缩包,标注“大刘模块-原始代码-勿删”。

文件解压后七百多行。陈默读到凌晨一点,在笔记本上画了六张关系图。两点半的时候他给周远航发了条消息:“你明天帮我找一份你们项目的部署手册,最老那版就行。”

周远航凌晨四点回他:“你怎么还没睡。”

“我刚想明白一个事。”陈默打字,“大刘留的那个缓存模块,跟你昨天卡住的那个部署问题,是同一个毛病——他当时赶工期,留了个坑。我白天跑单的时候琢磨了一路,有思路了。”

对面沉默了整整三分钟。

然后周远航发来一条语音,声音明显是被人从被窝里拎起来的,带着一种刚醒又彻底清醒的沙哑:“陈默,你明天能不能早点来。我请你吃楼下食堂,十五块钱一位,随便吃。”

3

十一点四十,午高峰的尾巴还卡在写字楼电梯口没散干净。

陈默拎着最后两单外卖从货梯钻出来,黄色工服后背洇出一片深色的汗渍,贴在皮肤上发凉。他低头看了眼手机,周远航那条“早点来”的语音下面又追了三条消息,最后一条是九点零七分发的:哥,你上班还是我上班?

他拐进消防通道,把外卖袋搁在台阶上,开始剥自己这层皮。工服拉链拉到一半,手肘撞到墙上的灭火器箱,咣一声闷响。三秒后楼下有人吼:“谁啊!”陈默屏住呼吸,等脚步声远了才继续脱。骑手裤里头套了条运动短裤,这是昨天试验出来的方案——在消防通道里完成身份切换,比在厕所隔间靠谱。厕所人流量太大,他上周在七楼男厕换衣服时差点被保洁阿姨的拖把车堵在里面。

工牌塞在保温箱夹层里,用一袋没送出去的奶茶裹着。他抽出挂绳往脖子上一套,冰凉的塑料卡片贴着胸口,边缘被汗浸得有点翘。这卡是大刘的遗物,照片上的人脸圆,眼睛细,嘴角有一颗痣。陈默每次刷闸机都习惯性低头,好像那颗痣会开口举报他。

十二点零三分,他端着周远航请的食堂餐盘往工位走,路过茶水间门口的投影幕布,上面挂着一张A0纸,手写加粗:“冲刺三十天,决战双十一!”底下三十多个签名密密麻麻,陈默昨天照着大刘的笔迹把自己名字塞在了倒数第三行。

刚坐下,隔壁工位的赵姐探过头:“大刘,你上午那个部署脚本调通了?”

“通了。”陈默把盘里的红烧肉拨到一边,脑子里飞速过了一遍今早花四十分钟啃完的日志报错记录,“缓存那块加了个过期时间,防止死锁。”

赵姐哦了一声,转头跟对面人说今晚团建吃烤鱼。陈默松了口气,刚夹起一块土豆,余光扫到走廊尽头走来一个穿深蓝Polo衫的男人。那人四十出头,皮带扎得高,走路两只胳膊甩得开,像在自家客厅散步。

陈默嘴里的土豆嚼到一半停了。

张卫东。他顶班的这个部门的主管,陈默上周三送过他的单——一份轻食沙拉加一杯冰美式。当时张卫东站在大厦侧门口接电话,门禁卡从裤兜里滑出来掉在地上,陈默弯腰捡起来递过去,张卫东连声谢都没有,抽了卡就走。但陈默记得那张脸,也记得他那条皮带上磨白的扣眼。

此刻张卫东正朝这个方向走过来,手里攥着手机贴在耳边,目光漫无目的地扫过工位区。还有七八步远的距离。

陈默放下筷子,站起来。

“张总。”隔壁赵姐先打了招呼。

张卫东点点头,眼睛却定在了陈默脸上。陈默能感觉到那道目光像超市扫码枪,从工牌一路扫到领口。他脑子里飞速翻检大刘留下的所有信息——社交账号、聊天记录、甚至外卖评价里提到过的日常习惯。大刘说话带点皖北口音,陈默不会。大刘左撇子,陈默右手拿筷子。

“大刘,”张卫东收起手机,下巴朝陈默的餐盘一努,“昨天让你跟的那个接口文档,看得怎么样?”

陈默手边的笔记本翻开来,上面是他凌晨三点手抄的接口参数表,字迹故意写得潦草。“看了个七八成,有几个历史版本的字段命名不太统一,我正想找您确认一下。”

“哪个字段?”

陈默翻到折角那页,指了一行。张卫东凑近看了一眼,鼻子里嗯了一声,正要说什么,手机又震了。他接起来听了几句,眉头拧成绳,摆摆手往会议室方向走了。

陈默慢慢坐回去,膝盖在桌子底下抖了半分钟才停。赵姐小声说:“张总今天火气大,你别往枪口上撞。”

“嗯。”陈默把笔记本合上,掌心全是汗。

下午两点,他借口去楼下取快递,拐进消防通道换回骑手服,跑完了三单下午茶。去科技园南门送奶茶时,电动车刚停稳,抬眼就看见张卫东站在路边抽烟。陈默头盔面罩是茶色的,他硬着头皮把袋子递过去,压低声音说了句“您的餐”,转身就走。张卫东接过来扫了一眼小票:“没点这家啊。”

“帮朋友取的。”陈默没回头,右手拧电门,电动车蹿出去五米远。后视镜里张卫东还站在原地,烟举到嘴边,眉头没松。

晚上八点回到工位,陈默做了一件白天不敢做的事。他登录内部文档系统,用大刘的账号搜“核心模块架构说明”。搜索结果刷出来一长串,最上面那份权限标着“部门内部公开”。他犹豫了十秒,点开了。

文档四百多页,每页都有红字水印“禁止外传”。陈默把浏览器窗口缩到四分之一屏,左边开着周远航发他的部署手册,右边是架构说明。他翻到缓存模块那一节,对照自己昨晚画的关系图,发现大刘的注释里有一句被划掉的话:“此处锁粒度可优化,但需业务确认。”

锁粒度。陈默想起送餐时听的一期播客,讲分布式系统怎么像路口红绿灯一样调度请求。他把这句话抄在本子上,旁边画了个红绿灯的简图。

十一点,周远航从背后路过,瞥见屏幕上的架构文档,脚步顿了一下。“你这就开始啃核心了?”

“大刘有权限。”陈默头没回。

周远航左右看了看,弯腰凑近他耳边:“权限是有,但你别在工位看。后台有文档访问记录,超过时长系统会发邮件给主管。”

陈默的手停在键盘上方。

“明天我把文档下到本地加密盘,你去消防通道用手机看。”周远航直起身,声音恢复正常音量,“走不走?楼下麻辣烫。”

陈默关掉浏览器,把笔记本塞进背包最里层。拉链拉到一半,他又抽出来,把今天画红绿灯简图那页撕下来折成小方块,塞进工牌背面和塑料卡套的夹缝里。

4

周三上午十点,会议室投屏亮着上周迭代的代码diff。陈默坐在长桌最末端,膝盖并拢,两只手压在桌下,拇指互相抠着指甲缝里没洗净的辣椒油渍。

周远航提前给他递过话:评审轮到每个人发言,说两句就行,没人真听。

前面三个同事讲完,轮到陈默。他站起来,后背汗湿了一片。

“这个订单分配模块,我觉得可以加一个缓冲队列。”

会议室安静了两秒。组长赵磊抬了抬下巴:“展开说。”

陈默脑子里飞速翻找送餐路上听过的播客片段。那期节目讲高速公路收费站怎么用排队论控制车流密度,他听完还拿餐箱里的奶茶杯在餐桌上摆过示意图。他硬着头皮把“收费闸口”换成“线程池”,“车流”换成“请求”:“就是别让所有订单同时打到库存服务上,先排个队,按处理能力匀速放行。”

赵磊拿笔在纸上画了两笔,没抬头。

技术总监徐开明坐在投屏正对面,原本低头看手机,这时突然抬起脸,眼镜片反了一下光。

“你刚才说按处理能力匀速放行——这个思路有出处吗?”

陈默的后槽牙咬紧了。他要是说从播客里听来的,等于承认自己不是天天写代码的人。但要是编个算法名字,徐开明这种级别的人一追问就得露馅。

“没有具体出处。就是觉得订单高峰和早晚高峰一样,全挤在同一个路口肯定堵,得有人拿小红旗指挥一下。”

徐开明笑了一声。那笑声在会议桌上方荡开,赵磊抬起头看了总监一眼。

“这个比喻有点糙,但方向是对的。现在的问题是库存扣减接口没有限流,促销日一冲就穿。”徐开明拿笔敲了敲桌面,“陈默是吧?你把这个缓冲队列的方案细化一下,明天发我邮箱。”

陈默点头。他感觉后背那层汗已经凉透了。

散会后周远航拽着他拐进楼梯间,声控灯啪地亮起来:“你疯了吧?细化方案?你拿什么细化?”

“我知道怎么写,不就是加个队列嘛,把同步调用改成异步——”

“你知道个屁。徐开明要的是能落地的设计文档,不是红绿灯。”周远航压着嗓子,“你今晚别跑单了,我把代码框架拷给你,你照着抄也行照猫画虎也行,但别写太离谱。”

陈默靠在楼梯扶手边没说话。他确实知道队列大概长什么样,送餐App里订单状态流转就是一套队列,他每天点“取餐”“送达”就是在跟这套东西打交道。但真写进大厂的代码仓库,那是另一回事。

下午两点,他换回骑手服溜出写字楼,在隔壁便利店买了瓶最便宜的矿泉水,坐在路牙子上打开手机热点,连上周远航给他开的临时VPN。代码编辑器在屏幕上缩成指甲盖大小的窗口,他拿手指头戳着软键盘一行一行敲。

敲到第四十行,弹出一条企业微信消息。赵磊在项目群里@所有人:徐总刚批了陈默那个缓冲队列的点子,排进下个迭代的P1需求,负责人陈默,明天出详细设计。

陈默盯着“负责人”三个字看了五秒钟,矿泉水瓶被捏得咔咔响。他一个顶班骑手,突然变成正式需求的负责人,这要是交不出东西,周远航全组都得跟着吃挂落。

晚上八点,他蹲在出租屋床边,拿周远航给的代码框架往自己方案里套。写到限流阈值那一段卡住了——他根本不知道该设多少。送餐有爆单的时候他知道加骑手,可线程池扩容不是叫几个人来帮忙这么简单。

他翻出白天撕下来的那张红绿灯简图,拿圆珠笔在背面画了个队列示意图。画到第三个版本,他想起每天送餐路过的一个丁字路口,早高峰有交警手动调红绿灯时长,车少的时候放直行,车多的时候切左转。

他照着这个逻辑设了个动态阈值:系统压力小就放宽,压力大就收紧,阈值本身跟着负载走。

写完那行代码已经凌晨一点多。他发到周远航邮箱,倒头睡了四个小时,五点起来跑早单。

第二天下午的站会上,徐开明亲自来旁听。陈默站在白板前画那个动态阈值模型,画到一半发现赵磊的脸色不对——赵磊盯着他拿笔的姿势,眉头越皱越紧。

“你这图画得挺熟练啊。”赵磊突然开口,“跟谁学的?”

陈默手里白板笔顿住。他画图确实熟练,送餐抄近道画路线图画了三年多,画什么都是先画路再画车。但他不能说这个。

“昨晚照着文档描了几遍。”

赵磊没接话,转头看了周远航一眼。周远航低头刷手机,拇指划得飞快。

徐开明倒没注意这些细节,指着白板上的阈值曲线问:“这个拐点怎么定的?”

陈默咽了口唾沫,把交警调红绿灯那套又讲了一遍。徐开明听完拍了拍桌子:“有点意思。赵磊,你们组这个新人脑子挺活。”

赵磊挤出个笑。

散会后陈默往消防通道走,周远航从后面追上来,一把扯住他背包带子。

“赵磊起了疑心。他刚才查了门禁记录,你上周有三天没刷工卡进出。”

陈默脚步停了。

“我说你住得近,早上先来公司打卡再去吃早饭。”周远航松开他背包带,“但这理由撑不了几天。你得有个正式说法,或者——”

他顿了顿,左右看了看楼梯间上下没人。

“或者你赶紧把该学的学会,真东西拿出手。徐开明记住你名字了,这是好事,也是雷。”

5

周远航把陈默约到了大厂北门外的那家沙县小吃,点完单才开口:“赵磊昨晚跟外包供应商的驻场主管吃了顿饭,回来就跟我说,给你走个正式外包名额。”

陈默筷子顿在半空。

“别高兴太早。有考核,下周五之前过基础技术测评,总分不到六十五直接刷。”周远航把一张打印出来的考核范围推过来,A4纸折了三道,“操作系统、网络基础、还有一整套他们内部工具链的用法。你只有一周。”

陈默把纸展开,密密麻麻的条目像外卖单上的备注栏一样挤得喘不过气来。他把纸折回去塞进胸前的口袋,那口袋平时装充电宝。

“为什么帮我?”

周远航用筷子戳着拌面里的花生米:“徐开明记住了你名字,赵磊怕兜不住。与其让你当黑户替身,不如塞进外包池子里变成合规劳动力。对他来说是止损,对我来说——”他停了一下,“我看你那天讲红绿灯调度,确实有点东西。”

陈默点头。他回到出租屋后把考核范围贴在了床头上方,那张纸盖住了墙皮脱落的一块霉斑。

从此他的日子被劈成两半。早上六点半出门跑早高峰,电动车把手上缠着用防水袋裹住的笔记,等红灯的间隙就扯出来背两条。外卖箱的夹层里塞了本从二手平台淘来的《操作系统导论》,取餐等出餐的五分钟他就翻两页。有一回商家出餐慢了八分钟,他蹲在台阶上做了一道关于进程调度的选择题,做完还拿筷子在沙地上画了画状态转换图。

午高峰结束到下午两点之间有一段单量低谷,他把车停在软件园后面的树荫底下,靠着座椅刷网络协议的视频课。手机屏幕在太阳底下反光,他就把外卖箱盖子拆下来举在头顶当遮阳板。路过的骑手老刘敲了敲他车把:“小陈你魔怔了?箱子都不要了?”

“防晒。”

老刘摇摇头走了。

晚上才是硬仗。九点收工回家,洗把脸坐到折叠桌前打开那台二手笔记本电脑,开始啃工具链的实操部分。周远航给他扔了个测试环境账号,权限很低,跑几条命令就报错。报错也得练,他就照着错误提示一条条查文档,记在手机备忘录里,第二天跑单路上反复默念。

有一回送餐到一家培训机构的前台,收件的姑娘看他盯着墙上贴的Linux命令速查表看,顺嘴说了句“这有啥好看的”。陈默笑笑没接话,接完单出门时把那张表拍了个照。后来他发现自己背命令的速度比记小区楼栋号还快,大概是送餐练出来的肌肉记忆——每栋楼几个单元、电梯在哪个朝向、哪层有空中花园,都得在脑子里存成索引。命令参数也一样,无非是另一种索引。

第四天夜里他两点才躺下,早上五点半闹钟响的时候整个人像被人从水里捞出来的。眼皮粘在一起,他拿凉水拍了一把脸出门,电动车骑到第二个路口差点怼上马路牙子。早高峰跑了不到三公里就被系统强制休息——平台疲劳监控弹窗,连续接单时长超限。他靠边停了车,坐在马路牙子上把手机里存的三道错题调出来重新做了一遍。

正确率从第一天的四成爬到第五天的七成左右。周远航每晚十点准时发消息问进度,陈默就把错题截图发过去。第五天晚上周远航打来语音:“工具链那部分你实操太少,光看文档没用。明天下午两点,公司旁边那个共享会议室,我偷摸给你订了一小时,用赵磊的测试账号跑几遍真环境。别让人看见。”

第六天下午陈默请了半天假没跑单。在共享会议室里对着测试环境敲了两个小时,手抖得按错三次退出键,但整套部署流程总算完整走通了一遍。周远航过来看了一眼日志,说了句“行了”,转头又补了句:“明天考核在下午四点,你中午别跑单了,吃口东西把状态稳住。”

考核那天中午陈默还是没忍住跑了两单。不为挣钱,就是心里慌,坐在屋里等更难受,不如让手和脚先忙着。两点半收工,找了个公厕换了件干净的T恤,把工牌藏在电动车座下面,空手进了大厂北门。

考场设在八楼的小会议室,监考的是外包供应商那边的驻场经理,一个戴眼镜的中年女人全程没抬头。陈默坐下来打开系统,第一道题问的是TCP三次握手的流程,他脑子里瞬间蹦出的是送餐时进出写字楼的流程——先招手拦车,对方减速确认,然后双方才正式对接。他把这个联想写在草稿纸上,理了理思路才往答题框里敲。

做到第四十分钟,最后一道实操题让排一个Nginx反向代理配置。他盯着屏幕,手指悬在键盘上方停了十来秒。脑子里忽然冒出昨天晚上睡前默念的那串参数,像报菜名一样顺了出来。

敲完回车,页面跳出一行绿字:验证通过。

他靠在椅背上吐了口气,后背的汗早把T恤洇湿了一片。监考女人抬头瞥了他一眼,面无表情地说了句“交卷可以走了”。

出了会议室他往消防通道走,手机震了一下。周远航发来一条消息:分数明天出,但运维那边看了你的实操日志,说配置逻辑很稳。

陈默站在楼梯间里,手扶着栏杆,没急着回消息。他忽然想起自己今天中午跑的那两单——其中一单送到对面写字楼十八层的一个程序员手里,那哥们接过麻辣烫的时候眼睛通红,手指还在键盘上没停。

当时陈默多看了一眼他的屏幕。满屏代码,跟测试环境里长得差不多。

他低头给周远航回了四个字:明天接着跑。

6

凌晨两点四十七分,陈默的手机在枕头边震得发烫。

他接起来,周远航的声音劈了叉:“你能来公司一趟吗?出事了。”

陈默没问出什么事。周远航那种人,能半夜打电话,就说明天塌了。他套上骑手服出了门,电动车穿过空荡荡的街道,红灯像一双双睁不开的眼。到楼下时他看了眼时间——平时这段路要跑二十分钟,他用了十一分钟。

十七楼灯火通明。运维组的三个人挤在一台显示器前,屏幕上的监控曲线掉成了悬崖。周远航蹲在过道里薅头发,看见陈默进来,站起来的时候膝盖咔了一声。

“压测全部通过,部署也过了,一上真实流量缓存命中率直接崩到百分之三。”周远航指着屏幕,嗓子是哑的,“数据库连接池满了,所有接口都在排队,用户端就是白屏。”

技术总监老赵也在。陈默头一回看见这人穿T恤——平时都是衬衫扎进裤子,现在头发支棱着,像个通宵打游戏的。老赵没搭理他,正跟架构组的人争:“回滚?回滚版本兼容性有问题,你确定回滚完不会出更大的事?”

架构组那个戴眼镜的男的拍桌子:“不回滚怎么办?三点了,早上七点第一批用户就进来了!”

陈默站在人群外围,看了一会儿那条断崖曲线。他其实看不太懂后端那些指标,但那条线的形状他熟——像极了他晚高峰在美食街接单时的派单曲线。某一瞬间订单量冲上来,系统把整个片区的骑手全塞到一条路上,结果谁也动不了。

“那个……”他开口,所有人都转头看他。一个穿荧光绿外套的骑手站在一群没睡的程序员中间,场面有点滑稽。

“你说。”老赵盯着他。

“缓存命中率崩了,是不是因为热点数据全挤在同一个节点上?”陈默指了指监控面板上那排几乎顶格的内存占用,“我看你们这个分发逻辑是轮询的,但真实流量它不是平均来的。就像我们送餐——晚高峰的时候,百分之六十的单子都来自商场的四家奶茶店,另外四十家店可能一单都没有。你要按轮询撒骑手,商场那四家就得爆单。”

运维组长愣了一下:“你的意思是……核心问题在缓存预热策略?”

“我不知道你们技术上怎么叫。”陈默蹲下来,拿手指在屏幕上比划,“反正我们调度站的做法是,先看哪个区域单量在涨,提前把附近骑手挪过去。你们能不能先找出哪几条数据是被用得最多的,把它们先拎出来,单独塞进一个最靠前的缓存里?”

老赵没说话,转头看架构组。戴眼镜那哥们儿皱着眉敲了几下键盘,跑了一串查询,忽然“操”了一声。

“舆情接口——占了全部请求的百分之四十一,而且重复查询率极高。”他抬起头,眼镜片反着白光,“我们一直在对全量数据做轮询缓存,等于把热度最高的那几条数据均匀地稀释到所有节点里。”

“改。”老赵就一个字。

接下来的四十分钟,陈默没碰键盘。他就坐在旁边,看着运维组把那套轮询策略拆掉,换成按实时请求热度动态加权。他偶尔插一句嘴——比如“你这个降级开关触发阈值设太低了,要是我跑单的时候系统这么灵敏,午高峰能把自己降级降死”——运维组长愣了两秒,把阈值往上调了一截。

三点四十一分,缓存命中率从百分之三爬到百分之六十七。数据库连接池的占用开始回落。

四点出头,老赵从椅子上弹起来,一巴掌拍在周远航后背上:“你从哪儿弄来的这人?”

周远航张了张嘴,看了陈默一眼。陈默也看了他一眼。两个人心里都清楚——一个没有正式工牌的骑手,在这个时间点出现在这间会议室里,本身就经不起问。

“先别管这个。”陈默站起来,拍了拍骑手服上的褶皱,“既然稳住了,我跑单去。早上还有早高峰。”

老赵在他背后喊了一句什么,他没听清。电梯门合上之前,他看见周远航被老赵拽着胳膊往小会议室拖。

出了写字楼,天还没亮。陈默跨上电动车的时候手有点抖——不是紧张,是困劲儿追上来了。手机屏幕亮了一下,周远航发了条语音,他点开听,就五个字:

“老赵问你底细了。”

7

陈默刚把电动车从充电桩上解开,手机就震了。周远航的语音条后面紧跟着一条文字消息:老赵让你上午十点来一趟,带上身份证。

他盯着屏幕看了五秒钟,把手机揣进口袋,先接了三单早餐。油条、豆浆、两笼小笼包,送到第三个地址的时候他忽然笑了——身份证。他身份证上的住址还是老家村里那栋平房,门牌号早就被雨水冲掉了。

十点差五分,他换了件干净的深色卫衣,把那件黄色骑手服从车座底下抽出来叠好,塞进背包最里层。进电梯的时候他把工牌翻了个面,白色那面对着胸口。

会议室比昨晚小,没有投影仪,只有一张圆桌和三把椅子。老赵坐在靠窗那侧,面前摊着一份打印出来的考勤记录,红笔圈了七八处。周远航坐在他对面,低着头,手机屏幕朝下扣在桌面上。

“坐。”老赵没抬头。

陈默拉开椅子坐下。背包放在脚边,拉链头硌着小腿。

老赵把考勤记录转了个方向推过来:“你自己看,三月十七号到四月二号,你的门禁记录十七次,食堂消费记录零次。一个天天加班的程序员,在食堂一顿饭没吃过?”

“我点了外卖。”陈默说。

“别跟我扯。”老赵终于抬起头,眼皮底下两团青黑,“周远航都说了。你是送外卖的,替他那个出事的哥们儿来顶班。对不对?”

陈默没否认。他看了一眼周远航,周远航的耳朵红得像被烫过。

“你知不知道这是什么性质?”老赵声音不大,但每个字都压得很低,“这是欺诈。我可以报警,也可以直接叫保安把你轰出去。公司要是较真,你连外卖平台都干不下去,信不信?”

“我信。”陈默说。

老赵大概没想到他答得这么干脆,噎了一下,手指在桌面上敲了两下:“那你还有什么说的?”

“服务器那晚上,方案是我出的。”陈默说,“代码也是我改的。那部分值不值十七次门禁,您自己判断。”

“你——”

门在这时候被推开了。技术总监老秦端着保温杯进来,头发像刚被风吹过,西装裤脚还沾着泥点。他把杯子往桌上一搁,先看了老赵一眼,又看了陈默一眼。

“我昨晚没走。”老秦说,“我跟了全程。老赵,他那套缓存策略比我们原方案快了一点八倍。你把这号人往外推,是替他省房租吗?”

老赵站起来:“老秦,这是合规问题,不是技术问题。他连身份都没有,走的外包通道也是拿假材料——”

“所以给他真的。”老秦拧开保温杯盖子,吹了吹热气,“特殊人才通道,特批面试,特批入职。我来签字。他那个外包公司我去打招呼,违约金部门经费出。”

老赵脸涨红了:“你知不知道你在说什么?一个骑手,连学历——”

“他写的代码你看过没有?”老秦打断他,“你一个技术主管,跟我谈学历?”

老赵嘴唇哆嗦了两下。会议室安静得能听见隔壁工位上机械键盘的噼啪声。

老秦转向陈默:“条件有一个。骑手那边你得断了,全职干这边。兼职跑单我不管,但你不能挂着外卖平台骑手身份接单,被HR查到我也护不住你。”

陈默低头看自己的手。虎口那里有一道细疤,是去年冬天送餐摔的,缝了四针,第二天贴着创可贴接着跑。那双手现在搁在一张会议桌上,旁边是一份考勤记录,上面红笔圈着的日期他全记得——那些日子他凌晨收工,早上七点又上线,中间只睡四个小时。

“我有个问题。”他说。

老秦抬了抬下巴。

“我要是干不好,被开了,还能回去跑单吗?”

老赵在旁边哼了一声,老秦却笑了。他拧上杯盖,站起来拍了拍陈默肩膀:“你这话问得就外行。大厂裁员裁出心理阴影的多了,没见过谁问能不能回去送外卖。行,我当你答应了。下午让HR找你签意向书,明天开始走流程。”

老赵把考勤记录揉成一团扔进垃圾桶,走到门口时停了一步,背对着陈默说了一句:“你要是真能写出那种代码,我没什么好说的。但你得证明这不是瞎猫碰死耗子。”

门关上之后,周远航终于抬起头,眼眶有点湿:“陈哥,对不住,老赵一吓唬我就——”

“没事。”陈默从背包里掏出那件叠好的骑手服,在膝盖上抖开。黄色布料在会议室的白炽灯下有点刺眼。他站起来,把它套在卫衣外面,拉链拉到胸口。

“你干嘛?”周远航愣了。

“交接班。”陈默把工牌从脖子上摘下来,搁在桌面正中间,“最后跑一单。十一点半有个写字楼午餐高峰,我那个片区没人顶,得去跑完。”

周远航张了张嘴,陈默已经拉开门出去了。走廊里几个端着咖啡的工程师侧身让路,眼神追着那抹黄色一路到电梯口。电梯门合上之前,陈默朝周远航晃了晃手机,屏幕上是他和外卖站长的聊天框,最后一条是站长发的:“你那个号我先给你保留着,哪天混不下去了随时回来。”

电梯到了一楼,门打开的瞬间一股热风灌进来。陈默跨出门禁的时候,背后传来一声喊——“陈默!”他回头,周远航站在二楼走廊栏杆后面,手里举着那张工牌:“这个怎么办?”

“你先替我收着。”陈默把头盔扣上,扣带在下巴底下咔嗒一声,“明天我来拿,你到时候别给我弄丢了。”

电动车启动的声音盖过了周远航的回话。陈默汇入主路车流的时候看了一眼后视镜,写字楼的玻璃幕墙正在太阳底下反光,像一整面碎掉的镜子。手机支架上弹出一条新订单提示,取餐地址是他跑了三年的那家黄焖鸡米饭。他点了接单,顺手把平台状态从“接单中”切回了“忙碌”。

这单跑完再切回来。

8

陈默在更衣室隔间里把骑手服从挂钩上取下来,叠成四四方方一块,塞进双肩包最底层。拉链拉上的时候,指尖在冰凉的金属齿上停了一秒——三年了,这件蓝色冲锋衣的袖口磨出了毛边,左胸口的平台logo被洗得发白,像一块褪色的疤。他换上昨天周远航递给他的那件优衣库格子衬衫,领子有点紧,腋下的缝线刮着皮肤,新衣服的味道混着吊牌的硬纸板气息直冲鼻腔。

工牌挂在脖子上,塑料壳贴着胸口,照片里的他笑得太用力,嘴角扯出两道僵硬的纹路。电梯在十六楼停稳,门打开的瞬间,冷气像一堵无形的墙撞过来。他下意识缩了缩脖子,随后意识到这个动作太像缩在外卖箱后面等红灯的自己,又硬生生挺直了腰。

工位在靠窗第三排。周远航已经在隔壁工位坐定了,抬手朝他比了个“嘘”的手势,嘴唇无声地动了动,陈默读出来——“别紧张,正常说话”。他把双肩包塞进桌下的铁皮柜,柜门关上的声音在安静的开放式办公区里显得格外清脆,前面两排有人回头看了一眼,又面无表情地转回去。

显示器亮起来,内网首页弹出一封欢迎邮件,HR系统自动生成的,连名字的字体都选错了,把他的“默”打成了“墨”。陈默盯着屏幕右下角的时间,九点零七分,往常这个点他刚送完第一波早餐订单,在望京西路的路口等红灯,保温箱里的豆浆晃荡着发出闷响。

他忽然闻到自己手上还残留着黄焖鸡米饭的酱料味,昨晚跑完最后一单忘了用洗手液搓一遍。他把双手缩到键盘托下面,用大拇指搓了搓食指关节。

“陈默。”周远航推过来一张A4纸,“这是项目代码规范,你先看,别急着动库,有什么不懂的问我——或者问旁边那位。”

旁边那位从隔板后面露出一截秃顶,头也不抬地嗯了一声,手指在机械键盘上敲出暴雨砸铁皮棚的动静。陈默扫了一眼代码规范,第一页第一条写着“缩进必须使用四个空格”,他想起自己昨晚刷的在线教程里说两个空格也行,于是拿铅笔在页边标注了一个问号。

周远航凑过来小声说:“别用铅笔,这纸要回收归档的。”

陈默把铅笔放下,那些在电动车上随手记地址的圆珠笔习惯,在这里大概全得改。

十点半,主管在内部通讯软件上给他发来第一条消息:“熟悉一下用户模块的接口文档,下午的迭代会上你旁听,不用发言。”陈默回了一个“收到”,打完之后觉得太干巴,又在后面加了个句号,发出去才想起来,骑手群里回复“收到”从来不加标点。

他打开接口文档,密密麻麻的字段名像外卖箱里码好的餐盒,每个都有固定的位置和标签,只是这里的顾客永远在改需求——刚看明白一个接口的参数结构,文档历史版本里显示它上个月已经改过三回了。他掏出笔记本,把字段名一个一个抄下来,抄到第三页的时候,手腕酸得跟提了三十份麻辣烫上楼一个感觉。

十一点四十分,他起身去茶水间接水。路过落地窗的时候,脚步被什么东西拽住了。

窗外是望京SOHO的三栋流线型大楼,银灰色的铝板在正午的日光下反着刺眼的光。从十六楼看下去,楼底的广场上密密麻麻全是移动的小点,蓝色和黄色的骑手服混在人群里,像两条被搅在一起的颜料带。他认出了那个斜穿广场的捷径——从B座南门出去绕过喷泉池,能省三十秒到C座货梯口。他自己跑过无数次。

再往远处看,阜通东大街的车流排成一条缓慢蠕动的光带。他曾经每天在那条路上往返二十趟,电动车的后视镜里装过朝阳、装过暴雨、装过凌晨三点的路灯。那时候他仰头看见这栋写字楼的玻璃幕墙,总觉得里面的人活在另一个次元,灯光彻夜不灭,像一台永远不需要加油的机器。

现在他站在机器的内部,隔着双层中空玻璃往外看,那些骑手的小点还在移动,每一单的时效都在系统里跳着倒计时。

“看什么呢?”周远航端着马克杯走过来,顺着他的目光往外扫了一眼,“哦,中午了,该点饭了。”

陈默喉咙发紧,咽了口唾沫才说:“我以前就在底下那个喷泉池旁边等单。”

周远航愣了下,随即咧嘴笑了:“那今天你从楼上点,让底下的人给你送一回。”

“别。”陈默几乎是脱口而出,“我自己下去吃。”

周远航耸了耸肩,没再说什么。

陈默回到工位,把笔记本上抄的字段名又过了一遍。右手边那台显示器旁边贴着一张便利贴,是前任主人留下的,圆珠笔字迹潦草得像急诊处方:“别改公共组件,要命。”他把这张便利贴揭下来贴到自己笔记本封面上,想了想,又在底下添了一行字:“记住怎么跑上来的。”

下午的迭代会开了一个半小时,他全程没开口,但把主管在白板上画的架构图用手机拍了下来,回家路上可以对着看。散会的时候主管拍了拍他肩膀:“适应得怎么样?”

“还行。”陈默说,“就是坐久了腰有点不习惯。”

主管笑了:“那你得尽快习惯,这儿的腰啊,一坐就是十年。”

陈默没接话,低头看了一眼自己工牌上的照片,那个笑得太用力的自己,衬衫领口还露着一截外卖平台的速干T恤边。他伸手把领口往里掖了掖,指腹碰到脖颈上被头盔扣带磨出来的那道旧茧,粗粝的触感从指尖传回来,像一个只有他自己知道的开关,按下去,提醒他这身格子衬衫底下还裹着什么东西。

9

“这个参数不对。”

陈默把鼠标往旁边一推,屏幕上的路线图缩成密密麻麻的毛线团。旁边工位的算法工程师小周探过头来,看见他正在跑一个刚提交的配送时长预估模型。

“哪儿不对?”小周咬着吸管凑近。

“你们把红绿灯周期算成了固定值。”陈默点了点屏幕上的一条红色曲线,“城西那个路口,早高峰东西向绿灯四十五秒,南北向只有二十五秒。系统默认两边均分,骑手从北往南穿,每次至少多等一个灯。一个灯就是四十五秒,一天跑三十单,你算算多少单白等了。”

小周愣了一下,调出交管局公开数据核对,发现这个路口因为临近三甲医院,确实做过潮汐式配时调整,数据更新在半年前,而他们的算法模型用的还是两年前的静态数据。

“你怎么知道得这么细?”

“我在这条线上跑了八千多单。”陈默拿起桌上的保温杯灌了口茶,“有一回为了赶一个超时单,从那个路口穿过去的时候差点被右转的救护车带倒。后来每次经过都下意识记灯时。”

那是他到岗的第七十三天。“骑手路线优化系统”立项刚满一周,全组六个人,只有他一个人真骑过电动车跑过单。部门主管在启动会上半开玩笑地说了句“数据要接地气”,陈默当天晚上回去翻了三个小时手机相册——过去两年送餐时随手拍的路况照片,有积水路段的,有临时施工围挡的,有某小区侧门只有中午才开的,全是他用脚丈量出来的原始数据。

他把这些照片一张张导进系统,标注时间、地点和通行限制,然后按小时段和天气类型做了交叉索引。第二天早会上他打开投影,组里几个科班出身的工程师看着满屏的照片和手绘地图沉默了十几秒。

“你这是……送餐送的?”负责数据清洗的实习生小声问。

“嗯。”陈默点了一张照片放大,是某写字楼地下一层的卸货通道,“这个通道每天十点半到十二点开放给外卖电动车临时通行,系统里标注的是‘禁止非机动车进入’。你们照这个跑,骑手到了门口得绕一大圈。”

他提的方案不复杂:在算法里加一层“骑手经验权重”,把真实骑手反馈的路况信息作为动态修正系数,而不是单纯依赖交管局和地图厂商的静态数据。组里讨论了两轮,技术总监批了试点。

接下来三周,陈默白天跟开发,晚上下到跑单群里发问卷。他找到了以前的骑手队长老赵,托老赵在五个站点拉了二百多个骑手填反馈表——哪个路口最坑、哪个小区电梯最难等、哪个时间段哪条路必堵。老赵一开始不情不愿,说“你们坐办公室的懂什么”,陈默回了句“我就是从你那辆破电动车上爬上去的”,老赵就不吭声了,第二天把表格链接甩进了三个骑手大群。

数据收回来那天,陈默盯着后台统计一晚上没睡着。每个反馈条目后面他都手写了一条注释,加起来写了小一万字。组里把注释整理成术语映射表,交给算法组做特征工程。

系统上线内测那天,第一批试用骑手反馈过来的数据让全组人围在屏幕前看了半小时——平均每单配送时长缩短了两分四十秒。不算多,但放到日均四千单的站点上,一天就省出两个骑手的工作量。

主管端了杯咖啡站到他身后:“你那个‘经验权重’模块,下个月推全城。”

陈默点点头,从桌上翻出一张打印纸递过去。主管接过来一看,是骑手端的界面原型稿,陈默用铅笔在空白处画满了批注,字歪歪扭扭的,像订单小票上的备注。

“骑手端别做得太花哨。”陈默说,“我们骑车的时候一只手看不了太复杂的界面。字要大,导航箭头要粗,最好语音播报能调语速。”

主管翻着那几页纸,忽然笑了:“你这哪是产品需求,这是用户体验走查报告。”

“一个意思。”陈默把纸收回来折好揣兜里,“我写了二十页,回头整理成评审文档。”

最后那天下午,系统正式上线,全组叫了奶茶庆祝。陈默那份还没拆封,手机弹出提示:您有一笔新订单。

他看了一眼地址,愣了两秒。

订单备注栏写着一行字——“送到就行,不用上楼。”

配送地址是他现在坐的这栋楼,十九层,开放工区A区。

陈默拎着奶茶袋子出了电梯,没走正门,绕到货梯通道,从消防楼梯推门进去。那扇门他太熟了,以前送这栋楼的单子都走这条路,保安拦不拦全看脸熟。

工区里灯火通明,没人注意到他。他走到自己工位旁边,一个穿蓝色外卖服的人正站在过道上低头看手机,头盔还没摘,面罩上全是雾气。

“尾号二七八五?”陈默问。

骑手抬起头,是个二十出头的年轻人,接过袋子的时候愣了一下,看了看陈默手里的工牌,又看了看自己手机上的配送信息,表情有点懵。

“你是……骑手还是这可员工啊?”

陈默把奶茶递过去:“以前是骑手。现在坐里面那排。”

年轻人接过奶茶,在确认收货的按钮上按了一下,又抬头看了他一眼。

“大哥,这栋楼不让电动车进,我停外面走过来的,没超时吧?”

“没超。”陈默往他手机屏幕上瞟了一眼,配送时长那一栏显示的是系统推荐路线的预估时间加七分钟。他伸手在年轻人手机屏幕上划了一下,调出骑手端的反馈入口。

“下次这栋楼送单,你在这个页面点一下‘实际通行情况’,选‘禁止电动车入内,需步行往返’,系统会自动加十分钟缓冲时间,不算超时。”

年轻人将信将疑地点了反馈按钮。屏幕上跳出一行提示:“反馈已记录,感谢您帮助优化配送体验。”

“这有用吗?以前也点过,感觉没人看。”

“有用。”陈默拍了拍他肩膀,“我写的。”

年轻人走后,陈默坐回工位,打开后台看实时数据流。系统显示有一条新反馈刚刚汇入数据库,来源标签是“内部测试-陈默工位地址”。他盯着那行字看了好几秒,然后打开需求文档,在下一版迭代计划里添了一行——新增“爬楼时长补偿”功能,覆盖所有步行上楼场景。

窗口外面,那个骑手正推着电动车穿过马路,蓝色工服在车流里一闪一闪的,像一颗移动的信号灯。陈默低头给自己那杯奶茶拍了张照,发到以前跑单的群里,配了句话——“系统好用不?”

老赵秒回:“比以前强点,不坑人了。”

陈默笑了笑,把手机扣在桌上,打开代码编辑器继续写下一版的原型。屏幕上跳动的光标映在他工牌照片的下巴上,照片里那个人还穿着速干T恤,笑得有点拘谨,像刚跑完一单在等电梯。

沪ICP备16008431号-1

本站所有内容都已取得正版授权,且不适合未成年人观看。版权声明 - 投稿声明 - 自审制度 - 免责声明