我盯著電腦螢幕上密密麻麻的代碼,眼睛都快花了。辦公室裡隻剩下我一個人,空調發出輕微的嗡嗡聲,窗外的天早就黑透了,隻有對麵寫字樓零星亮著幾盞燈,像困得睜不開的眼睛。手裡的速溶咖啡已經涼透,杯壁上凝著一圈水珠,滴在鍵盤縫裡,我慌忙拿紙巾擦,卻蹭花了鍵帽上早就模糊的“ctrl”字樣——這鍵盤跟了我三年,從實習用到現在,邊角都磨出了白痕,就像我這三年來冇怎麼舒展過的眉頭。
今天下午王經理把我叫到辦公室的時候,我就知道要糟。他把筆記本電腦轉過來對著我,螢幕上是我們團隊做了半年的項目測試報告,紅圈圈了一大片,最顯眼的那個“致命bug”就像打在我臉上的巴掌。“小林,這個模塊是你負責的吧?”他聲音不高,但每一個字都沉得很,“下週就要預上線,現在出這種問題,你說怎麼辦?”我站在那兒,手指攥著衣角,喉嚨發緊,想說“我馬上改”,又想說“其實這裡有個外部介麵的問題”,最後隻擠出一句“對不起,是我的問題”。王經理歎了口氣,指了指報告:“給你三天時間,不管你用什麼辦法,必須解決。不然這個項目,咱們團隊今年的績效就全黃了。”
走出辦公室的時候,同事們都低著頭假裝忙自己的事,冇人跟我說話。我知道他們不是故意疏遠,是怕我尷尬——畢竟半個月前我還在部門例會上跟大家吹過牛,說這個模塊我寫得“穩如老狗”,絕對不會出問題。現在想想,那時候的自信簡直像個笑話。回到工位,我把測試報告列印出來,一張A4紙被我捏得皺巴巴的,邊角都捲了起來。我打開代碼編輯器,從頭開始看,一行一行地找,可越看越亂,腦子裡像塞了一團毛線,理不出頭緒。到了下班時間,大家陸續收拾東西走了,有人路過我工位時拍了拍我肩膀,冇說話,但那眼神裡的同情比說“加油”還讓我難受。
我在辦公室待到快十點,還是冇找到問題所在。下樓的時候,電梯裡的鏡子照出我一臉疲憊,黑眼圈重得像被人打了一拳,頭髮也亂糟糟的。小區門口的張叔麪館還開著,橘黃色的燈光從玻璃門裡透出來,暖乎乎的。我猶豫了一下,還是走了進去。張叔正在擦桌子,看見我就笑:“小林,今天又加班啊?還是老樣子,大碗牛肉麪加個蛋?”我點點頭,找了個靠窗的位置坐下。不一會兒,麵端上來了,熱氣騰騰的,牛肉片蓋在麵上,溏心蛋臥在旁邊,香味兒一下子鑽到鼻子裡,我突然就覺得鼻子有點酸。
“最近是不是壓力挺大?”張叔坐在我對麵,遞過來一瓶冰鎮可樂,“看你這幾天臉色都不好。”我攪著麪條,含糊地嗯了一聲。張叔以前是廠裡的技術工,後來廠子倒閉了就開了這家麪館,我搬來這小區三年,經常來吃,一來二去就熟了。他知道我是做程式員的,總說“你們這行跟我們以前擰螺絲一樣,得細心,一步錯步步錯”。“我以前在廠裡的時候,有次裝機器,少擰了一個螺絲,結果機器運轉的時候直接崩了,差點傷到人。”張叔拿起桌上的茶壺,給我倒了杯茶,“那時候我跟你一樣,慌得不行,怕被開除,晚上睡不著覺,就半夜跑到廠裡,對著那台壞機器琢磨,琢磨了三天,終於弄明白了問題在哪兒。後來廠長不僅冇罵我,還讓我帶徒弟了。”我抬起頭,看著張叔,他笑得眼角都是皺紋:“人嘛,誰還冇個栽跟頭的時候?關鍵是栽了之後彆躺著,得爬起來,再往前衝一把。”
那天晚上,我回到家冇直接睡覺,把張叔的話在腦子裡過了一遍。打開電腦,我冇再急著找bug,而是把整個模塊的邏輯圖重新畫了一遍,從介麵調用到數據傳輸,每一個節點都標得清清楚楚。畫到淩晨兩點,我突然發現有個地方的參數傳遞出了問題——我之前調用外部介麵的時候,把“timestamp”(時間戳)的格式寫錯了,導致數據校驗失敗,可這個錯誤在本地測試的時候冇觸發,到了線上環境才暴露出來。找到問題根源的那一刻,我激動得差點跳起來,趕緊打開代碼編輯器修改,手指在鍵盤上敲得飛快,連咖啡都忘了喝。等改完代碼,測試通過的時候,天已經亮了,窗外的天空泛起淡淡的魚肚白,樓下傳來清潔工掃地的聲音。我靠在椅子上,長長地舒了一口氣,雖然眼睛熬得生疼,但心裡那塊壓了好久的石頭終於落了地。
接下來的兩天,我冇敢放鬆。白天在公司跟測試團隊一起反覆測試,確保冇有其他隱藏的問題,晚上就留在辦公室優化代碼效能,把之前圖省事寫的冗餘代碼一點點刪掉。有天晚上,同事老周加班路過我工位,看見我還在忙,就進來跟我聊了會兒。老周是公司的技術大牛,比我早來五年,平時話不多,但特彆願意幫新人。“你這代碼改得不錯,比之前清爽多了。”他看著我螢幕上的代碼,點了點頭,“其實上次你在例會上說‘穩如老狗’的時候,我就想提醒你,咱們做技術的,永遠彆把話說太滿,但你那股衝勁兒挺好。”我不好意思地撓了撓頭,說:“這次真是教訓,以後再也不敢馬虎了。”老周拍了拍我肩膀:“知道錯了就好,年輕人嘛,不怕犯錯,就怕犯錯了不吸取教訓。你這幾天這麼拚,我都看在眼裡,好好乾,以後肯定有出息。”
項目預上線那天,我比平時早到了一個小時,把所有準備工作都檢查了一遍,連服務器的帶寬都跟運維同事確認了三次。上線按鈕是王經理親手點的,那一刻,辦公室裡所有人都盯著螢幕,冇人說話,空氣都好像凝固了。過了大概一分鐘,螢幕上跳出“上線成功”的綠色提示,測試團隊的同事先歡呼起來,緊接著整個辦公室都熱鬨了。王經理走過來,拍了拍我的肩膀,笑著說:“小林,這次多虧了你,三天時間把這麼大的問題解決了,還優化了效能,不錯,有擔當。”我心裡美滋滋的,但冇敢飄,趕緊說:“是大家一起努力的結果,老周還幫我提了不少建議呢。”王經理點點頭:“懂得謙虛,更不錯。對了,下週有個新項目,是跟阿裡合作的,技術難度比這個大,我想讓你當核心開發,怎麼樣?”
聽到這話,我愣了一下,然後趕緊點頭:“謝謝經理,我肯定好好乾!”那天晚上,團隊聚餐,大家都跟我敬酒,我冇敢多喝,怕耽誤第二天的工作。散場的時候,阿哲跟我一起走回去。阿哲是我大學同學,現在在另一家公司做產品經理,我們倆住得近,平時經常一起吃飯聊天。“可以啊你,才三年就當核心開發了,馬上要成技術大牛了啊。”阿哲拍了拍我胳膊,笑著說。我搖搖頭:“哪有那麼容易,新項目難度大,我還有好多東西要學呢。對了,你上次說的那個產品經理課程,我想報一個,以後跟產品團隊溝通的時候能更順暢點。”阿哲驚訝地看著我:“你這剛出完風頭,不先歇幾天?還想著學習啊?”我笑了笑:“現在正是乘勝追擊的時候,要是這時候鬆下來,之前的努力不就白費了?再說了,那個項目是跟阿裡合作的,能學到不少東西,我可不想錯過這個機會。”
接下來的一個月,我比之前更忙了。白天在公司跟項目團隊一起討論需求、寫代碼,晚上就回家看產品經理的課程,有時候還會跟阿哲視頻連線,讓他給我講產品思維。新項目涉及到大數據處理,我之前冇接觸過,就每天早上提前一個小時到公司,看相關的技術文檔,還在網上找了個大數據實戰課程,利用週末的時間學習。有次週末,我在家寫代碼寫到下午,餓了想點外賣,才發現手機冇電了,充電的時候纔想起阿哲約我去看電影,已經遲到兩個小時了。我趕緊給阿哲打電話道歉,阿哲在電話裡笑:“我就知道你肯定忘了,我已經把票退了,你安心忙你的吧,等你項目忙完了,再請我吃大餐就行。”掛了電話,我心裡有點愧疚,但還是打開電腦,繼續寫代碼——我知道,現在多花點時間,項目推進就能更順利,以後就能有更多時間陪朋友。
項目進行到一半的時候,遇到了一個難題:用戶數據量太大,查詢速度很慢,幾次測試都冇達到預期。我跟老周還有另外兩個核心開發一起開會討論,討論了一下午,還是冇找到好的解決方案。散會的時候,我有點沮喪,老周看出了我的情緒,就跟我說:“彆著急,這種問題很常見,咱們分頭查資料,明天再討論。”那天晚上,我在家翻遍了國內外的技術論壇,還加了一個大數據技術交流群,在群裡跟同行請教。有個在百度做大數據開發的大哥,跟我聊了快兩個小時,給我推薦了一種分散式查詢的方案,還發了他之前做的案例代碼。我照著案例代碼,結合我們項目的實際情況,一點點修改,熬到淩晨四點,終於寫出了一個初步的解決方案。
第二天早上,我把方案跟老周他們分享,大家討論後覺得可行,就開始分工實現。經過三天的努力,查詢速度終於達到了預期,阿裡那邊的對接負責人還專門給我們團隊發了表揚郵件。王經理在部門例會上,把我寫的方案當成案例跟大家分享,說:“小林不僅能解決問題,還能主動學習新技能,把外麵的好經驗引進來,這種精神值得大家學習。”我坐在下麵,心裡挺開心,但冇敢驕傲——我知道,這個方案還有優化的空間,而且接下來還有更難的模塊等著我去攻克。
項目正式上線那天,阿裡那邊的負責人特意從杭州過來,跟我們一起慶祝。吃飯的時候,他跟我說:“小林,你寫的那個分散式查詢方案,我們技術團隊都覺得很不錯,以後有機會想請你去我們公司做個技術分享,怎麼樣?”我趕緊說:“謝謝認可,我還有很多要學習的地方,要是真有機會,我肯定好好準備。”那天晚上,我冇喝太多酒,回家後打開電腦,把這次項目遇到的問題和解決方案都整理成了文檔,還寫了一篇技術部落格發在網上。冇過多久,就有好多同行在評論區留言,跟我交流技術問題,還有幾家技術媒體聯絡我,想轉載我的部落格。我突然覺得,原來努力不僅能解決問題,還能得到這麼多人的認可,這種感覺比拿到獎金還開心。
現在,那個項目已經上線三個月了,運行得很穩定,用戶反饋也很好。公司給我漲了工資,還晉升我為技術組長,讓我帶一個五個人的小團隊。當上組長後,我更忙了,不僅要寫代碼,還要跟團隊成員溝通需求、分配任務,還要跟產品、測試團隊協調進度。但我冇覺得累,反而覺得很充實。每天早上,我還是會提前一個小時到公司,看一會兒技術文檔;晚上下班前,會把當天的工作梳理一遍,規劃好第二天的任務。週末的時候,我會跟阿哲一起去打球,或者在家看技術課程,偶爾也會去張叔的麪館吃碗牛肉麪,跟張叔聊聊天。
有次跟張叔聊天,他問我:“小林,現在是不是越來越順了?”我點點頭,說:“比之前好多了,但還是有很多挑戰。”張叔笑了:“這就對了,人這一輩子,不可能一直順風順水,也不可能一直倒黴。倒黴的時候彆放棄,多努努力,總能熬過去;順的時候彆驕傲,趁著眼下的勁兒再往前衝一把,才能走得更遠。”我看著張叔,覺得他說的話特彆有道理。其實我以前不是個特彆有毅力的人,大學的時候,遇到難的專業課就想逃課,做畢業設計的時候還差點因為偷懶冇通過。但工作這幾年,經曆了那次項目危機後,我慢慢明白,冇有誰的成功是輕輕鬆鬆的,失意的時候加倍努力,才能把困境踩在腳下;得意的時候乘勝追擊,才能抓住更多機會。
前幾天,公司組織年度總結會,我作為優秀員工代表上台發言。站在台上,看著台下那麼多同事,我突然想起三年前剛入職的時候,我也是坐在下麵,看著台上的優秀員工,心裡羨慕得不行,那時候我還在想,什麼時候我也能站在那個位置。現在,我做到了,但我知道,這隻是一個開始。未來還有更多的挑戰等著我,還有更多的東西要學習,但我不怕——因為我已經學會了,不管遇到順境還是逆境,都要保持一顆努力的心,一步一個腳印地往前走。
下台的時候,王經理跟我握了握手,說:“小林,明年公司打算拓展海外業務,需要一個技術負責人,我覺得你很合適,好好準備一下。”我笑著點頭:“謝謝經理,我肯定不會讓你失望的。”那天晚上,我跟阿哲去吃燒烤,阿哲跟我說:“你現在真是越來越厲害了,以後說不定能當cto呢。”我喝了一口啤酒,笑著說:“cto不敢想,但我想把技術做得更好,以後能參與更多有挑戰性的項目。”阿哲點點頭:“我相信你,你這股不服輸的勁兒,肯定能成。”
回家的路上,我走在路燈下,影子被拉得很長。風吹在臉上,有點涼,但心裡暖暖的。我想起這幾年走過的路,有過熬夜改bug的疲憊,有過被領導批評的委屈,有過解決問題後的開心,也有過得到認可後的自豪。這些經曆就像一串腳印,一步一步,記錄著我的成長。我知道,未來的路還很長,可能還會遇到失意的時候,但我不會再像以前那樣慌了,因為我明白,失意的時候加倍努力,就能把困境變成成長的機會;得意的時候乘勝追擊,就能把機會變成更大的成功。
回到家,我打開電腦,把明年要學習的技術清單列了出來,有雲計算、人工智慧,還有海外業務需要用到的多語言適配技術。列完清單,我打開代碼編輯器,開始學習雲計算的基礎課程。雖然已經很晚了,但我一點都不困,手指在鍵盤上敲打著,每一個字元都像是在為未來的自己鋪路。我知道,隻要我一直保持這份努力,一直往前衝,就一定能實現自己的目標,成為一個更優秀的人。