投影仪的光打在我脸上,白晃晃的,刺得眼睛发酸。
沈英逸站在讲台前,西装笔挺,声音洪亮:“这个致命漏洞是我通宵修复的。”台下几十双眼睛齐刷刷转过来看我。
我坐在最后一排,手里攥着U盘,掌心全是汗。
他还在说,说我技术老旧,说我抢新人功劳,说我故意留漏洞。
我站起来,椅子腿刮过地板,声音刺耳。
走到讲台前,我把U盘插进电脑。
历史修改记录弹出来,时间戳停在凌晨三点十七分。
会议室安静了。
01
那天下午四点半,测试组炸了锅。
郑诗涵跑过来的时候,脸色白得像打印纸。她声音压得很低,说支付模块的漏洞复现了,三笔订单金额算错,要是上线,一晚上能亏几十万。
我盯着屏幕上的日志,后脊梁一阵发凉。
沈英逸负责的支付模块,上周五提交的代码。逻辑分支写反了,退款流程会重复执行。这个错误藏得深,测试用例覆盖不到。
我拿起手机给沈英逸打电话。响了六声,他接了。
“英逸,你那个支付模块有个致命漏洞,赶紧回来改。”
电话那头顿了两秒。他说在外面办事,赶不回来。又说他刚来公司,对这块代码还不太熟,怕越改越乱。
“李哥,您技术最好,能不能先帮我顶一下?”
他声音客气,带着那种新人特有的谦卑。我犹豫了。我手头还有两个版本要发,今晚本来打算陪老婆去超市买点东西。
挂了电话,我去找沈永富。
沈永富是技术总监,也是沈英逸的舅舅。这事我后来才知道,当时只晓得他平时对沈英逸挺关照。
他坐在办公室里,手指敲着桌面,听完我的汇报,眉头拧起来。“宏博,你是老同志了,新人遇到困难,你带一带。”
我说这漏洞太大,一个人改风险高。他说沈英逸母亲住院了,人在医院走不开,让我辛苦一晚上,调休的事后面再说。
我没再争。
回到工位,我给谢艳红发了条微信,说今晚加班。她回得很快:“又加班?你血压高,别硬撑。”
我没回,打开代码,开始看沈英逸的提交记录。
一行一行看下去,越看越心惊。这不光是逻辑反了,数据库连接池的配置也有问题。要是并发量上来,整个支付服务会崩。
我给沈英逸发消息,问他连接池参数怎么设的。他回得倒是快:“李哥,我都是按模板来的,您看着调就行。”
我看着那行字,心里不太舒服,但没多想。
改到晚上九点,谢艳红打来电话。
问我吃了没有。
我说吃了泡面。
她叹了口气,说给我留了饭在冰箱里。
挂电话前,她说了句:“你那个新人同事,自己惹的祸让你扛,你长个心眼。”
我说知道了,又接着改。
凌晨一点,核心逻辑改完,开始跑回归测试。测试用例过了八成,剩下两成需要手动验证。
我站起来去接水,路过沈英逸的工位。显示器关着,键盘上落了薄薄一层灰,像是好几天没碰过。
凌晨两点半,所有测试通过。我把代码提交到主分支,在注释里写了一句:“紧急修复,勿删。李宏博。”
提交记录里自动生成了时间戳:03:17。
我又在日志文件里翻了一遍,把沈英逸原来的错误代码和我的修复对比,生成了一份详细说明。想着第二天让他看看,学个教训。
走出公司大门的时候,天边刚泛白。手机显示四万三千步。我站在路边等出租车,风吹过来,后背凉飕飕的,才发现衬衫湿透了。
回到家,谢艳红已经起床了。她看了我一眼,没说话,把热好的粥推过来。
“改完了?”
“嗯。”
“那个新人呢?”
“他母亲住院,来不了。”
她哼了一声,把筷子往桌上一搁。“你就编吧。你编,他领功,你当好人。”
我没接话,埋头喝粥。粥有点烫,烫得我眼眶发酸。
02
第二天上午十点,沈英逸出现在工位上。他换了身干净衬衫,头发打理得整整齐齐,手里拎着两杯咖啡。
一杯放在我桌上。“李哥,辛苦了,昨晚真不好意思。”
我摆摆手,说没事。
他拉过椅子坐下来,凑近看屏幕上的修复代码。
我打开注释和说明文档,一行一行给他讲,哪里逻辑错了,哪里参数要改,以后怎么避免。
他点头点得很快,嗯嗯应着,眼睛却没怎么看代码。
“李哥,您这个修复说明能发我一份吗?我想好好学习学习。”
我说行,把文件通过内部系统发给了他。他接收后,又说了几句客气话,端着咖啡回自己工位了。
我继续干活。中午去食堂,郑诗涵端着餐盘坐到我对面。
她看了看四周,压低声音:“李哥,昨天那个漏洞的事,沈英逸跟沈总监汇报了。”
“汇报什么?”
“说他发现漏洞后第一时间通知了你,你协助他完成了修复。”
我筷子停在半空。郑诗涵看我不说话,又补了一句:“他还说,修复思路是你提供的,但代码主要是他写的。”
我放下筷子,米饭还剩下大半碗。郑诗涵说,她也是听别人转述的,让我别说是她讲的。
下午我打开代码管理系统,想看看沈英逸有没有再提交什么。
历史记录里,我凌晨三点十七分的提交还在,但紧跟着多了一条凌晨四点零二分的提交。
提交人:沈英逸。
内容:注释优化。
我点开看。
他把我的注释改了。
紧急修复勿删,李宏博,这几个字被删掉了,换成了“常规优化,已复核”。
提交时间写的是凌晨四点,但他那时候根本不在公司。
我盯着屏幕,手搁在键盘上,半天没动。
我给沈英逸发消息,问他为什么改注释。他过了十分钟才回:“李哥,我觉得注释里写个人名字不太好,就统一规范了一下。您别多想。”
我回了一句:“那个时间你不在公司。”
他没再回。
下班前,沈永富把我叫到办公室。他靠在椅背上,手里转着一支笔,说沈英逸表现不错,转正材料准备得差不多了。
“宏博,你是老同志,多帮衬帮衬年轻人。转正述职的时候,你也帮他说几句好话。”
我说好。
走出办公室,我站在走廊里,看着窗外黑下来的天。
郑诗涵的话、沈英逸改的注释、沈永富的交代,在脑子里转来转去。
我从口袋里摸出U盘,那是早上出门时谢艳红塞给我的。
她说:“把证据存一份,万一呢。”
我当时还笑她多想。现在我把U盘插进电脑,把代码提交记录、服务器登录日志、错误代码对比说明,全部拷了进去。
U盘很小,攥在手心里,硌得慌。
03
转正评审定在周五下午。周三上午,我收到了沈英逸的述职报告草稿,抄送给了沈永富和HR萧莲,也发了我一份。
我点开PDF,一页一页往下翻。
翻到第三页,我的手指停住了。
核心业绩第一条写着:独立修复支付模块致命漏洞,避免公司重大损失。
后面附了详细的修复过程描述,用的全是我写的说明文档里的内容,一个字没改。
往下翻,第二条:主动承担上线前夜紧急任务,连续工作超过十二小时。
第三条:在修复过程中发现原有代码结构问题,提出优化方案并被采纳。
整篇报告,没有出现我的名字。
我关掉PDF,拿起手机走到楼梯间,给沈英逸打电话。这次他接得很快。
“英逸,述职报告我看了。”
“李哥,您觉得怎么样?有什么需要改的您尽管说。”
他语气轻松,像没事人一样。
“那个漏洞,是你修的还是我修的?”
电话那头安静了几秒。
然后他说:“李哥,您听我解释。这个报告是给领导看的,您也知道,新人转正得有亮点。您是老同志了,不差这一个项目。”
“所以你就把我的东西全写你名下了?”
“李哥,我不是那个意思。要不这样,我在报告最后加一句致谢,感谢您的指导。”
我握着手机的手有点抖。楼梯间里声控灯灭了,四周暗下来,只有手机屏幕的光照在脸上。
“你母亲住院,我替你熬了一整夜。你第二天来,我把修复说明给你,手把手给你讲。你就是这么谢我的?”
他沉默了一会儿,声音变了,不再客气。
“李哥,说实话,这个项目是我负责的。出了漏洞,我确实有责任,但修复也是我职责范围内的事。您帮忙是情分,我记着。可转正是我自己的事,您总不能让我把功劳全让出去吧?”
我挂了电话。
回到工位,我打开电脑,把述职报告和我的修复记录并排放在屏幕上。郑诗涵路过,看了一眼,什么都没说,拍了拍我的肩膀。
下午,沈永富又找我。这次他没绕弯子,直接说:“宏博,沈英逸的报告我看了。年轻人要转正,需要业绩支撑。你是老同志,格局大一点。”
我说:“沈总,那个漏洞是我通宵改的。”
他看着我的眼睛,停了两秒。
“我知道。但这事闹大了,对谁都不好。沈英逸年轻,以后路还长。你帮他一回,转正之后我给他安排个副手位置,你带他。”
我没说话。他以为我默认了,挥挥手让我回去干活。
晚上回到家,谢艳红在沙发上看电视。我坐在她旁边,把事说了。她拿过遥控器把电视关了,转过身子看着我。
“李宏博,你打算怎么办?”
“我不知道。”
“你不知道?人家都骑你头上拉屎了你还不知道?”
她声音大起来。我让她小声点,儿子在屋里写作业。她压低声音,语气一点没软:“你明天就去跟萧莲说清楚。你要是不去,我去。”
我说再想想。她站起来,从抽屉里翻出那个U盘,拍在茶几上。“证据我都给你备好了,你还在想什么?你想当老好人,人家把你当傻子。”
那天晚上我没睡着。
翻来覆去到凌晨两点,起来喝了杯水,坐在客厅里发呆。
窗外路灯的光透过窗帘缝照进来,在地板上拉了一道长长的亮线。
我想起刚进公司那年,也被人抢过功。
那时候年轻,忍了。
二十年过去,还在忍。
早上出门前,我把U盘装进了口袋。
04
周四一整天,我都在犹豫。
上午萧莲发了会议通知,转正评审周五下午两点,地点在八楼大会议室,参会人员包括技术部全员和HR。
沈英逸在群里回了个“收到”,紧跟着发了个奋斗的表情。
中午吃饭,朱翔端着餐盘坐过来。他比我大两岁,在公司待了十五年,出了名的老油条,平时谁也不得罪。
他夹了块红烧肉,嚼了半天,突然说:“宏博,沈英逸那个述职报告,我看了。”
我嗯了一声。
“你昨晚在公司改代码的事,门禁记录我查了。你凌晨三点二十刷的门禁,沈英逸当天下午五点四十就走了。”
我抬头看他。他继续吃菜,不看我。“我什么都不知道,就是随便说说。”
下午,郑诗涵又来找我。
她拿着手机,上面是沈英逸和一个同事的聊天截图。
沈英逸说:“李宏博那点技术早过时了,就是仗着资历老,老想压新人一头。”
郑诗涵说:“李哥,这个人不地道。你帮他,他背后这么说你。”
我看着截图,心里那点犹豫一点点被什么东西挤走了。我说:“诗涵,明天评审会,你能不能帮我做个证?”
她咬了咬嘴唇,点头。
下班前,沈永富又把我叫去。这次他脸色不太好,说沈英逸跟他讲了,说我威胁要把事情闹大。
“宏博,我最后跟你说一次。这事到此为止。你要是明天在会上乱说话,别怪我不顾这么多年的情分。”
我说:“沈总,我只说事实。”
他拍了下桌子。“事实?什么事实?代码提交记录能证明什么?沈英逸说了,那是他用你电脑提交的。你有什么证据证明不是你?”
我看着他。他的眼神里有一种笃定,像是早就想好了说辞。我忽然明白,这事不是沈英逸一个人的主意。
“沈总,我明白了。”
“你明白就好。”
走出他办公室,我站在走廊里,掏出手机给谢艳红发了条消息:明天我去。
她秒回:好。
那天晚上我回到家,把U盘里的文件又检查了一遍。
代码提交记录、服务器登录日志、网络地址、错误代码对比说明、还有我凌晨三点十七分提交后系统自动生成的邮件通知。
邮件是发到部门群里的,沈英逸不可能不知道。
谢艳红端了杯热水放在我手边。她没说话,坐在旁边织毛衣。毛线针一下一下碰着,声音很轻。我看了她一眼,她低着头,嘴角绷得很紧。
“你早点睡,”她说,“明天有精神。”
我点点头,把U盘拔下来,攥在手心里。金属外壳被体温焐热了,像一枚小小的护身符。
05
周五下午两点,八楼大会议室坐满了人。
长条会议桌,萧莲坐在主位,沈永富坐在她左手边。沈英逸站在投影幕布前,西装笔挺,头发用发胶梳得一丝不乱。他清了清嗓子,点开PPT。
第一页是个人简介,第二页是工作业绩。
“各位领导、同事,下面我汇报入职以来的主要工作。”他声音洪亮,目光扫过全场,在我脸上停了一瞬,很快移开。
“第一项核心业绩,独立修复支付模块致命漏洞。这个漏洞是上线前夜发现的,当时情况非常紧急。”
他翻到第三页,上面贴着我写的修复说明截图,只是所有署名都被抹掉了。
“我连续工作十二个小时,重新梳理了支付流程,修正了逻辑分支错误,调整了数据库连接池参数。最终在凌晨三点左右完成修复,确保了第二天系统顺利上线。”
我坐在最后一排靠墙的位置。郑诗涵坐在我前面两排,回过头看了我一眼。朱翔坐在角落里,低头翻手机。
沈英逸还在讲。“在这个过程中,我要感谢李宏博李哥的协助。李哥经验丰富,给了我一些指导。”
他冲我点了点头,笑容得体。
“但是,”他话锋一转,“我也注意到,这个漏洞之所以存在,跟之前的代码评审不严有关系。李哥作为老同志,评审时没有发现这个问题,我作为新人,本不该多说。”
会议室里有人交头接耳。
我攥紧了口袋里的U盘。
“后来我复盘的时候发现,这个漏洞其实是可以避免的。如果评审环节再细致一点,根本不会拖到上线前夜。李哥技术是有的,但可能对新的支付框架不太熟悉。”
沈永富端起茶杯喝了一口水,眼皮都没抬。
沈英逸翻到下一页PPT。“第二项业绩,优化代码结构。我在修复漏洞的同时,对原有代码进行了重构,提升了可维护性。”
那是我顺手改的几个函数封装。
“第三项,主动承担急难任务。上线前夜,我本来在家照顾住院的母亲,接到通知后第一时间远程介入。”
我听到这里,手从口袋里抽出来,放在桌面上。
萧莲抬头看了我一眼。她注意到我的动作了。
沈英逸还在说:“以上就是我的转正述职。我相信自己有能力胜任这份工作,也希望各位领导和同事继续支持我。”
他鞠了一躬,会议室里响起稀稀拉拉的掌声。
萧莲合上面前的文件夹。“好,述职完毕。下面进入评议环节。大家对沈英逸的转正有什么意见?”
郑诗涵举了手。萧莲示意她发言。
“我有两个问题。”郑诗涵声音有点抖,但很清楚,“第一,你说漏洞是你独立修复的,那为什么代码管理系统里,凌晨三点十七分的提交人写的是李宏博?”
会议室安静了。沈英逸笑容没变,像是早有准备。
“这个我解释一下。当时我用的是李哥的电脑,因为我的电脑跑不动那个测试环境。提交人显示李哥的账号,但操作是我做的。”
郑诗涵看了我一眼,坐下了。
萧莲把目光转向我。“李宏博,你有什么要说的吗?”
我站起来。椅子腿刮过地板,发出刺耳的声音。我从口袋里掏出U盘,走到讲台前,插进电脑。
“萧经理,各位同事,我想给大家看几份记录。”
我点开代码管理系统。
历史修改记录弹出来,时间戳清清楚楚。
凌晨三点十七分,提交人李宏博。
紧接着凌晨四点零二分,提交人沈英逸,修改内容:删除注释中的署名。
“沈英逸,你说你三点十七分用我电脑提交的。那我问你,四点零二分这条修改记录,是谁提交的?”
他脸色变了一下,很快又稳住。“也是我。我后来发现注释不规范,就改了。”
“你四点还在公司?”
“对,我一直在。”
我点开服务器登录日志。
“这是公司服务器的登录记录。你的账号在当天下午五点四十一分登出,之后没有任何登录记录。我的账号在凌晨两点五十三分登入,四点十五分登出。”
我指着屏幕。“五点四十一分到凌晨两点五十三分之间,你的账号没有任何操作。我的账号登入后,代码才被修改。”
沈英逸的喉结动了一下。
“你说你用我电脑,那我电脑的远程登录记录呢?”我点开另一份日志,“公司电脑远程登录需要双重验证,每次登录都有记录。当天晚上,我电脑没有任何远程登录请求。”
会议室里有人倒吸了口气。
沈英逸的手垂在身侧,指尖在微微发抖。“那,那可能是我记错了。我确实在家远程操作的,用的自己的电脑。”
“你自己的电脑?”我点开门禁记录,“朱翔帮我调了门禁数据。你当天下午五点三十七分刷卡离开公司,之后没有任何进入记录。凌晨三点十七分,我刷卡进入公司加班。你人在哪里?”
沈英逸张了张嘴,没发出声音。他看向沈永富。沈永富脸色铁青,手指攥着茶杯,指节发白。
萧莲站起来。“沈英逸,请你解释一下。”
“我,我可能是记混了。那个漏洞确实是我修的,李哥只是帮了点忙。”
“帮了点忙?”我把错误代码对比图调出来,“这是你原来写的代码,逻辑分支反了,数据库连接池参数全错。这是我改的版本,每一行改动都有注释。你来说说,你原来那版代码,能跑通吗?”
屏幕上,左边红色标记的错误代码和右边绿色标记的修复代码并排显示。中间的时间戳从下午五点五十一分跳到凌晨三点十七分。
沈英逸往后退了一步。他嘴唇动了动,声音很轻:“李哥,你,你这是要毁我。”
“我毁你?”我看着他,“我通宵替你改代码的时候,你在家睡觉。第二天我把修复说明发给你,你说好好学习。转头你就把我的名字删了,把我的功劳全写进你的述职报告。你反过来说我技术老旧,说我故意留漏洞。沈英逸,是谁毁谁?”
会议室里鸦雀无声。投影仪的嗡鸣声忽然变得很响。
热门跟贴