创作声明:本文为虚构创作,请勿与现实关联

01

三月初,部门群里弹出一份通知。

「为了加强人才梯队建设,公司决定推行导师制,由资深员工带教新人,传承经验,共同成长。」

我扫了一眼,把手机扣在桌上,继续写代码。这种通知每年都有,跟写年终总结一样,走个形式。

下午开会的时候,李总监站在台上,目光从左扫到右,最后落在我这个角落里。

「老刘,你带一个。」

我手里正转着笔,听见自己名字,笔转脱了,啪嗒掉在桌上。

「我?」

「对,你经验最丰富,带新人最合适。」

旁边有人小声笑了一下:「老刘带人,那得带出第二个老刘来。」

笑的是小马,入职三年,平时最会凑热闹。我没理他,把笔捡起来。

「谁?」

「林晓峰,去年校招进来的,名校硕士,底子不错。你好好带。」

李总监说完就翻下一页PPT了,像是在分配一件再平常不过的事。

散会的时候人往外走,老周故意放慢脚步,等人群散了才凑过来,压着嗓子:「老刘,你知道那个林晓峰是谁吗?」

「谁?」

「去年进公司,三个月就把人事部的小赵追到手了。那小子,机灵得很。」

我看了他一眼:「机灵不好吗?」

老周搓了搓手指,那是他每次想说重话之前的习惯动作:「好是好,就是太机灵了。」

我没多想,回到工位,把刚才没写完的那行代码补上了。

02

第二天上午,我正在调一个接口的超时问题,余光瞥见一个人影在工位旁边站住了。

站了大概有十秒钟,没出声。

我把最后一行代码敲完,才抬头。

林晓峰站在那里,微微弯着腰,弯的幅度刚好——不至于太卑微,又恰到好处地表达了尊重。这个弧度,像是练过的。

「刘老师,以后请您多多指教。」

他笑起来的时候,嘴角的弧度和弯腰的弧度一样精准。

我打量了他一下。年轻,白净,金丝边眼镜,衬衫袖口挽了两道,露出一截干净的手腕,上面戴着一块表——不是什么名牌,但比工位上的程序员们都讲究得多。

「坐。」我指了指旁边的空位。

他坐下,背挺得很直,双手交叠放在膝盖上:「刘老师,我来了两年,很多地方不懂,您有什么要求尽管说,我一定好好学。」

这句话说得滴水不漏。我在这个公司干了十五年,听过的客套话能绕办公楼三圈,但这句说得确实舒服。

我没接他的话,转过身,打开电脑,调出公司核心业务系统的架构文档。

「这个系统,你了解多少?」

他凑过来,眼睛扫了两行。我注意到他的表情变了一下——嘴角那个精准的弧度消失了半秒,又迅速恢复。

「这个……还没接触过。」

我「嗯」了一声,开始讲。

从系统架构讲起,到核心逻辑,到当初设计时的思路,到后来踩过的坑。我讲东西有个毛病,一旦打开了就收不住,因为这些东西在我脑子里存了十几年,每一个模块后面都连着一段经历。

他听得很认真。不是那种假装认真的认真——假装的人会频繁点头,真正听进去的人反而不怎么动。他几乎不动,只在关键节点飞快地在本子上记几笔,偶尔抬头问一个问题。

问题问得准。不是那种为了表现而提问的问题,是真正卡住了才会问的问题。

两个小时后,我讲完了。

他把笔记本合上,由衷地说了一句:「刘老师,您讲得太清楚了。这些东西,书上根本学不到。」

我摆摆手:「慢慢来,不急。」

他点点头,眼睛亮亮的。那种亮,可能是感激,也可能是一个聪明人发现了一座矿的兴奋。

我没多想。

打开网易新闻 查看精彩图片

03

接下来的日子,我把自己知道的东西,一样一样往外掏。

系统架构的思路,我讲。数据库设计的原则,我讲。代码规范的重要性,我讲。那些写在代码注释里的、十几年攒下的经验,我一条一条拎出来给他看。

「这个地方,当初这么写是因为有历史原因。2016年那次系统迁移,数据库换了一版,但这个字段的映射关系没改过来。现在看着不合理,但改起来会影响十几个模块,牵一发动全身。」

他在本子上画了一个关系图,画得比我讲得还清楚。

「这个接口,调用的时候要注意超时时间。对方那个服务器是2018年采购的,老毛病了,高峰期响应慢,超时设太短会报错,设太长又会堵住线程池。我当初测出来的最优值是三秒二。」

他把「3.2s」用红笔圈了起来。

「这个算法,你看起来笨不笨?」

他看了一眼,诚实地点了点头。

「笨。但数据量超过五百万条的时候,比你们教科书上那些花哨的快一倍。原因是它的空间复杂度低,缓存命中率高。这是我当年试了六种方案才试出来的。」

他认真地写下来,每次听完都会抬起头说一句:「刘老师,您太厉害了,这些东西我什么时候才能学会?」

这句话他说了不下二十次。每一次的语气都一样——谦逊、真诚、带着恰到好处的崇拜。

我说:「慢慢来,多写多看,两年就差不多了。」

有一天加班,我给他讲一个复杂的业务逻辑,讲到一半发现外面天都黑了,抬头看表,七点四十。

他坐在旁边,本子上密密麻麻记了三页,眼睛还是亮的。

「刘老师,您先走吧,我把今天的笔记整理一下。」

我站起来收拾东西的时候,老周从工位后面探出头——他其实早就下班了,一直没走,在那里偷听。

等林晓峰去了卫生间,老周快步走过来:「老刘,你这也太实在了,什么都教?」

我拉上电脑包的拉链:「不然呢?」

「你就不怕教会了徒弟,饿死师傅?」

我笑了一下:「饿不死。这些东西,他学会了是他的本事,我教了是我的本分。」

老周的目光从我脸上移到林晓峰空着的座位上,又移回来,嘴唇动了动,最后摇摇头,没再说话。

04

半年后,林晓峰独立做了一个小项目。

说是独立,其实前前后后他来问了我不下十次。哪次数据库查询慢了,哪次接口报了奇怪的错,他第一反应都是转过头喊一声「刘老师」。我每次都放下手里的活,帮他看。

项目不大,但做得确实不错,流程规范,代码干净,按时交付,没出岔子。

月度部门会上,李总监特意提了一嘴:「晓峰进步很快,老刘带得好,大家要向他们学习。」

林晓峰站起来,微微欠身,动作比半年前更自然了,像是已经变成了本能。

「谢谢李总,谢谢刘老师。刘老师这半年教了我太多东西,没有他,我不可能这么快上手。」

他转过身看向我,目光里满是感激。

全场的目光也跟着转过来。我坐在角落的老位置上,点了一下头,没说话。

散会后人群往外走,林晓峰三步并两步追上来:「刘老师,今晚我请您吃饭,感谢您这半年的指导。」

他说这话的时候声音不大不小,刚好够周围几个同事听见。

我背着电脑包,摆摆手:「不用,回去陪老婆孩子。」

他愣了一下,然后笑了:「刘老师,您真低调。以后有机会,我再请您。」

我点点头,走了。

身后传来老周的声音,不知道是跟谁说的:「这小子,嘴是真甜。」

05

又过了三个月,林晓峰开始独立负责一个中型项目。

这个项目难度不小,涉及公司最核心的业务系统,对接三个外部接口,工期两个月。按资历,这个项目本该分给部门里几个干了五六年的老人,但李总监点名让林晓峰上。

会上,李总监说:「年轻人要锻炼,不能老让老同志扛着。」

坐我旁边的老周用膝盖顶了我一下。我没动。

当天下午,林晓峰来找我。他搬了一把椅子,坐在我旁边,把笔记本电脑打开,屏幕上是他做的技术方案。

「刘老师,这个项目我有点没底,您能不能帮我看看?」

他说「有点没底」的时候,声音压得比平时低,像是这四个字让他不太舒服。一个半年前还什么都不懂的新人,已经开始为承认自己「没底」而感到别扭了。

我没说话,把他的笔记本转过来,从第一页开始看。

看了一个多小时,改了十几处。

「这里,边界条件没考虑全,用户输入负数的时候会报空指针。」

他飞快地记下来。

「这里,接口设计有问题,你把查询和修改放在同一个接口里了,以后业务一拆分,这个接口就废了,得全部重写。」

他的笔顿了一下,但没反驳。

「这里,数据库索引没建对。你在这个字段上建了索引,但实际查询走的是另外两个字段的组合条件,这个索引根本用不上。数据量过了百万,这个页面就会卡三秒以上。」

他把这条记下来的时候,手指有一瞬间的僵硬。连续被指出十几个问题,对于一个聪明人来说并不好受。

但他很快恢复了,合上笔记本,抬起头:「刘老师,太谢谢您了。要不是您,我这些坑都得踩一遍。」

我说:「没事,好好干。」

项目上线那天,一切顺利。

李总监又在月度会上表扬:「晓峰这个项目做得漂亮,客户很满意,提前三天交付。」

林晓峰站起来,还是那副标准的谦逊姿态,但我注意到一个细节——他这次先看了李总监,才转向我。

「谢谢李总,感谢团队的配合,特别感谢刘老师的指导。」

感谢的顺序变了。半年前那次,他先看我再看李总。

我坐在角落里,看着他。

那一刻,心里有一种很奇怪的感觉。不是骄傲,也不是失落,是一种说不清的东西,像是什么正在慢慢移动,但你不知道它要移到哪里去。

散会后,我照例最后一个走。经过李总监办公室的时候,门开着一条缝,里面传出两个人的笑声。

一个是李总监的,另一个是林晓峰的。

林晓峰在说:「李总,下周末约个球?上次那个场地不错。」

我没停步,走过去了。

06

年底,公司发了一批晋升通知。

我照例没有。十五年了,我从程序员做到架构师,技术级别到了天花板,管理岗从来没我的份。不是第一次了,无所谓。

但那天下午,我的邮箱里弹出一条新通知,我扫了一眼,手停在了鼠标上。

「晋升林晓峰为技术部项目组组长,即日起生效。」

项目组组长。

我反复看了两遍那个「组长」。这个岗位跟我在同一个部门,分管的项目跟我手上的有交叉。也就是说,从今天起,他是我的直接领导。

我盯着那条通知,鼠标在邮件上悬了很久,最后点了关闭。

老周不知道什么时候已经站在我身后了,压着嗓子:「老刘,你看到了?」

「嗯。」

「他来了还不到两年吧?」

「一年零九个月。」

我说出这个数字的时候,自己也愣了一下——我居然记得这么清楚。

老周咂了咂嘴,往我旁边的空椅子上一坐:「你这带了才一年,人家就成你领导了?」

我点开另一个工作邮件,没理他。

老周不死心,又压低声音:「你知道他怎么上去的吗?」

我转过头看他。

「听说他跟李总监走得很近。周末一起打球,还去过李总家里吃饭。上次李总女儿过生日,他送了个什么智能音箱。」

老周说这些话的时候眼睛在发亮,那种亮跟林晓峰刚来时的亮不一样——这是一种窥探八卦时特有的兴奋。

我转回去,继续看邮件。

「那是他的本事。」

老周的亮光灭了一半:「老刘,你这个人,就是太实在了。」

我没再说话。桌上那杯茶凉了,我端起来喝了一口,凉的。

07

林晓峰晋升后的第一个周一,九点半,部门会。

我到会议室的时候,发现座位有了变化。林晓峰坐在长桌的前端,李总监右手边。面前摆着一个崭新的笔记本,黑色硬皮封面,笔是一支万宝龙。

那支笔,我在李总监手里见过。

我在角落里坐下。

李总监先讲了几件常规的事,然后话锋一转:「接下来,让晓峰讲讲他们组的规划。」

「他们组」。从今天起,是「他们组」了。

林晓峰站起来。他今天穿了一件深蓝色的衬衫,扣子扣到了最上面那颗,领口很紧——一种试图让自己看起来更成熟的紧绷。

「各位,我们组接下来要推进一个新项目,重构现有的核心业务系统。」

他说的那个系统,是我五年前带队做的。前后花了八个月,经历了三次重大需求变更,两次通宵修复生产事故,最后稳定运行至今,没出过大的问题。

我坐在那里,手里的笔没转。

他继续说:「这个系统,当时的设计思路现在已经过时了。业务发展太快,技术也在迭代,我们不能抱着老一套不放。」

他的目光从PPT上移开,扫过会议室,在我脸上停了大概一秒钟。就一秒。但那一秒足够让会议室里所有人都注意到了。

「有些老经验,放在当年是对的,但现在已经不适用了。我们要拥抱新技术,新思维,不能躺在功劳簿上吃老本。」

会议室里安静极了。

空调的嗡嗡声突然变得很响。

没有人说话,但我感觉到至少五六道目光从不同方向射过来。老周的最重,像是有温度的。

我坐在椅子上,脸上没什么表情。手里的笔还在手指间夹着,没转,也没放下。

他讲完了。李总监第一个鼓掌,然后是稀稀拉拉的掌声跟上来。

「晓峰说得很好,年轻人有想法,有冲劲,大家要支持。」

散会了。椅子拖动的声音此起彼伏,人们收拾东西往外走。

老周是第一个冲到我旁边的。

「老刘!你听见了吗?他说的什么话!」

我在收拾笔记本,一张一张把散落的纸理齐,动作很慢。

「老刘!」老周的声音急了,尾音都飘高了,「你教了他一年,他转头说你过时了!」

我把笔记本合上,站起来,看着他。

「他没说错,那个系统确实老了。」

老周的嘴张着,下巴往下掉了一截,活像被人点了穴。

「我走了。」

我拿着笔记本,从会议室后门出去,走过走廊,经过茶水间。

林晓峰正在茶水间门口,跟几个同事站着说话。看见我过来,他很自然地中断了谈话,笑着打了个招呼:「刘老师。」

那个笑容跟半年前一模一样——弧度精准,温度刚好。但配上今天那番话,就像一件洗了太多次的白衬衫,看着还是白的,但底色已经有点灰了。

我点点头,走过去。

没回头。

08

林晓峰的重构项目启动了。

他从别的部门挖了两个人,又从今年的校招里要了三个应届生,组成一个全新的团队。五个人,平均年龄不到二十八岁,会议室里的白板上写满了新名词——微服务、容器化、云原生。

我继续维护老系统。

这一安排发下来的时候,老周特意跑来跟我确认:「老刘,他没把你编进他的新项目组?」

我看着电脑屏幕上跑了十年的老代码:「没有。」

「什么意思?嫌弃你?」

我敲了一行命令,回车:「可能觉得我不需要拥抱新技术。」

老周被噎了一下,张嘴想说什么,又咽回去了。

两周后,问题来了。

新系统上线前,需要跟老系统做数据对接。林晓峰的团队写了对接接口,联调了三天,死活调不通。数据传过去就报错,错误代码是一个他们谁都没见过的编号。

第四天下午两点,林晓峰出现在我工位旁边。

他这次没有弯腰,但站的位置比以前近了半步——这半步是「求人」的半步。

「刘老师,」他开口了,声音还是那个调,但语速比平时快了一点,「我们那个接口,老是报错,您能不能帮忙看看?」

我靠在椅背上,手指搭在键盘边缘,没有马上回答。

我看着他的脸。脸上的表情分了两层:外面一层是谦逊和求助,这一层他已经练得很熟了;里面一层是别扭,是一种「明明刚说了你过时,这会儿又来找你」的拧巴。这两层叠在一起,让他整张脸看起来有一种微微的僵硬。

「你们项目的事,我不太方便插手吧?」

他愣了一下。显然没预料到这个回答。停顿了半秒,他笑了一下,但那笑容的弧度没控制好,歪了一点。

「刘老师,您是前辈,经验丰富,帮我们看看,很快就解决了。」

我想了想,说:「行,把接口文档发我。」

文档发过来,我看了十分钟。

「你们这个接口,传输协议用的是新的,但老系统那边的数据格式没变。这个字段,老系统里长度是32位,你们那边设成了16位,数据一传就截断了。」

他的表情变了。嘴角抿了一下,那是一个人发现自己犯了低级错误时的本能反应。

「可我们当初问过,没人说这个字段有长度限制。」

他说「问过」的时候,眼睛往左上方飘了一下。

我看着他。

他没再说话。

「那个字段,是十年前定的,文档里没写。」我说,「但写过那个系统的人都知道。」

沉默。

「你们那个组,没有人写过那个系统。所以你们不知道。」

他站在我工位旁边,脸一点一点红上来,从脖子往上,像是有人慢慢拧开了一个阀门。

「刘老师,那您看怎么改?」

我把改法告诉他——把接口那边的字段长度从16改成64,留出冗余。他一边听一边在手机上打字,打完了,「谢谢刘老师」说得又快又轻,转身走了。

走的时候脚步比来的时候快了一倍。

老周从隔断后面冒出来——他刚才一直在那里,耳朵竖得跟雷达似的。

「老刘,你帮他干嘛?」

我看着电脑屏幕上的老代码。

「他刚说完你过时,你就去帮他擦屁股?」

我继续看屏幕。屏幕上那行代码是我2019年写的,注释里的日期还在。

「不是帮他。」我说,「是帮那个系统。」

老周愣住了。

「那个系统,是我写的。出问题,我不能看着不管。」

老周张了张嘴,想说什么,看了看我的表情,又把嘴合上了。

09

又过了两周,林晓峰又来了。

这次来的时候,他手里端着一杯咖啡。不是他自己的,是帮我买的。拿铁,热的,放在我桌上的时候杯壁还烫手。

「刘老师,喝杯咖啡。」

我看了那杯咖啡一眼,没有去端。

「什么事?」

他的笑容僵了一秒,然后迅速恢复:「刘老师,这次的问题比较大……」

新系统上线后,性能跟不上。平时还好,一到下午三点的业务高峰期,系统直接卡死。用户投诉电话打到了客户那边,客户打到了公司。

「刘老师,」他的态度比上次还低,低到我几乎能看见他发旋,「这个问题我们实在搞不定,您能不能……」

他把「帮帮忙」三个字咽了回去,用一个省略号代替。

我看着他,沉默了几秒。

然后站起来,走到他那边。

他的团队五个人,一个在查日志,两个在对着监控面板发呆,还有两个在搜索引擎里翻解决方案。屏幕上一片焦头烂额。

我拉了一把椅子坐下,打开代码仓库,从入口函数开始看。

半小时后,我找到了。

「你们这个核心算法,用的是什么?」

旁边那个应届生接了话:「递归遍历,教科书上的标准方案。」

我点了点屏幕:「这个方案在数据量小的时候没问题,但你们现在日均数据量是多少?」

「三百万条左右。」

「三百万条,递归遍历,时间复杂度是指数级的。每次查询都要把整棵树遍历一遍。高峰期并发一上来,CPU直接拉满。」

五个人面面相觑。

我继续说:「老系统里这个位置,用的是另一种算法。说穿了就是提前建一张映射表,空间换时间,查询复杂度是O(1)。看起来笨,像是十年前的老土办法,但它能扛住两千万条数据的并发查询。」

安静。

只有空调在嗡嗡地响。

林晓峰站在我身后,我没回头,但我能感觉到他在看我后脑勺。

他开口了,声音有点干:「刘老师,那您当初怎么不早说?」

我转过身,看着他。

「你当初不是说过时了吗?」

会议室里,五个人同时低下了头,键盘声、鼠标声全停了,安静得像是有人按了静音键。