第一章 裸辞
那天下午两点,我拿着辞职信走进陈总监办公室的时候,整个研发二部的格子间安静得只剩下键盘声。没人抬头看我,但我能感觉到所有人的余光都贴在我后背上。这种氛围我太熟悉了,三天前周彦走进同一扇门时,空气里弥漫的是惋惜和挽留的预期,而轮到我的时候,只剩下一种诡异的、心照不宣的沉默。
陈总监正在看手机,见我进来,把手机反扣在桌上,抬头看了我一眼。那一眼很平静,平静得几乎让人误以为他并不知道我要说什么。可我知道他一定知道,因为这封辞职信我在两天前就已经发到了他的企业邮箱里,系统显示已读。
“陈总,这是我的辞职信。”我把打印好的A4纸放在他桌面上,指尖轻轻往前推了半寸。
他没有马上去拿,而是靠在椅背上,用一种我从没见过的、近乎审视的目光看着我。然后他说了一句让我这辈子都忘不掉的话:“行,我批了。”
行,我批了。就四个字。
我愣在原地大概有三秒钟。不是因为我舍不得,而是因为我想起了三天前周彦辞职时的场景。那天陈总监把周彦请进办公室,关上门谈了整整两个小时,期间能隐约听到他打电话给人力总监和分管副总的声音。两个小时后,周彦推门出来,脸上的表情既疲惫又带着某种难以掩饰的得意。他走到工位上的时候,用只有我们这几个人能听到的声音说了一句:“涨幅百分之七十,我再想想。”
百分之七十。那个数字像一颗石子投进死水里,激起的涟漪在整层楼蔓延了整整一个下午。没人敢公开讨论,但所有人都在微信小群里疯了似的刷屏。周彦的职级和我一样,都是高级工程师,入职时间只比我早半年,手头负责的项目甚至比我还少一个。但他提离职的时候,从总监到副总再到人力,像是挽留一个决定出走的技术合伙人一样全力以赴。
而我呢?
“还有别的事吗?”陈总监的声音把我拉回现实。他已经拿起笔在那张辞职信上签了字,笔迹潦草却流畅,一点犹豫都没有。
“没有。”我听见自己的声音干巴巴的。
“那行,待会儿去找一下人力,走一下流程。你的离职交接期是三十天对吧?不过你手上那几个项目我看了一下,维护性的东西居多,没什么好交接的,到时候你整理个文档就行。如果着急走的话,交接期可以谈。”
他在赶我走。他甚至在暗示我,连三十天的交接期都可以省掉。
我站在那里,忽然觉得这间办公室的空调开得太冷了,冷气从后颈灌进去,顺着脊椎一路往下。我想说点什么,但嗓子像被什么东西堵住了。我想问他为什么,想问我在这个公司四年零七个月,加班无数、上线无事故、三个核心项目的主程,凭什么连一句“你再考虑考虑”都得不到。但这些问题到了嘴边,又被我生生咽回去了,因为我知道答案——答案就写在他那副如释重负的表情里,写在他签完字之后立刻拿起手机的动作里,写在门外那些假装工作、实则竖着耳朵听动静的同事们沉默的目光里。
我转身走出办公室的时候,连关门都显得多余——门本来就是开着的,从头到尾他都没让我坐下,也没打算关上门跟我谈。
从办公室到我的工位,一共四十二步。我数过。这四十二步我走了四年多,每一步都踩在这家公司的地板革上,脚底下的触感熟悉到闭着眼睛都能避开那块翘边的接缝。但这一刻,我觉得自己像踩在棉花上,轻飘飘的,没有着力点。我甚至不知道自己是怎么走到工位上的。
我坐下来,盯着电脑屏幕上还没写完的代码。光标在一行注释的末尾闪烁,像一个不断跳动却永远走不出去的光点。我的手放在键盘上,但没有敲下任何一个键。旁边的手机屏幕亮了一下,是部门群里有人在发消息,我瞥了一眼,看到最后一行字是有人发了一个“恭喜”的表情包,上面顶着的那条消息已经被撤回了。
他们在恭喜谁?是恭喜周彦涨薪成功,还是恭喜我离职顺利?
我给周彦发了条微信:“走不走?楼下抽一根。”
他回得很快:“马上,等我两分钟。”
我起身走出办公区,在电梯间的窗户边等他。窗外的城市灰蒙蒙的,十二月的风从窗缝里挤进来,带着一股子干冷的铁锈味。我把羽绒服的拉链拉到头,手指冻得有点僵。其实我身上穿的这件羽绒服还是入职第一年买的,袖口已经磨得露出了里面的填充物,但我一直没换,总觉得还能穿,总觉得没必要。
周彦出来的时候,嘴里叼着一根烟,手里还拿着一根递给我。我接过来,凑到他打着的火机前点着了,深深吸了一口。烟雾在冰冷的空气里散得很快,快得好像从没存在过。
“批了?”他问。
“批了。”我说。
“这么快?”
“十分钟。”
周彦沉默了一会儿,弹了弹烟灰,没看我,看着窗外:“林屿,你是不是觉得挺不公平的?”
这个问题太直接了,直接到我一时不知道该怎么接。我靠在墙上,把烟夹在指间,想了想才说:“公平这种东西,本来就不是按劳分配的。”
周彦笑了一下,是那种有点无奈的笑。他比我大一岁,但看起来比我老成了不止一岁,鬓角已经有了几根白头发。他吸了一口烟,慢慢吐出来,说:“你知道我为什么提离职吗?”
“不是因为拿到了外面的offer?”
“有offer是一方面。”他顿了顿,“但更重要的是,我知道我自己值多少钱。外面给我开的价,比这边高了百分之五十,我拿着这个数字去谈,他们就慌了。但我告诉你,林屿,就算涨了百分之七十,我也还在犹豫要不要走。不是钱的事,是一种感觉。”
“什么感觉?”
“感觉自己被看见了。”他把烟头按灭在窗台上,转过头看着我,“你明白吗?就是那种,你走了会有人慌,会有人拼了命想把你留下来,那种被需要的感觉。我来这公司四年了,只有在我提离职的那天,我才真正觉得我被需要过。可你说这讽刺不讽刺?非要等到你要走了,他们才肯承认你的价值。”
我听完这些话,心里像被什么东西狠狠拧了一下。
因为我突然意识到,周彦提离职的时候至少被看见了,至少有人在拼命挽留他,至少他有机会站在天平上称一称自己的分量。而我呢?我的离职像一滴水落进沙子里,瞬间就渗进去了,连个痕迹都没留下。
我把烟头掐灭,拍了拍他的肩膀:“回去吧,外面冷。”
往回走的时候,我的手机震了一下。我掏出来一看,是企业微信的消息——人力已经发来了离职交接流程的模板,标题写着“关于林屿同事离职交接事项的通知”,收件人一栏里,除了我,已经抄送了部门助理和IT运维。IT运维,意思是可以开始回收我的电脑和设备权限了。
这封邮件的发送时间,距离我从陈总监办公室出来,刚好十分钟。
十分钟。我在心里默默重复了一遍。四年零七个月,四个核心项目,几十次通宵上线,数不清的凌晨三点的加班,最后汇总成一个十分钟就批下来的离职审批、一封提前抄送IT的交接邮件。
我拿着手机站在办公区入口,看着格子间里那些低着的头。有人正在敲键盘,有人正在打电话,有人正端着水杯往茶水间走。一切都跟十分钟前一模一样,就好像什么都没发生过,就好像这个团队里从来就没有过一个叫林屿的人。
我忽然就不想再待下去了。
回到工位上,我打开了交接文档的模板,开始机械地往里填东西。项目名称、代码仓库地址、部署环境、接口文档、未完成的需求清单……这些东西填起来并不难,因为每一个字都是我亲手写的,每一个系统都是我亲手搭建的。但越填越觉得荒诞——我把我亲手搭建的东西一件一件地列出来,然后交出去,这个过程就像把自己身体的一部分一块一块地拆卸下来,摆在桌上,让别人来认领。
下午四点半,我去了一趟人力。人力的赵姐是个四十多岁的中年女人,平时跟谁都和和气气的,笑起来眼睛眯成一条缝。她看见我进来,脸上的笑容毫无变化,仿佛我只是来报销一张发票,而不是来办理离职手续。
“小林啊,坐吧。”她递给我几张表,“把这些填一下,社保公积金那些到时候会转到你新单位,要是暂时没有新单位的话,我们可以帮你办封存,你自己续也行。”
我接过表格,一张一张地填。姓名、工号、身份证号、入职时间、离职原因……离职原因那一栏,我写了“个人发展”,这四个字大概是最安全也最虚伪的理由了。其实真正的原因我一笔一划地填下去也填不满,但表格上只给了那么一小行空白,装不下四年多的委屈和不甘。
填到一半的时候,赵姐的手机响了。她接起来,是陈总监打来的,声音透过听筒传出来,我隐约听到了一句:“……林屿的流程走快一点,不用等三十天,下周就可以办完。”
赵姐挂了电话,笑眯眯地跟我说:“小林,陈总的意思是你这边交接完就可以走了,离职证明提前给你开出来,薪资结算到这个月底。你看你这效率多高,不耽误你去新单位报到。”
效率多高。这四个字从她嘴里说出来的时候,我差点笑出声。
从人力出来的时候,天已经快黑了。冬天的天黑得特别早,五点钟的街道就已经亮起了路灯。我站在公司楼下,回头看了一下这栋我进出了四年的写字楼。它的玻璃幕墙映着傍晚最后一点灰蓝色的天光,上面密密麻麻地亮着格子间的灯,其中有一盏灯属于我曾经坐过的那个工位。但那盏灯明天还会亮,后天还会亮,只不过灯下坐着的人不再是我了。
我掏出手机,给我妈发了一条微信:“妈,我辞职了。”
我妈的电话几乎是秒回的,这就是她的风格,永远觉得打字太慢,永远觉得电话里才能把话说清楚。“喂,屿屿啊,怎么突然辞职了呢?是不是在那边受委屈了?”
“没有,就是想换个环境。”
“那你找好下家了吗?”
“还没有。”
电话那头沉默了两秒钟。我知道我妈在想什么,她一辈子在体制内工作,最不能理解的事情就是裸辞。在她的认知里,一份工作干得好好的,突然辞了,要么是跟领导闹翻了,要么是脑子发热。但她说出来的话比我想象的要温和得多:“没找就没找,回来休息几天也好,你看你都瘦成什么样子了。”
就这么一句话,我的鼻子一下子就酸了。
我站在路边,风很大,吹得我眼睛发干。我使劲眨了几下眼睛,把手机换到另一只耳朵上,尽量让自己的声音听起来正常一点:“妈,我没事,我手上有点积蓄,撑个半年没问题。而且我已经开始投简历了,很快就会有消息的。”
“妈不是担心你没钱,妈是担心你心里有事不愿意说。”她在电话那头叹了口气,“你这孩子从小就这样,什么事都自己扛着。你爸走得早,妈又帮不了你什么,你在外面要是有难处,一定要跟妈说,别一个人硬撑着。”
“知道了妈,我真的没事。好了,先挂了,我还有点事。”
我挂掉电话,在路边的台阶上坐了一会儿。手机屏幕又亮了,是租房中介的消息:“林先生您好,您之前看的那套一居室已经租出去了,要不要再看看别的房源?”
我把那条消息划掉,打开了外卖软件,给自己点了一份黄焖鸡米饭,加了一个煎蛋。备注里写了“多放辣椒”。然后我站起来,拍了拍裤子上的灰,往地铁站的方向走。
路上的行人来去匆匆,每个人脸上都带着下班的疲惫。我跟他们擦肩而过的时候,忽然觉得自己像一颗从流水线上脱落的螺丝钉,滚到了一个没人注意的角落里,不知道该往哪儿去。
回到家已经是七点多了。我租的房子在老城区的一个老小区里,一室一厅,每个月两千八的房租。楼道里的声控灯坏了大半个月,物业一直没修,我摸黑上了五楼,用手机屏幕的光照着钥匙孔开门。推门进去,屋里黑漆漆的,一股子没通风的闷味。我开了灯,把外卖放在茶几上,坐在沙发上盯着天花板发了很久的呆。
天花板上有一块水渍,是楼上卫生间漏水留下的痕迹,我跟房东说过两次,房东说楼上不配合,一直拖着。那块水渍的形状像一张模糊的脸,在惨白的灯光下显得有点狰狞。我看着那张“脸”,脑子里反复回放着今天下午的那十分钟——递辞职信、签字、审批邮件、IT被抄送。那个流程顺畅得像是一条精密的生产线,每一个环节都严丝合缝,没有任何一个节点停下来问一句:“林屿走了,我们会不会有问题?”
没有。
没有人问。
我拿起手机,打开了那家招了我快一年都没招到人的猎头的聊天记录。三个月前他加了我的微信,隔三差五就给我发岗位信息,我那时候一直没理他。现在我在对话框里打了一行字:“你说的那个岗位,还在招吗?”
消息发出去不到十秒,对方就回了:“在的在的!林工您有兴趣?明天方便电话聊一下吗?”
我回了一个“好”字,然后把手机关了,开始吃饭。黄焖鸡米饭放了很多辣椒,辣得我眼眶发热,但我还是一口一口地吃完了。
吃完饭我洗了个澡,水温忽冷忽热,这破房子的热水器也是老毛病了。我站在花洒底下,闭着眼睛,任由水流从头顶浇下来。水声把周围的一切都隔绝了,整个世界只剩下我自己。就是在这一刻,在被热水包围的短暂的与世隔绝里,我终于允许自己承认了一件事——我不是不在乎。
我他妈在乎得要命。
我在乎我四年的付出没有得到一句认可,我在乎连离职都走得这么悄无声息,我在乎别人提离职是筹码、我提离职就只是一个流程,我在乎周彦说的那句“被看见”,因为我也渴望被看见,可他们从来没看见过我。
水顺着我的脸流下来,分不清是水还是别的什么。我仰起头,让水直接打在脸上,打到皮肤生疼。然后我深吸一口气,关掉水龙头,裹上浴巾,走出了浴室。
床头柜上放着一本书,是去年买的一本技术类的书,只翻了前几十页就没再读下去。书的封面上落了薄薄的一层灰。我把灰擦掉,翻了几页,又合上了。我现在看不进去任何东西,我的脑子像一台超负荷运转后突然断电的机器,所有的思绪都在半空中悬着,落不到实处。
我躺在床上,关了灯,盯着黑暗中的天花板。那块水渍看不见了,但我能感觉到它还在那里,在天花板的另一面,沉默地、缓慢地蔓延着。就像我心里那团说不清道不明的情绪,它在黑暗中悄悄地生长,没有声音,却无处不在。
不知道过了多久,我迷迷糊糊地睡了过去。睡眠很浅,做了很多乱七八糟的梦,梦里的场景都是公司的画面——格子间、会议室的投影仪、凌晨上线时大家围在一起吃的外卖、陈总监在周会上拍着桌子说“我们要做最好的产品”的样子。这些画面像被剪碎的胶片一样在脑子里乱晃,最后定格在一个画面上:我站在陈总监的办公室里,他把辞职信签完扔回给我的那一刻。
在梦里,我终于开口了。我问了他那个现实中我没敢问的问题:“为什么?”
梦里的陈总监抬头看着我,表情很困惑,像是听到了一个完全不值得回答的问题。他说:“因为你从来都不重要啊,林屿。”
我是被自己的手机震醒的。
醒的时候天刚蒙蒙亮,窗帘的缝隙里透进来一道灰白的光。我的头很疼,嗓子也干得厉害,大概是昨晚那碗黄焖鸡的辣椒吃多了。我在枕头底下摸了半天找到手机,屏幕上显示的是早上六点十七分,有一个本地座机的未接来电。
我以为是骚扰电话,没在意,翻了个身想再睡一会儿。但那个号码又打进来了。
我接起来,语气不太好:“喂?”
电话那头是一个陌生的男声,礼貌而克制:“请问是林屿先生吗?这里是市公安局刑侦支队。”
我一下子坐了起来。
第二章 电话
那个自称是市公安局刑侦支队的男人在电话里说了一句话,让我的血液几乎凝固了:“林屿先生,请问您认识陈伟军吗?”
陈伟军。陈总监。昨天下午刚刚在我辞职信上签字的那个男人。
“认识,他是我领导。怎么了?”我的声音有些发紧。
“我们有一些情况需要向您了解,请问您今天方便来一趟吗?或者我们派人过去找您也行。”
“他怎么了?”我追问道。
电话那头沉默了一下,然后说:“今天凌晨,陈伟军被发现死于家中,初步判断是他杀。我们在他的通话记录里发现,昨天下午三点零七分,他曾经和您有过一次企业微信通话,时长四分多钟。您是他在去世前最后联系的人之一。”
我的大脑在这一瞬间像是被按下了暂停键,所有的思维都停止了运转。我张嘴想说点什么,但喉咙像被一只无形的手掐住了。过了好一会儿,我才找回自己的声音:“你说什么?他……死了?”
“是的,请您配合调查。您今天方便的话,请于上午九点到市局刑侦支队来一趟,我们会在门口接您。”
我机械地报了一个“好”字,对面报了地址和时间,然后电话就挂断了。
我坐在床上,手里攥着手机,屏幕暗下去又亮起来,映着我那张苍白的脸。窗外的天越来越亮了,楼下的早点摊已经开张,油条下锅的滋啦声和老太太们讨价还价的声音混在一起,充满了热气腾腾的市井气息。但这一切都像是另一个世界的声音,我被一层透明的膜隔绝在里面,周围的一切都变得不真实了。
陈伟军死了。他昨天下午还坐在办公椅上,用那种平静到近乎冷漠的眼神看着我,跟我说“行,我批了”。他的声音、他的表情、他签字时笔尖划过纸面的沙沙声,我记得清清楚楚。而现在有人告诉我,他已经是一具尸体了。
我穿上衣服的时候,手在发抖。我不确定自己是在害怕还是在震惊,或者两者都有。我从来没有离一桩谋杀案这么近过,更不用说被害者是我昨天才刚刚见过面的直属领导。
出门之前,我给我妈又发了一条消息,没提陈伟军的事,只是告诉她我今天有点事要处理,让她别担心。然后我打了个车,直奔市公安局。
在车上的那二十多分钟里,我试图理清自己的思绪。陈伟军昨天下午签完我的辞职信之后,我大概三点零七分确实给他打过一通企业微信语音——那是为了确认交接文档的格式要求,通话很短,说了几句就挂了。在那之后,我去了人力办手续,五点多离开公司,之后的行踪都有迹可循。从这个角度来说,我的嫌疑应该很好排除。但我还是紧张,紧张到胃都在痉挛,因为我从来没有和这种事情打过交道,更因为我意识到,如果陈伟军真的是被人杀害的,那凶手极有可能是我认识的人。
他是凌晨死于家中的,可我们之间最后一个工作日的交集,就成了某种意义上的时间线锚点。我会被反复询问,被反复回忆那个下午的每一个细节——他有没有什么异常,有没有跟谁发生过争执,有没有流露出任何恐惧或者不安。这些问题在刑侦支队的问询室里,一个接一个地抛向了我。
接待我的刑警姓方,四十出头,剃着板寸,眼神锋利但不凶恶。他给我倒了一杯热水,在我对面坐下,语气很平和:“林先生,别紧张,我们就是例行询问。你把你和陈伟军昨天的接触情况,从头到尾讲一遍就行。”
我从递交辞职信开始讲起,讲到他的态度,讲到他不耐烦地签字,讲到我们之间简短的通话。方警官听得很仔细,不时在笔记本上记几个字。他没有打断我,只是在我讲完之后问了一句:“你觉得他昨天有什么异常吗?”
我仔细回想了一下,摇了摇头:“没有。他就是……特别冷淡。但那种冷淡也不算异常,他平时对我就一直那样。”
“他对你一直那样?能具体说说吗?”
这个问题让我陷入了一阵沉默。因为这恰好触及了我最不愿意触碰的那块地方——陈伟军对我和对别人的态度,从来就是不一样的。对别人,他是一个“虽然严厉但还算公正”的领导,会骂人但也会护犊子,会在关键时候给下面的人争取资源。但对我,他永远是那种不动声色的漠视,不骂也不夸,不近也不远,像对待一台性能稳定但没什么亮点的机器。
我把这些感受尽可能地客观地讲了出来,没有加太多主观评价,但方警官似乎从中捕捉到了什么。他停下笔,看着我:“这么说,你们之间的关系算不上好?”
“算不上不好,只是……没什么关系。”我斟酌着措辞,“他不重视我,我也不怎么亲近他。我们就是纯粹的工作关系。”
“那他最近有没有跟别人发生过冲突?不管是工作上的还是私下的?”
“工作上的话……”我想了想,“他上周在项目会上跟产品部的顾总吵过一架,为了需求排期的事,吵得挺凶的。但是这种事经常有,不至于——”
“顾总?顾婉清?”
“对。”
方警官点了点头,又在笔记本上记了一笔。然后他问了我最后一个问题:“你昨天下午五点多离开公司之后,去了哪里?有没有人能证明?”
我把回家的路线、点外卖的记录、和猎头的聊天记录、和我妈的通话记录全部翻出来给他看。他仔细核对了一遍,然后合上笔记本,站起来跟我握了握手:“感谢你的配合,林先生。如果后续还有需要,我们会再联系你。”
走出刑侦支队的时候,已经是中午了。太阳明晃晃地挂在天上,但我一点也感觉不到暖和。我在路边站了好一会儿,脑子里嗡嗡作响,像是有一群蜜蜂在里面筑了巢。
陈伟军死了。这个念头像是电脑上的一个弹窗,每隔几秒钟就弹出来一次,每次弹出来都让我的心脏猛跳一下。我掏出手机,想给谁打个电话,但翻了半天通讯录,竟然找不到一个可以倾诉的人。周彦?他大概还在纠结要不要接受那百分之七十的涨薪,现在给他打电话说这个事,不合适。其他同事?算了,昨天我走的时候连一个告别的人都没有,现在以什么身份去跟他们讨论前领导的死讯呢?
我最后还是把手机收了起来,在路边找了一家兰州拉面馆,要了一碗牛肉面。面端上来的时候冒着热气,我往碗里加了三勺辣椒油,把面拌得通红,然后埋头吃了起来。辣椒的刺激让我暂时忘记了脑子里那些乱七八糟的念头,让我的注意力全部集中到了舌尖的灼烧感上。
吃到一半的时候,手机响了。我低头一看,是猎头发来的消息:“林工,我跟那边沟通过了,他们对您的背景非常感兴趣,最快这周五就能安排面试,您看时间方便吗?”
我盯着这条消息看了很久。就在昨天,我还觉得尽快找到新工作是我当前最重要的事情。但现在,一条人命压在心上,让我突然觉得找工作这件事变得既遥远又虚无。我甚至开始怀疑,我昨天那一时冲动的裸辞,究竟是对还是错。如果我没有辞职,如果我还在公司,陈伟军的死对我来说会不会更近一些?还是说,正因为我不重要,所以这件事才会以一种近乎荒诞的方式闯入我的生活——我刚刚被他批准离开,而他就在同一天晚上离开了这个世界。
这中间是不是有什么联系?我不敢往下想。
但直觉告诉我,这不会是结束。
果然,当天晚上,事态就以一种我完全没有预料到的方式,彻底失控了。
晚上九点多,我正在家里百无聊赖地刷着技术论坛,忽然手机像是被人操控了一样疯狂地震动起来。我一开始以为是谁在给我发消息轰炸,拿起来一看,是微信——不是某一个人,而是好多个人,同时在不同的群里艾特我。
我点开一看,整个人像是被电击了一样,从头皮麻到了脚底。
有人把陈伟军死亡的消息发到了公司的微信群里,紧接着又有人发了一条消息,内容只有一句话——“林屿昨天刚提了离职,陈伟军昨晚就死了,这也太巧了吧?”
这条消息像一颗投入湖心的炸弹,瞬间把所有的潜水党都炸了出来。有人在追问细节,有人在发震惊的表情包,有人在说“别瞎猜”,但更多的人在沉默——那种意味不明的、充满想象空间的沉默。
我快速翻了一遍所有艾特我的消息,手指越来越凉。有人在群里直接问我:“林屿,你跟陈总昨天下午到底说了什么?他有没有什么异常?”还有人私聊我,语气像是在安慰我,但字里行间全是打探:“兄弟你没事吧?听说你昨天走得不太愉快?陈总批得特别快是不是?你当时有没有觉得他不对劲?”
我一条都没有回。
因为我知道,一旦回了第一条,就会有无数条接踵而至。而我此刻最不需要的,就是成为别人茶余饭后的谈资。
但这还不是最可怕的。最可怕的事情发生在第二天上午。
一个叫“职场扒皮菌”的营销号,在微博上发了一条长图,标题耸人听闻:“某互联网公司员工提离职10分钟获批,当晚直属领导横死家中——是巧合还是另有隐情?”
长图的内容基本就是把昨天的群聊截图打码处理后重新组织了一遍,加上了大量主观臆测和引导性的提问。虽然里面没有直接点出我的名字和公司的名字,但所有认识我的人、所有在这家公司工作的人,都能一眼认出来这说的是谁。
这条微博的转发量在几个小时内就破了两万。评论区里说什么的都有,有人说是“老实人被逼急了”,有人说是“职场霸凌的恶果”,还有人煞有介事地分析起了“犯罪心理”。每一条评论都像一把刀子,隔着屏幕扎在我身上。
我坐在出租屋里,看着那些不断刷新的数字和评论,感觉自己像是被脱光了衣服扔在了闹市街头,无数双眼睛从四面八方投过来,充满了好奇、窥探和审判。我想辩解,但我不知道该向谁辩解。我想澄清,但我连一个可以发声的渠道都没有。
就在这时,我接到了一个电话。来电显示是一个陌生的手机号码,归属地是本地。我犹豫了几秒,还是接了。
电话那头是一个年轻的女声,语速很快,带着一种职业化的紧迫感:“林屿先生您好,我是‘星辉传媒’的记者白露,关于您前领导陈伟军先生的不幸离世,我想采访您几个问题——”
我直接把电话挂了。
但下一秒,又一个电话打了进来。另一个号码,另一个媒体。然后是第三个,第四个。我的手机变成了一个不断响铃的机器,每一个来电都来自不同的陌生号码,像一群闻到了血腥味的鲨鱼,从四面八方聚拢过来。
我慌了。
我从来没有经历过这种事情,完全不知道该怎么应对。我只能把手机关成静音,把它反扣在茶几上,看着屏幕亮了又暗、暗了又亮,像一个正在抽搐的病人的心电监护仪。
那天下午,我躲在家里不敢出门。窗帘拉得严严实实的,只留了一条缝。我透过那条缝看到,小区楼下不知道什么时候多了一辆面包车,车身上印着一个视频平台的logo。几个人扛着设备从车上下来,正在楼下四处张望。
他们追到我住的地方来了。
我的心脏狂跳不止,像是在胸腔里装了一个失控的马达。我在房间里来回踱步,脑子里飞速运转却什么有效的方案都想不出来。我给周彦打了个电话,响了好多声他才接。
“喂,林屿?你还好吗?”他的声音听起来有些疲惫,但更多的是小心翼翼。
“周彦,到底他妈怎么回事?陈总监他……”我压低声音,“真的是被杀的?”
电话那头沉默了很久。久到我以为信号断了。然后周彦用一种我从来没听过的声调说:“林屿,这件事现在很复杂,不是我几句话能说清楚的。但我劝你一句,这段时间尽量不要跟公司里的人联系,尤其是那些主动来找你的人。”
“为什么?”
“因为——”他停顿了一下,像是在斟酌措辞,“因为现在所有人都在找一个解释,而你是最现成的那个。”
电话挂断之后,我颓然地坐在了地上。瓷砖冰冷刺骨的触感透过裤子传上来,让我整个人打了个哆嗦。我看着茶几上还在不停闪烁的手机屏幕,感觉自己像是被卷进了一个巨大的漩涡里,四周全是黑暗的、冰冷的水流,而我拼命地想抓住点什么,却什么都抓不住。
我不明白,我只是辞了个职而已,怎么就莫名其妙地变成了舆论风暴的中心?我只是想离开一个不重视我的地方,为什么全世界都像是串通好了要把我往绝路上逼?
不知道过了多久,手机的亮屏频率终于渐渐降了下来。大概是记者们发现我关机了或者不接了,开始把火力转向了别的目标。我瘫坐在沙发上,浑身像是被抽干了力气一样,一点劲儿都提不起来。电视没开,屋里静得可怕,只有冰箱压缩机偶尔启动的嗡嗡声。
就在我以为这荒唐的一天终于要结束的时候,手机又亮了。
这一次,来电显示上的名字让我浑身的汗毛全部竖了起来。
屏幕上赫然显示着一行字:蒋维康。
这个蒋维康,不是别人,正是我们公司的总裁,那个我入职四年多只在年会大屏幕上见过几次、从来没有跟他说过一句话的集团一把手。他怎么会给我打电话?他怎么会有我的手机号?
我盯着那个不断闪烁的名字,手指悬在接听键上方,迟迟没有按下去。脑子里闪过无数个念头——是不是因为网上的舆论发酵得太厉害,他要亲自找我谈话?是不是警方那边有什么新的进展,需要我这个最后接触者配合调查?还是说……他以为陈伟军的死跟我有关?
电话响了很久,在我犹豫的间隙里自动挂断了。我松了一口气,但那股气还没吐完,屏幕又亮了——还是他。
然后是第三个电话,第四个电话,第五个电话。蒋维康像疯了一样不停地打我的手机,那种执着的、密集的响铃频率,透露出一种近乎失控的急切。我从来没见过一个总裁级别的老板会这样打爆一个普通员工的电话——不,我不是员工了,我已经辞职了,我的离职手续在昨天下午那十分钟里就已经办完了。
可他还是不停地打。
终于在第七个还是第八个电话响起来的时候,我按下了接听键。
“喂?”
电话那头传来一个中年男人的声音,沙哑、疲惫,甚至带着一丝不易察觉的颤抖。那个在公司年会上侃侃而谈、在行业论坛上指点江山的蒋维康,此刻的声音听起来像是一个几天几夜没睡觉的人。
“林屿?”他叫我的名字,语气里带着一种小心翼翼的确认。
“是我。蒋总,您——”
我话还没说完,就被他打断了。他说出了一句让我整个人彻底愣在当场的话,那句话像一颗子弹,精准地击穿了我所有的防备和困惑,让我在那一瞬间甚至忘记了呼吸。
“林屿,我需要你的帮助。陈伟军的死,不是一桩普通的凶杀案——它和我们公司正在做的事情有关。而现在,只有你能帮我们解决这个问题。”
第三章 灰色地带
蒋维康在电话里没有说太多细节,只给我发了一个地址,约我第二天上午十点见面详谈。那个地址不在公司总部,也不在他常驻的研发中心,而是城西科技园最角落里一栋不起眼的六层老楼。我在公司四年多,从来没有听说过这个地方。
挂掉电话之后,我坐在黑暗里,把蒋维康的话翻来覆去地咀嚼了很久。他说陈伟军的死和公司正在做的事情有关。他说只有我能帮他们解决这个问题。这两句话像是两块拼图,但周围的其他拼图都还散落在我看不见的地方,我拼不出任何完整的图案。
唯一可以确定的是,这件事从头到尾都不是我想象中的那样简单。陈伟军对我的冷漠、他爽快地批准我的离职、甚至周彦那百分之七十的涨薪挽留——这些东西之间,也许都存在着某种我还没有意识到的联系。
第二天早上九点半,我提前到达了那个地址。老楼的外观和它的位置一样低调,灰扑扑的水泥墙面,没有挂任何公司logo,只有门禁系统亮着蓝色的指示灯,暗示着里面并不像外表看起来那么落伍。我在门口站了不到两分钟,一个穿黑色冲锋衣的小伙子从里面推门出来,冲我点了点头:“林工是吧?蒋总在里面等您。”
我跟着他走进大楼。穿过一道需要人脸识别和指纹双重验证的闸机,又坐了一部需要刷卡才能按楼层的电梯,最后来到三楼一条安静的走廊。走廊两侧的办公室门上贴着不起眼的编号,没有门牌,没有标识,但每一扇门都厚重而结实,像银行金库的门。那个小伙子把我领到三零六号门前,帮我刷了卡,然后侧身让到一旁:“请进。”
推门进去,里面的景象和这栋楼的外观形成了巨大的反差。这是一间宽敞的会议室,整面墙的落地玻璃窗让光线毫无保留地倾泻进来。房间中央是一张长条形的会议桌,桌上干干净净什么都没有。蒋维康就坐在桌子的另一端,他面前的笔记本电脑合着,旁边放着一个黑色的文件夹。
看到我的第一眼,我心里咯噔了一下。这个在商场上叱咤风云的人物,此刻的状态比电话里听起来还要糟糕。他的眼睛里布满了血丝,嘴唇干裂起皮,下巴上是没来得及刮干净的胡茬。他穿着一件深灰色的高领毛衣,毛衣的领口歪歪扭扭地卷着,像是匆忙中套上去的,和平时出现在媒体报道里那个西装革履、意气风发的形象判若两人。
“坐。”他指了指对面的椅子,声音沙哑。
我坐下来,和他隔着一张空荡荡的会议桌对视。这种感觉很奇怪,四年多来我在这家公司里像一颗螺丝钉一样默默地拧在自己的位置上,从来没有跟这位大老板有过任何直接交流。而现在,他坐在我对面,看我的眼神里带着一种我之前从来没有见过的、近乎恳求的急迫。
“你可能有很多问题想问,”蒋维康开门见山,把那个黑色文件夹往我这边推了推,“但在回答你的问题之前,我需要先让你知道一件事。这件事严格来说属于公司的最高商业机密,按正常流程,你离职之后是没有权限知道的。但现在情况特殊,我顾不了那么多了。”
我低头看着那个文件夹,没有急着打开。“蒋总,您刚才在电话里说,陈总监的死和公司正在做的事情有关。我现在最想知道的是,这到底是什么意思。”
蒋维康靠在椅背上,双手交叉放在桌上,沉默了一会儿。窗外的阳光打在他侧脸上,让他的轮廓显得格外硬朗,但那双眼睛里装满了某种沉甸甸的东西。他开口的时候,声音比刚才更低了一些:“林屿,你觉得陈伟军对你怎么样?”
这个问题来得没头没脑,我愣了一下,然后如实回答:“不怎么样。”
“你知道为什么吗?”
“不知道。我以为是我不够好。”
蒋维康摇了摇头,嘴角扯出一丝苦涩的弧度:“你很好。你比他手下任何一个工程师都好。这就是问题所在。”
他说完这句话,伸手把那个黑色文件夹翻开了。里面是一叠打印出来的文件,最上面的一张是一份组织架构图。我扫了一眼,发现这份架构图和我之前在OA系统里看到过的任何一个版本都不一样。在这张图上,研发中心被分成了两个平行的分支,一个分支标注的是“产品研发部”,另一个分支标注的是一串我从未见过的代号——“Aegis项目组”。
而在Aegis项目组的最顶端,赫然写着一个我再熟悉不过的名字:陈伟军。
我的目光继续往下扫,在那个项目组的核心成员名单里,我看到了周彦的名字,看到了几个我认识的技术骨干的名字,甚至看到了产品部那个和陈伟军上周吵过架的顾婉清的名字。但这份名单里,没有我。
我一直以为我和周彦、和那些核心技术骨干做的是同一类工作。但这份架构图告诉我,他们一直在参与一个我完全不知道的、藏在产品研发部表皮之下的秘密项目。
“Aegis,”蒋维康解释道,“是两年前启动的一个高优先级项目,项目内容涉及一组核心算法的研发,客户不是普通的商业公司。具体的内容我现在还不能告诉你,但你可以理解为,这个项目的成败,直接关系到公司下一轮的战略转型和一笔数额巨大的对赌协议。”
“陈伟军是项目负责人,”他继续说道,“顾婉清负责数据标注和模型训练的协调,周彦和其他几个人是核心开发。这个项目的保密级别非常高,所有参与人员都签了单独的保密协议和竞业限制协议,项目文档和代码全部存储在物理隔离的内网服务器上,不允许外传,不允许备份到云端,甚至不允许在非项目专用的设备上讨论项目内容。”
我听着这些话,心里像是有一块大石头在缓缓下沉。我终于明白了为什么周彦提离职会被拼命挽留——不是因为他是周彦,而是因为他握着Aegis的核心代码。他那百分之七十的涨薪,买的不是他的劳动,而是他的沉默和留守。而顾婉清和陈伟军上周在项目会上的争吵,恐怕也根本不是因为“需求排期”这种表面原因,而是触及了Aegis内部的某些矛盾。
“那我呢?”我问这句话的时候,声音平静得连我自己都感到意外,“我为什么从头到尾都不知道这个项目的存在?”
蒋维康看着我,目光里带着一种复杂的、近乎歉疚的东西:“因为陈伟军从一开始就把你排除在了项目之外。按照公司的规定,Aegis项目组的人选是由项目负责人提名的,陈伟军交上来的名单里,没有你的名字。当时我问过他一次,他的理由是——你虽然技术扎实,但不适合参与高强度的封闭研发。”
不适合。这两个字像一根细针,扎在了一个我以为已经麻木了的地方,却还是疼了一下。
“而你辞职的时候他批得那么快,”蒋维康叹了口气,“也是因为在他的判断里,你对Aegis一无所知,你的离开不会对项目构成任何风险。相反,他大概觉得你走了反而减少了泄密的可能性。”
我低下头,看着桌子上那份没有我名字的名单,胸口涌上来一股说不清的滋味。它不是愤怒,也不是委屈,而是一种更复杂的、类似于荒诞的情绪。我在这家公司待了四年多,一直以为自己和别人站在同一条赛道上,兢兢业业地跑着。结果有一天裁判告诉我,你跑的那条道从一开始就不计入成绩,因为你在他们眼里根本就没有资格参加这场比赛。
我深吸了一口气,把那份名单合上,重新看向蒋维康:“那你现在为什么又把我找来了?既然陈伟军认为我不适合,既然我的离开对项目‘不构成任何风险’,那你为什么还要打爆我的电话?”
蒋维康沉默了很久。那是一种我从未在一个企业总裁脸上看到过的沉默——不是思考,不是斟酌,而是一个人在犹豫要不要推开最后一扇门,因为他知道推开之后就没有回头路了。
他终于开口了,声音沉得像一块石头:“因为陈伟军死了。而他负责的Aegis项目最核心的那部分代码,在他死亡的当天下午,被人从物理隔离的服务器上彻底删除了。删除的时间点,是在你离开办公室之后的一个小时之内。删除操作使用的是陈伟军本人的最高权限账号,但我们查了当天的门禁记录,陈伟军本人下午四点就离开了公司,而删除操作发生在下午五点四十八分——那个时间,他已经在家里了。”
“有人用他的账号远程登录了内网服务器?”我下意识地问。
“Aegis的服务器不接外网,远程登录不可能。”蒋维康说,“唯一的解释是,有人在公司内部,用陈伟军的终端,输入了他的密码,执行了删除操作。而公司的监控系统,偏偏在当天下午五点到六点之间,发生了整整一个小时的故障。”
房间里安静了下来。我听到自己的心跳声,一下一下的,像是一只拳头在敲打胸腔的内壁。
“警方那边怎么说?”我问。
“警方在调查凶杀案,但他们不懂技术,暂时还没有把这两件事关联起来。”蒋维康揉了揉眉心,脸上露出深深的疲惫,“但我不能等警方慢慢查。Aegis项目有一个不可延期的交付节点,就在十二天之后。如果那部分核心代码找不回来,或者不能在交付之前重建完成,公司面临的违约金和对赌失败的连锁反应,足以让这家公司在一个季度之内破产。到时候,上千号人等着发工资、供应商等着回款、投资人等着问责——你想过那是什么后果吗?”
我没有回答。因为我确实没有想过,也轮不到我去想。但蒋维康的话让我突然意识到,这场风暴的中心其实从来都不是我,而是那个被删除的代码库。我只不过是被风暴的边缘扫到了一下,就已经被卷到了舆论的漩涡里。而真正的风暴眼,是那个空了的服务器、那段凭空消失的代码、那个杀死陈伟军并按下删除键的人。
“你要我做什么?”我问。
蒋维康看着我,目光忽然变得很锐利,那是一种孤注一掷的人才有的眼神:“我要你回到公司来,以技术顾问的身份,协助我们完成两件事。第一,想办法恢复被删除的代码。如果恢复不了,就重建它。第二——”他停顿了一下,“我要你帮我找出那个删除代码的人。”
“为什么是我?”我盯着他,“你们有的是比我更熟悉这个项目的人。周彦、顾婉清、还有名单上那些核心成员,他们对Aegis的了解远在我之上。我连项目都没参与过,为什么要找我?”
“正因为你没参与过。”蒋维康一字一顿地说,“正因为陈伟军从头到尾都把你排除在项目之外,你是整个公司里唯一一个和Aegis项目没有任何利益牵扯的资深技术人员。删除代码的人,一定就在Aegis项目组内部。我现在不敢相信项目组里的任何一个人,但项目又必须有人来救。你觉得我还有别的选择吗?”
他说得对。如果一个价值连城的秘密项目突然出了内鬼,那么所有接触过这个项目的人都自动进入嫌疑范围。而我,因为陈伟军的排挤和漠视,反而成了唯一干净的那一个。
命运就是这么讽刺。我曾经最痛恨的“不被重视”,此刻竟然成了我最宝贵的资本。
我靠在椅背上,看着窗外灰蒙蒙的天,脑子里飞速地转着。一天之前,我还在为离职批得太快而耿耿于怀;现在,这家我刚刚离开的公司忽然把它最脆弱、最危险、最致命的伤口摊在了我的面前,并且告诉我,能缝合这个伤口的人,只能是我。
我应该拒绝的。我已经辞职了,我和这家公司没有任何关系了,陈伟军对我的不公、舆论对我的误解、那些记者对我的围追堵截——这一切都和我没有关系了。我大可以站起来,把这扇门推开,走出去,然后继续去找我的下一份工作,把这个烂摊子留给那些曾经看不见我的人自己去收拾。
但我没有站起来。
因为我想起了陈伟军昨天下午看我的那个眼神,那种平静到近乎漠视的眼神。他说“行,我批了”的时候,他甚至没有抬头多看我一眼。在他的判断里,我就是一个无足轻重的人,走了就走了,不会在任何层面产生任何影响。
我想证明他是错的。
不是为了他——他已经死了,他看不到了。是为了我自己。我要证明给所有曾经看不见我的人看,包括还活着的那些,他们错过了什么。
“我有一个条件。”我说。
蒋维康看着我,眼睛里闪过一丝意外,但他很快就恢复了镇定:“你说。”
“第一,我以外部顾问的身份介入,不签劳动合同,不拿月薪。事成之后,我要一笔单独的报酬,金额由我来提。”
“合理。”
“第二,我对Aegis项目有完全的知情权。我要看到所有的项目文档、代码仓库的完整镜像、项目组成员之间的全部通讯记录。你说这个项目有保密级别,但在我这里,没有秘密。”
蒋维康犹豫了一下,但还是点了头:“可以,但所有资料只能在指定的安全房间里查看,不能带走。”
“第三,”我看着他的眼睛,“如果我找出了那个删除代码的人,不管他是谁,不管他在公司里是什么级别、什么背景,你都必须让我全权处理。我要的不仅仅是真相,我要的是那个人为自己的行为付出代价。陈伟军对我的不公是另一回事,但有人杀了人、销毁了公司的核心资产、还把脏水往我身上泼——这件事,我不会就这么算了。”
我说完这句话之后,会议室里安静了很长时间。蒋维康看着我,像是在重新评估眼前的这个人。他的手指在桌面上无意识地敲了几下,然后他忽然笑了一下,是那种很淡很淡的、带着某种释然的笑。
“林屿,你知道陈伟军看错你什么了吗?”他说,“他以为你是一个没有脾气的人。”
我没有接这个话,只是伸出手去:“成交?”
他握住了我的手。他的手很有力,掌心干燥而温热,和他那张疲惫的脸形成了鲜明的对比。
“成交。”
接下来的三天,我像一块海绵被扔进了水里,以前所未有的速度吸收着关于Aegis项目的一切信息。蒋维康给我安排了一间独立的办公室,就在那栋灰色老楼的三楼,和Aegis项目组的其他成员隔着一整条走廊。我的门禁卡被临时升级了权限,可以访问那个隔离的内网环境,可以调阅所有的项目文档和历史记录。
我没有急着去见项目组的人。在搞清楚事情的来龙去脉之前,我不想打草惊蛇。我花了两天时间,把Aegis项目的所有技术文档和代码仓库的镜像从头到尾啃了一遍。越看,越觉得后背发凉。
这个项目的技术含量和复杂性,远远超出了我之前的想象。它涉及的算法框架和底层架构,不是普通商业项目能用到的级别。Aegis项目的全部代码可以大致分为三个模块:数据预处理层、模型训练层,以及一个被标注为“雅典娜引擎”的核心推理层。被删除的部分,恰恰就是这个“雅典娜引擎”的全部源代码、编译脚本和训练好的模型权重文件。
换句话说,丢掉的不是一块砖,不是一面墙,而是整栋建筑的地基。没有雅典娜引擎,上面所有的模块都是空中楼阁。
而更让我感到不安的,是代码仓库的操作日志。日志显示,删除操作使用的是陈伟军的账号,登录终端是陈伟军办公室里的那台台式机。密码验证通过了,操作者使用了强制删除命令,没有触发任何报警机制——因为陈伟军本人就拥有最高的管理员权限,系统不会对他的操作进行任何拦截。
但蒋维康说得很清楚:陈伟军下午四点离开了公司,门禁记录可以作证。而删除操作发生在五点四十八分。那个时候坐在陈伟军办公室里、用他的账号登录系统的人,只能是另一个人。
这个人知道陈伟军的账号密码,了解内网服务器的架构,清楚雅典娜引擎的存储路径,并且对公司的监控系统漏洞了如指掌——因为监控偏偏在删除操作发生的那一个小时里出现了故障。这一切不可能是巧合,只可能是一场蓄谋已久的精准打击。
而这个人,一定就在陈伟军身边最密切的工作圈里。
我调出了Aegis项目组的通讯记录。在那一个月的聊天记录里,陈伟军和顾婉清之间的火药味最浓。他们的争吵从上周开始升级,频率和强度都明显高于正常的工作摩擦。最激烈的一次,顾婉清在群里直接发了一句——“你这样做会把整个项目推进火坑,你担得起这个责任吗?”虽然这条消息很快就被撤回了,但它留下的系统记录还在。
顾婉清。产品部总监,三十岁出头,业内知名的女强人,做事雷厉风行,说话从不拐弯抹角。我虽然以前跟她没有直接工作交集,但对她的名声早有耳闻。她和陈伟军之间的矛盾,是不是已经激化到了需要用极端手段来解决的地步?
还有周彦。他是雅典娜引擎的核心开发者之一,对那部分代码的架构了如指掌。他提离职的时候拿到了百分之七十的涨薪挽留,但最终他还是选择了留下来。他留下来的真实原因是什么?是那百分之七十的薪水让他心动了,还是因为别的什么?他有没有可能因为某种原因想要毁掉这个他亲手搭建的项目?
名单上还有其他人。Aegis项目组一共十七个人,每一个人都有自己的位置,每一个人都有自己的动机。我像是一个拿着手电筒走进了一片浓雾的人,光束能照亮的范围极其有限,而迷雾里不知道藏着什么。
第三天下午,我决定去一趟Aegis项目组所在的楼层。
那层楼在公司的另一栋办公楼里,和普通员工的办公区隔着一道需要单独授权的门禁。蒋维康提前帮我开通了权限,我刷开那扇门的时候,走廊里安静得像是图书馆。和普通办公区嘈杂的电话声、键盘声、讨论声不同,这里的安静是一种被刻意维持的、几乎是高压锅式的安静。所有人都低着头做自己的事情,偶尔有人抬头看我一眼,目光里带着不加掩饰的警觉和疏离。
我找到了周彦的工位。他正对着三块显示器写代码,屏幕上的代码编辑器里密密麻麻全是注释和函数。我走到他身边的时候,他摘下耳机,抬头看着我,脸上的表情很复杂,既有意外,又有一种“果然来了”的了然。
“蒋总跟我说了。”他先开了口,声音压得很低,“你现在是项目的外部顾问?”
“算是吧。”我拉了把椅子在他旁边坐下,“周彦,我们认识四年了。有些话我就直说了。陈伟军死了,雅典娜引擎被人删了,用他的账号删的。而那个删除操作发生的时间,你人在哪里?”
周彦没有生气,也没有慌张。他沉默了一会儿,然后打开手机上的地图软件,把时间线拉到了那天下午,展示给我看。他的手机定位记录显示,那个时间段他正在公司附近的一家健身房跑步,有签到记录、有运动手环的心率数据、有健身房的监控可以作证。
“那天下午陈总监批了我的涨薪之后,我就提前走了,去健身房缓解一下情绪。”他说,“这件事我已经跟警方说过了。”
我把他的数据拍了下来,然后继续问:“你觉得是谁干的?”
周彦把眼镜摘下来,用衣角擦了擦镜片。他重新戴上眼镜的时候,说了一句让我很意外的话:“林屿,我知道你现在在怀疑所有人,这很正常,这是你的工作。但我问你一个问题——你有没有想过,陈伟军他自己,有没有可能就是想毁掉这个项目的人?”
我愣住了。“什么意思?”
“我参与这个项目两年了,”周彦的声音压得更低了,低到只有我们两个人能听到,“越做到后面,我越觉得不对劲。蒋总跟你说过这个项目的客户是谁吗?”
“没说。”
“他当然不会说。”周彦的嘴唇抿成了一条线,“我们签的保密协议里,连客户的身份都是加密级别的。但我们写了这么久的代码,做的是什么东西,我们心里大概都有数。这个雅典娜引擎的能力,远远超出了普通商业应用的需求。它不像是用来卖钱的,更像是用来——”他顿了顿,似乎在找一个安全的措辞,“用来做某种我们不该做的事情。”
我的心跳猛地加速了几拍。
“陈伟军最近一个月状态很差,”周彦继续说道,“他和顾婉清吵架,不是因为她要改需求,而是因为他不肯签一个交付确认文件。顾婉清一直在催他,他一直在拖。我有一天晚上加班,路过他办公室的时候,听到他在打电话,语气很激动,像是在跟什么人争辩。他说的最后一句话是——‘你们不能拿这个去干那种事,这已经超出底线了。’”
“你确定你听到的是这句话?”我的嗓子有些发紧。
“一个字都不会错。”周彦盯着我,目光里有某种近乎恐惧的东西,“林屿,你有没有想过,也许杀死陈伟军的人,和删除代码的人,根本就不是同一个人?也许陈伟军的死,恰恰是因为他拒绝配合某件事?而那个删代码的人,也许只是想赶在别人之前毁掉证据,或者——抢走唯一有价值的筹码?”
我坐在那里,感觉周围的空气变得越来越稠,稠得像是要把人溺死在里面。
我来这里是为了找出真相,但现在真相不但没有变得清晰,反而越发扑朔迷离。陈伟军、顾婉清、周彦、甚至蒋维康——每个人说的话都有合理的成分,但每个人也都藏着我不想看到的那一面。而我,这个被排斥在项目之外整整两年的局外人,此刻站在漩涡的最中心,却连该相信谁都不知道。
窗外最后一抹夕阳的光正好照进走廊,在白色的墙壁上投下长长的影子。我忽然感觉到一种难以言喻的孤独,那种孤独不是一个人独处的寂静,而是站在人群中间却不知道每一张面孔背后藏着什么的恐惧。
但我没有退路了。从蒋维康打爆我电话的那一刻起,从陈伟军用那种漠视的眼神签下我的离职信的那一刻起,我就已经被卷入了这场游戏。现在我唯一能做的,就是把这个游戏玩到底。
第四章 所有人都在说谎
接下来的四十八小时里,我把自己关在那间只有我能刷卡进入的办公室里,面前摊着Aegis项目组十七个人的资料,像拼一盒被人故意打乱的拼图。十七个人,十七张面孔,十七段我试图用数据和事实去填充的轮廓。每当我以为找到了某个人的动机,就会有另一条信息冒出来,把之前的推断砸得粉碎。
我第一个深挖的人是顾婉清。
在公司的档案系统里,她的履历光鲜得像一份优秀毕业生的范本——国内顶尖高校计算机专业本科,海外名校硕士,回国后先后在两家头部互联网公司做过产品负责人,三年前被蒋维康亲自挖过来,直接给了产品部总监的职位和期权。她今年三十一岁,单身,据说工作就是她生活的全部。陈伟军出事前的那段时间,她和陈伟军之间的争吵频率和烈度都达到了顶点,项目组的聊天记录里到处是他们针锋相对的痕迹。
但真正让我对顾婉清产生怀疑的,不是那些争吵本身,而是技术日志里的一条不起眼的记录。雅典娜引擎的备份脚本,在陈伟军死亡前三天,被人从自动化任务列表里移除了。这意味着在删除操作发生之前的三天里,雅典娜引擎的所有更新都没有进行过任何备份。而移除这个备份脚本的账号,属于产品部——准确地说,属于顾婉清本人。
我带着这条记录去找了蒋维康。他在他的临时办公室里接见了我,听完我的陈述之后,沉默了很久。然后他打开了一个保险柜,从里面拿出一个牛皮纸信封,放在桌上推给我。
信封里是一叠打印出来的邮件,发件人是顾婉清,收件人是一个加密的外部邮箱地址。邮件的日期跨度长达八个月,内容全部是Aegis项目的技术方案、进度报告和测试数据。每一封邮件的末尾,都有一个附件,附件里是经过精心整理的、可以直接用于技术复现的关键参数文档。
“商业间谍?”我抬头看着蒋维康。
“比那个更复杂。”蒋维康的脸色很难看,“那个外部邮箱的归属,我们查过了,是一家和我们在某些领域存在直接竞争关系的公司。但顾婉清不是间谍——她做的这些事情,陈伟军都知道。”
“什么?”
“陈伟军默许她这么做的。甚至可以说,是陈伟军让她这么做的。”蒋维康揉了揉眉心,“这个项目的客户给的压力非常大,大到陈伟军觉得自己需要一条后路。他把项目最核心的数据通过顾婉清的手往外输送,为的是在项目交付之后,给自己留一个跳槽的筹码。这件事,我也是在他死了之后,让安全部门彻查他的全部通讯记录时才发现的。”
这个信息让我脑子里的拼图又碎了一次。陈伟军和顾婉清不是对头,而是共谋。那些激烈的争吵,也许根本就是演给外人看的烟雾弹。那么问题来了——既然是共谋,顾婉清为什么要删除备份脚本?陈伟军的死,对她有什么好处?或者说,陈伟军的死,是不是因为这条“后路”被什么人发现了?
“顾婉清现在在哪里?”我问。
“请假了,说是因为陈伟军的事情受到了惊吓,需要休息几天。但我的人告诉我,她昨天下午去了机场,目的地是香港。”蒋维康的语气里带着一种极力压制的愤怒,“我已经让法务启动了紧急程序,冻结了她的所有权限和公司资产,但她手里的那些数据,已经追不回来了。”
线索在顾婉清这里断掉了,但拼图的另一个角却意外地浮出了水面。
那天下午,我在Aegis项目组的内部论坛里翻找历史记录的时候,注意到了一个几乎被所有人忽略的账号。这个账号的名字叫“Guest_Aegis_07”,注册时间是六个月前,几乎没有任何发言记录,只在三个月前的一个技术讨论帖里回复过一句话。那句话只有五个字——“这个思路不对。”
引起我注意的,不是这句话的内容,而是这条回复的IP地址。它不属于公司的任何一个网段,甚至不属于任何一个已知的商用VPN节点。我顺着这个IP地址查下去,发现它来自一个被层层代理包裹的隐藏服务器,服务器的物理位置显示在境外。
一个外部人员,在Aegis项目的内部论坛上潜伏了六个月。而他的存在,似乎没有任何人注意到——或者说,有人注意到了,但选择了忽略。
我把这个发现同步给了蒋维康的安全团队。他们的技术负责人是一个叫老邱的秃顶男人,四十多岁,在网络安全领域摸爬滚打了二十年。老邱看完我提供的数据,坐在电脑前沉默了很久,然后从牙缝里挤出几个字:“这是个高手。”
老邱花了整整一个通宵,调用了公司全部的安全日志和网络流量数据,最终还原出了“Guest_Aegis_07”的全部活动轨迹。这个人不是简单地在论坛里窥屏,他曾经先后三次尝试绕过内网防火墙,直接访问雅典娜引擎的代码仓库。其中两次被安全系统拦截了,但第三次,他成功了。
第三次的时间,是陈伟军死亡前五天。
“他拿到代码了吗?”我的声音绷得像一根即将断裂的弦。
“拿到了。”老邱的脸色铁青,“他植入了一个极其隐蔽的木马,利用陈伟军的终端作为跳板,在凌晨三点系统自动备份的时候,把雅典娜引擎的全部源码打包传了出去。这件事,发生在备份脚本被移除之前四十八小时。也就是说,在顾婉清关掉自动备份之前,代码已经泄露了。”
我坐在老邱的椅子上,看着屏幕上那些复杂的网络流量图谱,感觉头顶的天花板在缓缓往下压。顾婉清和陈伟军往外输送数据,是为了一条后路。而这个潜伏的幽灵,是从外部入侵进来直接窃取核心代码的。两条线,两个方向,却都指向了同一个东西——雅典娜引擎。
那陈伟军的死呢?他的死和这两条线有关系吗?还是说,他的死是第三条完全独立的线,纠缠在这团乱麻里,让一切变得更加不可收拾?
我回到自己的办公室,把所有的线索全部摊在桌面上,试图画出一张关系图。陈伟军,项目负责人,和顾婉清合谋外泄数据,默许甚至主导了某种“留后路”的行为。顾婉清,共谋者,在陈伟军死前三天关掉了备份脚本,现在人在香港。周彦,核心开发者,知道项目的某些隐情,对项目的用途心存疑虑,但案发时间有不在场证明。神秘的外部入侵者,代号“Guest_Aegis_07”,在案发前五天成功窃取了代码,手段极其专业,不是普通黑客所为。
这张关系图里还缺一个最关键的人物——那个在案发当天下午五点四十八分,坐在陈伟军的办公室里,输入他的密码,执行删除操作的人。这个人是谁?他和上面任何一条线有关联吗?还是说,他代表着一个我还没有触碰到的、更深的层面?
我需要找到陈伟军当天的完整活动轨迹。
安保部门给我调来了陈伟军死亡当天公司的全部门禁记录和电梯刷卡数据。这些数据显示,陈伟军当天上午九点零三分进入公司,刷卡进入Aegis项目组的办公区之后,直到下午四点零七分才刷卡离开。期间他去过一次地下一层的食堂,时间大约在中午十二点到十二点半之间。除此之外,他没有离开过项目组的楼层。
而删除操作发生的时间是下午五点四十八分。也就是说,在陈伟军离开公司将近两个小时之后,有人用他的终端和账号登录了内网,执行了删除操作。
这个人是怎么进入陈伟军办公室的?陈伟军的办公室是独立的,需要他的门禁卡或者备用钥匙才能打开。备用钥匙存放在行政部的前台,当天下午的钥匙领用记录显示,没有任何人领取过那间办公室的备用钥匙。
除非——这个人拿到过陈伟军的门禁卡。
我把安保部门的负责人叫了过来,让他调出当天下午五点之后所有刷卡进入Aegis项目组楼层的人员名单。那份名单一共只有七个人,其中六个是正常加班的技术人员,他们的工位和行踪都可以通过后续的刷卡记录和同事证言相互印证。只有一个人,他的刷卡记录显得格外异常。
这个人刷开楼层门禁的时间是下午五点二十三分,离开的时间是六点零一分。他在楼层里待了整整三十八分钟,但他并没有去自己的工位——他的工位门禁记录显示,他在这三十八分钟里,没有打开过自己的工位抽屉,没有使用过自己的办公电脑。他所在的部门并不在Aegis项目组楼层,他出现在那里,本身就不正常。
这个人的名字叫方景阳,职级是行政部副经理。
行政部副经理。一个和代码没有任何关系的人。
我在公司四年多,对方景阳这个人几乎没什么印象。他在行政部负责后勤保障和办公设施管理,平时不显山不露水,开会的时候坐在角落里,脸上永远挂着一副温和的笑容,跟谁说话都和和气气的。这样一个看起来人畜无害的角色,为什么会出现在案发当天的Aegis项目组楼层?他在那三十八分钟里做了什么?
我让老邱调出了当天下午陈伟军办公室门口走廊的监控数据。老邱回来的时候,脸色比之前更差了:“当天下午五点,那一层的监控确实发生了故障,整个楼层都是黑的。但是,走廊尽头消防通道的那个摄像头是独立供电、独立存储的,不在同一套系统里。我把那个摄像头的记录调出来了。”
他把笔记本屏幕转向我。画面很模糊,是那种老式模拟摄像头拍摄的黑白画面,但足够看清楚人影。五点三十一分,一个穿着深色外套的身影从消防通道里走了出来,沿着走廊快步走向陈伟军办公室的方向。他走路的姿势很急促,但步伐极其笃定,像是早就踩好了点,对这里的每一寸地形都了如指掌。
虽然画面分辨率不高,但我还是从那人的体型、走路的姿态和侧脸的轮廓上认出了他——方景阳。
五点三十一分,他走进了陈伟军的办公室。五点四十一分,他从办公室里出来,原路返回消防通道。在办公室里的时间,正好十分钟。而删除操作的时间,是五点四十八分。
时间差七分钟。
老邱解释道:“他在这十分钟里完成了登录和删除指令的执行,但删除一个大型代码仓库的实际运行需要时间。他不是技术人员,可能不知道删除指令执行完毕会有延迟。或者,他根本不在乎这个时间差——反正监控已经被他搞坏了。”
一个行政部的副经理,亲手潜入技术总监的办公室,删除了公司最核心的项目代码。而他在做完这一切的当天晚上,陈伟军就死在了自己的家里。
这两件事之间到底是什么关系?方景阳是受人指使还是自愿行动?他是直接杀害陈伟军的凶手,还是只是一个负责销毁代码的帮凶?
我让蒋维康立刻通知了警方。但方景阳在陈伟军死后的第二天就递交了辞职信,理由是“个人身体原因”。蒋维康当时并不知道他和这一切有关联,行政部的领导也没有多想,直接批准了。也就是说,在我离职之后的第二天,方景阳也走了。两个人,一个被漠视的程序员,一个不起眼的行政副经理,在同一天里先后离开了这家公司。命运安排我们在这条时间线上擦肩而过,却用一种最残酷的方式把我们连接在了一起。
警方根据我提供的监控录像和门禁数据,对方景阳展开了调查。调查结果在第二天下午反馈到了蒋维康那里,他又转发给了我。我看到那份调查结果的时候,整个人像是被什么东西击中了,坐在椅子上久久说不出话来。
方景阳的个人档案里,记录了一条他自己从未主动提起过的经历——六年前,他在一家科技公司的信息安全部门工作过两年。那家科技公司的名字,我太熟悉了。那正是蒋维康口中那家“和我们在某些领域存在直接竞争关系”的公司,也就是顾婉清泄露数据的那个外部邮箱的归属方。
也就是说,方景阳从一开始就是竞争对手安插在我们公司的卧底。他在行政部潜伏了三年多,利用职务之便收集信息、寻找破绽,最终在Aegis项目最关键的交付节点前夕,配合外部黑客“Guest_Aegis_07”的入侵行动,完成了最后一击——在窃取代码之后,销毁原件,让公司彻底失去翻盘的可能。
而陈伟军,那个在项目中犹豫、动摇、想给自己留后路的人,大概是在某个时刻察觉到了什么。也许他发现了方景阳的真实身份,也许他察觉到了顾婉清的可疑,也许他只是站在那条灰色的边界线上,不知道到底该往哪边走。但不管怎样,他挡了某些人的路,所以他必须消失。
案子到这里,轮廓已经大致清晰了。方景阳和那个神秘的黑客“Guest_Aegis_07”是外部入侵的执行者,顾婉清是被利用的棋子或者自愿的内应,陈伟军则是那个在关键位置上被清除的障碍。至于周彦和项目组里其他的普通工程师,他们或许知情,或许不知情,但在这场精心策划的阴谋中,他们的角色充其量只是被蒙在鼓里的观众。
但我心里还有一个疑问没有解开。这个疑问像一根鱼刺卡在喉咙里,不大不小,却让我每次吞咽都觉得不舒服。
方景阳能够拿到陈伟军的门禁卡和账号密码,这需要极其密切的接触和长期的准备。但在公司里,陈伟军和方景阳之间几乎没有任何交集——一个是高高在上的技术总监,一个是行政部的副经理,他们的工作半径里几乎没有重叠的地方。方景阳是怎么拿到这些东西的?一定有人帮他。或者说,一定有一个比顾婉清更接近陈伟军的人,充当了方景阳和陈伟军之间的连接点。
这个人是谁?
我重新把陈伟军的人际关系网摊开来,一个一个地排查。他的直接下属里,除了周彦之外,还有几个跟他走得比较近的人。其中有一个叫苏敏的女助理,是陈伟军的行政秘书,入职不到一年,主要负责陈伟军的日程安排和内部文件流转。她和方景阳同属行政序列,平时因为工作原因有频繁的接触。如果方景阳需要一个能接触到陈伟军私人物品的内应,苏敏是最合适的人选。
我把苏敏叫到了我办公室。她大概二十五六岁,长得清清秀秀的,说话轻声细语,看起来很老实本分。我问了她几个常规的问题——陈伟军出事当天的日程安排、他最后接触过哪些人、他有没有什么异常的表现。她对答如流,滴水不漏,每一个回答都和我掌握的信息对得上。
就在我几乎要排除她的嫌疑的时候,我注意到了一个极其微小的细节。
她的手腕上戴着一块智能手表。那块手表的表盘上,显示的不是时间,而是一个我不认识的图形界面。图形的样式很特别,是两条缠绕在一起的曲线,中间有一个小小的菱形标记。我在老邱提供的那份安全分析报告里见过完全一样的图标——那是“Guest_Aegis_07”使用的那个隐藏服务器的登录界面图标。
我的心跳在那一瞬间几乎停止了。但我没有让她看出任何异样。我若无其事地结束了谈话,微笑着把她送出了办公室。门关上的那一刻,我的手心全是汗。
苏敏是内鬼。或者至少,她和那个外部黑客之间存在某种直接联系。而方景阳,也许只是她用来执行物理层面操作的另一个棋子。甚至有可能,苏敏才是整条链条上最核心的那个环节。
我把这个发现同步给了蒋维康。他听完之后,沉默了很久,然后用一种我从未听过的、极轻的声音说了一句:“苏敏的入职推荐人,是方景阳。”
方景阳推荐了苏敏,苏敏成了陈伟军的助理,然后陈伟军的账号密码和门禁卡落到了方景阳手里,方景阳在苏敏的掩护下潜入了陈伟军的办公室,删除了代码。而陈伟军,也许是在某个深夜加班的时候,无意中撞破了苏敏和方景阳的秘密,也许是在和顾婉清的那场博弈中触动了某些人的利益,总之,他变成了那个必须被抹去的人。
这张拼图,终于完整了。
但拼图的完整,并没有给我带来丝毫的满足感。恰恰相反,当所有的黑暗都暴露在阳光下的那一刻,我感受到的只有一种彻骨的寒意。这些我朝夕相处了几年的人,每一个都戴着面具,每一个都在演戏。方景阳的笑容背后藏着刀,苏敏的温顺背后藏着毒,顾婉清的合作背后藏着背叛,而陈伟军——那个我一直以为他只是看不起我的陈伟军,他背后的故事,竟然比所有人加起来都要复杂。
我在那栋灰色老楼的办公室里待到了凌晨。窗外下起了雨,雨点打在玻璃上,发出密集而沉闷的声响。我坐在椅子上,看着桌上那摊散乱的资料和那张被画得密密麻麻的人物关系图,忽然觉得非常累,那种累不是身体上的,而是精神上的,是从骨头缝里渗出来的疲惫。
我拿出手机,翻到周彦的微信,给他发了一条消息:“你说的那种不对劲的感觉,我现在也感觉到了。”
他没有回。大概是已经睡了。
我把手机放在桌上,闭上眼睛,试图让自己放空。但脑子里翻来覆去地浮现出一个画面——陈伟军在我离职那天看我的眼神。那个眼神里,我一直以为只有漠视和不屑。但此刻,在我了解了背后的这一切之后,我忽然觉得那个眼神里,也许还藏着别的东西。
他签完字之后,抬起头看了我一眼。那个画面在我的记忆里被重新调取出来,放大,回放。他的眼睛里,除了疲惫之外,是不是还有一丝隐隐的——羡慕?
他是不是在羡慕我,羡慕我可以干干净净地离开,不用再被卷在这团见不得光的泥沼里?
第五章 代码是我写的
警方在接到我们提供的完整证据链之后,迅速展开了收网行动。方景阳在邻市的一个出租屋里被抓获,他使用假身份证租了房子,但没能逃过遍布街头的天网监控。苏敏在公司被便衣带走,她倒是出奇的平静,像是早就知道这一天会来,配合警方的态度熟练得让旁观者感到心寒。只有顾婉清跑得快,香港警方反馈说她已经在收网前一天经澳门转机去了东南亚某国,具体的引渡事宜还需要通过国际刑警的渠道来推进。
蒋维康把这个消息告诉我的时候,我正坐在那间安全屋里,对着雅典娜引擎被删除后留下的空白代码仓库发呆。人抓住了,案子破了,但那个被删除的代码仓库依然是一个空壳。方景阳在被审讯时承认了自己删除代码的行为,但他根本不懂技术,删除就是纯粹的破坏——他用的命令是强制格式化并覆写磁盘,数据恢复的可能性几乎为零。警方从他那里缴获的几块移动硬盘里,只找到了一些零散的行政文件和报销凭证,没有任何代码备份。
“Guest_Aegis_07”呢?那个从外部窃取了全部代码的神秘黑客呢?老邱追踪到他的服务器时,那台服务器已经被远程抹除得干干净净,连操作系统的痕迹都找不到了。老邱说,这种手法他只在国际上最高级别的网络攻击案例中见过,对方不是普通的商业间谍,而是一个真正的高手。
这意味着,雅典娜引擎,那个被删除的核心代码,目前唯一的完整拷贝,落在了一个身份不明、动机不明、服务器都销毁了的神秘黑客手里。而我们只剩下十一天,十一天之后就是不可延期的交付节点。
蒋维康坐在我对面,把脸埋在手心里,很久没有抬头。他肩膀微微起伏的样子,让我想起了小时候看到过的、在工厂倒闭后蹲在路边抽烟的那些中年男人。只不过蒋维康穿的是高定西装,坐的是真皮转椅,身边围绕着价值数亿的资产和上千号员工的饭碗。但这一刻,他看起来和那些男人没有任何区别。
“林屿,”他终于抬起头,眼睛红红的,但没有泪,“重建需要多长时间?”
我没有立刻回答。这个问题的答案不是一个小数字。我用了两天时间通读了雅典娜引擎的全部技术文档和残留的设计图纸,对这个项目的工作量心里大致有数。雅典娜引擎不是一个普通的软件模块,它的底层架构涉及到一种全新的算法范式,我甚至在某些数学推导的注释里看到了手写的、尚未正式发表的公式。这个东西的复杂程度,不亚于重新造一个轮子——而且是在时间机器已经启动倒计时的情况下。
“如果原班人马全力投入的话,”我谨慎地估算着,“核心部分重新搭建框架,训练初步可用的模型,最少也需要三个月。如果要达到交付文档里要求的精度指标,半年都不一定够。”
蒋维康脸上的血色一瞬间褪得干干净净。
“但是如果换一个思路,”我顿了顿,“也许用不了那么久。”
“什么思路?”
我没有回答他,而是打开了自己的笔记本电脑,调出了一个私人的Git仓库。这个仓库不在公司的任何服务器上,是纯粹的个人项目,和Aegis项目没有任何关联。但里面存放着的东西,足以让此刻的蒋维康跌破眼镜。
那是一个算法框架的完整实现。它的架构思路和雅典娜引擎如出一辙,甚至在几个关键的优化路径上,比我看过的雅典娜引擎残留文档里的方案更加简洁高效。这个框架是我在去年冬天开始写的,起因是一次技术沙龙上听到的一个前沿理论,我觉得很有意思,就自己搭了一个原型来验证。当时只是单纯的兴趣驱动,没有任何功利目的,写完之后就一直躺在我的私人仓库里吃灰,连我自己都快要忘了它的存在。
但现在,当我把它和雅典娜引擎的残骸放在一起对照的时候,我惊讶地发现,这两套东西的相似度,高得令人发指。它们就像是同一个娘胎里出来的双胞胎,只不过一个被精心喂养长大,另一个被遗忘在角落里野蛮生长。
雅典娜引擎的核心,是一套被称为“动态认知映射”的算法。这套算法的本质,是通过对大规模非结构化数据的实时处理,构建出一张不断自我更新的关联图谱,从而实现对复杂系统中隐藏模式的识别和预判。我理解得越深,就越觉得心惊肉跳——这根本不是什么普通的商业算法,而是一套可以被用于情报分析、行为预判甚至舆论操控的底层基础设施。
而我在自己的私人仓库里搭建的那个原型,恰好也在做同样的事情。只不过我的实现方式是纯数学驱动的,没有依赖任何外部数据,所以它更像一个空转的引擎,有完整的结构和能力,但没有被注入任何燃料。
“这个东西,”蒋维康盯着屏幕上的代码,声音有些发抖,“是你什么时候写的?”
“去年冬天,断断续续写了三个多月。”我说,“周彦有一次在我工位上看到了这个仓库的地址,我猜他后来跟陈伟军提过。陈伟军从来没有问过我这件事,但他应该知道。”
蒋维康闭上了眼睛,深深地吸了一口气。他再睁开眼的时候,看我的眼神已经完全不同了。那种眼神里掺杂着震惊、懊悔,还有某种类似于抓住救命稻草的急切。
“林屿,陈伟军犯了一个巨大的错误。”他说,“他知道你手里有这个框架,但他从头到尾没有把你纳入Aegis项目。他不是不知道你的能力,他是害怕你的能力。他害怕一旦你进了项目组,以你的技术嗅觉,迟早会发现这个项目的真实用途。他不是看不起你——他是不敢看你。”
这句话落在我心上,分量很重。我一直以为陈伟军对我漠不关心是因为我不够好,可现在有人告诉我,恰恰是因为我太好了,好到让他害怕。这个翻转来得太迟了,迟到他已经在冰冷的停尸房里了,我已经签完离职手续了,一切都已经来不及了。
但也许,还来得及救另一些东西。
“用我的框架去适配Aegis的上层模块,理论上是可行的。”我把话题拉回到技术层面,“因为它们底层的逻辑是同源的。最大的工作量在于接口适配和性能调优,这部分我闭着眼睛都能做。但问题的关键是数据——雅典娜引擎之所以叫‘引擎’,是因为它需要海量的训练数据来驱动。没有数据,这个引擎就是一个空壳子。”
蒋维康的眼睛亮了起来:“数据还在。被删除的只是代码本身和训练好的模型文件,但原始的训练数据集和标注数据都存储在另一台独立的服务器上,没有被波及。方景阳不懂技术,他不知道那些数据才是真正的金矿。”
我的心猛地跳了一下。数据还在。这意味着,只要有一个人能够把那套空转的引擎和这批数据对接起来,重新跑一遍训练流程,雅典娜引擎就有可能在交付节点之前重新站起来。虽然时间紧到了近乎荒谬的地步,但从技术可行性上来说,这不是天方夜谭。
但这个世界上,能同时做到这两件事的人,不会超过一只手的手指头数量。他要深刻理解那套引擎的底层数学原理,要熟悉Aegis上层的业务逻辑和接口规范,要懂得如何在极限时间内调度计算资源、优化训练策略、压榨每一块GPU的每一丝算力。而最关键的,是他必须对数据本身有足够的敏感度,知道哪些数据是噪声、哪些数据是黄金、哪些数据是被刻意污染过的陷阱。
全公司上下,原本最适合做这件事的人是陈伟军。但陈伟军死了。
第二适合的人,是周彦。但周彦只了解上层应用,对底层引擎的数学架构并不精通。
而第三个人,就是那个被陈伟军从头到尾排除在项目之外,却偏偏在暗地里写出了一套同源引擎的我。
命运在这一刻露出了一种近乎刻薄的幽默感。它让我在公司里被忽视了四年,让我在最需要认可的时候被冷漠对待,让我提离职的时候被十分钟批完、连一句挽留都没有。然后它把所有牌掀开,告诉所有人,你们看不起的那个林屿,他手里握着唯一的一把钥匙。
“我需要周彦。”我对蒋维康说,“我需要他和Aegis项目组剩下的技术人员全力配合我。十天时间,所有人听我调度,所有计算资源优先保障。我不管什么保密协议、竞业限制,到了这个节点,所有的规矩都给我让路。”
蒋维康没有犹豫,点了头。
“还有,”我盯着他的眼睛,“我要知道我到底在为什么而工作。你说Aegis的客户不是普通的商业公司。那他们是谁?”
蒋维康沉默了很久。窗外的雨不知道什么时候停了,玻璃上残留的水痕把外面的灯光割裂成无数细碎的光斑。他最终从保险柜里拿出了一份文件,放在桌上,往我这边推了半寸。文件封面上印着一个我从未见过的徽章图案,下面是一行小字,字体是庄重的宋体,用的是红色油墨。
我看了那行字,心脏像被人攥住了一样,猛地收紧了。
“原来如此。”我听见自己的声音,平静得不像是自己的。
蒋维康没有说话,只是看着我,目光沉重而恳切。我深吸了一口气,把那封文件推了回去,然后站起来,拉开了办公室的门。
走廊里,老邱正在打电话协调服务器资源,他的大嗓门隔着半条走廊都能听到。再远一点的地方,周彦靠在墙上,手里端着一杯咖啡,看到我出来,冲我点了点头。他的眼神里有期待,有忐忑,还有一种只有技术人员之间才能读懂的东西——那种被逼到绝境之后反而生出的、近乎亢奋的战意。
“怎么样?”周彦问。
“准备通宵。”我说,“把项目组剩下的人全部叫到作战室来。我要在十分钟之内看到所有人的状态报告——谁还能写代码,谁还能调参,谁还能跑数据管道。不管你们之前负责的是哪个模块,从今天开始,所有人听我的。”
周彦愣了一下,然后他笑了一下,是那种如释重负的笑。“你知道吗,林屿,我等你这句话等了两年了。”
那天晚上,Aegis项目组的作战室里亮了一整夜的灯。我从自己私人仓库里把那个尘封了将近一年的算法框架拉了出来,一行一行地重新审视、重新打磨。它是我写的,但毕竟已经过了一年的时间,很多细节需要重新熟悉。好在代码的习惯是不会骗人的,每一行注释、每一个变量命名、每一处架构选择,都带着我自己的烙印。我读自己的代码,就像读自己一年前写的日记,陌生感只在最初的几分钟里停留,很快就被一种深入骨髓的熟悉感所取代。
周彦带着几个核心开发开始做上层应用的接口适配。他的悟性确实很高,我只花了两个小时给他讲解底层引擎的原理,他就已经能独立地把第一组接口跑通了。老邱调集了公司所有能调集的GPU资源,关掉了其他项目组的计算任务,把整个集群的火力全部集中到了雅典娜引擎的重建上。
凌晨三点的时候,我去茶水间接咖啡,在走廊里遇到了蒋维康。他没有走,一直待在作战室旁边的小会议室里,偶尔出来看一眼进度,然后又退回去。他看到我的时候,欲言又止,最后只是拍了拍我的肩膀,说了一句:“辛苦。”
我端了杯咖啡回到工位上,周彦凑过来,压低声音问我:“他都跟你说了?项目的真正用途?”
我点了点头。
“你现在知道了,会不会觉得——”他斟酌着措辞,“觉得不太舒服?”
我喝了一口咖啡,看着屏幕上正在飞速滚动的编译日志,想了好一会儿才回答他:“你知道我为什么写那个框架吗?”
他摇了摇头。
“因为那个算法思路太漂亮了。”我说,“它本身是中性的,就像一把刀。你可以用它来杀人,也可以用它来做手术。而我写它的时候,只是因为被那个数学结构本身的美感打动了。你问我舒不舒服——说真的,我不舒服。但如果这个引擎必须要存在,那我宁愿它是从我手里诞生的,因为至少我可以保证,它不会比落在别人手里更糟糕。”
周彦沉默了一会儿,然后重重地点了点头,坐回了自己的工位上,重新戴上了耳机。
接下来的七天,是我人生中最漫长也最密集的七天。每天的工作时间超过了十八个小时,实在撑不住了就在旁边的折叠床上躺一两个小时,起来用冷水洗把脸继续干。代码在疯狂地生长,模型在一轮又一轮地训练,失败、调参、再失败、再调参——整个过程就像是在一条看不见尽头的隧道里摸索,每一步都可能踩空,但每一步也都离出口更近了一点。
到了第八天的凌晨,第一版完整训练的模型终于跑完了最后一轮迭代。我看着屏幕上弹出的评估结果,手指悬在键盘上方,迟迟没有按下去。周围的人都围了过来,周彦、老邱、还有几个眼睛里布满血丝但依然撑着没走的技术骨干。作战室里安静得只剩下服务器风扇的嗡嗡声,所有人都盯着我的屏幕。
评估结果出来了。各项指标全部达到了交付文档的要求,有几项甚至超出了原版雅典娜引擎的性能记录。
沉默持续了大约三秒钟,然后作战室里爆发出了一阵沙哑的、压抑许久的欢呼。周彦把他的耳机摘下来往桌上一扔,仰头靠在椅背上,长长地吐了一口气。老邱摘下眼镜擦了擦眼睛,也不知道擦的是汗还是别的什么。
我没有欢呼。我只是靠在椅背上,盯着屏幕上那些密密麻麻的数字,心里涌上来一种复杂到无法形容的情绪。这个引擎是我写的,但又不完全是我写的。它是在我的框架和周彦他们的上层模块、老邱调度的计算资源、以及整个团队七天七夜不眠不休的血汗共同浇灌下长出来的。它和我一年前在深夜里出于兴趣写下的那个原型已经有了天壤之别,但它的灵魂,那个驱动它运转的最底层的数学灵魂,确确实实是我赋予的。
那个陈伟军一直看不到、或者说不敢看到的我,此刻就凝结在这几百万行代码里。
蒋维康不知道什么时候走了进来,他站在人群后面,没有出声,只是安静地看着投影幕布上的评估结果。我转过头,正好对上他的目光。在那张疲惫到极致却依然保持着某种尊严的脸上,我看到了一种很奇怪的表情——那不是喜悦,而是一种深深的、几乎带着痛苦的释然。
他冲我点了点头,没有说谢谢。也许他也知道,此时此刻,任何感谢的话都太轻了。
方景阳的案子在第九天有了新的进展。警方在审讯过程中,从他的一处藏匿点里找到了一台加密笔记本电脑,里面的数据技术科正在破解。那个神秘黑客“Guest_Aegis_07”的身份,据说也有了初步的线索,但因为涉及到跨境的网络犯罪调查,具体细节暂时不能透露。
顾婉清仍然在逃。有消息说她出现在了东南亚某个没有引渡条约的国家的海边小镇上,但无法证实。周彦有一天吃饭的时候跟我提了一句,说顾婉清其实也挺可怜的,被陈伟军拉上了贼船,又被人当枪使,最后两头都不讨好。我没有接话。同情是一种奢侈品,在雅典娜引擎还没有真正交付之前,我没有资格消费它。
第十天,交付前最后一轮压力测试。我把所有的测试用例重新跑了一遍,逐个检查边界条件和异常处理。模型的表现很稳定,稳定得像一块被反复煅烧过的钢板,敲上去只听到沉闷而结实的回响。
测试全部通过之后,我给蒋维康发了一条消息:“可以交付了。”
他回了一条:“收到。”
然后他紧接着又发了一条:“明天交付完成之后,我有件事要告诉你。关于陈伟军。”
我盯着屏幕上那行字,心里忽然涌上来一种说不清的感觉。陈伟军。这个名字在这十天里被无数次提起,但每一次提起,都像在触碰一个还没有愈合的伤口。我以为自己已经不在乎了,但蒋维康的这条消息告诉我,关于这个人,还有一些我至今不知道的东西。
第六章 最后的真相
交付的日期定在十二月二十一号,一个干燥而寒冷的冬日清晨。地点选在了城西那栋灰色老楼的顶楼会议室,那间会议室我之前从来没去过,据说只有接待最高级别客户的时候才会启用。会议室的门禁是独立的,需要虹膜验证加动态口令,安保级别比Aegis项目组所在的楼层还要高出整整一级。
蒋维康那天穿了一身深灰色的西装,衬衣熨得一丝褶皱都没有,胡须刮得干干净净,头发也打理得纹丝不乱。他站在会议室门口迎接客户方代表的时候,整个人的状态和十一天前我在同样这栋楼里见到他时判若两人。唯一没有变的,是他眼底深处那一层无论怎么休息都消不掉的倦意。
客户方来了三个人,一个穿着军便装的中年男人,两个年轻的技术军官。他们没有报名字,蒋维康也没有介绍,只是毕恭毕敬地称对方为“李主任”。那位李主任看起来五十出头,头发花白,眼神沉稳而锐利,握手的时候力度恰到好处,不轻不重,却让人莫名地感到一种压迫感。
我作为技术负责人坐在蒋维康的右手边,面前摆着一台没有联网的笔记本电脑,里面装着重新构建完成并通过测试的雅典娜引擎全部代码和训练好的模型文件。周彦坐在我旁边,负责演示上层的应用接口。老邱坐在角落里,面前也摆着电脑,负责监控整个交付过程中的网络安全。
交付过程持续了将近三个小时。李主任那边的技术军官问得非常细,从底层算法原理到上层接口规范,从训练数据的来源和标注标准到模型的鲁棒性测试结果,每一个问题都精准地打在技术核心上。我一一作答,没有回避任何一个问题。当其中一个军官问到“这个版本和原版之间是否存在差异”的时候,我坦率地承认了重建的事实,并详细说明了重建过程中所做的优化和改进。
李主任听完我的陈述之后,沉默了一会儿,然后转头看向他的技术军官。那个军官把测试结果从头到尾又翻了一遍,最终合上了笔记本电脑,对李主任点了点头。
“可以验收。”军官说。
李主任没有笑,但他的表情松弛了一些,那是一种极淡极淡的、只有经历过无数次类似场面才能分辨出的满意。他站起来,蒋维康也站了起来,两个人握了握手,握了很久。
交付结束之后,客户方的人在安保人员的护送下带着数据离开了。会议室的门在他们身后合上的那一刻,我看到蒋维康整个人像是被抽掉了骨架一样,瘫坐在椅子上,双手捂住了脸。会议室里安静得只剩下空调出风口的嘶嘶声,我们几个人就那样各自坐着,谁都没有说话。
过了好一会儿,蒋维康把手放下来,睁开眼睛,看了看我,又看了看周彦和老邱,然后用一种干涩到几乎破碎的声音说了一句:“结束了。”
周彦靠在椅背上,仰头看着天花板,嘴唇动了动,但没发出声音。老邱摘下眼镜,用衬衫的下摆反复地擦着镜片,那个动作机械而笨拙,和他平时雷厉风行的风格完全不符。我则坐在原地,盯着面前那台已经完成使命的笔记本电脑,心里一片说不清是空还是满的寂静。
那天傍晚,蒋维康把我叫到了他的临时办公室。那间办公室里的陈设和十一天前一样,没有动过。阳光从西边的窗户斜斜地照进来,在地面上切出一道明亮的平行四边形。蒋维康坐在沙发上,面前的茶几上放着两杯茶,冒着淡淡的热气。
“坐。”他指了指对面的沙发。
我坐下了。他沉默了一会儿,然后从茶几下方的抽屉里拿出一个牛皮纸信封,放在桌上,往我这边推了推。信封不厚,但也不薄,里面装着的东西从外面摸起来,像是一叠打印纸。
“这是你入职那年填的员工信息表复印件,”他说,“还有几份你在公司期间的工作评估记录。这些本来都该销毁了,但我留了一份。你看最后一页。”
我把信封里的东西抽出来,翻到最后一页。那是一份手写的工作评估,评估人是陈伟军,日期是我入职满一年的时候。评估表上密密麻麻写满了字,笔迹潦草却有力,和陈伟军签我离职信时的那种潦草截然不同。我一行一行地往下读,每读一行,心脏就往下沉一点。
陈伟军在评估里写下了这样的评语——
“林屿是我带过的工程师中,对底层技术原理理解最深的一个。他的技术直觉和架构能力,超越了他这个年龄段应有的水平。在某些关键算法的理解深度上,甚至超过了我自己。此子若得良机,前途不可限量。”
接下来的几行,他用红笔画了一道横线,下面补了一段小字:“但也正因如此,我决定暂时不将他纳入核心项目组。Aegis项目涉密层级太高,项目本身的性质和执行过程中的某些决策,我个人持保留意见。在没有完全搞清楚事情会走向何方之前,我不想把一个这样干净的年轻人卷进来。”
干净的年轻人。这几个字像一把锤子,一下一下地砸在我的胸口。我一直以为他认为我不够格,原来恰恰相反,他之所以把我排除在外,是因为他觉得我太干净了,干净到他不忍心把我往那潭浑水里扔。
“他知道Aegis有问题。”蒋维康的声音从对面传来,低沉而缓慢,“他从项目启动的第一年就开始怀疑了。但他签了保密协议,级别高到连跟我都不能明说。他一直想用自己的方式在内部扭转方向,所以才会有那些拖延、那些争吵、那些所谓的‘固执’。他拒绝在交付文件上签字,不是因为技术问题,而是因为他不愿意把手里的东西交给不该交的人。”
“那他为什么最后还是被杀了?”我抬起头,声音有些发抖。
“因为对方等不下去了。”蒋维康闭上眼睛,“顾婉清一直在催他,方景阳和苏敏一直在暗中施压。而他——他大概终于下定了决心,准备在最后一次和客户方的沟通会上,正式提出对项目伦理合规性的质疑。你知道这意味着什么吗?他要在交付前的最后关头,把整件事掀翻。”
窗外的天色已经暗了下来,办公室里没有开灯,暮色像墨水一样从墙角洇上来,把蒋维康的半张脸藏在阴影里。他的声音在昏暗中显得格外清晰,每个字都像是从牙缝里挤出来的:“对方当然不会让他这么干。所以他必须死,而且必须死得像是和商业竞争相关,和内部矛盾相关,和其他任何理由相关,就是不能和真相相关。这样才不会有人去追问,这个项目到底该不该存在。”
我握着那份评估表的手,控制不住地抖了起来。四年零七个月。我一直活在一个错误的判断里,我以为他不认可我,我以为他看不起我,我以为他批准我离职时的冷漠就是他对我全部的评价。可到头来,他不是看不起我——他是在保护我。他冷漠的背后,是用他自己的方式给我划出了一片安全区,让我可以在他的羽翼之外干干净净地活着,直到他自己再也撑不住的那一天。
“他签我离职信的时候,”我的嗓子像是被砂纸磨过,“他是不是已经知道了会有人对他下手?”
蒋维康没有回答。他只是从抽屉里又拿出了一个东西,放在茶几上。那是一张从工作笔记本上撕下来的纸,对折着,纸的边缘有些卷,像被人反复摩挲过。我打开那张纸,上面只有一行字,是陈伟军的笔迹,日期是他签我离职信的当天。
“老蒋,帮我看住林屿。这小子什么都不知道,别让他卷进来。”
旁边还有一行更小的字,像是后来补上去的,笔迹急促而潦草,墨迹都洇开了——
“可惜没早点把他拉进来。他对雅典娜底层架构的理解,比我预想的要深得多。如果早一点给他看全貌,也许一切都不会走到这一步。”
我捏着那张纸,指节用力到发白。窗外的天彻底黑了,城市的灯光从玻璃外透进来,在办公室的墙壁上投下斑驳的光影。我坐在那里,感觉自己的前半生像一部被按了快退的电影,那些曾经让我耿耿于怀的画面,此刻被逐一重新上色,变成了另一副完全不同的模样。
他不是看不起我。
他只是想保护我。
而我,从头到尾,连一句谢谢都没来得及对他说。
从蒋维康办公室出来之后,我一个人在那栋灰色老楼的天台上站了很久。冬天的夜风又干又冷,吹在脸上像刀片划过去,但我一点也没觉得冷。胸口那个堵了四年多的东西,此刻被一种更沉重也更温热的东西取代了。那是一种迟到了太久的理解,一份永远无法当面传达的感激,以及一种深深的、几乎要将人吞噬的遗憾。
陈伟军死的那天下午,他坐在那间办公室里,用那种近乎漠视的眼神看着我,跟我说“行,我批了”。我一直以为那个眼神是轻视。现在我才明白,那个眼神,或许是一个已经预感到自己结局的人,在送走最后一个自己在意的人时,竭力维持的平静。
他把我看得很清楚,比我把自己看得清楚得多。他知道我迟早会发光,所以他在他最黑暗的时刻,选择把我推到了光里。
我掏出手机,翻到通讯录里陈伟军的名字。那个号码我再也不会打过去了。我盯着那串数字看了很久,然后把手机收起来,对着夜空深深地鞠了一躬。
天台上只有我一个人,风很大,没有人看见。但我知道,他在某个我看不见的地方,大概会看到。
三天之后,我接到了方警官的电话,说方景阳和苏敏的案子正式移交检察院了,顾婉清的国际刑警红色通缉令也已经发出,虽然抓捕尚需时日,但至少她将终身活在引渡条约的阴影之下。至于那个神秘的黑客“Guest_Aegis_07”,警方的技术部门在方景阳那台加密电脑里找到了关键证据,确认其真实身份是境外某组织雇佣的职业黑客,目前已经通过相关渠道启动了跨境协作机制。
“林先生,”方警官在电话最后说,“陈伟军家属托我跟你说一声谢谢。他们说,如果不是你把真相挖出来,老陈可能到死都背着黑锅。”
我握着电话,说不出话。
过了很久,我说了一句:“应该的。”
挂了电话之后,我坐在出租屋那张摇摇晃晃的沙发上,看着天花板上那块还没有修好的水渍。楼上的漏水问题依然没有解决,物业依然在互相推诿。但不知道为什么,我忽然觉得那块水渍看起来不再像一张嘲弄的脸了。它更像是一张模糊的地图,画着某条通往未知的路。
手机震动了一下,是蒋维康发来的消息:“报酬的事,你什么时候方便来谈。”
我正想回复,他又发来了一条:“另外,董事会今早通过了决议,准备成立一个独立的技术伦理委员会,负责审查所有涉密项目的合规性。委员会的主任人选,董事会有两个人选在竞争。但我的提议是——你来当。”
我盯着屏幕上的那行字,愣了很久,然后打了一行字发过去:“我考虑一下。”
蒋维康回得很快:“不急。反正你现在也不是公司的人,不用打卡。”
我看着他最后那四个字,忍不住弯了一下嘴角。是的,我不用打卡了。我辞职了,离职审批十分钟就批了。但我帮他们救了项目,揪出了内鬼,重建了引擎,还给了一个死去的人清白。这些事情,没有一件写在岗位职责里。
又过了大概一个星期,周彦约我出来吃火锅。我们坐在一家闹哄哄的重庆老火锅店里,红油锅底咕嘟咕嘟地冒着泡,热气把对面的脸都熏得有些模糊。周彦把毛肚在锅里七上八下地涮着,忽然问了我一句:“你知道吗,蒋总其实一开始就知道你对雅典娜底层架构的理解很深。他是故意等到我离职谈判的时候,才跟我说让我无论如何要把你推荐上去的。”
我夹着牛肉的手停在了半空中:“什么意思?”
“他早就想把你拉进Aegis了,但陈总监一直拦着。陈总监死了之后,蒋总第一个想到的就是你。他知道你在陈总监的保护圈之外,所以你是最干净的。但他需要一个让你名正言顺介入的理由,所以他放任营销号把那件事炒起来,然后以‘外部顾问’的名义请你回来。”周彦把毛肚塞进嘴里,含含糊糊地说,“说白了,从头到尾,你能进来救场,是陈总监用命换的。”
我把牛肉放进锅里,看着它在红油里翻滚着变了颜色。锅底的热气冲上来,糊住了我的眼镜片,面前的一切都变得朦朦胧胧的。我摘下眼镜,用纸巾慢慢地擦着,没有说话。
火锅店里热闹极了,旁边那桌大概在搞团建,一群人正在起哄让一个穿格子衫的小伙子唱歌。小伙子被推到了椅子上,涨红着脸,五音不全地吼着《海阔天空》。所有人都在笑,笑得前仰后合。那歌声混着火锅的热气,在冬夜里蒸腾着往上飘,像是永远不会落地似的。
周彦又问了我一个问题:“你想好了吗?那个伦理委员会主任,当还是不当?”
我把眼镜戴上,看了一眼窗外。街对面的写字楼灯火通明,每一扇亮着灯的窗户里,都有一个正在加班的人。他们中的某一个,也许正在被忽视,正在被低估,正在经历我以为自己经历过的那种不被看见的痛苦。但我现在知道了,不被看见,有时候不是因为你不够亮,而是因为有人在用自己的影子替你挡着光。
等那个影子消失了,你的光才会被所有人看见。
但不是所有的影子,都应该用这种方式消失。
“当。”我端起啤酒杯,和周彦碰了一下,“我要让陈伟军想保护的东西,以后不需要用命去保护。”
周彦愣住了。过了几秒,他忽然眼眶一红,但很快就用大笑掩饰了过去。他把杯子里的啤酒一饮而尽,瓶子重重地磕在桌上,然后冲着旁边那桌唱歌的小伙子喊了一嗓子:“哥们儿,下一首《光辉岁月》,我跟你合唱!”
那天晚上我们喝了多少酒,我已经记不清了。我只记得最后周彦趴在桌上睡着了,手里还攥着一根筷子当麦克风。我把他架出火锅店的时候,外面不知道什么时候飘起了雪。这座城市已经好几年没下过雪了,细小的雪花落在车窗上、落在路灯的光晕里、落在深夜空荡荡的街道上,悄无声息。
我把周彦塞进出租车,跟司机报了地址,然后自己沿着马路慢慢地往回走。雪落在我的头发上、睫毛上,很快就化了,凉凉的。
口袋里的手机震了一下。我掏出来一看,是蒋维康发来的。
“下雪了。”
我看着这三个字,站在空无一人的街头,忽然就笑了。我抬头看着漫天细碎的白色光点从黑暗的天空中飘下来,深深吸了一口冰凉而新鲜的空气。
陈伟军,你看到了吗?你保护过的那个人,他活成了你希望的样子。
尾声
三个月后,春天。
独立技术伦理委员会的成立仪式在城西那栋灰色老楼的顶楼会议室举行。和三个月前雅典娜引擎交付时的氛围截然不同,这一次会议室里摆上了鲜花,铺上了浅灰色的桌布,还在角落里放了一台咖啡机和几盘切好的水果。来的人不算多,除了蒋维康和公司几位核心高管之外,还有几家科技媒体的记者,以及两位来自高校的特邀顾问。
我坐在委员会主任的位置上,面前放着一份刚刚装订好的、足有半寸厚的委员会章程草案。这份章程是我带着团队熬了两个月写出来的,涵盖了项目立项前的伦理评估、执行过程中的动态监督、以及发现问题后的申诉和否决机制。里面引用的技术伦理框架,有不少是陈伟军当年在Aegis项目内部备忘录里提出过但未被采纳的方案。我在每一处引用他的地方,都在注释里标注了他的名字。
陈伟军,这三个字,不该被埋没。
蒋维康在致辞里说了很多场面话,什么“企业的社会责任”、什么“科技向善”、什么“以合规促发展”之类的,都是总裁该说的话。但他说到最后一句的时候,忽然脱稿了,抬头看了看我,说了一句没有被写进新闻通稿里的话。
“我们曾经失去了一个最好的人,”他说,声音不大,但会议室里安静得连针掉在地上都能听见,“因为他想做对的事。今天站在这里的人,不会再让那样的事情发生第二次。”
底下没有人鼓掌,但所有人都坐直了身体。
成立仪式结束之后,周彦端了两杯咖啡走过来,递给我一杯。他最近瘦了一些,但精神头很好,接手了研发二部总监的位置之后,整个人像是变了一个人,话变多了,笑容也多了。他说这叫“被迫成长的阵痛”,我说他这叫“终于没人压着了”。
“你那离职证明还没去人力销掉?”他靠在窗边,端着咖啡冲我乐,“你现在这个身份,算前员工还是现顾问,还是什么别的职务?人力那边都不知道该怎么给你上社保了。”
“不上了,”我喝了口咖啡,“自己交。”
“大气。”
“不是大气,”我看着窗外春日里重新绿起来的银杏树,阳光穿过新生的叶片,在地上洒下细碎的光斑,“是我想清楚了。我不需要靠一家公司来定义我是谁。”
周彦沉默了一会儿,举起咖啡杯,跟我的杯子碰了一下:“敬自由。”
“敬陈伟军。”我说。
他愣了一下,然后郑重地点了点头,把杯子里的咖啡一饮而尽,像是在喝一杯很烈的酒。
那天下午,我一个人去了一趟城郊的公墓。陈伟军的墓碑是那种最简单朴素的款式,黑色的花岗岩上刻着他的名字和生卒年月,没有墓志铭,没有照片。他的家属说他生前就不喜欢拍照,更不喜欢把自己搞得花里胡哨的,所以一切都按最简单的来。
我在他墓前站了很久,把带来的一束白菊花放在碑座上。三月的风从山坡上吹过来,带着泥土和青草的味道,温柔得不像话。
“陈总,”我开口的时候,才发现自己的声音有些哑,“我到现在都不知道你抽不抽烟。以前在楼下抽烟的时候,你从来没下来过。周彦说你戒了很多年了,所以我就不给你点了。”
我从口袋里掏出一张叠得整整齐齐的纸,展开,压在花束下面。那张纸上面打印着的,是技术伦理委员会正式成立后的第一份伦理审查通过通知书。项目名称那一栏写着“Aegis(重构版)”,审查结论的那一栏盖着绿色的“通过”印章,审查人签名处,签着我的名字。
而申请书的最上方,在“申请人”那一栏里,我空着没写。只是在旁边用钢笔补了一行小字——
“本项申请由陈伟军先生于生前提出,由继任者代为完成。”
我把那份通知书压好,往后退了两步,对着墓碑鞠了三个躬。风把我额前的头发吹乱了,我直起腰的时候,忽然觉得眼眶有点热。我使劲眨了眨眼睛,抬头看了一眼头顶的天空。三月的天空蓝得不太真实,几朵白云懒洋洋地飘着,像是被谁随手涂抹上去的。
我转身往山下走的时候,手机在口袋里震了起来。我掏出来一看,是一个陌生号码,本地的。我犹豫了一下,还是接了。
“喂,是林屿先生吗?我是市公安局方警官。”
“方警官,您好。”
“有一个消息要通知您。”方警官的声音沉稳有力,带着一种职业特有的克制,“国际刑警那边昨晚发来通报,顾婉清在曼谷被捕了。引渡手续正在办理中,预计最快下个月就能回国。”
我站在半山腰的石阶上,握着手机,风吹起我外套的下摆,猎猎作响。山脚下城市的轮廓在春日的薄雾里若隐若现,那些高高低低的建筑像一片灰色的海,里面漂浮着无数人的悲欢离合。
“谢谢您,方警官。”我说。
挂掉电话之后,我回头望了一眼山上的方向。远远的,能看到那片墓园的轮廓,安静地卧在山坡上,被春天的新绿温柔地包围着。
陈伟军,顾婉清落网了。那个把你推向深渊的最后一块拼图,终于拼上了。
我转回头,沿着石阶一步一步地往下走。阳光从头顶的树冠缝隙里漏下来,斑斑点点地落在我的肩膀上,暖和得像一只无形的手。
走下去。前面还有路要走。而这一次,我不需要任何人的批准。
感谢阅读!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
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.