网易首页 > 网易号 > 正文 申请入驻

我的代码被加三个外行名,汇报时领导让我演示,我摇头,全场哗然

0
分享至

楔子

晨会上,总监笑眯眯地展示系统大屏,代码署名栏赫然并列着三个从未写过一行代码的名字。轮到我演示核心模块时,我轻轻摇了摇头。空气凝成冰块,键盘声骤停,三十七道目光刺穿我的后背。他们不知道,那个会演示的版本,三天前就被我从服务器上彻底删除了。

1

会议室白炽灯发出细微的电流嗡鸣,像是某种不知疲倦的活物趴在头顶啃食时间。

林深坐在长桌末端,指尖搭在键盘边缘,没有敲下去。他盯着投影幕布上那行深蓝色的代码署名——核心算法架构:林深、赵乾坤、周明远、苏小棠。

这四个名字以同样的字体、同样的字号、同样的间距排列在一起,整齐得像墓碑上的刻字。

赵乾坤。周明远。苏小棠。

林深默念了一遍这三个名字。赵乾坤是销售总监,去年刚入职,主要业绩是把公司的一款老旧产品包装成“AI驱动”重新卖给了三家国企。周明远是产品经理,共事两年半,林深从未见他打开过IDE。至于苏小棠……她是总监助理,负责订会议室和贴发票,三个月前刚转正。

三个人加起来,写过的代码行数不会超过一百。而那其中九十九行,大概是在Excel里录宏。

“小林,这个模块是你主导开发的吧?”总监陈放的嗓音从会议桌另一端荡过来,带着一种刻意为之的温和,像泡过三遍的茶,味道淡了,温度还在。

林深抬起眼。陈放坐在主位,衬衫袖口卷到小臂中段,腕表是去年公司上市庆功宴上发的纪念款。他脸上挂着一种“大家都知道怎么回事但都不说破”的微笑,手指虚点了两下投影幕布。

“嗯,”林深说,“是我写的。”

“那就演示一下吧,给客户看看实际效果。”陈放朝林深偏了偏头,“数据都准备好了?”

会议室里安静了两秒。左侧产品部的马维低头翻笔记本,纸张哗啦响了一声。右侧前端组的蒋琳手指停在触控板上方,光标在PPT边缘微微颤动。后排运营部新来的实习生打了个呵欠,又硬生生咽了回去。

林深没有动。

他的右手还搭在键盘上,但没有任何一个指头弯曲下去。他能感觉到掌心的温度正在透过键帽传导到键盘的电路板上,那里曾经存储着整段核心逻辑——一万三千行代码,四十七个函数,三层神经网络结构,两个自定义损失函数。那是他连续五十三天、每天工作到凌晨两点的产物。

三天前的晚上十一点,他把那个版本从Git服务器上彻底删除了。

连带本地仓库、所有分支、全部commit历史。然后用shred命令覆写了磁盘区块,再用零填充了三遍。

现在他电脑里保存的,是一个“阉割版”。特征提取层的维度被砍掉了百分之六十,注意力机制替换成了简单的加权平均,最关键的动态路径规划模块更是直接用一个预计算查表代替了。表面上能跑、能出结果,但精度会从百分之九十二跌到百分之六十七。客户只要随便抽样验证两组数据,就会发现偏差大得离谱。

而这个事实,会议室里只有林深自己知道。

“林深?”陈放的声音微微拔高了一个度,“可以开始了。”

林深缓缓地、清晰地把双手从键盘上抬了起来,十指张开,悬停在半空,像投降,又像拒绝。

然后他摇了摇头。

“不行,”他说,“演示不了。”

第一秒钟,没人反应过来。马维的笔尖在纸面上拖出一道多余的横线。蒋琳的呼吸声突然变得清晰可闻。空调出风口把一片冷气吹到林深后颈,那里的汗毛一根根立了起来。

第二秒钟,有人笑了一声,短促、干涩,像踩碎了一块薄冰。是运营部的一个组长,笑完立刻抿紧了嘴。

第三秒钟,陈放脸上的笑容凝固了。他盯着林深,眼角的纹路慢慢收紧,嘴角还残留着刚才弧度的一半,像面具裂开一条缝。

第四秒钟,所有人开始说话。

“什么意思?”

“不能演示?昨天不是说准备好了吗?”

“林深你开什么玩笑——”

声音叠着声音,在三十来平的会议室里形成一堵无形的墙,朝林深压过来。他的余光扫到苏小棠坐在陈放右手边,正举着手机假装看消息,指甲盖涂着雾霾蓝的甲油,在屏幕光下微微发亮。赵乾坤不在场——他今天去深圳出差了,但这个名字此刻正光明正大地挂在“核心算法架构”那一栏。

周明远坐在林深斜对面,脸色不太好看。他的嘴唇动了动,似乎想说什么,最终只是把面前的水杯推远了几厘米。杯底在桌面上刮出一声短促的尖锐声响。

陈放抬起右手,做了个下压的手势。嘈杂声像被一刀切断了电源,骤然收住。

“林深,你跟我出来一下。”

他起身的动作很快,椅子腿在地毯上闷响了一声。林深站起来时,膝盖蹭到了桌板下沿,一阵钝痛从髌骨传导上来。他推开椅子,绕过马维的电脑包,跟在陈放身后穿过整间会议室。两侧的目光像探照灯一样打在他脸上、后脑勺、肩胛骨上,带着困惑、惊愕、幸灾乐祸和某种隐隐的兴奋。

走廊的日光灯管有一根在频闪,每隔三秒暗一下,像某种不祥的摩斯密码。陈放一直走到走廊尽头的消防通道门前才停下,转身,双手插进裤袋,背靠着那扇涂成红色的铁门。

“说吧,”他的声音压得很低,那股刻意的温和已经完全退潮了,露出底下粗粝的石床,“怎么回事。”

楼道里有一股淡淡的烟味和消毒水混合的气息。安全出口的绿色标志牌在陈放头顶亮着幽暗的光,把他半张脸照成青白色。

林深看着那盏标志牌。他的嘴唇很干,喉咙里像堵了一团浸了水的棉花。他能说吗?说三天前他发现自己的代码里被硬塞了三个名字,说他把完整的版本删了,说他现在手上只有一个半残品?说他知道演示一跑就会露馅,所以宁可摇头也不按键?

陈放的目光像两条钩子,从上方垂下来。

“你知不知道,今天这个会,客户代表线上等着呢。”他一个字一个字地往外挤,“赵乾坤特意从机场打的电话来问进度,周明远昨晚加班到十一点就为了给你准备测试数据,苏小棠——”

“苏小棠没写过一行代码。”

林深的声音很轻,像一片叶子落在水面上。

陈放顿了一下。走廊那头的会议室门突然被推开了一条缝,马维探出半个脑袋看了一眼,又迅速缩了回去。

“你说什么?”陈放的音量反而降了下来,更低,更慢。

林深抬起眼,直视他。

“我说,苏小棠没写过一行代码。赵乾坤也是。周明远也是。”他停了一下,听见自己的心跳在耳膜里擂鼓,“他们三个人的名字,是后来加进去的。我不知情。”

消防通道那扇红门后面传来楼上有人下楼梯的脚步声,由远及近,又由近及远,最后消失在某一层。陈放沉默了很久。

“你跟我进来。”

他转身推开门,楼道里的冷风灌进来,裹着灰尘和时间的味道。林深跟在后面,脚底踩在地砖上发出空洞的回响。会议室的光从门缝里漏出来,暖黄色,像什么即将凝固的东西。

2

林深重新走进会议室的时候,里面静得能听见蒋琳指甲敲击触控板的声音,一下,又一下,节奏散乱,像心跳不齐的病人。

他没有回自己座位。陈放在主位站定,双手撑住桌沿,身体微微前倾,用那种在季度大会上宣布裁员名单时的语调说:“刚才出了一点技术性的小状况,林深需要临时调整几个参数,演示推迟到明天上午。”

话音落地,会议室里浮起一阵按捺不住的骚动。马维的笔“啪”地拍在纸面上。后排实习生的哈欠打到一半僵住了。蒋琳的手指停在半空。

“今天大家辛苦了,”陈放的目光从每个人脸上扫过去,最后落在林深身上,停留了一秒,“散会。”

椅子腿摩擦地面的声音此起彼伏。林深站在原地,看着人们鱼贯而出。马维经过他身边时肩膀撞了他一下,力道不大,但带着明确的情绪。周明远把电脑合上,电源线在桌面上拖出一道蜿蜒的黑影,经过林深面前时,他停了半步。

“你电脑给我看看。”周明远的声音很平,听不出愤怒还是别的东西。

林深侧身让开半步。“不是电脑的问题。”

“那是哪儿的问题?”

“明天你就知道了。”

周明远盯着他看了三秒,嘴角动了一下,像是想说什么刻薄话又咽了回去。他把电脑夹在腋下,头也不回地走了。蒋琳最后一个离开,走到门口回头看了林深一眼,眼神里写着一种复杂的担忧。门合上了。

会议室空了。投影仪还亮着,蓝白色的光幕上,“核心算法架构”那行字仍然端端正正地挂着。林深走过去,用遥控器关掉了投影。

黑暗降临的一瞬间,他闻到自己袖口上有隔夜咖啡的味道。昨晚凌晨两点,他删完最后一个备份文件后坐在厨房地板上喝了一杯冷透的美式,咖啡渍溅在衬衫袖口内侧,当时没在意,现在那股酸涩的气味直往鼻腔里钻。

他靠着会议桌站了一会儿,掏出手机。屏幕上有六条未读消息。两条来自测试组的刘妍:“深哥你没事吧?”三条来自同一个不认识的号码,都是问号。还有一条来自赵乾坤。

“小林,刚刚听陈总说演示延后了?我这边客户很重视这个项目,你抓紧处理一下,有什么困难随时跟我说。”

林深盯着这条消息看了很久。赵乾坤的微信头像是一张高尔夫球场上的自拍,戴着墨镜,笑得灿烂。消息发送时间是五分钟前,恰好是陈放把他叫出去的时段。

他没有回复,把手机翻扣在桌面上。

走出公司大楼时已经快中午了。十月的阳光斜斜地铺在写字楼之间的空地上,明晃晃的,但没有什么温度。林深穿过下沉广场,经过一家便利店门口时闻到关东煮的汤料味,咸鲜里带着一点甜,胃里忽然泛起一阵空虚——他才想起来自己没吃早饭。

他在便利店靠窗的位置坐下,买了一瓶乌龙茶和一袋全麦面包。窗外马路上车流缓慢地蠕动,对面的写字楼玻璃幕墙反射着刺眼的光斑。他撕开面包包装袋,咬了一口,干涩的麦麸在嘴里像砂纸一样磨着上颚。

手机震了一下。他以为又是赵乾坤,拿起来一看,是蒋琳。

“你在哪儿?中午有空吗?”

林深嚼完那口面包,打字:“楼下便利店。”

“等我。”

三分钟后蒋琳推门进来,在冷柜前停了一下,拿了一罐酸奶,走过来坐到他对面。她没有马上说话,先把酸奶盖子揭开,用勺子刮着边缘凝着的奶皮,刮了两圈,才抬起眼。

“今天到底怎么回事?”她问,“昨天晚上你不是还在群里说演示没问题吗?”

林深拧开乌龙茶的瓶盖,喝了一口。茶水已经凉了,微苦,从舌根一路淌下去。

“那个版本,”他放下瓶子,“被我删了。”

蒋琳的勺子停在酸奶罐里。“哪个版本?”

“能跑百分之九十二精度那个。包含我自己设计的动态注意力层和路径规划的完整版。”

蒋琳愣了两秒,然后把勺子拔出来,放回罐子里,动作很慢。“你删了?什么时候?”

“三天前。”

“为什么?”

林深靠在椅背上,透过落地窗看着外面一个外卖骑手在红灯前急刹,电动车后座上的保温箱晃了一下。他把那段经历在心里重新过了一遍。

三天前是周二。晚上九点,整个项目组的代码合并到测试主干。林深在合并前最后检查了一遍提交记录,然后在commit history里看到了三个陌生的署名——赵乾坤、周明远、苏小棠——关联着一个他从未开过分支的pull request,合并时间显示是上周五凌晨一点,操作人是一个叫“admin”的系统账号。

那个PR修改了十七个文件,全是版权声明和注释模板,把“Author: Lin Shen”改成了“Contributors: Lin Shen, Zhao Qiankun, Zhou Mingyuan, Su Xiaotang”。没有任何一行逻辑代码被改动,但署名栏从此多出了三个人。

他当时坐在工位上,手指摸着鼠标滚轮,把那十七个文件的diff记录从头到尾看了三遍。办公室空调已经关了,空气又闷又热,他后背的衣服被汗浸湿了一小片。他给运维组的人发消息问admin账号是谁在用,对面回了一句“系统自动任务,具体谁触发了我这边查不到”。

他又翻了一遍周明远的提交记录。过去半年,周明远只提交过两个文件——都是README.md的格式调整。赵乾坤的Git账号甚至没有在项目仓库的成员列表里。苏小棠?她根本不在研发组的权限组里。

也就是说,有人用管理员权限,绕过了所有流程,把这三个名字硬塞进了他的代码署名栏。

林深当时没有声张。他坐在黑暗的工位上,电脑屏幕的冷光照着脸,想着这件事可能关联的每一个人、每一种动机。陈放知不知道?赵乾坤知不知情?周明远发现自己的名字出现在代码仓库里时是什么反应?

他想了两个小时。然后他做了一个决定。

“我没法让那个版本留在服务器上,”林深对蒋琳说,声音很平,“他们可以把名字加进去,我没法阻止。但我能选择让那个版本的代码从这个世界上消失。”

蒋琳沉默了很长时间。她用勺子搅着酸奶,里面的果粒翻上来又沉下去。

“那明天呢?”她终于问,“陈总说明天上午演示,你怎么办?”

“我手里还有一个阉割版,”林深说,“跑出来精度只有六十七。客户验一验就露馅。”

“所以明天就是——”

“对,”林深打断她,“明天所有人都会知道那个版本有问题。然后他们会追查,会问为什么,会发现署名被人动过。到时候我不说,自然有人替我说。”

蒋琳咬住下唇。“你这是在赌。”

“我赌的是他们不敢让我背锅。”

便利店门口的风铃响了一声,又一个顾客推门进来。冷柜的压缩机嗡嗡地运转着,把空气中的凉气搅成一股流动的寒意。蒋琳把酸奶罐往桌子中间推了推,站起身来。

“你吃午饭了吗?”她问。

“吃了半袋面包。”

“走吧,对面有家面馆。”她把手机装进外套口袋,“我请客。你今天这副样子回去写代码也写不出什么好东西。”

林深看着她。蒋琳的侧脸被窗外照进来的光勾勒出一条干净的轮廓线,眉心微微蹙着,是那种替别人操心的表情。他和蒋琳共事两年,她负责前端,他做算法,日常交集中她总会在测试环境出问题的时候第一个来找他,在版本上线延迟的时候替他跟产品组吵架。他们是那种不需要太多言语就能互相搭把手的同事,但也仅仅如此。

“走吧。”林深站起来,把面包袋揉成一团丢进垃圾桶。

面馆在写字楼背面的一条巷子里,门脸很小,塑料菜单贴在玻璃墙上,被油烟熏得发黄。林深要了一碗牛肉面,蒋琳要了份馄饨。等餐的时候,蒋琳忽然说:“你有没有想过,万一明天陈总把责任推到你头上呢?说代码是你写的,演示出问题是你水平不行,跟署名没关系。”

林深用筷子戳着桌上的醋瓶标签,标签边角翘起来,露出一层陈年的污渍。

“想过,”他说,“所以我还留了东西。”

“什么?”

“第三天凌晨,我删版本之前,截了图。Git的commit log,admin账号的PR记录,权限组的变更日志。所有能证明那三个名字不是我加的证据,我全存了一份。”

蒋琳的馄饨端上来了。她低头往碗里加了半勺辣椒油,搅了搅,没有马上吃。

“你从一开始就想好了?”她问,声音混在面汤的热气里,有些模糊。

林深没有回答。他挑起一筷子面条,看着白烟从碗里升起来,在灯光下弯曲、消散。他的手机又震了,屏幕亮起来。这次是陈放。

“林深,晚上来我办公室一趟。就我们俩。”

他把手机翻过去,屏幕朝下扣在桌面上。牛肉汤的热气扑在脸上,咸香里带着一丝当归的苦味。

3

下午林深回了工位。研发区空了大半,测试组的人缩在隔间里小声讨论着上午的事,看见他进来,声音立刻压得更低了。他在自己的位置上坐下,打开电脑,屏幕亮起来的时候,壁纸还是那个演示版本的架构图——密密麻麻的绿色节点连成一张神经网络的可视化图像,像一张星图。

他盯着那张图看了片刻,然后打开终端,输入了一串命令。本地仓库还在,但commit记录已经被清空重写了。他新建了一个分支,把阉割版代码推了上去。编译通过,测试用例跑了六十个,四十七个绿色,十三个红色。红色的全是跟精度有关的断言。

他把那些红色的测试结果截图保存,放进了桌面上一个名叫“temp”的文件夹里。

下午四点,周明远来找他了。

周明远端着一个马克杯,里面泡着某种草药茶,气味隔着一米远都能闻到——甘苦交加,像甘草和黄连的混合物。他站在林深工位旁边,没有坐下,居高临下地看着屏幕。

“林深,你那个核心模块,我之前从来没碰过你的代码,”周明远开口了,声音不大,但清晰,“你删了什么我不知道,但明天演示如果出问题,产品这边很难跟客户交代。”

林深转过来面对他。周明远的脸很瘦,颧骨突出,架着一副细框眼镜,镜片后面的眼窝有些凹陷。他平时话不多,开会时总是坐在角落记录,很少主动发表意见。此刻他站在这里,端着那杯草药茶,姿态里有一种罕见的强硬。

“周哥,”林深说,“你知道你的名字为什么会出现在我的代码署名里吗?”

周明远的瞳孔微微收缩了一下。他喝了口茶,杯沿在嘴唇上停留的时间比正常喝水的动作长了一倍。

“我不知道,”他说,“是陈总安排的。”

“哪天安排的?”

“上周四还是周五,具体我忘了。他在群里@了我一下,说项目核心模块要统一作者署名格式,让大家配合一下。”周明远的语气不带波澜,“我没有细问,以为只是版权信息规范化。”

“苏小棠呢?”

“她……”周明远顿了一下,“她应该也不知道吧。她又不写代码。”

林深看着他的眼睛。周明远的眼神有点游移,但看不出明显的撒谎痕迹。他可能真的不知情,也可能知道一点但装作不知。林深拿不准。

“明天演示要跑的那份数据,”林深说,“是你昨晚准备的?”

“对。从客户那边拿回来的真实业务样本,两百条,带标注。”

“你给我看一眼。”

周明远犹豫了一下,掏出手机翻了翻,把一份Excel表格的截图递给林深。林深接过来,滑动着看了几行,眉头慢慢皱起来。

“这批数据的分布跟预训练集不太一样,”他说,“特征值偏移很大。”

“客户给的就是这批,”周明远拿回手机,“你说过模型有自适应能力。”

“有,但需要完整版的动态注意力层。阉割版处理不了这种偏移。”

“阉割版?”周明远的声调变了一下,“什么阉割版?”

林深没有回答。他转回去面对屏幕,敲了一行命令,把测试报告中那十三条红色断言调了出来,每一行都带着明显的精度偏差指标。周明远凑过来看,草茶的气味更近了,那股甘草的苦味灌进鼻腔。

“明天跑这个,”林深说,“结果就是这些断言全部失败。”

周明远的呼吸声变粗了。他直起身,杯子里的茶液晃动了一下,溅出一滴落在林深的键盘边缘。他愣了一下,从口袋里掏出一张纸巾去擦,动作有些慌乱。

“你……”他擦完键盘,把湿纸巾攥在手心里,“你到底想干什么?”

“我想知道是谁把我的署名栏里塞了三个不相干的人,”林深说,“以及为什么。”

周明远沉默了很久。窗外的天色暗下来了一点,云层把下午的阳光遮住了一角,研发区的日光灯自动亮起来,冷白色的光均匀地铺在每个工位上。

“我不会帮你背锅。”周明远最终说了一句,转身走了。草茶的气味从他离开的方向慢慢散去,留下一种空洞的洁净感。

林深坐在原地,手搭在键盘上,指尖能感觉到那块被茶水蹭过的地方,微微发黏。他打开浏览器,登录了公司内部的权限管理后台。admin账号的操作日志显示,上周五凌晨一点零七分,有一个IP地址从内网发起了合并请求,操作对象正是项目仓库。那个IP段属于公司办公区六楼——产品部所在的楼层。

他截了图。

下午五点四十分,赵乾坤的电话打进来了。林深看着屏幕上跳动的名字,等了五秒才接。

“小林啊,”赵乾坤的声音总是带着那种销售特有的洪亮和热情,哪怕隔着几百公里也能让人感觉到他脸上的笑容,“深圳这边刚开完会,我听说了上午的事,你别急啊,有什么问题咱们一起解决。”

“赵总,”林深说,“您看过项目仓库的代码吗?”

电话那端顿了一拍。“我看那干嘛,我搞销售的,技术的事儿你比我在行。但署名这个事吧,陈总跟我提过,说是为了项目申报什么专利还是软著来着,需要凑几个人——”

“软著不需要三个人凑一个算法模块。”

“……是吗?那可能我记错了。”赵乾坤的笑声稍微低了一点,“反正就是走个形式嘛,核心技术是你做的,谁都清楚。”

“那明天客户演示,如果出问题了,您觉得客户会认为是谁做的?”

电话那端彻底安静了。林深听见背景里有机场广播的声音,正在催促某航班登机。赵乾坤沉默了大概七八秒,呼吸声通过话筒传过来,粗重而清晰。

“小林,”他的语气变了,不再那么洪亮,降了两个调,“你是不是有什么想法?”

“我在查是谁用admin账号把名字加进去的。”

又是一阵沉默。机场广播换了一条,这次是粤语。

“这个事吧,”赵乾坤终于说,“我建议你别查太深。有时候公司里的安排,有公司的道理。你只要把技术做好,其他事不用你操心。”

“好的赵总,我知道了。”

林深挂了电话。他把手机放在桌面上,屏幕朝上,通话记录里赵乾坤的名字安静地躺在最上面一行。窗外最后一点天光正在被楼群吞没,写字楼之间的缝隙里,露出一小片暗紫色的云,像皮肤上即将消褪的淤青。

六点整,陈放的办公室里亮着灯。

林深站在门外,敲了两下。门是虚掩着的,里面传来陈放的声音:“进。”

他推门走进去。陈放坐在办公桌后面,面前摊着一份文件夹,钢笔搁在旁边,笔帽没有拧上。办公室里有一股淡淡的雪松香薰味,是陈放的妻子从日本带回来的,每次林深进来都能闻到。

“坐。”陈放伸手示意对面的椅子。

林深坐下。椅子是真皮的,坐下去时发出一声轻微的排气响。陈放合上文件夹,把钢笔帽拧好,然后十指交叉放在桌面上。

“上午的事,我想了一下午,”陈放开场,“你知道我最在意什么吗?”

林深摇头。

“我在意的是,你为什么不在昨天告诉我?甚至不在今天开会之前告诉我?你明明知道演示不了,你一声不吭坐到会议桌上,然后在全组人面前摇了那个头。”陈放的声音不急不缓,像在剥一颗橘子,一层一层地揭开皮,“你是故意选的这个时机。”

林深没有否认。

“为什么?”

“因为我不说,没人会注意到署名栏里多了三个名字。”林深说,“但我摇头了,所有人都会去想——为什么摇头?是不是代码有问题?然后他们会去看代码,去看提交记录,去发现那三个名字是后来被塞进去的。”

陈放的眼皮微微跳了一下。他靠在椅背上,香薰的味道在两人之间的空气里缓慢地旋转。

“所以你这是自爆。”

“是。”

“为了什么?那三个名字就算加上去,对你有什么实质影响?项目还是你的,技术还是你的,晋升评审的时候没人会因为署名多了三个名字就否定你的贡献——”

“那他们为什么要把名字加上去?”

陈放停住了。

林深前倾了一点,手肘搁在膝盖上,身体的重心往前移。他能看见陈放袖口内侧有一小片水渍,大概是下午洗杯子时溅到的,还没来得及干。

“陈总,您如果告诉我理由,我明天可以配合演示。”林深说,“那个版本我保留了本地备份,只需要一个小时恢复环境,明天上午能跑。”

陈放看着他,眼睛里有某种东西在飞快地计算。

“我在等您一句话,”林深说,“是谁安排的?”

办公室里的雪松香薰味忽然变得很浓,浓得几乎呛人。陈放的嘴唇动了动,又合上。他低头看了一眼桌面上的文件夹,那里面是什么林深不知道,但陈放看它的眼神像在看一份合同里最不利的条款。

“不是我,”陈放最后说,“我不知情。”

他说完这句话,空气里的某根弦突然绷紧了。林深看着他的脸,试图从那上面的每一条纹路里读出真假。陈放的表情很平静,平静得有些过了头。

“那是谁?”

“我不能说。”

“为什么?”

“因为我还在查。”陈放站起来,走到窗边,背对着林深。六楼的窗户看出去是对面楼的玻璃幕墙,映着城市初上的灯火,像一片倒悬的星空。“三天前我也发现了这件事。我比你知道得早几个小时。我在查是谁动用了admin权限。但那个账号的记录被人清过一部分,查起来需要时间。”

林深的后背沁出一层薄汗。三天前?陈放说三天前?那正是他删代码的前一天。

“你为什么没有立刻撤销那个PR?”

陈放转过身来。窗外的灯光从他背后打过来,把他的脸埋在阴影里,只有一个轮廓。

“因为撤销会留下更明显的痕迹,”他说,“我在等对方下一步动作。但没想到你动作更快。”

两个人隔着一张办公桌对视。香薰灯上的小蜡烛在玻璃罩里跳了一下,火焰变矮了又升起来。林深的手机在口袋里震了一下,他没有掏出来。

“明天演示,”陈放说,“你用那个备份版本。”

“我需要知道是谁。”

“你会知道的。但不是今天。”

林深站起来,椅子腿在地毯上几乎没有声音。他走到门口时,陈放忽然叫住他。

“林深。你做这个事,想过后果吗?”

林深停住脚步。他的手搭在门把手上,金属的触感冰凉地贴着掌心。

“想过。”

“那你还做?”

“我的代码,署名权是我的。”林深拉开门,走廊的白光照进来,把他的影子拉长在办公室的地板上,“这个事我不想妥协。”

他走出去,门在身后合上。走廊里空荡荡的,日光灯管稳稳定着,没有再闪。他掏出手机看了一眼,刚刚那条消息是蒋琳发的:“陈总怎么说?”

林深打了两个字:“还在查。”

他走过消防通道门口时,那扇红门上方的绿色标志牌发出幽暗的光。楼道里又传来脚步声,这次是有人在往上走,一步,一步,像某种匀速的心跳。林深没有停步,径直走向电梯厅,按下下行键。

电梯门打开时,里面站着一个穿灰色外套的男人。林深不认识他,但余光扫到他手里捏着一个快递信封,收件人栏写着苏小棠的名字。

电梯门合拢。金属壁面上映出林深的脸,眉毛微微拧着,嘴角有一丝干燥起皮的白屑。他舔了一下嘴唇,尝到一点点血的铁锈味。

4

林深到家已经快九点了。

公寓在城东一条老街上,六层没电梯,他住四楼。楼道灯坏了快一个月,物业一直说“下周修”,他早习惯了摸黑爬楼。今天往上走的时候,他在三楼的拐角停了一下,因为闻到一股陌生的气味——烟味混着某种带香料的外卖,像是咖喱。隔壁那户空置了半年,上周末刚搬来新租客,他还没碰过面。

四楼走廊的声控灯倒是亮的,昏黄的一小圈光。他在门口掏钥匙时,发现门缝下面塞了一张折起来的A4纸。

林深弯腰捡起来。纸面干净,没有任何标识,展开之后只有一行打印出来的黑体字,字号很大,占了大半页:

“有些事不知道比知道好。”

他站在门口举着那张纸看了很久。走廊灯在他静止了三秒之后自动灭了,黑暗从四周漫上来,只有手机屏幕的亮光照着纸上那行字,白底黑字,每一个笔画都清清楚楚。

他用钥匙开了门,进屋,把纸平摊在餐桌上。然后去厨房倒了杯水,靠在灶台边喝了两口,目光一直没离开那张纸。厨房窗外的路灯透过百叶窗的缝隙射进来,一道一道明暗相间的光条落在纸面上,“不知道比知道好”那几个字的底部浸在暗处,上半截亮着。

他的第一反应是赵乾坤。电话里那句“别查太深”紧接着这张纸条,时间线太吻合了。但赵乾坤在深圳,要送一张纸条到他门缝底下,需要有人跑腿——公司里谁会给赵乾坤办这种事?销售部的人他不熟,但也不是完全没可能。

第二反应是陈放。陈放知道他的住址,HR系统里就有。但陈放当面跟他说了“你会知道的”,没有必要再递一张匿名的东西进来。

第三反应是苏小棠。但苏小棠为什么?她只是一个名字被塞进去的人,跟这件事的核心利益有多远?

他想不出答案,把纸条翻过来看了看背面,什么也没有。然后他拉开餐桌抽屉,把那张纸放了进去,压在一摞水电费账单下面。

洗了澡出来,头发还在滴水,他坐在沙发上打开了笔记本电脑。本地备份的完整版代码储存在一块外接固态硬盘里,他用数据线连上电脑,看着硬盘指示灯闪烁了几下,文件目录弹出来。

一万三千行。他滑动鼠标滚轮从顶到底扫了一遍,熟悉的函数名、类结构、注释里的个人笔记,每一个字符都是他熬夜敲出来的。他把光标停在主入口函数上,指尖悬在回车键上方,但最终没有按下去。

现在还不是恢复的时候。

他关掉代码窗口,打开浏览器,进入公司OA系统。权限管理模块的登录界面弹出来,他输入自己的工号和密码,进到后台日志查询页。admin账号的操作记录大部分被清掉了,但他之前截过图。他把截图重新翻出来,放大,仔细看那条唯一保留的合并记录。

操作时间:上周五 01:07:23

操作IP:10.23.67.42

操作内容:Merge PR #1174 into main

关联账号:admin (system)

IP是内网地址,10.23.67.42。林深打开公司内网IP段分配表,这个地址落在——他拖动表格往下翻——产品部专属网段的尾部。67.42,这个具体的主机号他没有印象,但产品部一共十二个人,每个人分配的设备IP他大概能对应起来。

周明远是67.38。产品部另外一个同事是67.41。67.42……

他停住了。

67.42属于产品部那台公用测试机。那台机器放在产品区的公共桌上,谁都能用,没有绑定具体个人。

又是一个查不到的“谁”。

林深关掉浏览器,仰头靠在沙发靠背上。天花板有一块水渍,形状像张半展开的地图。他盯着那块水渍看了很久,直到眼睛发酸,才闭上。

手机在茶几上震了一下。他摸过来看,是蒋琳。

“你到家了吧?晚饭吃了没?”

他打字:“吃了点饼干。”

“那不行。我给你叫了外卖,应该在路上了。别问,问了就是我心疼你猝死在工位上还要我帮你关电脑。”

林深看着这条消息,嘴角动了一下。他没有回复,但三分钟后门铃响了。他开门接过外卖员递来的塑料袋,里面是一份热腾腾的砂锅粥,还贴着一张小票,备注栏写着“加虾加干贝,别放香菜”。

粥的热气扑在脸上,带着米香和姜丝的辛暖。他在餐桌前坐下,打开盖子,用勺子搅了搅,底下沉着一层厚厚的虾肉和干贝。他舀了一勺送进嘴里,滚烫的粥液从舌尖一路烫到喉咙,他嘶了一声,却没有停下来。

吃到一半,手机又响了。这次是刘妍——测试组那个早上的消息他还没回。

“深哥,我看了今天测试环境的跑批结果,你的模块那十三条断言全红了。明天客户演示用哪个版本?需不需要我这边配合调数据?”

林深放下勺子,擦了擦手,打字:“不用调,明天就用这个版本跑。”

“???这会被客户骂死吧?”

“骂就骂。”

对面沉默了一分钟,然后回了一条:“行吧。反正你是算法Owner,你说用哪个就用哪个。但我提醒你一句,那十三条断言客户如果抽样验证,会看到实际输出跟预期偏离很大,到时候产品组那边会炸。”

“我知道。”

“那你还——”

“刘妍,你信我吗?”

这条发出去之后,对方很久没有回复。林深把手机放到一边,继续喝粥。粥的温度降了一些,入口正好,鲜甜绵密,从喉咙滑进胃里,把一整天积压的空虚和紧绷感稍稍融化了一点。

吃完粥他把塑料盒收拾好,正准备去洗碗,手机屏幕又亮了。这次是一个陌生号码发来的短信,没有归属地显示,内容只有一行字:

“你想查的那个IP,上周五凌晨用那台公用机的人不止一个。”

林深盯着这条短信,脊椎骨像被一只手从底端向上捋了一把,凉意顺着脊柱爬到后脑。他立刻回拨过去,听筒里传来的是一段机械女声:“您拨打的号码是空号。”

他再发短信,发送失败。号码已经被注销了。

他坐在沙发上,手里攥着手机,砂锅粥的余温还在胃里慢慢发酵,但整个人像浸在一缸冰水里。有人知道他今天查了IP。有人知道他查到了公用测试机。这个人不一定是陈放,不一定是赵乾坤,不一定是周明远——但这个人一定在公司内部,一定能看到OA系统的查询记录,一定知道他在干什么。

更关键的是,这个人似乎并不想阻止他。而是递了一条线索过来。

“不止一个人。”

也就是说,上周五凌晨一点零七分,用那台公用机的人——至少有两个。

林深站起来,走到窗边,把百叶窗挑开一条缝往外看。楼下街道空荡荡的,路灯把梧桐树的影子投在路面上,风一吹,那些暗影就碎成一片晃动的灰色。没有人站在路灯底下,没有车停在街对面,一切看起来正常得不能再正常。

但他把百叶窗合上了。然后走到门口,把门反锁,又把防盗链挂了上去。

上床躺下时已经过午夜。他闭着眼,脑子里却一遍又一遍地回放着今天所有画面——会议室里三十七道目光,陈放在消防通道前的背影,周明远草茶溅在键盘上的那滴液体,赵乾坤电话里的沉默,苏小棠雾霾蓝的指甲盖,还有那张从门缝底下塞进来的A4纸。

“有些事不知道比知道好。”

他翻了个身,枕头压住半边耳朵,把窗外的风声隔出去。黑暗中,他想起自己第一次写完这个核心模块的那个凌晨。那天也像今天一样,整层楼只剩下他自己,空调关了,空气又闷又静。他跑完最后一组测试,看着屏幕上百分之九十二的精度指标跳出来,嘴角忍不住往上翘了一下。

那时候他觉得这代码是他的孩子、他的分身、他的一部分。他给了它骨骼、肌肉和灵魂。后来有人往它身上贴了三张别人的名牌,而他唯一能做的,就是亲手把它推下悬崖,然后在崖底等着看谁会来找他的尸体。

这个念头像一根细针,刺进意识深处某个柔软的地方。他在那根针的刺痛里,慢慢滑进了睡眠。

5

星期四早上七点,林深被闹钟叫醒的时候,窗外的天还灰蒙蒙的。他躺了几秒钟,感觉后脑勺有点沉,大概是昨晚睡眠质量太差——他记得自己半夜醒了两次,一次是梦见代码被当众删除,另一次被门外的脚步声惊醒,爬起来看了一眼猫眼,走廊空无一人。

他洗漱完换了件干净的衬衫,把固态硬盘装进背包夹层里,在门口停了一下,拉开餐桌抽屉看了一眼那张A4纸。它还在,安安静静地压在水电费账单下面。他没有拿出来,关上抽屉,出了门。

地铁上人很多。他站在车门旁边,手扶着吊环,随着车身的晃动轻微地摆来摆去。旁边一个高中女生戴着耳机在看短视频,外音漏出来一点,是某个综艺节目的笑声剪辑,吵吵嚷嚷的。林深把视线转向窗外,隧道壁上的广告灯箱连成一条模糊的亮带,飞速地向后退去。

他在公司那一站下了车,穿过早高峰的人流走进写字楼大堂。电梯里挤了七八个人,他站在最里面,面对着其他人的后脑勺和肩膀。前边一个人在用手机免提打电话,声音不大但清晰:“……对,今天上午的演示我这边已经准备好了,你放心,核心算法没问题,昨天只是一点小故障……”

林深的耳朵竖了起来。打电话的人声音有点耳熟,但他看不见脸。电梯到了六楼,前面的人陆续出去,打电话那个往左拐了——是运营组的那个组长,昨天在会上笑了一声那个。他步伐匆忙,手机还贴在耳边,没注意到林深就在他身后两米远的地方。

研发区已经有人了。刘妍坐在测试组的工位上,手里端着一杯咖啡,看见林深进来,朝他举了一下杯子算是打招呼。林深走过去,在她旁边站定。

“早上跑了一轮吗?”他问。

“跑了,”刘妍放下杯子,转过屏幕给他看,“还是老样子,四十七绿十三红。红的那几条偏差数据我单独列了表,要不要发你?”

“发我。”

刘妍操作了几下鼠标,林深的邮箱里弹出一封新邮件。他掏出手机点开附件,红色的断言条目一行行排列着,每一条后面跟着实际精度值和期望值之间的差值。最小的差了百分之十二,最大的差了百分之二十一。

他看了片刻,把手机收回口袋。

“九点半的会,”刘妍说,“客户那边的技术负责人会线上接入,据说是个挺较真的人,之前审我们的技术方案提了八十多条问题。”

“我知道,”林深说,“方案的附录是他写的补充条款。”

刘妍抬眼看他,欲言又止。她端着咖啡杯犹豫了一会儿,最终什么也没说,转回去面对自己的屏幕。

林深回到工位,打开电脑。收件箱里有十七封未读邮件,大部分是项目组的日常通知,夹杂着几封他昨晚没看的抄送。他快速扫了一遍,然后被一封标题全大写的邮件钉住了视线。

发件人是苏小棠。发送时间是凌晨两点十九分。

标题是:“关于代码署名的说明。”

他点开邮件。

正文很短,总共不到两百字:

“林工你好。我看到昨天会上发生的事情了。关于我的名字出现在你的代码署名里这件事,我想跟你说一声对不起。我不知道是谁操作的,也没有人提前跟我商量过。我今天早上来公司会找陈总说明情况,要求把我的名字从项目文件里移除。给你造成了困扰非常抱歉。”

林深把这封邮件来回读了三遍。措辞得体,情绪克制,甚至带着一点卑微。如果这封邮件是一个人的面孔,那它长着一张无辜的脸。

但他留意到了一个细节:发送时间是凌晨两点十九分。苏小棠为什么在凌晨两点发这封邮件?她是失眠了,还是这封邮件经过了某种深思熟虑后的定时发送?他在回复框里打了一行字:“小棠,谢谢你说明情况。方便的话今天上午有空聊两句吗?”

他等了一会儿,没有回复。九点十五分的时候,他起身往茶水间走。茶水间在走廊拐角,路过产品部区域时,他余光扫到苏小棠的工位空着,桌上电脑屏幕是黑的,充电线垂在桌沿,茶杯倒扣在杯垫上——是那种被人刻意收拾过的状态。

他倒了一杯热水,靠在茶水间的台面上慢慢喝。窗外是隔壁写字楼的侧墙,灰白色的外立面被昨夜的雨洇出几道深色的水痕。他的手机在口袋里震了一下,以为是苏小棠回了,掏出来一看,是蒋琳。

“来一下楼梯间。”

林深放下杯子,走出茶水间,左转进了消防通道。楼梯间里光线昏暗,蒋琳站在二楼半的平台那里,抱着胳膊,看见他下来,第一句话是:“苏小棠今天没来。”

“她请假了?”

“没请假,人事系统里显示她今天排班正常,但工位是空的。我问了前台,说没看到她打卡记录。打电话关机。”

林深靠在楼梯扶手上,不锈钢的栏杆冰凉的触感隔着衬衫传到肩胛骨。“她凌晨两点给我发了一封邮件,道歉,说要把名字撤掉。”

蒋琳的眉毛挑了一下。“凌晨两点?你信吗?”

“不好说。”

“你有没有想过,她是被人推出来当挡箭牌的。”蒋琳的声音压得很低,在楼梯间里回荡着变成模糊的共振,“三个名字里她最好解决——一个刚转正的小助理,给她一个‘不知情’的人设,让她出来道个歉,事情就变成‘误会’了。但另外两个呢?”

赵乾坤。周明远。

林深昨天晚上想过这个问题。如果把署名事件比作一道算术题,苏小棠是最容易合并的那一项。她跟核心算法的利益关系最远,被牺牲掉的代价最小。但一封凌晨两点发的道歉信,太主动了。主动得像排练过的。

“今天会上,如果周明远也在场,”蒋琳说,“你打算怎么办?”

“他会在场,”林深说,“赵乾坤远程接入。客户那边技术负责人线上。陈总主持。所有人都在。”

“那你——”

“我把完整版带来了,”林深拍了拍背包,“但我还没决定用哪个版本。”

蒋琳盯着他看了几秒,然后叹了口气。“你这个人真是……”她没说下去,摇着头转身往楼上走,“九点半了,走吧。”

回到研发区时,大家已经在往会议室走了。林深落在队伍最后面,看着前面那些人背着电脑包、端着水杯的背影,肩膀的线条绷得或紧或松。周明远走在中间偏前的位置,步伐比平时快,手里那杯草茶换成了黑咖啡。赵乾坤的名字已经出现在了远程接入的参会列表里,状态是“在线”。

林深在会议室门口停了一步。门半开着,里面有人在调投影仪,有人插HDMI线,有人翻笔记本。他看见陈放坐在主位旁边,正低头看手机,眉心锁着两道竖纹。

他走进去,在自己昨天的位置上坐下来。右手边坐着蒋琳,左手边空着——那是刘妍的位置,她晚了一步,正在后排跟客户那边的技术负责人调试线上音频。音响里传出一阵刺耳的电流噪音,有人喊了一声“喂喂”,然后被掐掉了。

投影仪亮起来。这次幕布上显示的是空的桌面,蓝天白云的默认壁纸,干干净净。

陈放抬起头,目光在会议室里扫了一圈,最后落在林深身上。他点了下头,意思很明确:可以开始了。

林深把电脑连上投影,桌面壁纸变成了那幅神经网络架构图。绿色节点密密麻麻铺满了大半个屏幕,像一张活着的、呼吸着的星图。后排有人低低地“哇”了一声,是实习生。

他打开终端,手指在键盘上放了一秒。然后他侧过头,看了一眼蒋琳。蒋琳微微抬了一下下巴,眼神在说:“你自己选。”

林深转回去,面对屏幕。他在终端里输入了第一行命令,手指敲击键盘的声音清脆而连贯,啪嗒啪嗒地灌满了整间会议室。

6

命令执行完毕的瞬间,屏幕上的光标跳到了下一行,等待新的输入。

林深的视线落在终端输出上——他刚刚执行的是检查本地代码版本的指令。返回的结果显示,当前工作目录下的代码是那个阉割版。四十七绿十三红的那一版。

他手指停在键盘上方,没有动。

会议室里安静了大约三秒。音响里传来客户那边技术负责人的声音,带着一点轻微的电流杂音:“林工,你们准备好了吗?我们这边已经进会议室了。”

陈放看了林深一眼。那一眼里有催促,有疑问,还有一种紧绷的期待。

林深的手从键盘上收了回来。

“稍等,”他说,“我需要加载一个外部模块。”

他弯腰从背包里掏出那块固态硬盘,USB线插入电脑端口的时候,接口处发出轻轻的咔嗒声。他打开文件管理器,找到硬盘里的完整版代码目录。一万三千行,安静地躺在那里,像一个沉睡的人。

他只要输入一行复制命令,就能把这个版本覆盖到当前工作环境。然后编译、运行,精度回到九十二,客户验证通过,所有人的脸上恢复笑容,今天的会议圆满结束。然后呢?那三个名字依然在署名栏里。admin账号的谜底依然埋在水底。陈放说“你会知道的”,但什么时候?谁给的保证?

他的光标停在命令行窗口里,闪动的下划线像一只细小的眼睛,等待着他的下一个动作。

“林工?”客户那边的技术负责人又问了一声,“是不是有什么问题?”

后排有人咳嗽了一声。运营组的组长翻了个页,纸张在安静中发出干脆的响声。

林深把固态硬盘拔了下来。

“不用了,”他说,“这个版本就够了。”

他把硬盘放回背包,拉链拉上,然后回到终端窗口,敲下了阉割版的编译命令。屏幕上滚动过一长串编译日志,绿色的OK字样一行行地跳出来,中间偶尔夹杂着几行黄色的warning。编译结束后,他键入运行指令。

程序启动。数据集加载。特征提取。模型推理。

第一个精度指标跳出来的时候,数据是七十二。比预期的六十七高了五个点,但仍然远远低于九十二。

第二个指标,六十九。

第三个指标,七十一。

会议室里有人在动鼠标,有人在看手机,还没有人注意到这些数字意味着什么。刘妍在后排盯着自己的屏幕——她面前有另一台测试终端,显示的是同批次数据的验证结果,十三条断言正在一条一条地亮起红色的失败标识。

陈放注意到了刘妍的表情。她的嘴唇抿紧了,眉心皱起来,整个人往屏幕前倾了过去。陈放把目光收回到林深面前的投影上,屏幕上正在输出第五个精度指标:六十八。

他的眉头动了一下,幅度很小,但林深看见了。

程序继续运行。第七个指标输出时,客户那边的技术负责人开口了:“林工,我这边看到你输出的精度好像在往下走。预训练的表现我记得是九十以上?”

林深转过脸对着摄像头的方向。“对,预训练精度是九十二。但今天跑的是新的业务数据,特征分布跟训练集有偏移,模型自适应需要时间。”

“偏移大概多大?”

“百分之十到十五。”

那边沉默了几秒,然后说:“这个偏移量对我们来说有点大。按合同标准,上线版本的精度不能低于百分之八十五。你现在这个数据……”

屏幕上第十个精度指标跳了出来:六十七。

会议室里的空气肉眼可见地变稠了。有人停止了翻页,有人放下了手机。周明远的黑咖啡端在嘴边,但一直没有喝,杯沿贴着下唇,像一个冻结的动作。

林深看着屏幕,十三个指标的输出完成了。他点了下汇总按钮,一张红色的表格弹出来,十三条失败断言赫然排列在屏幕中央,最顶端用粗体字写着:验证精度均值 68.3%,期望值 ≥ 85%。

音响里的沉默持续了三秒。然后客户那边说:“这个结果不太对吧。你们昨天不是说一切正常吗?”

陈放开口了:“王工,这是我们内部测试环境的一个分支版本,正式版还在优化当中——”

“但你们给的演示方案里写的是百分之九十二精度,”客户那边打断了他,“白纸黑字的附件。”

周明远终于把咖啡杯放下了。杯底磕在桌面上发出一声清脆的响,在安静的会议室里格外刺耳。他转过去看了林深一眼,那一眼里的情绪很复杂——恐慌、愤怒、难以置信,交织成一种扭曲的线条。

赵乾坤的线上头像闪了一下,麦克风图标亮起来:“陈总,这是怎么回事?我这边客户代表也在线上听着呢。”

陈放举起右手,做了个暂停的手势。“大家冷静一下。林深,你解释一下。”

所有人的目光重新汇聚到林深身上。那些目光像探照灯,像箭矢,像冬日里从四面八方灌进来的冷风。林深站起来,双手撑在桌沿上,身体微微前倾。

“这个版本,”他说,“是我能提供的唯一版本。”

会议室里响起一声短促的吸气。蒋琳的手指在桌下攥紧了。

“完整版的核心模块,三天前被我从服务器上删除了,”林深的声音很平,像在讲述一件跟自己无关的事情,“因为有人用管理员权限,在我的代码署名栏里增加了三个名字。我在不知情的情况下,被加上了赵乾坤、周明远、苏小棠作为核心算法的贡献者。”

他停下来,让这句话沉到每个人耳朵里去。

“我删除完整版之后,只保留了现在这个精度不足的版本。今天演示用的就是它。我知道结果会失败。我选择让这个失败发生在客户面前。因为只有这样,署名被篡改的事情才会被追查,而不是被私下掩盖。”

会议室彻底静了。

客户那边的技术负责人说:“等一下,你们内部有署名争议?”

赵乾坤的麦克风亮了又暗,暗了又亮,最终没有发出任何声音。

周明远的脸白了。他盯着桌面上的某个点,手指在咖啡杯沿上反复摩挲,指节泛出青色。

陈放慢慢靠回椅背,双手抱在胸前。他看着林深,表情里有一种林深从未见过的东西——不是愤怒,不是困惑,是一种近乎于遗憾的平静。好像林深的选择他早就预料到了,只不过一直在等待它变成现实。

后排的运营组组长放下笔记本,往后挪了挪椅子。“所以今天这个演示,是你故意的?”

“对。”

“你知道这会给公司造成多大的信誉损失吗?客户那边——”

“客户那边的技术负责人一直在听,”林深转向摄像头的方向,“王工,您觉得一个连署名权都无法保障的技术团队,您放心用他们的代码吗?”

音响里传来一声长长的呼气。“林工,我理解你的立场。但我只能基于我今天看到的演示数据做判断。这个精度不合格,我们的合作条款里有明确约定——”

“我知道,”林深说,“我不需要您放过这次演示。我只需要您记住,这个结果跟我的技术能力无关,跟公司的内部治理有关。”

他坐下来,伸手关掉了投影。幕布归为空白的那一刻,会议室好像被人按下了静音键。每个人都沉默着,连呼吸都小心翼翼。

刘妍忽然从前排站起来,手里举着一叠打印纸。她的动作很快,纸张边缘在空中划出一道弧线。“我这边有完整的测试记录,”她说,“从三天前到今天,所有版本的精度对比数据都存着。还有Git的commit日志截图,能证明署名变更的操作时间跟林深的提交时间不一致。”

她走到林深旁边,把那叠纸分发给两侧的人。陈放接过来扫了一眼,表情没有变化。周明远拿起来看了很久,手指在纸张边缘微微颤抖。运营组的组长翻了几页之后,表情从困惑变成了某种若有所思。

线上赵乾坤的头像熄灭了——他退出了会议。

音响里传来客户那边低声交谈的背景音,持续了大概半分钟。然后王工的声音重新清晰起来:“陈总,我们今天先到这里。数据我们已经录屏了,后续评估我会反馈给采购部。建议贵司内部的问题先解决清楚,我们再约下次演示。”

连线断开了。

会议室里剩下十几个人,沉默得像一个注满水的房间。没有人先开口。蒋琳把刘妍手里剩下的几页纸接过来,摞整齐,放在桌角。

陈放终于动了。他站起来,整理了一下衬衫袖口,动作很慢,很从容。

“今天辛苦了,”他说,声调平稳,“各位先回工位,我需要跟林深单独谈。”

他看了一眼林深,然后转身往外走。走到门口时停了一下,没有回头:“带上你的硬盘。完整版那个。”

林深把背包拉链重新拉开,取出那块固态硬盘捏在手里。金属外壳被他的体温焐热了一小块,握在手心里有种温润的触感。他站起来,跟在陈放后面走出会议室。两侧的目光像潮水一样从背后涌上来,又在他身后合拢。

走廊里的灯管仍然是那个节奏,不闪不灭,恒定地亮着。林深跟着陈放的背影往前走,经过茶水间的时候闻到里面飘出来的咖啡香气,经过产品部的时候看到苏小棠仍然空着的工位,经过消防通道门口的时候听见那扇红门后面传来楼下有人说话的声音,模糊而遥远。

陈放推开了自己办公室的门,侧身让林深先进去。

林深跨过门槛的时候,闻到雪松香薰的味道比昨天淡了一些,取而代之的是一股新鲜的茶香——桌面上放着一杯刚泡好的绿茶,热气还在袅袅地升腾。

陈放在他身后关上了门。落锁的咔嚓声轻而脆,在安静的办公室里像一粒石子投入深潭。

7

陈放走到办公桌后面坐下,端起那杯绿茶喝了一口,然后示意林深坐。

林深没有坐。他站着,把固态硬盘放在桌面上,推到陈放面前。“完整版在这里。恢复环境需要四十分钟。”

陈放看了一眼硬盘,没有伸手去拿。“你先放着。”

他放下茶杯,双手十指交叉搁在桌面上,姿势跟昨天一模一样,但眉眼之间的线条松弛了一些,像是某个紧绷了很久的东西终于卸了力。

“林深,”他说,“你知道我为什么昨天晚上跟你说‘会知道的’?”

“您需要时间。”

“我需要确认一件事。”陈放停顿了两秒,“我需要确认你跟这件事到底有没有关系。”

林深的后背僵了一瞬。“什么关系?”

“你别急,听我说完。”陈放的语气不急不缓,“三天前我发现署名被改之后,我查了admin账号的操作日志。那条合并记录是你删除的版本里的唯一一次异常操作。但你删除完整版的时间,是发现署名变更之后的第二天凌晨。也就是说,你有足够的时间在删除之前自己修改署名再删掉,制造一个‘被篡改’的假象。”

林深瞳孔缩了一下。他张了张嘴,喉咙里挤出一句:“我没有。”

“我知道你没有,”陈放说,“因为我昨晚确认了另一件事。admin账号上那条合并记录的操作时间戳是系统自动生成的,但是操作日志的底层元数据里藏了一个手动修改的标记。有人改过时间。”

林深愣在原地。

“那条PR的实际上传时间不是上周五凌晨一点,而是上周四下午三点。”陈放从抽屉里拿出一个平板电脑,划了两下,转过来给林深看,“你看这里。”

屏幕上是一张后台日志的截图,一行一行的十六进制数据之间,有一段被红框圈了出来。陈放指着那段数据:“这是操作时的系统时间戳。被人为回拨了十个小时。上周四下午三点,你跟我在项目评审会上,全组人都在,你不可能分身去操作一个合并请求。”

林深凑近看了两秒。那些十六进制的数字他看不太懂,但红框标注的位置确实有一处不一致——时间戳的数值和系统显示时间对不上。

“有人伪造了操作时间,”陈放收回平板,“把真正的操作窗口伪装成凌晨,让你查IP也只能查到一台公用机器。但他们没想到操作系统底层的日志元数据没有跟着改。”

“所以您昨晚在查这个?”

陈放点了点头。“我花了整个晚上找运维的人还原那份原始日志。你以为只有你在查?”

林深一时不知道该说什么。桌面上那杯茶的热气在两人之间升腾、扩散、变淡。他脑海里翻滚着新的信息,把之前所有的推测重新排列组合。时间被伪造过。真正的操作发生在周四下午三点,那是全组评审会的时间——

他忽然想到了什么。“上周四下午,评审会中场休息的时候,我出去了十分钟去接电话。那段时间谁不在场?”

陈放的目光定住了。“你记得谁不在吗?”

“赵乾坤当时在出差,”林深回忆着,“但他周四下午有个线上会议,我路过产品区的时候看到他工位的电脑亮着,应该在线。周明远全场都在。苏小棠……”他停了一下,“苏小棠中途出去过一次,她说去拿快递。”

陈放的眉心紧了一下。他沉默了一会儿,然后从抽屉里拿出另一份文件——员工考勤明细,打印出来的,上面用荧光笔标了四行。

“周四下午三点到四点,”陈放翻到那一页,“赵乾坤的线上会议记录显示他那个时间段在参加销售部的内部培训,全程有录屏。周明远在评审会现场,签到表上有签名。苏小棠……她出去了二十五分钟,没有打卡记录,前台监控显示她去了一楼快递柜,但取完快递之后去了哪里,监控没有覆盖。”

“所以只有苏小棠有不在场证明的空窗期?”

陈放把考勤表合上,靠在椅背上。“问题是,苏小棠没有admin权限。她连项目仓库的只读权限都没有。操作PR合并的人必须有管理员级别的账号。”

“admin账号可以借给任何人用,”林深说,“只要有那个账号的密码或者多因素认证的临时授权。”

陈放点了点头。“admin账号的多因素授权记录昨晚我也查了。上周四下午,三点十二分,有一笔授权请求,发起人的工号……”他顿了一下,“是周明远的。”

林深后脑勺一阵发麻。“周明远?他有admin权限?”

“他没有直接权限,但那个时间段他申请了一次临时授权——系统记录显示用于‘测试环境紧急维护’。授权被批准了,批准人的工号是管理员的。而那个管理员账号的操作记录,在这条授权之后被清除了。”

“也就是说,有人用周明远的名义申请了授权,然后用admin账号执行了PR合并,”林深理顺逻辑,“周明远本人可能知道,也可能不知道,但他的工号被用了。”

陈放沉默了两秒。“你觉得周明远知不知情?”

林深想起昨天下午周明远来找他时的表情,那张瘦削的、被草茶气味包裹的脸。他说“我不知道”的时候,镜片后面的眼睛有没有闪躲?林深当时判断是没有。但此刻他被新的信息搅动了判断。

“我不确定,”他说,“但他不是主谋。”

“理由?”

“主谋不会在事情暴露之后还端着咖啡坐在会议室里等我演示。他会想办法提前阻止我。周明远什么都没做。他甚至不知道今天演示会出问题。”

陈放似乎对这个判断表示认可。他拿起那杯茶又喝了一口,水温大概已经凉了,但他没有皱眉头。

“苏小棠呢?”林深问,“她今天没来,凌晨两点发了道歉信。这条线怎么解释?”

“她那条道歉信,”陈放说,“我让人去查了邮件发送时的IP。不是从她家发出来的,是从公司内网。”

林深的眼皮跳了一下。

“凌晨两点,公司内网。她不在公司打卡记录里,但邮件是通过内网发出的。也就是说,有人用她的账号从公司内部发了那封邮件。可能是她自己半夜溜回来发的,也可能是别人拿了她的账号。”

“她的账号密码……”

“入职的时候默认密码,她可能没改过。”陈放说,“苏小棠的电脑安全意识不高。上个月安全演练的时候她就中过一次钓鱼邮件。”

林深忽然觉得喉咙里涌上一股干涩。他走到窗边,手撑在窗台上往外看。楼下街道上人流如织,午休时间快到了,穿制服的送餐员骑着电动车在车流间穿梭。那些人在阳光下走着、骑着、奔跑着,每个人身上都贴着一张身份标签,但标签背后的那个人在做着什么、想什么,从窗口望下去什么也看不出来。

“陈总,”他没有回头,“您查了这么多,查到最后,能不能告诉我为什么?为什么有人要把三个名字塞进我的代码里?”

身后的沉默持续了几秒钟。然后陈放的声音响起来,比刚才轻了很多。

“赵乾坤找我谈过一个事,”他说,“公司准备申报一个省级的技术创新项目。项目要求核心研发团队至少五个人,而算法部门当时只有你一个。”

林深转过来。“所以是为了凑人头?”

“凑人头只是第一步。第二步是项目申报成功之后,这三个人可以作为‘核心团队’写进申请材料。赵乾坤的晋升、周明远的产品总监竞聘、苏小棠的转正评优,都需要这个项目做背书。”陈放的语气平淡,但每个字都像一枚细针,“你一个人撑起整个算法,但评优的时候只能占一个名额。而把名字加进来,三个人都能受益。”

“那我呢?”林深说,“我有什么?”

“你什么也不会失去。”陈放跟他对视,“他们加名字的时候大概就是这么想的——反正代码是你写的,项目成果还是你的,多三个名字不影响你的技术影响力。”

林深吸了一口气。窗外的风从缝隙里灌进来,带着一股干燥的、混合着汽车尾气和食物香气的城市气味。他想起那些深夜独自敲键盘的时刻,想起每次调试成功后想找人分享却发现整层楼只有自己一个人亮着灯。他以为自己的代码是一个孤岛,他一个人建起了岛上的每一座灯塔。然后有人告诉他,灯塔的光可以照亮别人,分一点光出去又有什么关系?

有关系。

他在心里无声地说。每一行代码都是他在凌晨两点的灯光下一个字符一个字符地敲出来的。那些夜晚他疲惫、孤独、反复自我怀疑,但每一次让模型多跑出零点一个百分点的精度,那种微小的、只有自己才能体会的成就感和欢喜,是他个人的私有物。

他不想分给别人。他不应该被要求分给别人。

“赵乾坤知道吗?”他问,“他知不知道名字是怎么加上去的?”

陈放沉吟了一下。“他很可能知道。但有没有直接参与操作,目前证据不足。那个admin授权的请求人虽然是周明远的工号,但实际操作人的IP——原始日志里那个真正的、没有被伪造的IP——落在了四楼。”

“四楼是赵乾坤的销售部。”

“对。”

两个人对视着。办公室里的空气沉甸甸的,雪松的余香和绿茶的清苦交织在一起,闻起来像某种终于被破译的密码。

林深伸手拿回桌面上那块固态硬盘。“我现在恢复完整版。”

陈放点了下头,从抽屉里拿出一把钥匙。“用隔壁的备用会议室,锁上门。四十分钟后给我结果。客户那边我去沟通,争取今天下午补一个内部测试回传给他们。”

林深握住硬盘站起来。走到门口时,他停住脚步,没有转身。

“陈总。如果我的名字被人从项目里拿掉,换成别人的,我不会再回来。”

他拉开门走了出去。

走廊里日光灯依旧亮着。备用会议室在走廊另一端,他走过去的路上经过了研发区,几个同事抬起头看他,目光里有好奇、有紧张、有关切。蒋琳站在茶水间门口,手里端着一杯新接的热水,看见他路过,没有说什么,只是朝他举了一下杯子。

林深走进备用会议室,反手关上门。屋里冷气开得很足,空荡荡的桌面上只有一台备用的显示器,键盘和鼠标崭新,薄膜上还贴着透明的保护贴。

他坐下来,把固态硬盘接入电脑。文件夹弹出来的时候,那一万三千行代码安静地排列在目录树里。他打开主入口文件,光标停在第一行注释上。

他看着那行注释——那是他创建这个模块时敲的第一行字,用英文写了个标题,后面跟了他的名字和日期。

他把光标往下移了几行,在作者声明的位置停顿了一瞬。那一栏现在写着四个名字。林深,赵乾坤,周明远,苏小棠。

他滑动鼠标选中了后三个名字,按下了删除键。

字符消失的速度很快,光标往前跳动了几格,只剩下一个名字孤零零地留在那里。

他盯着那个名字看了几秒,然后开始编译。

8

四十分钟后,编译完成。

完整版跑完测试集的时候,精度指标逐个跳出来——九十一、九十二、九十一、九十三。最终均值定格在百分之九十二点四。

林深把结果截图存好,生成了一份干净的测试报告。报告里他把署名栏重新改成了仅自己一人,生成PDF的时候,他注意到页脚的时间戳自动填上了今天的日期和时间。

他关掉编辑器,把固态硬盘安全弹出,放回背包夹层里。

推开备用会议室的门时,走廊里安静了许多,午休时间已经过了大半。他往陈放办公室走,经过苏小棠的工位时停了一步。那个位置仍然空着。电脑还是黑的,茶杯还是倒扣在杯垫上,充电线的线头垂在桌沿外侧,微微晃动——大概是被经过的人碰了一下。

他收回视线,走到陈放办公室门口敲了两下。

“进。”

陈放坐在桌后,面前摊着一台笔记本电脑,屏幕上是邮件编辑界面。他抬起头来看林深,林深把测试报告递过去,厚厚一叠打印纸,用订书机装订好了。

陈放接过来翻了几页,看到最后的精度汇总表格时,眉心的皱痕终于松开了。

“四点之前,”他说,“我回传给客户。今晚之前应该能收到他们的初步反馈。”

林深点了点头,但没有离开。他站在办公桌前面,等着陈放把报告合上。

“有件事我需要知道,”林深说,“苏小棠今天没来。那封邮件是用内网发的。内网IP能追踪到具体设备吗?”

陈放放下报告,沉默了两秒。“可以。但我需要告诉你一件事——我今早让IT查了苏小棠账号的登录记录。凌晨一点五十分,她用内网登录了OA系统,设备识别码绑定的是产品部公用测试机。”

就是那台67.42。

林深手指微微收紧。“她用了公用机?”

“设备记录显示是那台机器。但登录的人是谁,没法确认。公用的,谁都能用。”

“也就是说,可能是她自己,也可能是别人用她的账号在那台机器上发了邮件。”

陈放没有否认。他拉开抽屉,拿出一张打印出来的登录时间记录表,指给林深看。一行一行的时间戳排列着,最近的一条停在今天凌晨一点五十一分,登录时长三分钟,操作记录只有一封邮件发送,收件人林深,主题“关于代码署名的说明”。

林深把那张表看完了。“没有其他操作?”

“没有。只发了那封邮件,然后登出了。”

“太干净了。”林深说,“如果是她自己发的,她应该会顺便看一眼邮箱、查一下排班、或者做点别的什么。只发一封邮件就登出,像是被人叮嘱过‘发完就走’。”

陈放看着他。“你觉得是别人用她的账号?”

“我不知道,”林深说,“但我想见见她。”

陈放靠在椅背上,手指在桌沿上敲了两下。“她今天没来,没请假,电话关机。我让人事联系她的紧急联系人,回话说‘她今天不太舒服,在家休息’。手机还是关机。”

林深皱了皱眉。“哪个紧急联系人?”

“她妈。电话那边说苏小棠最近压力很大,经常失眠,今天早上说头疼起不来,让帮忙请个假。但请假流程没走,人事系统里还是缺勤状态。”

“地址呢?人事系统有住址吗?”

陈放看了他一眼。“你想干什么?”

“去她家看看。”

陈放沉默了几秒钟,然后打开一个内部系统页面,打印了一张员工信息表出来,撕下底部的地址栏递给林深。“别闹出什么事。只是看看,确认她人没事就回来。”

林深接过那张纸,折好放进衬衫口袋。地址在城西,跟他家是两个方向。

他走出办公室时,研发区的人已经陆续回来了。午休结束的铃声刚响,有人趴在桌上刚醒,有人端着饭盒往垃圾桶里倒残渣。蒋琳从工位上探出头来,看见他手里拿着一张纸,朝他投来一个询问的眼神。

林深走过去,压低声音说:“我去一趟苏小棠家。”

蒋琳的嘴微微张开,又合上了。她从桌上拿了自己的外套站起来。“我跟你去。”

“你不用——”

“你一个人去女同事家里?万一她不开门你怎么办?站楼下干等?”蒋琳已经把外套穿好了,顺手把手机和门禁卡塞进口袋,“走不走?”

林深看了她两秒,没有推辞。

他们下了楼,打了辆车。路上林深把那封邮件翻出来又看了一遍。“对不起”“我不知道”“今天早上来找陈总说明情况”——措辞一点毛病都没有,但正因为太标准了,标准得像打字出来之前被人改过三遍。

“你觉得她到底知道多少?”蒋琳在旁边问。

“不知道。”林深把手机收起来,“知道得越多,我越不确定。”

城西那片是老居民区,楼房不高,外墙贴着白色的小瓷砖,有些已经泛黄脱落。苏小棠的地址是一栋六层楼的三楼,楼梯间比林深住的那栋还暗,声控灯坏了两层,他们摸黑上到三楼,站在一扇深蓝色的防盗门前。

林深按了门铃。里面没有动静。他又按了一次,这次长按了三秒。门铃的蜂鸣声从门缝里挤出来,在楼道里回荡了一下,又归于寂静。

蒋琳也凑近听了一会儿。“可能不在家?”

林深拿出手机,拨了苏小棠的号码。听筒里传来的是“您拨打的电话已关机”的提示音。他把手机放回口袋,又在门口站了半分钟。

准备转身离开的时候,门里忽然传来一声轻微的响动——像是有人在屋里踩到了木地板的接缝处,那种咯吱的声音极轻,但在寂静的楼道里清晰可辨。

林深停住脚步。他转回去,对着门缝说了一句:“苏小棠,我是林深。你不用开门,我就问一句话——”

门里安静了三秒。然后门锁拧开了。

深蓝色的防盗门向内拉开一条缝,苏小棠的脸出现在门缝后面。她没有化妆,头发随手扎在脑后,穿着一件灰色的家居卫衣,比林深印象里瘦了一圈。她的眼眶微红,像是哭过,又像是没睡好。

“林工。”她的声音哑哑的,“你怎么来了。”

“你今天没来上班,陈总让我来看看你。”林深站在门外,跟她隔着一道门缝的距离,“那封邮件我收到了。你说今天早上会来找陈总。”

苏小棠的睫毛颤了一下。她把门拉开了一点,露出半边肩膀和身后客厅的一角——客厅很整洁,茶几上放着一杯已经凉透了的水,旁边有一盒拆开的安眠药。

“我……”她张了张嘴,目光在林深和蒋琳之间来回扫了一下,“我本来打算去的。但今天早上起来头太疼了……”

“苏小棠,”林深说,“那封邮件是凌晨两点从公司内网发出来的。你没有打卡记录,你怎么进的公司?”

苏小棠的脸色变了。她攥着门把的手指关节泛白,嘴唇微微发抖。她站在门缝后面,像一只被堵在角落里的猫,眼球快速地在眼眶里转动着。

“我……”她说了一个字就停住了。然后她低下头,肩膀塌下去,整个人看起来小了一圈,“那封邮件不是我发的。我的账号被人登了。”

林深没有追问。他站在门外,和蒋琳交换了一个眼神。

“你能告诉我,”林深的声音放轻了,轻得像怕吓到她,“是谁登了你的账号吗?”

苏小棠的喉咙动了一下。她抬起眼,眼眶里的红色更深了,嘴唇抿成一条线。楼道里很安静,阳光从楼梯转角的窗户斜射进来,把空气中的浮尘照成一条光柱。

“我不能说。”她说。

“为什么?”

“因为……”苏小棠的声音开始发抖,“他说如果我说了,我的转正考核会被撤销。我试用期刚过,我……我好不容易才留下来。”

林深看着她。那张年轻的、憔悴的面孔上,恐惧和愧疚交织成一张密不透风的网。她的指甲掐在门把手上,掐得太用力了,边缘泛出白色。

蒋琳往前迈了半步。“他是谁?周明远?赵乾坤?还是别人?”

苏小棠咬着下唇,摇了摇头。然后她的眼泪忽然掉了下来,一滴接着一滴,无声地砸在卫衣的胸口上,那里很快洇出一小片深色的湿痕。

“我不知道他的名字,”她说,声音带着鼻腔的堵塞感,“他只给我打过一个电话,用公司的内线。他说……他说照他说的做就没事。”

林深沉默着站在那道门缝前面,阳光的光柱从他身后斜穿过来,把他和苏小棠之间那一小段距离照得明亮而锋利。

9

苏小棠让开了门口,林深和蒋琳走了进去。

客厅很小,沙发是布艺的,米白色,靠背上搭着一条灰格子毯子。茶几上的水杯旁边确实放着一盒安眠药,包装上的标签是某家三甲医院精神科开的,日期是上个月。

苏小棠在沙发一角坐下,缩着肩膀,把毯子拉过来盖住了膝盖。蒋琳坐在另一头,林深拉了一把餐椅坐到了对面。三个人形成一个松散的三角,中间隔着茶几上那杯凉水和那盒药。

“那个电话,”林深开口,“什么时候打来的?”

“上周三。”苏小棠的嗓音还是哑的,眼泪已经停了,但鼻头红红的,“下午两点多,我正坐在工位上。内线电话响了,我接起来,对面是个男的,声音……我不认识。”

“他怎么说?”

“他说,‘你工号是不是XXXXX?明天下午有人会用你的OA账号登一下系统,你配合一下,不需要你做任何事。只要你在那个时间段别去找IT重置密码就行。有人问起来就说不知道。’”

“你答应了?”

苏小棠的手指在毯子边缘绞了一下。“我一开始说不行。他说如果我不配合,上个月我有一笔报销单——他说报销单的发票有问题,他手里有证据。”

林深看了一眼蒋琳。蒋琳的眉心跳了一下。

“什么报销单?”

“就……我转正前请部门同事吃了一顿饭,开了餐饮发票。金额比实际消费多开了几百块,因为那家店不能刷银行卡,只能现金,我发票是找朋友帮忙凑的……”苏小棠的声音越说越低,“我知道这是违规的,但那顿饭我是为了让产品部的几个前辈帮我签转正推荐意见。那笔钱我自己贴的,发票多开的金额我也没拿去报销,只是凭证留在了系统里……”

她抬起头,眼睛里又漫上一层水光。“他说他手上有那张发票的复印件。如果把这件事报到财务,我转正就泡汤了。”

林深靠在椅背上。茶几上的安眠药盒在他的视线余光里安静地卧着,白色的小药板露出一角。他忽然明白了为什么苏小棠会选择配合——不是因为贪婪,不是因为利益,只是恐惧。害怕失去刚刚站稳的位置,害怕被人发现那一点小小的、见不得光的瑕疵。

“那封道歉信呢?”蒋琳问,“为什么要发那封邮件?”

“也是他让我发的,”苏小棠说,“昨天半夜他给我发了一条短信,让我用OA给林工发一封道歉信。他说信的内容他已经写好了,我只要复制粘贴就行。我……我手机收到那封信之后想拒绝,但他说如果我不发,今天早上一上班那张发票就会出现在财务总监的桌上。”

“你昨晚没去公司?”

“没有。我整晚都在家。那条短信上写着让用公司内网发,我不知道他怎么办到的,但我点开OA的时候发现已经登录状态了……”苏小棠的声音颤抖了一下,“他好像能控制我的账号。”

林深忽然想起陈放说过的话——苏小棠的安全意识不高,上个月中过钓鱼邮件。如果她的账号密码在那时候就已经被人获取了,那么后续这些操作就全都不需要她本人参与。

“那个电话里的声音,”林深问,“你有没有任何印象?比如口音、用词习惯、背景音?”

苏小棠皱着眉头想了一会儿。“背景音有键盘声,很响的那种机械键盘。口音像是本地的,咬字很清楚。他说‘报销单’那个词的时候,重音落在‘报’字上。”

机械键盘。林深在脑海里过了一遍产品部和销售部的人。赵乾坤用的是一把静音薄膜键盘。周明远的那把机械键盘是青轴的,咔嗒声清脆,整层楼都能听见。苏小棠描述的是“很响的机械键盘”,青轴的可能性最大。

周明远。

但他昨天说不知道。林深回想起他说“我不知道”时的表情,那些细微的肌肉运动和眼神变化。如果那是表演,周明远的演技未免太好了。

“除了电话和短信,”林深继续问,“你有没有见过他本人?或者收到过任何其他形式的联系?”

苏小棠摇头。她的脸埋在毯子边缘,只露出一双眼睛,红红的,像受了惊的兔子。“就这些。上周三电话,昨晚短信。短信发完之后我回拨过去,已经是空号了。”

跟林深收到的那条短信一样。同样的手法,用完即弃的号码。

蒋琳忽然开口:“那条短信你还留着吗?”

苏小棠点了点头,从卫衣口袋里摸出手机,解锁之后翻到短信列表,递了过来。蒋琳接过去,林深凑过来看。发件号码确实是一串陌生的数字,内容也确实是一封写好的道歉信全文,措辞跟苏小棠发出去的那封几乎一模一样——除了最后一句。

邮件里最后一行是“给你造成了困扰非常抱歉”。而短信里的版本多了一句话,在道歉信正文结束之后有一行PS:“发完之后把这条短信删了,手机重置一次。”

苏小棠没有删。她留着了。

林深掏出自己的手机,把那个陌生号码拍了下来。然后他想了想,问苏小棠:“你之前用过的所有密码,有没有跟别人共享过?”

“入职的时候IT给了个默认密码,让第一次登录的时候改。我改了,改成了……”她顿了一下,脸上浮起一丝窘迫,“改成了我的生日加上公司缩写。挺简单的。”

蒋琳叹了口气。“钓鱼邮件之后,你改过吗?”

苏小棠摇头。

林深站起来。他在沙发和茶几之间那点狭窄的空地上站了两秒,忽然觉得自己心头某一块石头稍微松动了一点。不是石头碎了,只是它有了一点点裂痕。

“苏小棠,”他说,“报销单的事,那张发票,如果真有人把它拿出来,你有没有证据证明你实际垫付了那笔钱?”

苏小棠愣了一下。“我有转账记录。那家店的老板我认识,我付的是现金没错,但我从银行卡取现的记录还在,金额能对上。”

“那好,”林深说,“如果真有人拿发票来压你,你就告诉他们你有取现记录。税务稽查也好,财务审计也好,你只要证明你实际支出大于等于发票金额就行,虚开的部分你可以解释为‘服务员当时多开了一点’,最多算工作疏忽,不至于撤销转正。”

苏小棠抬起眼看他,眼眶又湿了。“林工……”

“我不是来帮你的,”林深说,“我只是来搞清楚事实。但你被威胁这件事,如果属实,你可以跟陈总说明。他查这件事查了好几天了。”

苏小棠的嘴唇动了动,最终只是点了点头。

林深和蒋琳起身告辞。走到门口时,苏小棠忽然叫住他。

“林工。”

林深回头。

“他打电话来的那天,”苏小棠的声音很小,“我听到了一个细节。他挂电话之前,旁边有个人说了句‘行了走吧’。那个人的声音,我好像在哪听过。”

“在哪里?”

苏小棠努力回忆着。“像……像我们公司大堂那个保安大叔的声音。就是每天早上站在闸机旁边打招呼那个,有点大舌头。”

林深站在门口,一只脚已经迈到了楼道里,另一只脚还留在门内。他回头看着苏小棠,这个细节像一枚突然掉落的拼图碎片,落在了整幅画面的边缘。

保安。大堂的保安大叔。

他想起那张从门缝底下塞进来的纸条,想起那行打印的“有些事不知道比知道好”。如果送纸条的人是大堂保安呢?保安可以接触到公司很多人的快递、信件、文件,可以进入几乎所有楼层——包括四楼的销售部和六楼的产品部。

“你确定是他?”林深问。

苏小棠迟疑了一下。“我不确定。就那三个字,‘行了走吧’,大舌音很明显。我们公司大堂那个保安说话就那样。”

林深站在楼道里,灰暗的光线从楼梯转角照进来,把蒋琳的影子拉长铺在地面上。他慢慢呼出一口气。

“谢谢,”他说,“你休息吧。如果还有人威胁你,直接打陈总电话。”

门在身后合上了。林深和蒋琳下楼梯的时候谁也没说话。走到二楼拐角的时候,蒋琳忽然拉了一下林深的袖子。

“保安,”她低声说,“保安的通行权限可以覆盖全楼,包括每层楼的门禁。如果有保安参与,那用公用测试机、进苏小棠账号、塞纸条到你家门缝——所有这些操作都说得通。”

林深站在二楼平台上,手扶着沾灰的楼梯栏杆。阳光从窗缝里漏进来,照在他的手指关节上,照亮了上面一块干掉的墨水渍——是今早写字时蹭到的。

“有人在公司内部布了一张网,”他说,“保安只是其中一根线。”

“那谁是网的中心?”

林深没有回答。他继续往下走,脚步声在空荡荡的楼道里一声接一声地响着,像某种缓慢的、层层递进的鼓点。

10

回到公司已经下午两点了。

林深和蒋琳从出租车上下来,穿过写字楼大堂时,他特意看了一眼闸机旁边那个保安。中年男人,微胖,穿着深蓝色的制服,帽檐压得低,正低头看手机。林深走过的时候,他抬了一下头,目光在林深脸上停留了不到一秒,又低下去了。

林深注意到他的嘴唇在动,像是在默念什么东西。大舌音不明显,但说话时下唇会往内卷一点——那种轻微的发音特征,如果刻意掩饰可以藏住,但不经意的时候会露出来。

他收回视线,刷门禁卡进了闸机。蒋琳跟在他后面,两人一前一后走进电梯。

回到六楼,研发区的气氛跟上午完全不同了。刘妍一看见他就从工位上弹起来,快步迎过来。

“客户那边回邮件了,”刘妍的声音压得很低但语速很快,“技术负责人说看了你们内部测试报告的补充数据,精度达标了。但他留了一句话——要求项目核心团队的成员名单在合同附件里重新确认一次,确保所有署名人员都有实质性的贡献记录。”

林深停住脚。“实质性贡献记录?”

“对。他说如果署名里有非技术人员,这次合作就暂缓。”

林深闭了一下眼睛。客户技术负责人抓住了要害。他不需要知道公司内部发生了什么,他只需要一个干净的、没有争议的署名表。而那个要求本身,就是对那三个名字最直接的回绝。

“陈总怎么说?”

“陈总回复了他,说核心算法团队只有一个人,”刘妍说着,嘴角微微上扬了一下,“你一个人。”

蒋琳在旁边笑了一声,声音不大,但带着一种终于松了气的意味。

林深走进研发区深处,在自己的工位上坐下来。电脑屏幕上还挂着上午那个测试窗口,阉割版的红色表格和完整版的绿色报告并列着,一红一绿,像两扇通往不同方向的门。

他伸手关掉了红色那个窗口。

三点多的时候,周明远来找他了。

林深正在写一份技术说明文档,键盘声断断续续地响着。周明远走到他工位旁边,站了一会儿才出声。

“林深。”

林深转过来。周明远站在跟前,手里这次什么也没端,双手垂在身侧,细框眼镜后面的眼窝仍然很深,但今天多了一点别的什么东西——像是疲倦,又像是释然。

“陈总把admin授权的事告诉我了,”他说,“有人用我的工号申请了临时授权。”

林深看着他。“你不知道?”

“我不知道。”周明远的语气很平静,“周四下午评审会中场休息的时候,我把工牌落在会议室桌上了。后来找回来的时候它掉在地上,我以为是自己蹭掉的。”

工牌。门禁卡。上面印着工号和姓名。

如果有人在那十分钟内拿到周明远的工牌,用他的身份申请admin授权——

“监控呢?”林深问,“那段走廊应该有监控。”

“陈总去调了,”周明远说,“评审会中场休息的那十分钟,走廊监控被人关了。整整十分钟的空白。”

周明远说完这句话,停顿了一下,然后从口袋里掏出一个东西放在林深桌上。是一个U盘,银灰色的,没有任何标记。

“这里面是我入职以来所有代码提交的原始记录,”他说,“你随时可以拿去查。你看了就知道,我从来没碰过你的算法模块。名字被加进去这件事,从头到尾我不知情。”

林深看着那个U盘。银色金属壳在日光灯下反射着冷光,上面有一道浅浅的划痕,像是被钥匙刮过。

“我信你,”林深说,“你昨天来找我的时候,你说你不知情,我信了。”

周明远站了两秒。他的肩膀微微松了一下,幅度很小,但林深看见了。他把双手插进裤兜里,转身走了两步,又停下来。

“林深,”他没有回头,“我以前觉得技术就是这个游戏里的一行筹码。做好了,换业绩、换职位、换资源,跟打牌一样。但今天上午我看你删那三个名字的时候——你鼠标点下去那一下,我突然觉得,这游戏里有些东西不该拿来换。”

他说完就往前走了。背影瘦削,衬衫下摆有一角没扎进去,晃晃荡荡地消失在产品区的工位隔断后面。

林深把那个U盘收进了抽屉里。他拉开抽屉的时候,指尖触到了那张A4纸的边缘——他出门前把那张纸条从餐桌抽屉里拿了出来,塞进了办公桌的夹层。此刻它卷曲着躺在那里,那行打印的字在折叠处断成两截:“有些事不知道比知道好。”

他看了它一眼,把抽屉推了回去。

傍晚六点,陈放叫了林深去办公室。

这次雪松香薰的味道又回来了,大概是小蜡烛重新点上了。陈放坐在办公桌后面,面前摊着厚厚一叠材料,最上面是客户那边发来的确认函。

“客户同意继续合作,”陈放说,“前提是你们部门出一份正式的署名确认文件,声明核心算法的唯一作者是你。法务那边明天出模板。”

林深在对面坐下来。“赵乾坤那边呢?”

陈放靠回椅背。“他刚才给我打了四十分钟电话。从深圳打来的。他承认他周四下午用过四楼那台公用机。”

“他承认操作了PR合并?”

“他承认他在那台机器上‘测试过版本发布流程’,但他不承认是他修改了署名。他说他只跑了一下构建脚本,不知道合并了什么内容。”

林深没有说话。这个解释太单薄了,薄得像一层窗户纸。

“你觉得我信吗?”陈放看着他。

“您信不信不重要,”林深说,“重要的是有没有证据。走廊监控空白了十分钟,admin授权用了周明远的工牌,苏小棠的账号被人远程登录。所有链条都指向四楼,但没有任何一条链子能把赵乾坤直接锁死。”

陈放沉默了一会儿。窗外的城市正在从黄昏滑入夜晚,楼群的轮廓渐渐模糊成一片暗色的剪影,窗口的灯光一盏一盏地亮起来。

“林深,”他说,“我做了十几年的管理,见过很多事。有些事查到最后能找到凶手,有些事查到最后只能找到一个‘最有可能’。赵乾坤下周从深圳回来,我会跟他谈。谈话的结果不会公开,但他会知道——这个公司里有些线不能碰。”

“那我的署名呢?”

“你的名字是唯一一个留在核心算法上的,”陈放说,“这是我的承诺。”

林深站起来。他走到门口的时候,又停住了。

“陈总,”他说,“我还有一个问题。”

“说。”

“那张从我门缝底下塞进来的纸条,是保安大叔送的吗?”

陈放的表情变了一瞬,很短暂,像湖面上被风吹皱的一圈波纹。“你知道保安了?”

“苏小棠说的。她听到打电话的人旁边有个大舌音的声音,很像大堂保安。”

陈放沉默了很久。然后他拉开抽屉,从里面拿出一个手机,调出一条短信递给林深看。

发件人是一个未保存的号码,内容只有四个字:“纸送到了。”

时间是昨天晚上八点十七分。而送纸条的时间,林深回到家是八点四十分左右,纸条已经塞在门缝里了。

“这个号码,”陈放说,“我查了,属于一个预付费卡,没有实名。但它的通话记录显示,昨天下午六点到七点之间,跟赵乾坤的手机有三次互拨。”

林深站在原地,手里的手机屏幕还亮着。那四个字“纸送到了”在暗下来的房间里微微发光,映在他的瞳孔上,像一小簇白色的火焰。

他把手机还给了陈放。

“所以那张纸条,”林深说,“是赵乾坤让保安送的。”

“最可能的推论是这样。”

“他让我别查了。”

“对。”

林深站在黑暗中,窗外城市的灯光从百叶窗的缝隙里漏进来,在他脸上切割出一道一道明暗相间的条纹。他忽然觉得很累。从周二晚上发现署名被改到现在,整整四十八个小时,他几乎没有真正休息过。他的身体、他的大脑、他的情绪都透支到了一个临界点,像一根被弯折到极限的金属片。

但他还站着。他还站在原地,双脚踩着实木地板,背脊挺着,没有弯下去。

“陈总,”他说,“这件事,到这儿为止。我不查了。”

陈放看着他,点了点头。“你回去休息吧。明天正常上班。”

林深转身往外走。拉开门的时候,走廊里的光涌进来,白晃晃的,把他整个人裹在里面。他走出去,门在身后关上的那一瞬间,他听到陈放在里面叹了一口气——很轻,像是把一段日子终于放下了。

他穿过研发区。大部分工位已经空了,只有蒋琳还在,正对着电脑屏幕发呆,看见他走过来,关掉了浏览器窗口。

“走了?”她问。

“走了。”

他们一起下楼。大堂里保安换班了,晚班的岗上坐着一个年轻小伙子,正低头刷短视频。林深经过闸机的时候多看了一眼,那个大叔不在了。

走出写字楼大门,夜风迎面扑来,带着十月底特有的那种干冷和落叶的气味。街上车流稀疏,路灯把梧桐树的影子拉得又长又宽,明晃晃地铺在人行道上。

“你接下来怎么办?”蒋琳把外套拉链拉到顶,双手揣在口袋里,侧过头看他。

林深走着,脚步不快不慢。他呼出一口白气,看着它在路灯下升起来、散开、消失。

“写代码,”他说,“把这个项目做完。”

“然后呢?”

“然后把下一段代码写出来。写完了再说。”

蒋琳笑了一下,笑的声音在夜风里被吹得有点散,但还是能听出里面的温度。他们走到路口,蒋琳往左转,林深往右转。分开的时候蒋琳回头说了一句:“明天早上别又忘了吃早饭。”

林深点了点头,朝她摆了摆手。

他一个人走了很长一段路。没有打车,没有坐地铁,就是沿着街道一直往东走。夜里的城市安静了许多,商铺的灯箱广告一个接一个暗下去,便利店的白光像一座座孤岛漂浮在黑暗的街道两侧。

他走到一座过街天桥的中央,停住了。

桥面上风很大,吹得他衬衫下摆猎猎地翻动。他双手撑在栏杆上往下看,桥下车流如一条发光的河,红色的尾灯和白色的前灯交织着,从远处流过来又流向更远处。

他想起那个凌晨两点敲完最后一行代码的夜晚。空荡荡的办公室里只有他自己和屏幕上那张神经网络架构图,绿色的节点密密麻麻,像星图,像活物,像他独自建造的一座城。那时候他以为这座城里只有他自己,但后来他发现,连城墙的砖缝里都会有人伸手进来贴上别人的名字。

他删了名字。他把那些不属于城里的东西剔了出去。但他站在天桥上往下看的时候,忽然觉得那座城其实从来都不是坚不可摧的。它需要有人守着。日日夜夜地守着。

而守城这件事,漫长、孤独、看不见尽头。但他还是打算守下去。因为城是他造的,砖是他砌的,每一块上面都刻着他的指纹。

风把远处便利店的招牌吹得微微晃动,白光在夜色里摇了一下,又稳住了。林深从天桥上走下来,继续往东走。

路过一家还亮着灯的小面馆时,他停下来,推门进去了。店里只有一个老板娘在擦桌子,看见他进来,指了指墙上的菜单。

他点了一碗牛肉面。等面端上来的时候,他掏出手机,看了一眼屏幕。没有新消息。

他掰开筷子,挑起一绺面条,低头吃了一口。汤很烫,从舌尖一路烫到胃里,烫得他眼眶微微发酸。

他吸了一下鼻子,继续吃。

11

后来的日子比林深想象的要安静。

署名事件之后的一周,公司里流传着各种各样的版本。有人说赵乾坤被调去了一个不重要的闲职,有人说周明远主动放弃了产品总监的竞聘,有人说苏小棠请了长假回老家休养——她走之前给林深发了一条微信,只有两个字:“谢谢。”

林深回了一个句号。

项目继续推进。客户那边的合作没黄,只是合同附件里多了一行条款:“本项目核心算法模块唯一著作权人及贡献者为林深,署名变更需经本人书面同意。”

那行字被林深用PDF阅读器打开的时候,他把光标停在上面看了很久。黑色的宋体字,标准的合同语言,没有温度,没有情绪,但每一个字都像一颗钉子,牢牢地钉在它该在的位置。

周三的下午,林深去了一趟四楼送一份技术配合需求表。电梯门打开的时候,他看见赵乾坤站在销售区的玻璃隔断外面,正在跟一个下属说话。赵乾坤瘦了一些,头发好像也白了几根,但笑容还在,依然是那种销售特有的、明亮的、不设防的笑。

他看见林深,笑容停了一瞬,然后他朝林深点了一下头。

林深也点了一下头。

他们没有说话。林深把需求表放在前台就走了。

回到六楼,研发区还是老样子。刘妍在测试组的隔间里噼里啪啦敲键盘,蒋琳端着一杯新的酸奶从茶水间出来,路过林深工位时顺手在他桌上放了一袋全麦面包。

“明天早上吃的,”她说,“不用谢。”

林深把那袋面包拿起来看了看,生产日期是昨天,保质期还有四天。他把它放进抽屉里,跟那个U盘、那张折叠的A4纸放在一起。

下午四点,他合上电脑,走到走廊尽头那间备用会议室。门没锁,他推门进去。屋里还是那台显示器,还是那把贴着保护膜的键盘。

他坐下来,打开电脑,调出了那个完整版的代码工程。

一万三千行。四十七个函数。三层神经网络结构。两个自定义损失函数。

他滑动鼠标滚轮,从第一行注释看到最后一行return语句。绿色节点拼成的那张星图在屏幕上安静地铺展着,呼吸平稳。

他把光标挪到了文件最开头的作者声明栏。那一行现在只有一个名字。

他看了看那个名字。

然后他关上文件,在桌面上新建了一个空白的Python脚本。文件名是“next_module.py”。

他还没想好要写什么。脑子里只有一个模糊的轮廓,一种应该存在的某种结构,某种模式,某种跟以前不一样的东西。他不知道要写多久才能写完,不知道写完的时候会不会比现在更累、更孤独。

但他的手已经放到了键盘上。

光标在空白的编辑器中闪动,下划线有规律地一亮一暗。窗外天色正在变深,城市的光从远处一盏一盏地爬上来,像无数细小的火苗。

他敲下了第一个字符。

会议室里安静极了。只有键盘的声音,啪嗒,啪嗒,断断续续地响着,像一个人赤脚走在陌生的地面上。

走一步。再走一步。

那些脚步落下去的地方,在他看不见的前方,迟早会长出一座新的城。

12

那天晚上林深离开公司的时候,整层楼又只剩他一个人了。

他把备用会议室的灯关掉,电脑合上,鼠标摆正,椅子推回桌底。走廊里的灯管恒亮着,白光照着地面,干净得没有一点影子。

他走到消防通道门口时站了一下。那扇红色的门还是老样子,绿色标志牌在上面发出幽暗的光。楼道里面安安静静的,什么声音也没有。他伸手推了一下那扇门,没有推开——今天锁了。

他笑了笑,收回手,转身往电梯厅走。

电梯下行的时候,他看着金属壁面上自己的倒影。头发有点长了,下巴上冒出一层浅浅的胡茬,衬衫的第二颗纽扣松了半圈,露出来的领口有些皱。但眼睛是亮的,那种几天前在会议室里被三十七道目光刺穿之后仍然没有熄灭的亮。

电梯到了一楼,门开了。

大堂里空空荡荡,晚班的保安坐在闸机旁边,是个年轻小伙,正在玩手机上的消消乐。林深经过的时候他抬头看了一眼,然后又低头继续玩了。

走出写字楼大门,夜风迎面扑来。十月的最后几天,气温又降了一些,空气里带着一种干燥的、清冽的冷,像薄薄的刀片刮过脸侧。

他站在门口,把外套拉链拉到顶。口袋里手机震了一下,他掏出来看,是蒋琳发的一条消息:

“那个全麦面包明天记得吃。再不吃该过期了。”

林深打字回了两个字:“吃了。”

他当然还没吃。但明天早上他会吃的。他会在工位上撕开包装袋,就着一杯热茶,把那两片干燥的、麦麸粗糙的面包一口一口地嚼完。然后他打开电脑,继续写那个还没取名字的新模块。

他往东走。路灯下的梧桐叶已经落了厚厚一层,踩上去发出细碎的咔嚓声。一辆夜班公交车从身后驶过来,车灯把地面照成一片流动的金色。他没有上车,继续走。

走出一段距离之后,他在一块广告牌前面停了一下。牌子上是某个科技创业园的招商海报,蓝白配色,口号写着“你的代码,你的主场”。

林深站在广告牌前面,夜风把他的一缕头发吹到额前,又吹开。他看了大概三秒钟,然后把视线收回来,继续往前走了。

广告牌上的字在身后亮着,蓝白的光映在潮湿的人行道上,像一小片不会熄灭的夜空。

尾声

冬天来的时候,项目上线了。

那天全组人加班到半夜,等最后一轮灰度发布跑完,刘妍从座位上跳起来喊了一声“过了”,研发区里爆发出一阵稀稀拉拉的掌声和欢呼声。有人开了两瓶果酒,有人在群里发红包,林深坐在自己的工位上,看着屏幕上绿色的发布成功标志,安静地喝了半杯常温的乌龙茶。

蒋琳端着一杯果酒走过来,在他旁边的空椅子上坐下。

“恭喜啊,”她说,“你的孩子终于出生了。”

林深笑了一下。“还没完全生完。还有三期迭代。”

“嘴硬。”

他们并排坐着,看着研发区里混乱而热闹的景象。有人在拍合照,有人对着屏幕截图发朋友圈,刘妍站在桌子上试图把一串彩灯挂到天花板上去。

“你还记得那天开会的时候吗,”蒋琳忽然说,“你摇头那一下,全场人都傻了。”

“记得。”

“那时候你在想什么?”

林深想了想。“在想,如果我把那个版本拿出来了,后半辈子每次看到那三个名字,我都会后悔。后悔一次就够了。”

蒋琳没有说话。她喝了一口果酒,然后靠在椅背上,仰头看着天花板上的日光灯管。那些灯管恒亮着,不闪不灭,跟那天开会时一模一样。

“以后呢,”她侧过头,“还写吗?”

林深转过来看她。研发区的灯光从侧面照着她的脸,把她的轮廓勾出一道柔和的亮边。她的眼睛里有果酒的光,有屏幕的光,还有一种他之前没有仔细看过的、温热的、属于日常的东西。

“写啊,”他说,“写到写不动为止。”

蒋琳笑了一下,把杯子里剩下的果酒喝完了。“行吧,那我陪你。”

她站起来,把空杯子放到旁边的桌上,转身朝那片灯光和笑声走过去。走了两步她回头看了一眼,像确认什么。

林深坐在原地,手搭在键盘边缘。屏幕上的发布成功标志还在那里,绿色的,稳稳地亮着。窗外城市的灯火铺展开去,一直延伸到目力所及的最远处。

他把手放了下来。

没有别的事了。代码跑完了,项目上线了,他的名字留在它该在的地方。明天醒来还有新的需求、新的bug、新的凌晨两点的灯光。日子会继续往前走,像那天下班后他走的那条长街,没有尽头,但每走一步脚下都有实感。

他想,这就够了。

风从窗缝里灌进来,带着初冬干燥的凉意。他把外套的领子拢了拢,抬头看了一眼窗外的夜空。今天晚上没有星星,但远处的楼群里有无数扇亮着灯的窗户,每一扇后面都有人醒着。

也许有人正在写代码。也许有人正在改Bug。也许有人正站在空荡荡的会议室里,看着自己的作品被人贴上别的名字。

他想对那个人说:把名字删掉。把名字留给自己。

然后继续写。

写下去。

窗外有一阵风把窗帘吹动了一下,布料的边缘拂过桌面,碰到键盘的边角,发出一声极轻的、几乎听不见的响动。

林深伸手把窗帘拢好,转回屏幕前面。

光标还在闪。

他敲下了第一个字。

(全文完)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
克莱‑汤普森:不求夺冠,库里一直想打破我的三分神迹

克莱‑汤普森:不求夺冠,库里一直想打破我的三分神迹

十夏九漓
2026-08-16 00:05:00
这个30岁的小姑娘能有多好色?2016年,女子趁着丈夫在外打工偷情,还玩角色扮演,最终却被小三杀害

这个30岁的小姑娘能有多好色?2016年,女子趁着丈夫在外打工偷情,还玩角色扮演,最终却被小三杀害

法网恢恢
2026-08-07 12:39:43
心理学:妈妈最大的悲哀,就是一辈子都没弄明白,你只是孩子的母亲,是老公的合作伙伴而已

心理学:妈妈最大的悲哀,就是一辈子都没弄明白,你只是孩子的母亲,是老公的合作伙伴而已

心理观察局
2026-08-14 06:45:29
这些明星的女儿,谁更好看

这些明星的女儿,谁更好看

陆万万
2026-08-09 23:37:01
下周新车预告,7款新车将上市,购车可以再等等

下周新车预告,7款新车将上市,购车可以再等等

沙雕小琳琳
2026-08-15 11:38:32
提车3小时就返4S店维修!7大车圈高管炮轰速成车乱象:消费者不能成试车员

提车3小时就返4S店维修!7大车圈高管炮轰速成车乱象:消费者不能成试车员

快科技
2026-08-14 16:50:12
朱女士接受采访时开的车,很上档次!引热议:有人说是特斯拉,也有人说是奔驰

朱女士接受采访时开的车,很上档次!引热议:有人说是特斯拉,也有人说是奔驰

火山詩话
2026-08-10 07:44:14
长得太美被导演占为己有,25岁生下3个孩子,现在个个都给她争光

长得太美被导演占为己有,25岁生下3个孩子,现在个个都给她争光

大眼妹妹
2026-08-15 08:47:39
一个美国游客的心里话:走遍全世界,中国,就是黄种人的底气!

一个美国游客的心里话:走遍全世界,中国,就是黄种人的底气!

千秋历史
2026-05-25 19:47:49
炸裂!妻子怀孕期间清华博士出轨:坦言女孩太漂亮,没把持住自己

炸裂!妻子怀孕期间清华博士出轨:坦言女孩太漂亮,没把持住自己

汉史趣闻
2026-08-09 10:32:37
经过两昼夜奋战,周口贾鲁河溃口成功合龙

经过两昼夜奋战,周口贾鲁河溃口成功合龙

极目新闻
2026-08-15 20:53:07
最后关头,中美没谈妥?美国国会发公开信,要对中国用下三滥手段

最后关头,中美没谈妥?美国国会发公开信,要对中国用下三滥手段

松林侃世界
2026-08-14 15:14:55
朱拉尼取代巴沙尔,只是换了一个家族统治,看看朱拉尼老婆就明白

朱拉尼取代巴沙尔,只是换了一个家族统治,看看朱拉尼老婆就明白

莫地方
2026-08-06 00:03:07
光大银行股息6%就敢长期拿?我3.8元拿了3年,踩过的坑比你赚的多

光大银行股息6%就敢长期拿?我3.8元拿了3年,踩过的坑比你赚的多

亿通电子游戏
2026-08-05 11:49:24
《庆余年 3》二皇子换人?刘端端一走,观众的心也跟着走了

《庆余年 3》二皇子换人?刘端端一走,观众的心也跟着走了

小椰的奶奶
2026-08-16 03:58:46
在辽宁苦熬八年!终于拿到大合同,恭喜鄢手骐

在辽宁苦熬八年!终于拿到大合同,恭喜鄢手骐

国篮会自强
2026-08-15 15:39:29
谁能想到!许家印认罪3个月后,等来不是判决,而是一个致命噩耗

谁能想到!许家印认罪3个月后,等来不是判决,而是一个致命噩耗

老赳说历史
2026-07-21 16:41:34
中超无罚分积分榜:成都继续9分领跑,“鲁京花”分列2-4位

中超无罚分积分榜:成都继续9分领跑,“鲁京花”分列2-4位

懂球帝
2026-08-15 22:05:51
神回复:上辈子一定是电力公司抄表的~

神回复:上辈子一定是电力公司抄表的~

兰妮搞笑分享
2026-08-14 09:49:23
多名中国游客亲历印尼7.7级强震:海面出现巨大漩涡有船只侧翻,部分酒店墙体开裂,航班延误许多旅客滞留科莫多岛机场

多名中国游客亲历印尼7.7级强震:海面出现巨大漩涡有船只侧翻,部分酒店墙体开裂,航班延误许多旅客滞留科莫多岛机场

极目新闻
2026-08-15 12:13:28
2026-08-16 04:48:49
时尚的弄潮
时尚的弄潮
快乐学习化学
857文章数 9629关注度
往期回顾 全部

头条要闻

"榜一大哥"打赏女主播超千万要求陪睡 女方拒绝被起诉

头条要闻

"榜一大哥"打赏女主播超千万要求陪睡 女方拒绝被起诉

体育要闻

体系球员与体系本身

娱乐要闻

宋慧乔晒自拍照 微笑拍照心情佳

财经要闻

便利蜂加盟遭立案:"0元加盟"生意被查

科技要闻

600亿美元收购落地 马斯克正式杀入

汽车要闻

杨洋成001号车主 岚图追光S正式上市

态度原创

旅游
健康
教育
艺术
房产

旅游要闻

漫步蒙自南湖,一湖风月千年沉淀,读懂小城温柔底蕴!

专家解答青少年脊柱侧弯七大问题

教育要闻

金中河西又爆了,116封预录取,95人达con,香港方向录取数据,亮了!

艺术要闻

细思极恐!这30张创意照片,看懂一半算你厉害,全看懂的都是有故事的人!

房产要闻

金茂、招商,海南多个岗位招人!

无障碍浏览 进入关怀版