創作聲明:本文為虛構創作,請勿與現實關聯
01
三月初,部門群里彈出一份通知。
「為了加強人才梯隊建設,公司決定推行導師制,由資深員工帶教新人,傳承經驗,共同成長。」
我掃了一眼,把手機扣在桌上,繼續寫代碼。這種通知每年都有,跟寫年終總結一樣,走個形式。
下午開會的時候,李總監站在臺上,目光從左掃到右,最后落在我這個角落里。
「老劉,你帶一個。」
我手里正轉著筆,聽見自己名字,筆轉脫了,啪嗒掉在桌上。
「我?」
「對,你經驗最豐富,帶新人最合適。」
旁邊有人小聲笑了一下:「老劉帶人,那得帶出第二個老劉來。」
笑的是小馬,入職三年,平時最會湊熱鬧。我沒理他,把筆撿起來。
「誰?」
「林曉峰,去年校招進來的,名校碩士,底子不錯。你好好帶。」
李總監說完就翻下一頁PPT了,像是在分配一件再平常不過的事。
散會的時候人往外走,老周故意放慢腳步,等人群散了才湊過來,壓著嗓子:「老劉,你知道那個林曉峰是誰嗎?」
「誰?」
「去年進公司,三個月就把人事部的小趙追到手了。那小子,機靈得很。」
我看了他一眼:「機靈不好嗎?」
老周搓了搓手指,那是他每次想說重話之前的習慣動作:「好是好,就是太機靈了。」
我沒多想,回到工位,把剛才沒寫完的那行代碼補上了。
02
第二天上午,我正在調一個接口的超時問題,余光瞥見一個人影在工位旁邊站住了。
站了大概有十秒鐘,沒出聲。
我把最后一行代碼敲完,才抬頭。
林曉峰站在那里,微微彎著腰,彎的幅度剛好——不至于太卑微,又恰到好處地表達了尊重。這個弧度,像是練過的。
「劉老師,以后請您多多指教。」
他笑起來的時候,嘴角的弧度和彎腰的弧度一樣精準。
我打量了他一下。年輕,白凈,金絲邊眼鏡,襯衫袖口挽了兩道,露出一截干凈的手腕,上面戴著一塊表——不是什么名牌,但比工位上的程序員們都講究得多。
「坐。」我指了指旁邊的空位。
他坐下,背挺得很直,雙手交疊放在膝蓋上:「劉老師,我來了兩年,很多地方不懂,您有什么要求盡管說,我一定好好學。」
這句話說得滴水不漏。我在這個公司干了十五年,聽過的客套話能繞辦公樓三圈,但這句說得確實舒服。
我沒接他的話,轉過身,打開電腦,調出公司核心業務系統的架構文檔。
「這個系統,你了解多少?」
他湊過來,眼睛掃了兩行。我注意到他的表情變了一下——嘴角那個精準的弧度消失了半秒,又迅速恢復。
「這個……還沒接觸過。」
我「嗯」了一聲,開始講。
從系統架構講起,到核心邏輯,到當初設計時的思路,到后來踩過的坑。我講東西有個毛病,一旦打開了就收不住,因為這些東西在我腦子里存了十幾年,每一個模塊后面都連著一段經歷。
他聽得很認真。不是那種假裝認真的認真——假裝的人會頻繁點頭,真正聽進去的人反而不怎么動。他幾乎不動,只在關鍵節點飛快地在本子上記幾筆,偶爾抬頭問一個問題。
問題問得準。不是那種為了表現而提問的問題,是真正卡住了才會問的問題。
兩個小時后,我講完了。
他把筆記本合上,由衷地說了一句:「劉老師,您講得太清楚了。這些東西,書上根本學不到。」
我擺擺手:「慢慢來,不急。」
他點點頭,眼睛亮亮的。那種亮,可能是感激,也可能是一個聰明人發現了一座礦的興奮。
我沒多想。
![]()
03
接下來的日子,我把自己知道的東西,一樣一樣往外掏。
系統架構的思路,我講。數據庫設計的原則,我講。代碼規范的重要性,我講。那些寫在代碼注釋里的、十幾年攢下的經驗,我一條一條拎出來給他看。
「這個地方,當初這么寫是因為有歷史原因。2016年那次系統遷移,數據庫換了一版,但這個字段的映射關系沒改過來。現在看著不合理,但改起來會影響十幾個模塊,牽一發動全身。」
他在本子上畫了一個關系圖,畫得比我講得還清楚。
「這個接口,調用的時候要注意超時時間。對方那個服務器是2018年采購的,老毛病了,高峰期響應慢,超時設太短會報錯,設太長又會堵住線程池。我當初測出來的最優值是三秒二。」
他把「3.2s」用紅筆圈了起來。
「這個算法,你看起來笨不笨?」
他看了一眼,誠實地點了點頭。
「笨。但數據量超過五百萬條的時候,比你們教科書上那些花哨的快一倍。原因是它的空間復雜度低,緩存命中率高。這是我當年試了六種方案才試出來的。」
他認真地寫下來,每次聽完都會抬起頭說一句:「劉老師,您太厲害了,這些東西我什么時候才能學會?」
這句話他說了不下二十次。每一次的語氣都一樣——謙遜、真誠、帶著恰到好處的崇拜。
我說:「慢慢來,多寫多看,兩年就差不多了。」
有一天加班,我給他講一個復雜的業務邏輯,講到一半發現外面天都黑了,抬頭看表,七點四十。
他坐在旁邊,本子上密密麻麻記了三頁,眼睛還是亮的。
「劉老師,您先走吧,我把今天的筆記整理一下。」
我站起來收拾東西的時候,老周從工位后面探出頭——他其實早就下班了,一直沒走,在那里偷聽。
等林曉峰去了衛生間,老周快步走過來:「老劉,你這也太實在了,什么都教?」
我拉上電腦包的拉鏈:「不然呢?」
「你就不怕教會了徒弟,餓死師傅?」
我笑了一下:「餓不死。這些東西,他學會了是他的本事,我教了是我的本分。」
老周的目光從我臉上移到林曉峰空著的座位上,又移回來,嘴唇動了動,最后搖搖頭,沒再說話。
04
半年后,林曉峰獨立做了一個小項目。
說是獨立,其實前前后后他來問了我不下十次。哪次數據庫查詢慢了,哪次接口報了奇怪的錯,他第一反應都是轉過頭喊一聲「劉老師」。我每次都放下手里的活,幫他看。
項目不大,但做得確實不錯,流程規范,代碼干凈,按時交付,沒出岔子。
月度部門會上,李總監特意提了一嘴:「曉峰進步很快,老劉帶得好,大家要向他們學習。」
林曉峰站起來,微微欠身,動作比半年前更自然了,像是已經變成了本能。
「謝謝李總,謝謝劉老師。劉老師這半年教了我太多東西,沒有他,我不可能這么快上手。」
他轉過身看向我,目光里滿是感激。
全場的目光也跟著轉過來。我坐在角落的老位置上,點了一下頭,沒說話。
散會后人群往外走,林曉峰三步并兩步追上來:「劉老師,今晚我請您吃飯,感謝您這半年的指導。」
他說這話的時候聲音不大不小,剛好夠周圍幾個同事聽見。
我背著電腦包,擺擺手:「不用,回去陪老婆孩子。」
他愣了一下,然后笑了:「劉老師,您真低調。以后有機會,我再請您。」
我點點頭,走了。
身后傳來老周的聲音,不知道是跟誰說的:「這小子,嘴是真甜。」
05
又過了三個月,林曉峰開始獨立負責一個中型項目。
這個項目難度不小,涉及公司最核心的業務系統,對接三個外部接口,工期兩個月。按資歷,這個項目本該分給部門里幾個干了五六年的老人,但李總監點名讓林曉峰上。
會上,李總監說:「年輕人要鍛煉,不能老讓老同志扛著。」
坐我旁邊的老周用膝蓋頂了我一下。我沒動。
當天下午,林曉峰來找我。他搬了一把椅子,坐在我旁邊,把筆記本電腦打開,屏幕上是他做的技術方案。
「劉老師,這個項目我有點沒底,您能不能幫我看看?」
他說「有點沒底」的時候,聲音壓得比平時低,像是這四個字讓他不太舒服。一個半年前還什么都不懂的新人,已經開始為承認自己「沒底」而感到別扭了。
我沒說話,把他的筆記本轉過來,從第一頁開始看。
看了一個多小時,改了十幾處。
「這里,邊界條件沒考慮全,用戶輸入負數的時候會報空指針。」
他飛快地記下來。
「這里,接口設計有問題,你把查詢和修改放在同一個接口里了,以后業務一拆分,這個接口就廢了,得全部重寫。」
他的筆頓了一下,但沒反駁。
「這里,數據庫索引沒建對。你在這個字段上建了索引,但實際查詢走的是另外兩個字段的組合條件,這個索引根本用不上。數據量過了百萬,這個頁面就會卡三秒以上。」
他把這條記下來的時候,手指有一瞬間的僵硬。連續被指出十幾個問題,對于一個聰明人來說并不好受。
但他很快恢復了,合上筆記本,抬起頭:「劉老師,太謝謝您了。要不是您,我這些坑都得踩一遍。」
我說:「沒事,好好干。」
項目上線那天,一切順利。
李總監又在月度會上表揚:「曉峰這個項目做得漂亮,客戶很滿意,提前三天交付。」
林曉峰站起來,還是那副標準的謙遜姿態,但我注意到一個細節——他這次先看了李總監,才轉向我。
「謝謝李總,感謝團隊的配合,特別感謝劉老師的指導。」
感謝的順序變了。半年前那次,他先看我再看李總。
我坐在角落里,看著他。
那一刻,心里有一種很奇怪的感覺。不是驕傲,也不是失落,是一種說不清的東西,像是什么正在慢慢移動,但你不知道它要移到哪里去。
散會后,我照例最后一個走。經過李總監辦公室的時候,門開著一條縫,里面傳出兩個人的笑聲。
一個是李總監的,另一個是林曉峰的。
林曉峰在說:「李總,下周末約個球?上次那個場地不錯。」
我沒停步,走過去了。
06
年底,公司發了一批晉升通知。
我照例沒有。十五年了,我從程序員做到架構師,技術級別到了天花板,管理崗從來沒我的份。不是第一次了,無所謂。
但那天下午,我的郵箱里彈出一條新通知,我掃了一眼,手停在了鼠標上。
「晉升林曉峰為技術部項目組組長,即日起生效。」
項目組組長。
我反復看了兩遍那個「組長」。這個崗位跟我在同一個部門,分管的項目跟我手上的有交叉。也就是說,從今天起,他是我的直接領導。
我盯著那條通知,鼠標在郵件上懸了很久,最后點了關閉。
老周不知道什么時候已經站在我身后了,壓著嗓子:「老劉,你看到了?」
「嗯。」
「他來了還不到兩年吧?」
「一年零九個月。」
我說出這個數字的時候,自己也愣了一下——我居然記得這么清楚。
老周咂了咂嘴,往我旁邊的空椅子上一坐:「你這帶了才一年,人家就成你領導了?」
我點開另一個工作郵件,沒理他。
老周不死心,又壓低聲音:「你知道他怎么上去的嗎?」
我轉過頭看他。
「聽說他跟李總監走得很近。周末一起打球,還去過李總家里吃飯。上次李總女兒過生日,他送了個什么智能音箱。」
老周說這些話的時候眼睛在發亮,那種亮跟林曉峰剛來時的亮不一樣——這是一種窺探八卦時特有的興奮。
我轉回去,繼續看郵件。
「那是他的本事。」
老周的亮光滅了一半:「老劉,你這個人,就是太實在了。」
我沒再說話。桌上那杯茶涼了,我端起來喝了一口,涼的。
07
林曉峰晉升后的第一個周一,九點半,部門會。
我到會議室的時候,發現座位有了變化。林曉峰坐在長桌的前端,李總監右手邊。面前擺著一個嶄新的筆記本,黑色硬皮封面,筆是一支萬寶龍。
那支筆,我在李總監手里見過。
我在角落里坐下。
李總監先講了幾件常規的事,然后話鋒一轉:「接下來,讓曉峰講講他們組的規劃。」
「他們組」。從今天起,是「他們組」了。
林曉峰站起來。他今天穿了一件深藍色的襯衫,扣子扣到了最上面那顆,領口很緊——一種試圖讓自己看起來更成熟的緊繃。
「各位,我們組接下來要推進一個新項目,重構現有的核心業務系統。」
他說的那個系統,是我五年前帶隊做的。前后花了八個月,經歷了三次重大需求變更,兩次通宵修復生產事故,最后穩定運行至今,沒出過大的問題。
我坐在那里,手里的筆沒轉。
他繼續說:「這個系統,當時的設計思路現在已經過時了。業務發展太快,技術也在迭代,我們不能抱著老一套不放。」
他的目光從PPT上移開,掃過會議室,在我臉上停了大概一秒鐘。就一秒。但那一秒足夠讓會議室里所有人都注意到了。
「有些老經驗,放在當年是對的,但現在已經不適用了。我們要擁抱新技術,新思維,不能躺在功勞簿上吃老本。」
會議室里安靜極了。
空調的嗡嗡聲突然變得很響。
沒有人說話,但我感覺到至少五六道目光從不同方向射過來。老周的最重,像是有溫度的。
我坐在椅子上,臉上沒什么表情。手里的筆還在手指間夾著,沒轉,也沒放下。
他講完了。李總監第一個鼓掌,然后是稀稀拉拉的掌聲跟上來。
「曉峰說得很好,年輕人有想法,有沖勁,大家要支持。」
散會了。椅子拖動的聲音此起彼伏,人們收拾東西往外走。
老周是第一個沖到我旁邊的。
「老劉!你聽見了嗎?他說的什么話!」
我在收拾筆記本,一張一張把散落的紙理齊,動作很慢。
「老劉!」老周的聲音急了,尾音都飄高了,「你教了他一年,他轉頭說你過時了!」
我把筆記本合上,站起來,看著他。
「他沒說錯,那個系統確實老了。」
老周的嘴張著,下巴往下掉了一截,活像被人點了穴。
「我走了。」
我拿著筆記本,從會議室后門出去,走過走廊,經過茶水間。
林曉峰正在茶水間門口,跟幾個同事站著說話。看見我過來,他很自然地中斷了談話,笑著打了個招呼:「劉老師。」
那個笑容跟半年前一模一樣——弧度精準,溫度剛好。但配上今天那番話,就像一件洗了太多次的白襯衫,看著還是白的,但底色已經有點灰了。
我點點頭,走過去。
沒回頭。
08
林曉峰的重構項目啟動了。
他從別的部門挖了兩個人,又從今年的校招里要了三個應屆生,組成一個全新的團隊。五個人,平均年齡不到二十八歲,會議室里的白板上寫滿了新名詞——微服務、容器化、云原生。
我繼續維護老系統。
這一安排發下來的時候,老周特意跑來跟我確認:「老劉,他沒把你編進他的新項目組?」
我看著電腦屏幕上跑了十年的老代碼:「沒有。」
「什么意思?嫌棄你?」
我敲了一行命令,回車:「可能覺得我不需要擁抱新技術。」
老周被噎了一下,張嘴想說什么,又咽回去了。
兩周后,問題來了。
新系統上線前,需要跟老系統做數據對接。林曉峰的團隊寫了對接接口,聯調了三天,死活調不通。數據傳過去就報錯,錯誤代碼是一個他們誰都沒見過的編號。
第四天下午兩點,林曉峰出現在我工位旁邊。
他這次沒有彎腰,但站的位置比以前近了半步——這半步是「求人」的半步。
「劉老師,」他開口了,聲音還是那個調,但語速比平時快了一點,「我們那個接口,老是報錯,您能不能幫忙看看?」
我靠在椅背上,手指搭在鍵盤邊緣,沒有馬上回答。
我看著他的臉。臉上的表情分了兩層:外面一層是謙遜和求助,這一層他已經練得很熟了;里面一層是別扭,是一種「明明剛說了你過時,這會兒又來找你」的擰巴。這兩層疊在一起,讓他整張臉看起來有一種微微的僵硬。
「你們項目的事,我不太方便插手吧?」
他愣了一下。顯然沒預料到這個回答。停頓了半秒,他笑了一下,但那笑容的弧度沒控制好,歪了一點。
「劉老師,您是前輩,經驗豐富,幫我們看看,很快就解決了。」
我想了想,說:「行,把接口文檔發我。」
文檔發過來,我看了十分鐘。
「你們這個接口,傳輸協議用的是新的,但老系統那邊的數據格式沒變。這個字段,老系統里長度是32位,你們那邊設成了16位,數據一傳就截斷了。」
他的表情變了。嘴角抿了一下,那是一個人發現自己犯了低級錯誤時的本能反應。
「可我們當初問過,沒人說這個字段有長度限制。」
他說「問過」的時候,眼睛往左上方飄了一下。
我看著他。
他沒再說話。
「那個字段,是十年前定的,文檔里沒寫。」我說,「但寫過那個系統的人都知道。」
沉默。
「你們那個組,沒有人寫過那個系統。所以你們不知道。」
他站在我工位旁邊,臉一點一點紅上來,從脖子往上,像是有人慢慢擰開了一個閥門。
「劉老師,那您看怎么改?」
我把改法告訴他——把接口那邊的字段長度從16改成64,留出冗余。他一邊聽一邊在手機上打字,打完了,「謝謝劉老師」說得又快又輕,轉身走了。
走的時候腳步比來的時候快了一倍。
老周從隔斷后面冒出來——他剛才一直在那里,耳朵豎得跟雷達似的。
「老劉,你幫他干嘛?」
我看著電腦屏幕上的老代碼。
「他剛說完你過時,你就去幫他擦屁股?」
我繼續看屏幕。屏幕上那行代碼是我2019年寫的,注釋里的日期還在。
「不是幫他。」我說,「是幫那個系統。」
老周愣住了。
「那個系統,是我寫的。出問題,我不能看著不管。」
老周張了張嘴,想說什么,看了看我的表情,又把嘴合上了。
09
又過了兩周,林曉峰又來了。
這次來的時候,他手里端著一杯咖啡。不是他自己的,是幫我買的。拿鐵,熱的,放在我桌上的時候杯壁還燙手。
「劉老師,喝杯咖啡。」
我看了那杯咖啡一眼,沒有去端。
「什么事?」
他的笑容僵了一秒,然后迅速恢復:「劉老師,這次的問題比較大……」
新系統上線后,性能跟不上。平時還好,一到下午三點的業務高峰期,系統直接卡死。用戶投訴電話打到了客戶那邊,客戶打到了公司。
「劉老師,」他的態度比上次還低,低到我幾乎能看見他發旋,「這個問題我們實在搞不定,您能不能……」
他把「幫幫忙」三個字咽了回去,用一個省略號代替。
我看著他,沉默了幾秒。
然后站起來,走到他那邊。
他的團隊五個人,一個在查日志,兩個在對著監控面板發呆,還有兩個在搜索引擎里翻解決方案。屏幕上一片焦頭爛額。
我拉了一把椅子坐下,打開代碼倉庫,從入口函數開始看。
半小時后,我找到了。
「你們這個核心算法,用的是什么?」
旁邊那個應屆生接了話:「遞歸遍歷,教科書上的標準方案。」
我點了點屏幕:「這個方案在數據量小的時候沒問題,但你們現在日均數據量是多少?」
「三百萬條左右。」
「三百萬條,遞歸遍歷,時間復雜度是指數級的。每次查詢都要把整棵樹遍歷一遍。高峰期并發一上來,CPU直接拉滿。」
五個人面面相覷。
我繼續說:「老系統里這個位置,用的是另一種算法。說穿了就是提前建一張映射表,空間換時間,查詢復雜度是O(1)。看起來笨,像是十年前的老土辦法,但它能扛住兩千萬條數據的并發查詢。」
安靜。
只有空調在嗡嗡地響。
林曉峰站在我身后,我沒回頭,但我能感覺到他在看我后腦勺。
他開口了,聲音有點干:「劉老師,那您當初怎么不早說?」
我轉過身,看著他。
「你當初不是說過時了嗎?」
會議室里,五個人同時低下了頭,鍵盤聲、鼠標聲全停了,安靜得像是有人按了靜音鍵。