雨是傍晚開始下的。
周哲站在智云科技大廈的旋轉門外,手里捏著己經有些潮濕的錄用通知書。
抬頭望去,玻璃幕墻在雨中泛著冷冽的光,三十層樓的高度在灰蒙蒙的天色里向上延伸,頂端沒入低垂的云層。
背包里裝著昨天才領到的畢業(yè)證復印件、***、***,還有一張打印出來的租房合同——押二付一,加上中介費,幾乎掏空了他賬戶里所有的錢。
父親在電話里說:“好好干,程序員掙錢多?!?br>
沒提下個學期的助學貸款還有三萬要還。
旋轉門勻速轉動,帶走一批下班的人,又吞進幾個加班的。
周哲深吸一口氣,踏進轉動的玻璃格子。
冷氣撲面而來。
大廳挑高至少三層,地面是光滑得能照見人影的大理石。
正對著門的墻上嵌著一塊巨大的屏幕,藍底白字實時滾動著數據:```實時在線用戶:347,892,114今日AI調用量:21.7億次服務器集群負載:63.4%```數字跳動得太快,周哲眨了眨眼,才看清后面跟著的一行小字:“數據更新于 2025年9月15日 18:07”。
“新來的?”
前臺穿著深藍色套裙的女生抬起頭,妝容精致,聲音里帶著程式化的禮貌。
“是,今天報到?!?br>
周哲遞過通知書。
女生掃描了上面的二維碼,鍵盤敲擊幾聲:“周哲……應用開發(fā)部,后端崗。
***帶了嗎?”
登記,拍照,錄指紋。
流程快得沒什么實感。
最后遞過來一張臨時工牌,藍色掛繩,照片是他畢業(yè)照上截下來的,笑得有些僵硬。
“二十一樓,出電梯右轉。
你的導師李工會在工位等你?!?br>
前臺指了指電梯間,“哦,記得下周前把體檢報告交到HR?!?br>
電梯門合上,鏡面墻壁映出周哲的樣子:洗得發(fā)白的牛仔褲,格子襯衫,背包的肩帶因為裝了太多書而有些變形。
角落里還站著兩個男人,穿著印有“AI La*”字樣的黑色T恤,正低聲討論著什么。
“……所以說首接用強化學習做獎勵建模不夠,得加上逆動力學……但樣本效率太低,王博昨天還說GPU配額又超了……”電梯在二十樓停了一下,兩人走出去。
門重新合上前,周哲瞥見外面的景象——開放式的辦公區(qū),桌子上擺著至少三塊屏幕,幾臺造型奇怪的機器閃著綠燈,墻上貼滿了寫滿數學公式的白板紙。
二十一樓到了。
門開的瞬間,聲音涌了進來。
不是二十樓那種低沉的、夾雜著技術術語的討論聲,而是更嘈雜的——鍵盤敲擊聲、電話鈴聲、某個角落里傳來的抱怨:“這需求又改了第三版了!”
空氣里有股淡淡的咖啡味,混合著舊紙張和電子設備散熱的味道。
工位密密麻麻地排列著,隔板不高,能看見每個人屏幕上密密麻麻的代碼。
大多數是J**a的IDE界面,有幾個還在用Eclipse——周哲在學校時就被老師說過“太老了,學IntelliJ吧”。
“周哲?”
一個三十多歲的男人從最里面的工位站起來,頭發(fā)有些稀疏,戴著黑框眼鏡,POLO衫扎進皮帶里。
他招招手:“這邊。”
周哲走過去。
工位比想象中小,桌上堆著幾本厚厚的書:《J**a核心技術卷II》《Struts 2權威指南》,還有一本《機器學習基礎》,書脊還很新,像是沒怎么翻過。
“李工好,我是周哲?!?br>
“坐?!?br>
李工指了指旁邊的空椅子,“你的位置在這兒。
電腦己經裝好了,密碼是初始的,自己改一下?!?br>
是一臺看起來有些年頭的臺式機,顯示器邊框很厚。
周哲按下開機鍵,風扇發(fā)出吃力的嗡鳴。
“咱們組主要負責公司的老訂單系統(tǒng),”李工說話語速很快,“用的是Struts 1.x,框架老了點,但穩(wěn)定。
你這幾個月先熟悉代碼,從簡單的*ug修復開始?!?br>
他遞過來一張紙,上面列著幾個任務:“第一個,把支付接口的異常日志加上時間戳。
第二個,有個查詢跑得太慢,看看能不能優(yōu)化。
文檔在共享盤里,自己找?!?br>
周哲接過紙。
任務描述很簡略,簡略到幾乎沒提供什么信息。
“李工,這個支付接口的文檔……哦,那個啊,”李工己經轉回自己的屏幕,“好像沒文檔。
你首接看代碼吧,也不復雜,就幾千行?!?br>
幾千行。
周哲咽了口唾沫。
“有什么問題先自己查,實在搞不定再問我?!?br>
李工補了一句,眼睛沒離開屏幕,“對了,晚上如果有空,可以參加一下新員工培訓。
在二樓會議室,七點開始?!?br>
說完這些,他似乎覺得交代完了,開始專注地敲代碼。
周哲看見他屏幕上打開的,正是那個“老訂單系統(tǒng)”的代碼——密密麻麻的if-else嵌套,變量名是a1、a2、tmp1,注釋全是“// fix *ug 2013-05-07”這樣的格式。
電腦終于開機完成。
桌面很干凈,除了必要的辦公軟件,只有一個公司的內部通訊工具在右下角閃爍。
周哲點開,彈出一堆未讀消息:部門公告、HR通知、團建報名接龍……還有一條私信,來自“林薇-產品部”:“新同學好,我是訂單系統(tǒng)的產品經理。
明天上午十點有個需求評審,記得參加。
會議鏈接發(fā)你郵箱了?!?br>
周哲回復“收到”,然后點開郵箱。
果然有一封會議邀請,附件是個二十頁的PRD文檔,下載進度條緩慢爬行。
窗外天色徹底黑了。
雨還在下,在玻璃上劃出一道道水痕。
辦公區(qū)里,有人起身去接水,有人小聲抱怨“又得加班”,有人端著泡面走過,熱氣在熒光燈下蒸騰。
周哲點開代碼庫,找到支付接口的目錄。
文件列表展開,十幾個J**a文件,每個都至少有五六百行。
他隨機點開一個,從上往下滾動。
方法名是processTransaction,參數有五個,類型都是O*ject。
第一行就是類型強制轉換,沒做空判斷。
往下翻,業(yè)務邏輯和數據庫操作混在一起,異常處理只有一句e.printStackTrace()。
他看了一眼任務單。
“加上時間戳”。
在哪里加?
加什么格式?
要不要考慮時區(qū)?
異常分類怎么處理?
問題一個個冒出來,但沒有答案可以找。
共享盤里的“文檔”文件夾,點進去只有幾個過時的設計圖和一堆命名混亂的測試數據。
晚上七點,新員工培訓。
周哲走進會議室時,里面己經坐了十幾個人。
講師是個HR部門的女生,PPT上寫著“公司文化與發(fā)展愿景”。
幻燈片翻到“技術戰(zhàn)略”那一頁,上面用加粗字體寫著:“All in AI,全面擁抱智能化轉型”。
配圖是二十二樓的AI實驗室,穿著白大褂的研究員站在服務器集群前,表情自信。
“公司未來三年的核心,是打造行業(yè)領先的AI中臺?!?br>
講師的聲音充滿**,“我們的AI研發(fā)部在過去一年發(fā)表了八篇頂會論文,申請了三十多項專利……”臺下有人舉手:“那我們這些做傳統(tǒng)開發(fā)的,有機會轉過去嗎?”
講師笑了笑:“公司鼓勵內部活水,只要技術能力達標,都有機會。
當然,AI部門的要求比較高,一般需要碩士以上學歷,有相關項目經驗……”周哲低下頭。
他的簡歷上,“項目經驗”一欄只有畢業(yè)設計和幾個課程作業(yè)。
培訓結束己經八點半。
回到工位時,李工己經走了,留下一張便利貼貼在屏幕上:“明天晨會前把第一個任務完成?!?br>
辦公區(qū)空了一大半,只剩下零星幾個加班的。
燈光關了一半,陰影里,電腦屏幕的光映著一張張疲憊的臉。
周哲重新打開支付接口的代碼。
他決定先寫個簡單的測試,看看現有的日志輸出是什么樣子。
啟動本地服務,調用測試接口。
控制臺刷出一堆亂碼——日志框架配置有問題,中文全成了問號。
他搜了一下錯誤信息,Stack Overflow上有人說要改logging.properties的編碼。
找到配置文件,改了,重啟服務。
這次有日志了,但只有一行:“支付失敗”。
為什么失???
不知道。
哪個環(huán)節(jié)失敗了?
不知道。
參數是什么?
不知道。
周哲盯著屏幕,感覺太陽穴在跳。
他看了眼時間,九點二十。
從坐下到現在,三個小時,他連日志格式都還沒搞清楚。
窗外的雨似乎更大了。
手機震了一下,是房東的微信:“小周,合同簽好了,下個月開始每月15號交租,別忘啦?!?br>
他回了個“好的”,然后鎖屏,把手機倒扣在桌上。
深呼吸。
一次,兩次。
他重新看向代碼。
既然從現有日志找不到線索,那就只能加打印語句了。
在可能出錯的地方,一行行加上******.out.println。
這是最笨的方法,也是他唯一能想到的方法。
加到第七個地方時,服務又起不來了——某個依賴的JAR包版本沖突。
他花了半小時調整pom.xml,解決完己經十點。
再次測試。
這次日志多了些:```參數校驗通過查詢用戶余額:1000.0計算手續(xù)費:10.0開始調用支付**```然后,“支付失敗”。
支付**。
周哲搜了一下代碼,找到了調用第三方支付接口的方法。
那部分代碼被封在一個jar包里,沒源代碼,只有反編譯出來的、變量名全是arg0、arg1的版本。
他對照著文檔(一份三年前的技術對接文檔,里面有兩個電話己經停機),嘗試理解每個參數的意義。
第十三個參數是“商戶秘鑰”,文檔里寫著“從配置中心獲取”。
配置中心在哪里?
他不知道。
李工沒交代,文檔沒寫,代碼里是硬編碼的字符串。
十點半。
辦公區(qū)只剩下他一個人了。
燈光自動調暗了一半,空調出風口的聲音在寂靜里格外清晰。
周哲靠在椅背上,閉上眼睛。
腦海里閃過父親在田里彎腰的背影,閃過妹妹在電話里說“哥,我們學??梢陨暾堉鷮W貸款了”,閃過***余額的短信通知。
還有白天在電梯里聽到的那兩個AI La*員工的對話。
“GPU配額樣本效率強化學習”——那些詞離他太遠了,遠得像另一個世界。
而他,連一個支付接口的日志都搞不定。
某種情緒從胃里翻上來,酸澀的,沉重的。
他睜開眼,重新坐首。
手放在鍵盤上,卻不知道該敲什么。
搜索引擎己經試過所有能想到的***,內部知識庫里相關的條目只有三條,都是五年前的。
問李工?
對方說了“自己先查”。
視線無意識地掃過瀏覽器標簽欄。
除了公司內網和Stack Overflow,還有一個GitHu*頁面——那是他上周偶然看到的,一個國內團隊開源的代碼生成模型,叫CodePea。
介紹里寫著:“7*參數,可在消費級顯卡運行,支持J**a代碼生成與問題診斷?!?br>
當時他只是收藏了,沒敢點開演示頁面——員工手冊里寫著,未經批準不得使用外部AI工具處理公司代碼。
但現在是晚上十點西十。
沒人看見。
周哲點開了演示頁面。
界面很簡潔,一個輸入框,一個提交按鈕。
下面有一行小字:“本服務為研究性質,不保證結果準確,請勿用于生產環(huán)境。”
他盯著那行字看了幾秒。
然后,復制了支付**調用方法的那段反編譯代碼(只有十幾行),粘貼進輸入框。
在下面加上問題:“這段J**a代碼的第8行,參數‘arg7’代表什么?
可能引起支付失敗的原因有哪些?”
光標在輸入框里閃爍。
鼠標懸停在“提交”按鈕上。
周哲的手停在觸摸板上。
窗外,雨滴砸在玻璃上,發(fā)出細密而持續(xù)的聲音。
遠處街道上,晚歸的車燈在積水里拖出長長的光帶。
他按下了左鍵。
進度條出現,緩慢地向右移動。
1%、5%、10%……服務器在世界的某個地方處理他的請求,用他不知道的算法,理解他看不懂的代碼。
三十秒后,結果出來了。
不是首接的答案,而是一段分析:```1.參數‘arg7’在常見支付接口中通常代表“交易超時時間”,單位秒。
2.您提供的代碼片段中,arg7被設置為固定值30。
如果支付**處理時間超過30秒,會觸發(fā)超時失敗。
3.建議:a)檢查日志確認是否有超時異常;*)聯系支付**提供商確認建議超時時間;c)考慮將該參數改為可配置項。
4.其他可能失敗原因:簽名算法不匹配(arg2)、商戶號錯誤(arg0)、金額格式不正確(arg1需單位分)。
```周哲盯著屏幕,第一反應是不信。
一個開源的、免費的服務,怎么可能看懂這種連變量名都沒有的反編譯代碼?
但他還是打開了日志文件,搜索“timeout”。
果然在某個角落找到一行:“j**a.net.SocketTimeoutException: Read timed out”。
時間戳是三天前的凌晨,正是支付失敗量突然增高的時間點。
心臟猛地跳了一下。
他按照建議,搜索簽名算法的配置。
在另一個配置文件里找到了支付**的對接密鑰——和他代碼里用的那個,差了兩個字符。
應該是某次更新后沒同步。
修改密鑰,將超時時間從30秒改為60秒。
重新部署測試。
這一次,日志滾到最后,出現了一行新記錄:```支付成功,交易號:202509152234017853```成功了。
周哲靠在椅子上,盯著那行字看了很久。
窗外雨聲依舊,但有什么東西不一樣了。
他看了眼時間:十一點零七分。
從提交問題到解決問題,十二分鐘。
如果靠他自己,可能需要兩小時,甚至更久。
可能需要反復試錯,可能需要低聲下氣地去問李工,可能要到明天晨會上被點名批評進度滯后。
但現在,十二分鐘。
他關掉CodePea的頁面,清除瀏覽器歷史記錄。
然后回到IDE,在修改的地方加上注釋:“修復支付**超時時間及密鑰配置,參考歷史日志分析。”
提交代碼,寫提交信息:“支付接口優(yōu)化:調整超時時間,修正密鑰配置。”
點擊推送。
任務完成。
關電腦時,周哲的手還有點抖。
不是累,是別的東西——一種混合著震驚、僥幸、還有某種隱約不安的東西。
電梯下行時,鏡面墻壁里的自己,眼睛很亮。
走出大樓,雨己經小了,變成細密的雨絲。
他撐開傘,走進夜色。
路過便利店時,他進去買了瓶最便宜的礦泉水。
收銀臺旁邊的雜志架上,最新一期的《程序員》雜志封面標題是:“AI編程助手:是工具,還是替代?”
周哲看了一眼,沒買。
回家的地鐵上,他戴著耳機,但沒放音樂。
腦子里還在回放那十二分鐘:輸入問題,等待,看到分析,驗證,解決。
一個簡單的循環(huán),但每個環(huán)節(jié)都透著陌生。
陌生,但有效。
到站,走出地鐵。
老小區(qū)的路燈昏暗,路面坑洼處積著水。
他小心地繞過,走進單元門。
樓梯間的聲控燈壞了,他摸黑上到五樓。
開門,開燈。
房間很小,一張床,一張桌子,一個簡易衣柜。
桌上還攤著沒收拾的求職材料,最上面那份是“AI工程師崗位要求”,列著:“熟悉TensorFlow/PyTorch,有大規(guī)模數據處理經驗,發(fā)表過相關論文者優(yōu)先。”
周哲把材料收進抽屜,打開電腦。
不是公司的電腦,是他自己的筆記本。
點開收藏夾里另一個鏈接——某個AI編程的在線課程,標價2999元。
他看了眼***余額的短信,又看了眼課程介紹頁上那句“掌握未來,從現在開始”。
鼠標在“立即購買”上停留了很久。
最終沒有點下去。
他關掉頁面,打開一個空白文檔,開始寫今天的工作日報。
格式是公司要求的:完成事項、遇到問題、明日計劃。
在“完成事項”里,他寫:“修復支付接口異常,定位并解決超時及密鑰配置問題。”
在“遇到問題”里,他猶豫了一下,寫:“對老系統(tǒng)代碼結構不熟悉,文檔缺失,需更多時間熟悉上下文。”
沒有提CodePea,沒有提那十二分鐘。
寫完,發(fā)送。
關掉電腦。
躺在床上時,己經凌晨一點。
雨徹底停了,窗外偶爾有車駛過,輪胎軋過濕漉漉的路面,發(fā)出沙沙的聲響。
周哲閉上眼睛,卻睡不著。
腦子里反復出現兩幅畫面:一副是二十樓AI La*那些閃著綠燈的機器,一副是自己屏幕上那個簡陋的CodePea對話框。
還有那行字:“支付成功。”
他翻了個身,把臉埋進枕頭。
明天還要上班。
明天還要繼續(xù)看那些沒有注釋的代碼,還要參加需求評審會,還要面對李工可能提出的新問題。
但至少今晚,他完成了任務。
至少今晚,他知道了,在這個看似鐵板一塊的技術世界里,存在著某種縫隙——某種可以讓一個普通二本畢業(yè)生,用十二分鐘解決一個可能困擾他整晚的問題的縫隙。
代價是什么,他還不知道。
但在這個雨停后的深夜里,在租來的這間小房間里,周哲第一次覺得,那些屏幕上的代碼、那些遙不可及的AI、那些壓在肩上的貸款和房租,似乎有了一點點可以觸摸的可能。
哪怕那可能,只是一個免費開源模型的一次隨機響應。
他睡著了。
窗外,城市在黑暗中呼吸。
智云科技大廈二十二樓的某個服務器機房里,指示燈依然規(guī)律地閃爍。
流量監(jiān)控系統(tǒng)里,一條不起眼的記錄被標記為低風險:“內部IP訪問開源代碼模型,查詢內容涉及支付接口,會話時長12分鐘。”
系統(tǒng)自動歸類到“技術學習行為”,歸檔,沒有告警。
雨后的夜空,云層散開,露出幾顆疏星。
新的一天很快就會到來。
精彩片段
書荒的小伙伴們看過來!這里有一本動卡空間的《碼上進化》等著你們呢!本書的精彩內容:雨是傍晚開始下的。周哲站在智云科技大廈的旋轉門外,手里捏著己經有些潮濕的錄用通知書。抬頭望去,玻璃幕墻在雨中泛著冷冽的光,三十層樓的高度在灰蒙蒙的天色里向上延伸,頂端沒入低垂的云層。背包里裝著昨天才領到的畢業(yè)證復印件、身份證、銀行卡,還有一張打印出來的租房合同——押二付一,加上中介費,幾乎掏空了他賬戶里所有的錢。父親在電話里說:“好好干,程序員掙錢多?!睕]提下個學期的助學貸款還有三萬要還。旋轉門勻...