创作声明:本文为虚构创作,请勿与现实关联
年会上,全场灯光暗下来的时候,我知道要颁「年度最佳项目团队」了。
大屏幕上开始播宣传片——我写的那套推荐算法跑出来的效果图,被剪成了三十秒的炫酷动画,配着激昂的BGM。
台下四百多人鼓掌。
韩峰带着三个人走上台。
聚光灯扫过他们的脸——韩峰、苗苗、陆扬。
三个人,三个名字,三束追光。
台下第七排靠走廊的位置上,没有光。
那是我的座位。
韩峰接过话筒,西装袖口露出一截手表链,金属反光在大屏幕上一闪。
「感谢公司的认可。这个项目能成功,首先要感谢我们的产品经理苗苗,是她精准的需求洞察让产品方向从未偏航——」
掌声。
「要感谢我们的前端负责人陆扬,用户体验的每一个细节都凝聚着他的心血——」
掌声。
「更要感谢我们的合作伙伴——算法供应商智远科技的王总,没有他们的数据支持,这个项目不可能走到今天——」
掌声。
三个名字,说完了。
他举起奖杯,笑容对准了台下正中的摄影机位。
闪光灯亮了十几下。
我坐在第七排,鼓着掌。
掌心拍得很响。
手机在口袋里震了一下。
沈露发的微信,一个字:「?」
她在看公司的直播。
我没回。
年会结束后,我没参加聚餐。
我回到公司的办公楼——年会在酒店办的,公司就在隔壁两百米——刷卡进了楼,电梯到九楼,走到自己的工位,坐下。
整层楼都是黑的,只有应急灯亮着绿光。
我打开电脑,登录内网。
打开代码仓库的管理后台。
管理员列表里有四个名字——韩峰、陆扬、小贾,还有我。
我点进自己的账号,点了「移除管理员权限」。
系统弹出确认框:「确认移除?此操作将取消您对该仓库的管理权限,包括分支保护策略、合并审批权限及部署密钥管理。」
我点了确认。
页面刷新。
管理员列表变成了三个名字。
我关掉电脑,站起来。
走到工位旁的书架前,把那个U盘插进笔记本——里面存着一份文件,git日志导出的PDF,三百四十七页,记录着这个项目每一行核心代码的提交者和时间戳。
我把U盘拔下来,放进口袋。
然后关了灯,走了。
两周后的一个凌晨,我的手机被打爆了。
沈露在黑暗中被吵醒,看见屏幕上一连串的未接来电和微信消息,同一个名字反复弹出来——
韩峰。韩峰。韩峰。
她揉着眼睛,声音沙哑:「出什么事了?」
我把手机翻了个面,屏幕朝下。
「线上崩了。」
「那你不接?」
我看着天花板。
「我没有权限了。」
![]()
01
这个项目叫「灵犀」。
公司做了三年的一个智能推荐系统——用在自家App里的,首页内容推荐、搜索排序、个性化推送,所有跟「猜你喜欢」相关的东西,底层都跑的灵犀。
三年前项目启动的时候,团队一共五个人。韩峰是项目负责人,带着一个产品经理苗苗、一个前端陆扬、一个后端小贾,还有我。
我的title是「算法工程师」。
说是算法工程师,但项目初期什么都缺。推荐引擎没有现成的,要从零搭。数据管道没有,特征工程没有,模型训练的Pipeline没有——连GPU服务器都是我自己找IT部门申请的,前两个月用的是一台淘汰下来的旧机器,显卡风扇转起来像拖拉机。
韩峰不懂算法。
这句话没有贬义。他是做项目管理出身的,协调资源、推动进度、对上汇报,这些是他的活儿。他做得不错——至少在项目初期,他确实帮团队扛住了很多来自上面的压力,让我们有空间安心干活。
但算法这块,从第一行代码到最后一次模型迭代,都是我的。
不是我一个人写的——后来团队扩到十二个人,算法组有四个人,但架构是我定的,核心模型是我训练的,线上推理服务是我部署的,出了故障是我半夜爬起来修的。
代码仓库里的提交记录不会说谎。
三年,一万四千多次commit,其中我的名字出现了六千三百次——占总量的百分之四十五。
第二名是小贾,一千八百次。
韩峰的提交记录是零。
不是零次提交——他有一次在readme文件里改了个错别字,算一次。
但我从来没在意过这些数字。
代码这种东西,谁写的谁知道。跑得好就行了,名字写在commitmessage里还是写在PPT上,对服务器来说没区别。
直到那天年会。
02
年会的事,其实有预兆。
颁奖前一周,韩峰在组内开了个会,主题是「年会材料准备」。
他说公司那边要做宣传片,需要团队配合拍点素材。
拍摄那天来了个摄影团队,在我们办公区架了机器。
导演——姑且叫导演吧,是市场部的一个小姑娘——拿着脚本走了一圈,指了指韩峰的工位:「韩总,这个镜头需要你对着电脑屏幕,做出在分析数据的样子。」
韩峰点点头,坐在椅子上,打开了一个他根本不用的数据看板页面,做出思考的表情。
咔嚓,拍了三张。
然后导演走到苗苗那儿,让她拿着一叠打印的需求文档摆拍。
又走到陆扬那儿,让他对着前端页面指指点点。
最后导演扫了一圈,准备收工。
小贾凑过来问:「不拍我们这边了?」
导演翻了翻脚本:「后端和算法这块……韩总说不用了,主要拍产品和交互的部分就行,技术细节观众看不懂。」
小贾看了我一眼。
我没抬头,继续调我的模型参数。
「技术细节观众看不懂」——这句话没毛病。
推荐算法长什么样?是一堆数学公式、一串代码、一坨服务器日志。它不像前端页面那样可以截图,不像产品原型那样可以演示。
它的存在方式就是——你打开App,首页推给你的内容恰好是你想看的。
你不会想到有人在后面算了三年。
你只会觉得:这个App挺懂我的。
年会前三天,我在内网看到了宣传片的初剪版——市场部发的,征求意见。
三十秒的视频里,出现了韩峰的正脸特写、苗苗的侧面镜头、陆扬手指划过屏幕的慢动作。
推荐效果的动画占了十秒——App首页内容像瀑布一样刷新,每一条都精准命中用户兴趣。
画外音说:「灵犀推荐系统,让每一次打开都是惊喜。」
那十秒的动画效果,背后是我三年写的十二万行代码。
画面里没有我。
我关掉视频,继续干活。
03
年会当天,我穿了件黑色衬衫——不是刻意的,是衣柜里能找到的最体面的衣服。
沈露看我出门前照镜子,走过来帮我理了理领子。
「今天年会?」
「嗯。」
「听说你们项目要拿奖?」
「公司内网发了提名。」
「你上台吗?」
我犹豫了一下:「不确定。」
她看了我一眼,没再问。
但她拿出手机,打开了公司的直播链接——年会对外直播的,家属可以看。
「我看着你。」她笑了一下。
到了会场,我找到自己的座位——第七排靠走廊,名牌是提前放好的。
前三排是高管和VIP客户,中间几排是各部门负责人,我们项目组的人散落在第六排到第八排之间。
韩峰坐在第四排——项目负责人待遇,靠前。
苗苗和陆扬也在第四排。
我的名牌在第七排。
这个座位安排,其实已经说明了一些事情。
年会开始,各种节目,抽奖,领导讲话。两个小时之后,进入颁奖环节。
「年度最佳项目团队」是最后一个奖,也是最重的。
大屏幕上开始播宣传片,我看到了自己写的算法跑出来的效果——那些精准推荐的内容在屏幕上流动,漂亮极了。
然后韩峰站起来了。
他整了整西装,从第四排走向舞台。
苗苗跟在后面,陆扬第三个。
三个人上了台。
台上的追光灯照着他们,白得发亮。
台下暗了。
我坐在黑暗里,看着台上那三个人。
韩峰说感谢的时候,我竖着耳朵听——不是期待,是一种很奇怪的感觉,像在等一个注定不会来的人敲门。
他说了苗苗。
他说了陆扬。
他说了算法供应商智远科技的王总。
智远科技——他们给我们提供了一批训练数据,总共合作了两个月,收了我们八十万的服务费。
韩峰感谢了一个收了我们钱的外包公司,没有感谢坐在台下的我。
我把手放在扶手上,指尖按着冰凉的金属。
旁边的小贾侧过头来看我。
我冲他笑了一下。
他转回去了,没说话。
04
年会结束,大家往酒店宴会厅走。
我没跟过去。
我跟小贾说我胃不舒服,先回去了。
小贾说要不要一起走。
我说不用。
走出酒店大堂的时候,手机震了。
沈露的微信:「?」
一个问号,什么都没写。
她看了直播。她看到了韩峰上台、点名、感谢。她也看到了我的名字没有出现。
一个问号就够了。
我回了一个字:「嗯。」
她没再发。
我站在酒店门口,外面刮着风,一月份的北京,零下八度,风从脖子灌进去,冷得清醒。
然后我走回了公司。
九楼,漆黑一片。
我没开灯,借着应急灯的绿光坐到工位上,打开电脑。
屏幕亮起来的时候,桌面上的快捷方式排列整齐——代码编辑器、终端、数据库管理工具、代码仓库。
我打开了代码仓库的管理后台。
灵犀的仓库有一百二十七个分支,核心的有三个——主分支、预发分支、线上分支。这三个分支上了保护策略,任何代码合入都需要管理员审批。
管理员有四个人:韩峰、陆扬、小贾、我。
韩峰有权限,是因为他是项目负责人。他从来不审代码——他看不懂。每次有合入请求需要管理员通过,他都直接点「approve」,因为他信我已经看过了。
陆扬有权限,是前端部分的需要。他只管前端仓库,后端和算法的代码他不碰。
小贾有权限,但他只负责后端接口,算法核心模块他从来没动过——不是不让他动,是复杂度太高,改一行可能崩一片。
实际上,灵犀的核心算法模块——推荐引擎、特征工程、模型训练Pipeline、线上推理服务——只有一个人完整地理解它的每一个齿轮是怎么咬合的。
我。
我看着管理员列表上自己的名字,鼠标移到了「移除」按钮上。
这不是冲动。
我坐在那里想了很久——大概五分钟,也许十分钟,我不确定,黑暗里感觉不到时间。
我想的是:三年了,这个仓库有任何问题,第一个被@的人是我。凌晨三点的告警,找我。线上推荐效果下降,找我。模型需要更新,找我。数据管道堵了,找我。
但台上那三个名字里,没有我。
那我继续当这个管理员,意义是什么?
当一个不被感谢的守夜人?
我点了移除。
系统确认。
页面刷新。
我的名字从列表上消失了。
然后我做了第二件事。
我打开文件管理器,找到一个脚本——我自己写的,功能是把git仓库的完整提交日志导出为PDF。每一次commit的作者、时间、改动内容、代码行数。
我跑了一下。
三百四十七页。
我把PDF拷到U盘里。
不是为了证明什么。
是因为有些东西,应该被完整地记录下来。
做完这两件事,我关了电脑,站起来。
办公室很暗,窗外的城市灯火隔着玻璃映进来,每个工位上的显示器都是黑的,像一排关着的眼睛。
我看了一眼韩峰的工位——在我斜对面,桌上摆着那个年度最佳的奖杯复制品(正品在公司展厅)。奖杯底座上刻着项目名称:灵犀。
我笑了一下。
然后拿起外套,走了。
05
回到家已经十一点多了。
沈露没睡,坐在客厅的地毯上,背靠着沙发,抱着一个抱枕,电视开着,声音调到最低。
她穿着家居服,头发散着,看见我进门,没有起来。
我换了鞋,走过去,在她旁边坐下。
「吃了吗?」
「没胃口。」
「我给你煮碗面。」
「不用。」
沈露把电视关了,客厅暗了下来,只剩厨房的灯透过来一点光。
「我看了直播。」
「嗯。」
「从头看到尾。」
她的声音平得像一张白纸。
「他上台的时候,我还在想,下一个就该念你的名字了。苗苗、陆扬……然后他说了一个什么科技公司的王总。」
她转过头来看我。
「一个外包公司的名字,排在你前面。」
我没吭声。
「罗征。」她叫我全名的时候,声音会下沉半个音调,「三年了。你多少个周末没休息过?多少次凌晨被电话叫醒?你女儿幼儿园亲子活动你缺了几次?」
「沈露——」
「让我说完。」她的眼睛亮了一下,不是泪光,是一种压了很久的东西终于涌上来了。「我不懂你们写代码的事。但我知道一件事——这三年,你的手机从来不敢静音。吃饭的时候手机在桌上震,你就放下筷子;睡觉的时候手机响了,你就穿着秋裤坐到书房去敲键盘。有一次半夜你处理完故障回到床上,四点多了,你以为我睡着了,其实我一直醒着。」
她深吸了一口气。
「你第二天早上六点又起来上班了。眼睛都是红的,我不敢问。」
我低下头。
「这些事,他一件都不提。站在台上感谢这个感谢那个——你呢?你坐在底下鼓掌?」
「我确实在鼓掌。」
「你——」她顿住了,盯着我。
然后她笑了。
那种笑很苦。
「你别告诉我你不在乎。」
「我——」
「你要是不在乎,你不会这个点才回来。你从酒店出来之后去了哪?我给你打了两个电话你都没接。」
我沉默了几秒。
「我回公司了。」
「回公司干嘛?」
「做了一件事。」
她等着我说。
「我把自己的代码仓库管理员权限删了。」
她皱了一下眉——她不太明白这意味着什么。
「就是说,从今天开始,他们的系统出了问题,我没有权限去修了。」
她的眼睛慢慢睁大了。
「你要干嘛?」
我靠在沙发上,看着天花板。
「我要辞职。」
沈露的手松开了抱枕。
她看着我,看了很久。
「你想好了?」
「想好了。」
「小曦怎么办?」
小曦是我们女儿,三岁半。
「我会找到新工作的。」
「我不是问钱的事。」她的声音忽然低了下去,「我是问——你确定这不是赌气?」
我转过头来看她。
她的眼睛里有担忧,有心疼,有一点点恐惧——但没有反对。
「不是赌气。是想明白了。」
「想明白什么了?」
「在这个地方,我做得再好,台上也没有我的名字。那我为什么还要在台下守着?」
沈露沉默了很久。
然后报了抱我。
06
周一,我提了辞职。
没有找韩峰——我直接给HR发了邮件,抄送了技术VP老林。
辞职理由写的「个人发展规划」,四个字,标准话术。
邮件发出去十五分钟,韩峰就出现在了我工位旁边。
他手里端着咖啡,脸上带着一种我熟悉的表情——那种「我很关心你」的职业化微笑。
「老罗,听说你要走?」
「嗯。」
「怎么这么突然?是不是年会那天——」
「跟年会没关系,想了很久了。」
他放下咖啡,在我旁边的空椅子上坐下来,身体前倾,压低了声音。
「老罗,你跟我说实话。是不是对年会的安排有意见?上台那个事情,名额是公司定的,不是我定的。我本来想把你也叫上去的,但HR那边说人数有限——」
「韩峰。」我打断他。
他的嘴停住了。
我很少叫他名字。平时都叫韩总,或者韩哥。
「不用解释。我的辞职跟年会没关系。」
他的眼神变了一下——不是愧疚,是警惕。
「那你是……拿到offer了?」
「还没有。」
「裸辞?」他的语气里多了一丝东西,很微妙,像是担忧,又像是松了口气。「老罗,现在行情不好,你这年纪裸辞——」
「我知道。」
「你再想想。真有什么不满意的,咱们可以谈。待遇、title、团队分工……你说,我尽量帮你争取。」
我看着他。
他的眼睛里,我看出了一件事——他不是怕我走,是怕我走之后出问题。
这两件事的区别,微妙而致命。
「不用了,韩峰。谢谢。」
他又说了几句挽留的话,都是正确的、体面的、让人挑不出毛病的废话。
最后他站起来,拍了拍我的肩——那个动作也是体面的。
「好,你的决定我尊重。交接的事,你列个清单吧,我安排人接。」
「已经在写了。」
他点点头,端着咖啡走了。
走出三步,他又回过头来。
「对了,老罗——代码仓库的管理员权限,你转一下给小贾吧。」
我盯着他的脸。
「已经转了。」
「什么时候的事?」
「上周五。」
他的眼神闪了一下,像是想问什么,但没问。
「好,那就好。」
他走了。
那天下午,我花了四个小时写交接文档。
写到核心算法模块的时候,我犹豫了一下。
这部分的逻辑非常复杂——推荐引擎的排序策略、特征交叉的权重分配、冷启动的兜底方案、A/B测试的分流机制——每一个模块都跟其他模块深度耦合,改动任何一个地方都可能牵动全局。
我写了整整十二页的文档,但我知道——文档能传递知识,传递不了直觉。
那些代码里有太多是经验积累出来的「潜规则」——为什么这个参数是0.7而不是0.8?为什么这个特征要做对数变换?为什么模型每两周必须重新训练一次?
这些东西不在任何文档里,在我的脑子里。
我把文档发给了小贾。
小贾看完之后走到我工位旁边,站了十几秒没开口。
「罗哥——」
「嗯。」
「你真要走?」
「真要走。」
他蹲下来,声音压得很低:「是因为年会的事吗?那天我——我应该说点什么的。」
「跟你没关系。」
「可是我觉得——那天韩峰应该叫你上去的。整个灵犀,核心代码都是你写的,所有人都知道……」
「知道的人知道就行了。」
他看着我,欲言又止。
最后他站起来,拍了一下我的桌子——不重,但有那么一点不甘心的力道。
「罗哥,你走了,这套系统我真的不一定扛得住。」
「扛得住的。文档我写了,有不懂的随时问我。」
「你都走了还问你?」
「微信不删就行。」
他苦笑了一下,走了。
最后一天,我把工位收拾干净。
键盘、鼠标、两本技术书、一个女儿画的冰箱贴——贴在显示器上的。
装进背包的时候,小贾走过来帮我拎了一下。
韩峰没来送。
我知道他在。他的工位上台式机亮着,企微头像是在线状态。
但无所谓了。
我走到电梯口,按了下行键。
电梯来了,我走进去。
门关上之前,我看了一眼九楼的走廊。
长长的一条,两侧是开放工位,尽头是韩峰的独立办公室,玻璃墙,百叶帘拉着。
那个年度最佳的奖杯复制品,还摆在他桌上。
门合上了。
两周后,凌晨一点十七分。
我的手机开始震。
第一通来电:小贾。
我没接——不是不想接,是想看看他是不是打错了。
第二通,还是小贾。
第三通,韩峰。
第四通、第五通、第六通——韩峰、韩峰、韩峰。
然后微信开始炸了。
小贾发的消息:「罗哥!!!线上推荐服务全挂了!!模型那边出了个什么error我看不懂!你能不能帮忙看一下!!」
韩峰发的消息:「老罗,紧急情况,推荐系统全线故障,麻烦回个电话。」
隔了两分钟:「老罗?」
又隔了一分钟:「老罗你在吗???」
沈露被手机震醒了,迷迷糊糊地凑过来。
屏幕的光照亮了她半边脸。
她看了一会儿那些消息,慢慢清醒了。
「怎么了?」
「线上崩了。」
「那你不帮忙处理一下?」
我看着屏幕上韩峰那一连串越来越急促的消息。
「我没有权限了。」
沈露愣了一下。
然后她想起来了——上周五,年会那天晚上,我告诉她的那件事。
她没说话。
我把手机翻了过去,屏幕朝下。
震动声闷在棉被里,一下一下的,像心跳。
07
第二天早上九点,我在家吃早饭。
小曦坐在儿童椅上,用勺子把稀饭搅成漩涡,搅得到处都是。
沈露在擦桌子,擦到我手机旁边的时候停了一下——手机屏幕上还挂着昨晚的消息通知,一整屏。
她看了一眼,没说什么,继续擦。
九点半,小贾打来电话。
这次我接了。
「罗哥!」他的声音哑了,明显一夜没睡,「你终于接了——」
「什么情况?」
「推荐服务凌晨一点全面崩溃,现在还没恢复。韩峰带着我和算法组的小杨折腾了一宿,我们找到了报错的位置,但——」
「但不知道为什么报错。」
「……对。报错信息指向模型推理层的一个特征处理模块,日志里显示特征数据跟模型不匹配,但我们检查了特征配置文件,没改过啊。」
我端着杯子走到阳台,关上门,把客厅的声音隔在外面。
「你检查一下模型版本号。」
「查了,跟线上配置一致——」
「不是配置文件里的版本号。你去看一下实际加载的模型文件的md5值,跟上次上线时记录的md5做比对。」
小贾那头沉默了几秒,键盘声响起来。
过了一会儿:「不一样。md5不一样——模型文件变了?谁改的?」
「没人改。是自动训练Pipeline跑了一次重新训练,生成了新模型,自动部署上去了。」
「什么?自动训练还在跑?」
「每两周自动执行一次。我在的时候,每次重新训练完我会人工检查一遍新模型的效果,确认没问题才放行。Pipeline里有个人工审批的卡点——但那个卡点的审批人是我。」
小贾的呼吸声停了一拍。
「你走了之后,审批人没改——系统检测到审批超时,自动跳过了审批,直接把新模型推上了线上。」
「但新模型训练用的数据有个问题,最近两周的用户行为日志里混进了一批爬虫流量,没清洗就进去了。新模型学到了脏数据的模式,推理结果全乱了。」
小贾那头安静了很久。
「罗哥,这个……我完全不知道有这回事。你文档里没写——」
「写了。第七页,'模型自动训练流程注意事项',第三条——'每次自动训练完成后,需人工审查新模型的离线指标,确认AB测试效果符合预期后方可上线。审批入口:Pipeline管理后台-模型发布审批'。」
更长的沉默。
「我……没看到那页。」
「你看到了第几页?」
他没回答。
我知道答案。他没看完。十二页的交接文档,他大概看了前三页就去忙别的了。
不怪他。他自己手上也有一堆活儿,韩峰没有给他专门腾出时间来消化交接内容。
「罗哥,现在怎么办?模型能回滚吗?」
「能。回滚到上一个版本就行。但你需要管理员权限才能操作Pipeline——去找韩峰或者陆扬审批。」
「韩总说他不懂这块,让我找你——」
「我没有管理员权限了。」
「……什么?」
「我离职前已经移除了。」
「那谁有?」
「韩峰、陆扬、你。你们三个是管理员。」
「但我不知道怎么操作Pipeline——」
「你看文档。第九页。」
我把具体的操作步骤口述了一遍,然后挂了电话。
站在阳台上,看着楼下早高峰的车流。
沈露推开阳台门,探进半个身子。
「他们搞定了?」
「得折腾一阵。」
「你不帮了?」
「该说的说了。具体操作得他们自己来——我没有权限。」
沈露看着我,嘴角微微弯了一下。
「你是真没有,还是不想有?」
我看了她一眼。
她太了解我了。
「都有。」
她没再说什么,转身回去了。
隔着玻璃门,我看见她把小曦从儿童椅上抱下来,小曦的嘴边全是稀饭,沈露拿纸巾给她擦,一边擦一边笑。
我在阳台上站了一会儿。
然后回到客厅,打开了招聘网站。
08
灵犀的推荐服务挂了四十六个小时才完全恢复。
四十六个小时。
这个数字,后来我是在行业论坛上看到的——有用户发帖吐槽,说某App的推荐突然变得「智障」,首页全是不相关的内容,甚至推了一堆广告。
帖子底下有人跟帖:「是不是推荐系统出bug了?以前挺精准的。」
还有人说:「最近越来越烂了,是不是换了团队?」
换了团队。
说得没错。
小贾后来断断续续跟我讲了后面的事。
模型回滚之后,推荐服务恢复了——但只是表面上恢复了。深层的问题还在:自动训练Pipeline的审批流程需要重新配置,数据清洗的规则需要更新,模型迭代的节奏需要人盯着。
这些事情,韩峰安排小杨去做。
小杨是算法组去年招的应届生,聪明,肯学,但经验不够。他看着我留下的代码和文档,就像一个新手驾驶员被塞进了一架正在飞行的客机驾驶舱。
他知道每个按钮在哪里,但不知道什么时候该按哪个。
接下来两个月,推荐系统的效果持续下滑。
不是崩溃那种——是缓慢地、不易察觉地变差。推荐的准确率从87%滑到了79%,再到72%。用户留存率跟着掉,日活开始下降。
产品部先急了。
产品VP找韩峰开会,问推荐效果为什么下降。
韩峰说在调整算法策略,「过渡期」的正常波动。
产品VP说:「过渡了两个月了,数据还在跌,你管这叫正常?」
韩峰说:「我们团队在攻坚——」
「你的核心算法人员走了,你告诉我你在攻坚?」
韩峰的嘴动了一下,没说出来。
产品VP拍了桌子:「灵犀这个项目,你年会上领了奖,你跟全公司说'感谢团队'——你的团队核心走了,你知不知道?」
这次会议的内容,不知道怎么传出来的——可能是有人在会议室外面听到了,也可能是有人在内网匿名区发了帖。
帖子标题:「灵犀项目年度最佳,核心算法人被逼走了,现在系统天天出问题——你们觉得奖应该给谁?」
底下炸了锅。
有人说「早就知道了,罗征才是灵犀的灵魂,韩峰就是个PPT经理」。
有人说「我之前跟罗征合作过,凌晨三点还在帮我排查接口问题,这种人怎么就留不住?」
有人说「去看看gitlog就知道了,代码不会说谎。」
那条帖子两天之内被浏览了三千多次——公司一共才两千人。
HR删了帖,但截图已经传开了。
技术VP老林亲自去查了灵犀仓库的git日志。
小贾跟我说,老林看完之后,在办公室坐了很久。
然后他打了一个电话——打给韩峰。
「韩峰,来我办公室。」
韩峰去了。
门关了二十分钟。
出来的时候,韩峰的脸色发灰。
小贾说他在走廊上看到韩峰走出来,路过自己工位的时候,停了一下,看了一眼桌上那个年度最佳的奖杯复制品。
然后他伸手把它转了个方向,让刻字的那面朝墙。
09
老林给我打电话是在我离职一个月之后。
我正在准备面试——一家做AI基础设施的创业公司,CTO是我在技术社区认识的,看过我几篇技术博客,主动联系的我。
老林打来的时候,我刚从那家公司面完二面出来,走在路上。
「罗征,方便聊两句吗?」
「林总,方便。」
「关于灵犀的事,我想跟你直说。」
「您说。」
「我看了gitlog。」
他停顿了一下。
「一万四千多次提交,你占了六千三百次。核心的推荐引擎模块,提交者百分之九十二是你。你走了之后,这个模块两个月没有一次有效更新——因为没人敢动。」
我没说话。
「年会那天的事,我后来才知道。上台名单是韩峰报给公司的,他报了三个名字,没有你。」
我依然没说话。
「我想代表公司跟你道个歉。」
「不用了,林总。」
「这不是客气话。我确实做得不够——灵犀这么重要的项目,核心成员的贡献我没有跟进、没有确认。韩峰报上来什么,我就批什么。这是我的问题。」
他的语气很真诚。但我听得出来,真诚的背后有一根线——他不是只为了道歉才打的这个电话。
果然——
「罗征,我想问你,愿不愿意回来?」
「条件你开。title、薪资、团队——你说了算。灵犀这个项目,我想让你来牵头,真正地牵头。韩峰那边……公司会做调整。」
我站在人行道上,身后是车流的噪声,面前是一棵光秃秃的行道树。
「林总,谢谢您。但我不回去了。」
「……为什么?」
「因为回去了,我还是那个修系统的人。出了问题找我,没出问题没人记得我。这个循环,我不想再走一遍。」
老林沉默了很久。
「你去哪了?」
「还在面试。有个创业公司,做AIInfra的,团队不大,但方向我感兴趣。」
「创业公司……稳定吗?」
「不稳定。」我笑了一下,「但他们的CTO面我的时候,问了我一个问题。他说——'罗征,你最得意的技术作品是什么?'他没问我做过什么项目、管过多少人、拿过什么奖。他问的是'作品'。」
「这个词很重要吗?」
「很重要。因为只有把代码当作品的人,才会在意是谁写的。」
老林又沉默了一会儿。
「好。我理解。祝你顺利。」
「谢谢林总。」
挂了电话,我继续往前走。
创业公司的offer两天后就到了。
title是「技术合伙人」。
沈露看到offer的时候,盯着那三个字看了很久。
「合伙人?」
「嗯。」
「他们知道你之前是算法工程师?」
「他们知道我写了灵犀。」
她抬起头看我。
「你怎么没告诉过我,你在外面有这么多人知道?」
「我也是最近才知道的。」
这是实话。
在公司的那几年,我的世界就是那个工位、那些代码、那些凌晨的告警。我不发技术博客、不做行业分享、不社交——不是清高,是没时间。
但离职之后,闲下来了,我开始把以前积累的一些技术思考整理成文章,发在技术社区上。
第一篇是关于推荐系统冷启动的,写了大概五千字,没什么期待,就当是给自己做个记录。
发出去第二天,收到了四十多条评论。
有人问技术细节,有人说「终于有人把这个问题讲清楚了」,有人直接问「作者在哪家公司,招人吗」。
我又写了第二篇、第三篇。
第三篇被一个有二十万关注者的技术大V转发了,评语是:「实战派,每一段都能看出是真的趟过坑的人写的。」
创业公司的CTO就是通过这些文章找到我的。
他说:「你的文章里有一种东西——不是炫技,是对系统的敬畏。写代码的人很多,把代码当孩子养的人不多。」
这句话,我回家跟沈露说了。
她听完,低下头,鼻子抽了一下。
「你怎么了?」
「没事。」她快速擦了一下眼角,「就是觉得——终于有人这么说了。」
10
入职新公司三个月后,一个周六的下午。
我在家陪小曦搭积木。
她非要搭一个「城堡」,但积木不够,搭到一半就塌了。
她瘪着嘴要哭。
我帮她把底座重新垒好,换了个结构——三角形支撑,稳定性更好。
「看,这样就不会倒了。」
小曦的注意力立刻被转移了,开始往上叠新的积木,嘴里叨叨着:「爸爸搭的城堡最好!」
沈露端着水果从厨房出来,看见我蹲在地上被积木围着,笑了。
「大工程师在搞基建呢?」
「你女儿的甲方需求太复杂了。」
手机震了一下。
微信消息。
小贾。
「罗哥,有个事跟你说——韩峰走了。」
我的手停在一块积木上。
「什么时候的事?」
「上周。公司跟他协商解除合同的。」
「原因呢?」
「明面上说是'管理能力不匹配'。但大家都知道——灵犀那两个月的事,产品VP和老林都不满意。加上内网那个帖子闹得太大了,年会的事所有人都知道了。」
我没说话。
「还有一件事。」小贾的语气变了,带着一种奇怪的感慨,「韩峰走之前,做了一件事。」
「什么事?」
「他把灵犀仓库的readme改了。」
「改了什么?」
「他在'核心贡献者'那一栏,加了一个名字——你的名字。写在最前面。」
我盯着手机屏幕,盯了很久。
「就加了个名字?」
「就加了个名字。commitmessage写了一行话。」
「什么话?」
「'补充遗漏的核心贡献者信息'。」
我把手机放下,继续搭积木。
小曦在旁边催我:「爸爸快点!城堡要封顶了!」
「来了来了。」
我把最后一块积木放上去。
稳了。
沈露走过来,在我旁边蹲下,看了看那座积木城堡。
「挺好看的。」
「你女儿的审美。」
她看了一眼我放在地上的手机,屏幕还亮着,小贾的消息还停在那儿。
「谁的消息?」
「小贾。说韩峰离职了。」
她的表情没有我预想的那种解气。
她只是「嗯」了一声,然后站起来。
「你什么感觉?」
我想了想。
「没什么感觉。」
这不是假话。
半年前,这个消息可能会让我心里涌上一股复杂的东西——报复的快感、迟来的正义、苦涩的满足。
但现在——我坐在客厅的地板上,三岁半的女儿在旁边嚷嚷着要搭第二座城堡,妻子在沙发上削苹果,窗外的冬日阳光暖洋洋地铺在地毯上。
我有了新的代码要写,新的系统要搭,新的团队叫我「罗总」而不是「来个人看一下线上告警」。
韩峰在readme里加上了我的名字。
很好。
但那个名字本来就在那里。
在每一行commitmessage里,在每一个函数的注释里,在每一次凌晨三点的hotfix里。
代码仓库里的提交记录不会说谎。
从来不会。
沈露削好了苹果,切成小块,一碗给小曦,一碗放在我手边。
我拿起一块咬了一口。
「好甜。」
「废话,二十块钱一斤的。」
小曦举着一块积木跑过来:「爸爸!这个放哪里?」
「放城堡最上面。」
「我够不到——」
我把她抱起来,让她自己把积木放上去。
积木搭好了,她在我怀里拍着手。
「爸爸搭的城堡最最最好!」
沈露在旁边翻了个白眼:「明明是我女儿设计的。」
「但是地基是我打的。」我说。
沈露看了我一眼。
我也看了她一眼。
她笑了。
我也笑了。
地基。
有些东西,你看不见它,但所有东西都站在它上面。
它不需要被写在奖杯上。
它只需要在那里。
稳稳地在那里。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
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.