夜裏十點過後,整層樓隻剩下工作室這邊還亮著燈。空調風口發出輕微的嗡聲,鍵盤聲在夜裏顯得格外清晰,一下一下,像有人在敲節拍。
許婉寧和沈硯舟已經走了,走之前在門口隨口丟下一句:“別熬到天亮。”聲音沒壓低,像是故意說給還坐著的人聽。
林羨在隔間裏改文件。她那邊沒敲鍵盤,更多是紙張翻動的聲音,偶爾停住,像是在想什麽,再繼續翻。
程放一個人坐在主屏前,做例行複盤。
不是修 bug,也不是趕進度。
隻是把最近一週的改動,從頭到尾,再看一遍。他一直有這個習慣。專案越往後,他越不放心隻看結果。
他順著提交記錄往下翻,滾輪慢慢滑。
每一條改動都很清楚。
誰改的。
改了什麽。
為什麽改。
這些東西在他眼裏都有各自的“手感”,熟得很。
直到某一條呼叫鏈出現在螢幕上。
很短。
短到不顯眼。
像是順手加的一個判斷。
但位置不對。
它不在頁麵按鈕後麵,不在設定項裏,沒有任何使用者入口,也沒有注釋說明。它夾在幾個主節點中間,每次都在關鍵動作之前先走一遍,像一道看不見的門檻。
程放的滑鼠停住了。
他把那段程式碼展開。
第一眼,他以為是自己看漏了。
第二眼,他坐直了一點。
“……這不是這階段要的東西。”
聲音很低,幾乎被空調聲蓋住,當然也沒人回應。
他繼續往下看。
判斷拆得很細。
細到讓人有點不舒服。
不僅把常見情況兜住了,連極端情況都被拆成了好幾層。每一層都有兜底,兜底裏還有兜底,像是生怕哪裏漏一條縫。
觸發條件也怪得很。
不是模糊範圍,而是精確到“差幾分鍾”“隔了幾次”“連續幾天”這種程度的精確。
那種精確不像推算出來的。
更像是——有人真的見過“差十分鍾會出什麽事”。
程放把程式碼往回拉,找注釋。
沒有。
他又點開提交記錄。
那條提交資訊寫得很平:
“邊界處理優化。”
邊界處理。
優化。
像一句幹淨又安全的話,什麽都沒說。
程放把模組命名那一行單獨拖出來,貼進搜尋框,做全域性搜尋。
結果一下子刷出來。
幾十處呼叫。
分佈在不同功能裏。
而且,全都卡在關鍵位置。
他慢慢靠回椅背,呼了一口氣。
這不是順手加的。
這是埋進去的。
而且埋得很深。
“……誰會在這個階段寫這種東西。”
他沒急著去問人,而是做了第二件事——看風格。
變數命名、縮排習慣、異常處理方式,他一條條對照係統裏其他模組。那種熟悉感很明顯,是同一套手法,甚至連“寫錯也不讓係統出事”的脾氣都一樣。
沒有外包的痕跡。
也不像臨時找人補的。
更像一個人,給自己用的程式碼。
他盯著螢幕,手指在桌麵上敲了兩下,又停住。
腦子裏第一個冒出來的念頭是:林羨找了外部顧問?
可這個想法剛成形,就被他自己按了下去。
外部顧問不會把東西埋這麽深,也不會把呼叫關係寫得這麽貼合整體。更重要的是,顧問不會替你承擔這種風險。
程放把那段邏輯一層層拆開,看“為什麽要這麽判斷”。
越看,心裏越發沉。
這已經不是單純的技術嚴謹了。
這是對風險的理解。
是對“失誤會怎麽發生”的理解。
而這種理解,通常隻來自兩種人。
要麽長期處理同類事故。
要麽,親自經曆過。
他的手停在鍵盤上,沒有再敲。
不是害怕。
是一種很明確的警覺。
“這不該出現在一個創業早期的產品裏。”
話說出口的時候,他自己都愣了一下。
隔間那邊傳來合上資料夾的聲音。
林羨走出來,端著杯水,看到他還坐在主屏前。
“還沒回去?”她問。
程放沒立刻回答。
他把螢幕切回普通界麵,動作自然,像什麽都沒發生。
“在對一段呼叫。”他說。
林羨點點頭:“有問題就標出來。”
她轉身要回去。
程放忽然開口:“你以前做過類似的係統嗎?”
林羨停了一下。
沒有回頭。
“沒有。”她說。
程放接著問:“那這些邊界判斷,你怎麽定的?”
她語氣很平:“按經驗。”
“什麽經驗?”
林羨這次轉過身,看著他,停了兩秒:“帶孩子的經驗。”
頓了頓,又補了一句,“還有,踩坑的經驗。”
程放想追問。
話到嘴邊,卻又嚥了回去。
這回答沒有漏洞。
但也沒給解釋。
很像她的風格——隻給結論,不給過程。
林羨看了他一會兒:“你是不是看到什麽了?”
程放沒否認,也沒承認,隻說:“有一段邏輯寫得很完整。”
“完整不是好事嗎?”她反問。
程放盯著她:“完整得不像這個階段該有。”
林羨沒躲他的視線,回得很短:“那就保留。”
他原本想問“你是怎麽知道這些的”,但那句話最後還是沒出來。
“我先把這段標記。”程放說。
“不是刪,也不是改。”
“隻是記住它在哪。”
林羨點頭:“行。”
她轉身回隔間,門沒關嚴。
燈光從門縫裏漏出來,在地板上拉出一條細長的亮線。
程放盯著那道光看了一會兒,手指又落回鍵盤。
他把模組所在的檔案、呼叫位置、觸發條件,一條條記進一個私人筆記。
標題隻寫了兩個字:
異常。
不是在懷疑誰。
隻是給自己留一個提醒。
這裏,有東西不太對。
他合上筆記,關掉螢幕。
走之前,他回頭看了一眼隔間。
林羨還在寫東西,背影沒動。
程放沒有多看,把門輕輕帶上。
那一刻,他第一次清楚地意識到——
係統裏,埋著一條看不見的底線。
它不是為了顯得更嚴謹,
更像是為了避開某種已經付過的代價。