创作声明:本文为虚构创作,请勿与现实关联
01
三月初,部门群里弹出一份通知。
「为了加强人才梯队建设,公司决定推行导师制,由资深员工带教新人,传承经验,共同成长。」
我扫了一眼,把手机扣在桌上,继续写代码。这种通知每年都有,跟写年终总结一样,走个形式。
下午开会的时候,李总监站在台上,目光从左扫到右,最后落在我这个角落里。
「老刘,你带一个。」
我手里正转着笔,听见自己名字,笔转脱了,啪嗒掉在桌上。
「我?」
「对,你经验最丰富,带新人最合适。」
旁边有人小声笑了一下:「老刘带人,那得带出第二个老刘来。」
笑的是小马,入职三年,平时最会凑热闹。我没理他,把笔捡起来。
「谁?」
「林晓峰,去年校招进来的,名校硕士,底子不错。你好好带。」
李总监说完就翻下一页PPT了,像是在分配一件再平常不过的事。
散会的时候人往外走,老周故意放慢脚步,等人群散了才凑过来,压着嗓子:「老刘,你知道那个林晓峰是谁吗?」
「谁?」
「去年进公司,三个月就把人事部的小赵追到手了。那小子,机灵得很。」
我看了他一眼:「机灵不好吗?」
老周搓了搓手指,那是他每次想说重话之前的习惯动作:「好是好,就是太机灵了。」
我没多想,回到工位,把刚才没写完的那行代码补上了。
02
第二天上午,我正在调一个接口的超时问题,余光瞥见一个人影在工位旁边站住了。
站了大概有十秒钟,没出声。
我把最后一行代码敲完,才抬头。
林晓峰站在那里,微微弯着腰,弯的幅度刚好——不至于太卑微,又恰到好处地表达了尊重。这个弧度,像是练过的。
「刘老师,以后请您多多指教。」
他笑起来的时候,嘴角的弧度和弯腰的弧度一样精准。
我打量了他一下。年轻,白净,金丝边眼镜,衬衫袖口挽了两道,露出一截干净的手腕,上面戴着一块表——不是什么名牌,但比工位上的程序员们都讲究得多。
「坐。」我指了指旁边的空位。
他坐下,背挺得很直,双手交叠放在膝盖上:「刘老师,我来了两年,很多地方不懂,您有什么要求尽管说,我一定好好学。」
这句话说得滴水不漏。我在这个公司干了十五年,听过的客套话能绕办公楼三圈,但这句说得确实舒服。
我没接他的话,转过身,打开电脑,调出公司核心业务系统的架构文档。
「这个系统,你了解多少?」
他凑过来,眼睛扫了两行。我注意到他的表情变了一下——嘴角那个精准的弧度消失了半秒,又迅速恢复。
「这个……还没接触过。」
我「嗯」了一声,开始讲。
从系统架构讲起,到核心逻辑,到当初设计时的思路,到后来踩过的坑。我讲东西有个毛病,一旦打开了就收不住,因为这些东西在我脑子里存了十几年,每一个模块后面都连着一段经历。
他听得很认真。不是那种假装认真的认真——假装的人会频繁点头,真正听进去的人反而不怎么动。他几乎不动,只在关键节点飞快地在本子上记几笔,偶尔抬头问一个问题。
问题问得准。不是那种为了表现而提问的问题,是真正卡住了才会问的问题。
两个小时后,我讲完了。
他把笔记本合上,由衷地说了一句:「刘老师,您讲得太清楚了。这些东西,书上根本学不到。」
我摆摆手:「慢慢来,不急。」
他点点头,眼睛亮亮的。那种亮,可能是感激,也可能是一个聪明人发现了一座矿的兴奋。
我没多想。
03
接下来的日子,我把自己知道的东西,一样一样往外掏。
系统架构的思路,我讲。数据库设计的原则,我讲。代码规范的重要性,我讲。那些写在代码注释里的、十几年攒下的经验,我一条一条拎出来给他看。
「这个地方,当初这么写是因为有历史原因。2016年那次系统迁移,数据库换了一版,但这个字段的映射关系没改过来。现在看着不合理,但改起来会影响十几个模块,牵一发动全身。」
他在本子上画了一个关系图,画得比我讲得还清楚。
「这个接口,调用的时候要注意超时时间。对方那个服务器是2018年采购的,老毛病了,高峰期响应慢,超时设太短会报错,设太长又会堵住线程池。我当初测出来的最优值是三秒二。」
他把「3.2s」用红笔圈了起来。
「这个算法,你看起来笨不笨?」
他看了一眼,诚实地点了点头。
「笨。但数据量超过五百万条的时候,比你们教科书上那些花哨的快一倍。原因是它的空间复杂度低,缓存命中率高。这是我当年试了六种方案才试出来的。」
他认真地写下来,每次听完都会抬起头说一句:「刘老师,您太厉害了,这些东西我什么时候才能学会?」
这句话他说了不下二十次。每一次的语气都一样——谦逊、真诚、带着恰到好处的崇拜。
我说:「慢慢来,多写多看,两年就差不多了。」
有一天加班,我给他讲一个复杂的业务逻辑,讲到一半发现外面天都黑了,抬头看表,七点四十。
他坐在旁边,本子上密密麻麻记了三页,眼睛还是亮的。
「刘老师,您先走吧,我把今天的笔记整理一下。」
我站起来收拾东西的时候,老周从工位后面探出头——他其实早就下班了,一直没走,在那里偷听。
等林晓峰去了卫生间,老周快步走过来:「老刘,你这也太实在了,什么都教?」
我拉上电脑包的拉链:「不然呢?」
「你就不怕教会了徒弟,饿死师傅?」
我笑了一下:「饿不死。这些东西,他学会了是他的本事,我教了是我的本分。」
老周的目光从我脸上移到林晓峰空着的座位上,又移回来,嘴唇动了动,最后摇摇头,没再说话。
04
半年后,林晓峰独立做了一个小项目。
说是独立,其实前前后后他来问了我不下十次。哪次数据库查询慢了,哪次接口报了奇怪的错,他第一反应都是转过头喊一声「刘老师」。我每次都放下手里的活,帮他看。
项目不大,但做得确实不错,流程规范,代码干净,按时交付,没出岔子。
月度部门会上,李总监特意提了一嘴:「晓峰进步很快,老刘带得好,大家要向他们学习。」
林晓峰站起来,微微欠身,动作比半年前更自然了,像是已经变成了本能。
「谢谢李总,谢谢刘老师。刘老师这半年教了我太多东西,没有他,我不可能这么快上手。」
他转过身看向我,目光里满是感激。
全场的目光也跟着转过来。我坐在角落的老位置上,点了一下头,没说话。
散会后人群往外走,林晓峰三步并两步追上来:「刘老师,今晚我请您吃饭,感谢您这半年的指导。」
他说这话的时候声音不大不小,刚好够周围几个同事听见。
我背着电脑包,摆摆手:「不用,回去陪老婆孩子。」
他愣了一下,然后笑了:「刘老师,您真低调。以后有机会,我再请您。」
我点点头,走了。
身后传来老周的声音,不知道是跟谁说的:「这小子,嘴是真甜。」
05
又过了三个月,林晓峰开始独立负责一个中型项目。
这个项目难度不小,涉及公司最核心的业务系统,对接三个外部接口,工期两个月。按资历,这个项目本该分给部门里几个干了五六年的老人,但李总监点名让林晓峰上。
会上,李总监说:「年轻人要锻炼,不能老让老同志扛着。」
坐我旁边的老周用膝盖顶了我一下。我没动。
当天下午,林晓峰来找我。他搬了一把椅子,坐在我旁边,把笔记本电脑打开,屏幕上是他做的技术方案。
「刘老师,这个项目我有点没底,您能不能帮我看看?」
他说「有点没底」的时候,声音压得比平时低,像是这四个字让他不太舒服。一个半年前还什么都不懂的新人,已经开始为承认自己「没底」而感到别扭了。
我没说话,把他的笔记本转过来,从第一页开始看。
看了一个多小时,改了十几处。
「这里,边界条件没考虑全,用户输入负数的时候会报空指针。」
他飞快地记下来。
「这里,接口设计有问题,你把查询和修改放在同一个接口里了,以后业务一拆分,这个接口就废了,得全部重写。」
他的笔顿了一下,但没反驳。
「这里,数据库索引没建对。你在这个字段上建了索引,但实际查询走的是另外两个字段的组合条件,这个索引根本用不上。数据量过了百万,这个页面就会卡三秒以上。」
他把这条记下来的时候,手指有一瞬间的僵硬。连续被指出十几个问题,对于一个聪明人来说并不好受。
但他很快恢复了,合上笔记本,抬起头:「刘老师,太谢谢您了。要不是您,我这些坑都得踩一遍。」
我说:「没事,好好干。」
项目上线那天,一切顺利。
李总监又在月度会上表扬:「晓峰这个项目做得漂亮,客户很满意,提前三天交付。」
林晓峰站起来,还是那副标准的谦逊姿态,但我注意到一个细节——他这次先看了李总监,才转向我。
「谢谢李总,感谢团队的配合,特别感谢刘老师的指导。」
感谢的顺序变了。半年前那次,他先看我再看李总。
我坐在角落里,看着他。
那一刻,心里有一种很奇怪的感觉。不是骄傲,也不是失落,是一种说不清的东西,像是什么正在慢慢移动,但你不知道它要移到哪里去。
散会后,我照例最后一个走。经过李总监办公室的时候,门开着一条缝,里面传出两个人的笑声。
一个是李总监的,另一个是林晓峰的。
林晓峰在说:「李总,下周末约个球?上次那个场地不错。」
我没停步,走过去了。
06
年底,公司发了一批晋升通知。
我照例没有。十五年了,我从程序员做到架构师,技术级别到了天花板,管理岗从来没我的份。不是第一次了,无所谓。
但那天下午,我的邮箱里弹出一条新通知,我扫了一眼,手停在了鼠标上。
「晋升林晓峰为技术部项目组组长,即日起生效。」
项目组组长。
我反复看了两遍那个「组长」。这个岗位跟我在同一个部门,分管的项目跟我手上的有交叉。也就是说,从今天起,他是我的直接领导。
我盯着那条通知,鼠标在邮件上悬了很久,最后点了关闭。
老周不知道什么时候已经站在我身后了,压着嗓子:「老刘,你看到了?」
「嗯。」
「他来了还不到两年吧?」
「一年零九个月。」
我说出这个数字的时候,自己也愣了一下——我居然记得这么清楚。
老周咂了咂嘴,往我旁边的空椅子上一坐:「你这带了才一年,人家就成你领导了?」
我点开另一个工作邮件,没理他。
老周不死心,又压低声音:「你知道他怎么上去的吗?」
我转过头看他。
「听说他跟李总监走得很近。周末一起打球,还去过李总家里吃饭。上次李总女儿过生日,他送了个什么智能音箱。」
老周说这些话的时候眼睛在发亮,那种亮跟林晓峰刚来时的亮不一样——这是一种窥探八卦时特有的兴奋。
我转回去,继续看邮件。
「那是他的本事。」
老周的亮光灭了一半:「老刘,你这个人,就是太实在了。」
我没再说话。桌上那杯茶凉了,我端起来喝了一口,凉的。
07
林晓峰晋升后的第一个周一,九点半,部门会。
我到会议室的时候,发现座位有了变化。林晓峰坐在长桌的前端,李总监右手边。面前摆着一个崭新的笔记本,黑色硬皮封面,笔是一支万宝龙。
那支笔,我在李总监手里见过。
我在角落里坐下。
李总监先讲了几件常规的事,然后话锋一转:「接下来,让晓峰讲讲他们组的规划。」
「他们组」。从今天起,是「他们组」了。
林晓峰站起来。他今天穿了一件深蓝色的衬衫,扣子扣到了最上面那颗,领口很紧——一种试图让自己看起来更成熟的紧绷。
「各位,我们组接下来要推进一个新项目,重构现有的核心业务系统。」
他说的那个系统,是我五年前带队做的。前后花了八个月,经历了三次重大需求变更,两次通宵修复生产事故,最后稳定运行至今,没出过大的问题。
我坐在那里,手里的笔没转。
他继续说:「这个系统,当时的设计思路现在已经过时了。业务发展太快,技术也在迭代,我们不能抱着老一套不放。」
他的目光从PPT上移开,扫过会议室,在我脸上停了大概一秒钟。就一秒。但那一秒足够让会议室里所有人都注意到了。
「有些老经验,放在当年是对的,但现在已经不适用了。我们要拥抱新技术,新思维,不能躺在功劳簿上吃老本。」
会议室里安静极了。
空调的嗡嗡声突然变得很响。
没有人说话,但我感觉到至少五六道目光从不同方向射过来。老周的最重,像是有温度的。
我坐在椅子上,脸上没什么表情。手里的笔还在手指间夹着,没转,也没放下。
他讲完了。李总监第一个鼓掌,然后是稀稀拉拉的掌声跟上来。
「晓峰说得很好,年轻人有想法,有冲劲,大家要支持。」
散会了。椅子拖动的声音此起彼伏,人们收拾东西往外走。
老周是第一个冲到我旁边的。
「老刘!你听见了吗?他说的什么话!」
我在收拾笔记本,一张一张把散落的纸理齐,动作很慢。
「老刘!」老周的声音急了,尾音都飘高了,「你教了他一年,他转头说你过时了!」
我把笔记本合上,站起来,看着他。
「他没说错,那个系统确实老了。」
老周的嘴张着,下巴往下掉了一截,活像被人点了穴。
「我走了。」
我拿着笔记本,从会议室后门出去,走过走廊,经过茶水间。
林晓峰正在茶水间门口,跟几个同事站着说话。看见我过来,他很自然地中断了谈话,笑着打了个招呼:「刘老师。」
那个笑容跟半年前一模一样——弧度精准,温度刚好。但配上今天那番话,就像一件洗了太多次的白衬衫,看着还是白的,但底色已经有点灰了。
我点点头,走过去。
没回头。
08
林晓峰的重构项目启动了。
他从别的部门挖了两个人,又从今年的校招里要了三个应届生,组成一个全新的团队。五个人,平均年龄不到二十八岁,会议室里的白板上写满了新名词——微服务、容器化、云原生。
我继续维护老系统。
这一安排发下来的时候,老周特意跑来跟我确认:「老刘,他没把你编进他的新项目组?」
我看着电脑屏幕上跑了十年的老代码:「没有。」
「什么意思?嫌弃你?」
我敲了一行命令,回车:「可能觉得我不需要拥抱新技术。」
老周被噎了一下,张嘴想说什么,又咽回去了。
两周后,问题来了。
新系统上线前,需要跟老系统做数据对接。林晓峰的团队写了对接接口,联调了三天,死活调不通。数据传过去就报错,错误代码是一个他们谁都没见过的编号。
第四天下午两点,林晓峰出现在我工位旁边。
他这次没有弯腰,但站的位置比以前近了半步——这半步是「求人」的半步。
「刘老师,」他开口了,声音还是那个调,但语速比平时快了一点,「我们那个接口,老是报错,您能不能帮忙看看?」
我靠在椅背上,手指搭在键盘边缘,没有马上回答。
我看着他的脸。脸上的表情分了两层:外面一层是谦逊和求助,这一层他已经练得很熟了;里面一层是别扭,是一种「明明刚说了你过时,这会儿又来找你」的拧巴。这两层叠在一起,让他整张脸看起来有一种微微的僵硬。
「你们项目的事,我不太方便插手吧?」
他愣了一下。显然没预料到这个回答。停顿了半秒,他笑了一下,但那笑容的弧度没控制好,歪了一点。
「刘老师,您是前辈,经验丰富,帮我们看看,很快就解决了。」
我想了想,说:「行,把接口文档发我。」
文档发过来,我看了十分钟。
「你们这个接口,传输协议用的是新的,但老系统那边的数据格式没变。这个字段,老系统里长度是32位,你们那边设成了16位,数据一传就截断了。」
他的表情变了。嘴角抿了一下,那是一个人发现自己犯了低级错误时的本能反应。
「可我们当初问过,没人说这个字段有长度限制。」
他说「问过」的时候,眼睛往左上方飘了一下。
我看着他。
他没再说话。
「那个字段,是十年前定的,文档里没写。」我说,「但写过那个系统的人都知道。」
沉默。
「你们那个组,没有人写过那个系统。所以你们不知道。」
他站在我工位旁边,脸一点一点红上来,从脖子往上,像是有人慢慢拧开了一个阀门。
「刘老师,那您看怎么改?」
我把改法告诉他——把接口那边的字段长度从16改成64,留出冗余。他一边听一边在手机上打字,打完了,「谢谢刘老师」说得又快又轻,转身走了。
走的时候脚步比来的时候快了一倍。
老周从隔断后面冒出来——他刚才一直在那里,耳朵竖得跟雷达似的。
「老刘,你帮他干嘛?」
我看着电脑屏幕上的老代码。
「他刚说完你过时,你就去帮他擦屁股?」
我继续看屏幕。屏幕上那行代码是我2019年写的,注释里的日期还在。
「不是帮他。」我说,「是帮那个系统。」
老周愣住了。
「那个系统,是我写的。出问题,我不能看着不管。」
老周张了张嘴,想说什么,看了看我的表情,又把嘴合上了。
09
又过了两周,林晓峰又来了。
这次来的时候,他手里端着一杯咖啡。不是他自己的,是帮我买的。拿铁,热的,放在我桌上的时候杯壁还烫手。
「刘老师,喝杯咖啡。」
我看了那杯咖啡一眼,没有去端。
「什么事?」
他的笑容僵了一秒,然后迅速恢复:「刘老师,这次的问题比较大……」
新系统上线后,性能跟不上。平时还好,一到下午三点的业务高峰期,系统直接卡死。用户投诉电话打到了客户那边,客户打到了公司。
「刘老师,」他的态度比上次还低,低到我几乎能看见他发旋,「这个问题我们实在搞不定,您能不能……」
他把「帮帮忙」三个字咽了回去,用一个省略号代替。
我看着他,沉默了几秒。
然后站起来,走到他那边。
他的团队五个人,一个在查日志,两个在对着监控面板发呆,还有两个在搜索引擎里翻解决方案。屏幕上一片焦头烂额。
我拉了一把椅子坐下,打开代码仓库,从入口函数开始看。
半小时后,我找到了。
「你们这个核心算法,用的是什么?」
旁边那个应届生接了话:「递归遍历,教科书上的标准方案。」
我点了点屏幕:「这个方案在数据量小的时候没问题,但你们现在日均数据量是多少?」
「三百万条左右。」
「三百万条,递归遍历,时间复杂度是指数级的。每次查询都要把整棵树遍历一遍。高峰期并发一上来,CPU直接拉满。」
五个人面面相觑。
我继续说:「老系统里这个位置,用的是另一种算法。说穿了就是提前建一张映射表,空间换时间,查询复杂度是O(1)。看起来笨,像是十年前的老土办法,但它能扛住两千万条数据的并发查询。」
安静。
只有空调在嗡嗡地响。
林晓峰站在我身后,我没回头,但我能感觉到他在看我后脑勺。
他开口了,声音有点干:「刘老师,那您当初怎么不早说?」
我转过身,看着他。
「你当初不是说过时了吗?」
会议室里,五个人同时低下了头,键盘声、鼠标声全停了,安静得像是有人按了静音键。
热门跟贴