林北覺得自己上輩子一定是個(gè)運(yùn)維工程師。
不是那種朝九晚五準(zhǔn)時(shí)下班的運(yùn)維,而是那種凌晨三點(diǎn)被電話叫起來、對著滿屏報(bào)錯(cuò)信息面無表情說"我看看"的那種。
因?yàn)樗F(xiàn)在干的事,本質(zhì)上就是運(yùn)維。
上周直接對蘇晚晚的異能做熱修復(fù),結(jié)果觸發(fā)了防御性冰凍,整個(gè)辦公室變成了冰窟——那體驗(yàn)大概等同于生產(chǎn)環(huán)境直接改代碼,然后服務(wù)器當(dāng)場給你表演一個(gè)宕機(jī)。
痛定思痛,林北決定換個(gè)思路。
既然不能直接動手術(shù),那就先做監(jiān)控。任何一個(gè)合格的工程師都知道,在修bug之前,你得先能穩(wěn)定復(fù)現(xiàn)這個(gè)bug。而復(fù)現(xiàn)的前提是——你得知道它在什么條件下觸發(fā)。
所以林北給蘇晚晚布置了一個(gè)任務(wù):記日志。
"就跟寫log一樣,"林北當(dāng)時(shí)這么跟她解釋,"每次你感覺到異能有波動——不管大小——都記下來。時(shí)間、地點(diǎn)、當(dāng)時(shí)在干什么、情緒狀態(tài)、冰凍程度。"
蘇晚晚當(dāng)時(shí)看他的眼神就像在看一個(gè)讓她用System.out.println來調(diào)試分布式系統(tǒng)的初級程序員。
"你要我……寫日記?"
"不是日記,是監(jiān)控日志。"林北糾正,"有本質(zhì)區(qū)別。日記是感性的、隨意的、想到什么寫什么。監(jiān)控日志是結(jié)構(gòu)化的、可檢索的、有明確字段定義的。"
蘇晚晚沉默了三秒。
"所以你要我寫日記。"
"……差不多吧。"
林北以為她會拒絕。畢竟讓一個(gè)戴了三年情緒抑制手環(huán)、把自己活成一座冰山的人去主動記錄情緒,這事兒的難度大概等同于讓一個(gè)從來不寫注釋的程序員突然開始寫文檔——理論上可行,實(shí)踐中基本不可能。
但蘇晚晚只是點(diǎn)了點(diǎn)頭,說了句"格式你定還是我定"。
林北愣了一下:"你定吧。"
現(xiàn)在,一周過去了。
林北坐在自己工位上,打開蘇晚晚發(fā)來的文檔。文件名叫"ice_anomaly_monitor_log_v1.2.md"——她甚至做了版本管理。
林北深吸一口氣,開始閱讀。
然后他就沒繃住。
日志第一條,周一,上午10:17。
// Date: 03-16 10:17
// Location:工位
// Trigger:產(chǎn)品經(jīng)理第四次改需求
// Emotion: irritation (level: 3/10)
// Ice Output:鼠標(biāo)墊邊緣結(jié)霜,約2mm
// Duration: ~30s
// Note:可控范圍內(nèi)。已用紙巾擦掉。
//產(chǎn)品經(jīng)理沒注意到。他從來不注意任何東西。
林北看著最后那句評論,嘴角抽了一下。這哪是監(jiān)控日志,這是帶情緒的代碼注釋。
但說實(shí)話,他在很多開源項(xiàng)目的源碼里見過比這更離譜的注釋。什么"http://我不知道這段為什么能跑,但它能跑,別動它"之類的。程序員的注釋本來就是靈魂的窗口。
繼續(xù)往下看。
周一,下午14:02。
// Date: 03-16 14:02
// Location:會議室B
// Trigger:周會上我匯報(bào)方案時(shí),主管在看手機(jī)
// Emotion:未定義(不確定是憤怒還是別的什么)
// Ice Output:椅子扶手結(jié)冰,會議桌下方溫度驟降
// Duration: ~2min
// Note:裝作若無其事地把手放到桌下把冰捂化了。
//手很冷。
//但反正一直很冷,沒人發(fā)現(xiàn)。
林北讀到"沒人發(fā)現(xiàn)"三個(gè)字的時(shí)候,停了一下。
他用筆在旁邊的本子上記了個(gè)標(biāo)簽:**被忽視**。
周二,上午09:30。
// Date: 03-17 09:30
// Location:茶水間
// Trigger:同事說"蘇晚晚這人就是冷,你別在意"
//(他們以為我沒聽到)
// Emotion: anger? sadness?無法準(zhǔn)確分類,建議擴(kuò)展enum
// Ice Output:手里的杯子外壁結(jié)霜,水溫從85°C降至約4°C
// Duration: ~1min
// Note:把水倒了,重新接了一杯。
// ??????enum Emotion { HAPPY, SAD, ANGRY, FEAR, DISGUST,
// ??????SURPRISE, ???,被人當(dāng)面說你冷但你其實(shí)不想冷
//的那種感覺 }
// ??????// TODO:找一個(gè)合適的命名
林北盯著那個(gè)TODO看了很久。
他又在本子上記了一個(gè)標(biāo)簽:**被誤解**。
然后他翻了翻之前的筆記,把這兩個(gè)標(biāo)簽都畫了個(gè)圈。
周三,全天。
// Date: 03-18
// Location:工位
// Trigger:無
// Emotion: baseline
// Ice Output:無
// Duration: N/A
// Note:今天沒人跟我說話。
//也沒有任何異常。
//系統(tǒng)運(yùn)行平穩(wěn)。
//一切正常。
這條日志很短,很干凈,沒有任何技術(shù)問題。
但林北讀出了一種很熟悉的東西——就像那種服務(wù)器監(jiān)控面板上,所有指標(biāo)都是綠色的,CPU使用率低得離譜,網(wǎng)絡(luò)流量幾乎為零??雌饋硪磺姓?。
但其實(shí)那臺服務(wù)器根本沒有人在用。
周四,下午15:45。
// Date: 03-19 15:45
// Location:工位
// Trigger:隔壁組的人過生日,大家一起唱歌切蛋糕
// Emotion: neutral(標(biāo)記為neutral)
// Ice Output:鍵盤F5-F8區(qū)域輕微結(jié)霜
// Duration: ~45s
// Note:他們沒有叫我。
//不是故意的,應(yīng)該是忘了。
//反正我也不喜歡吃蛋糕。
//【以上判斷可能存在邏輯漏洞,但暫不修復(fù)】
林北把筆放下了。
他突然意識到蘇晚晚做了一件很程序員的事——她把一個(gè)明明是"sad"的情緒標(biāo)記成了"neutral"。
就像代碼里把異常catch住,然后什么都不做就吞掉了一樣。
編譯器不會報(bào)錯(cuò)。程序還能跑。但問題一直在那里。
林北在本子上畫了一張簡單的表格,開始做數(shù)據(jù)分析。
七天,總共十四條日志。他把每條日志的觸發(fā)事件做了分類,給情緒打了標(biāo)簽,把冰凍輸出做了量化。然后他畫了一張散點(diǎn)圖——橫軸是情緒類型,縱軸是冰凍強(qiáng)度。
結(jié)果非常清晰。
"煩躁"觸發(fā)的冰凍,平均強(qiáng)度2.1,持續(xù)時(shí)間短,范圍小,基本就是桌面結(jié)個(gè)霜的程度。
"緊張"觸發(fā)的冰凍,平均強(qiáng)度2.8,集中在手部,可控。
但"被忽視"觸發(fā)的冰凍,平均強(qiáng)度5.7。"被誤解"觸發(fā)的冰凍,平均強(qiáng)度6.3。
不僅強(qiáng)度高,而且持續(xù)時(shí)間長,范圍大,有兩次甚至出現(xiàn)了不可控的擴(kuò)散——就是冰從接觸點(diǎn)開始向外蔓延,需要主動抑制才能停下來。
如果把蘇晚晚的異能系統(tǒng)看成一個(gè)程序,那"煩躁"和"緊張"就是普通的warning——系統(tǒng)記一條日志就過去了。但"被忽視"和"被誤解"是critical級別的告警,直接觸發(fā)異常處理流程,而且她的異常處理機(jī)制明顯有缺陷,處理不了就會崩潰。
更有意思的是周三那條。那天她什么情緒波動都沒有,但"沒人說話"本身就是一個(gè)信號。一臺服務(wù)器流量歸零不代表它健康,可能只是沒人在意它還在不在線。
林北合上筆記本,靠在椅背上,看著天花板。
他想起上次在蘇晚晚的異能里看到的那些冰層結(jié)構(gòu)——外面冷硬光滑,但越往里越復(fù)雜、越脆弱、越不規(guī)則,像是凍住了很多東西。
現(xiàn)在他大概知道凍住了什么了。
第二天中午,林北端著兩杯咖啡走到蘇晚晚的工位旁邊。
蘇晚晚正在寫代碼,屏幕上滿是密密麻麻的邏輯。她抬頭看了林北一眼,目光在那兩杯咖啡上停留了半秒。
"日志我看完了。"林北把其中一杯放在她桌上。
蘇晚晚的手指在鍵盤上頓了一下,然后繼續(xù)敲代碼:"分析結(jié)果呢?"
"你的異能不是對所有情緒都敏感。"林北在她旁邊的空椅子上坐下來,"憤怒、焦慮、煩躁這些,你的控制力其實(shí)不錯(cuò),抑制手環(huán)加上你自己的意志力,基本能壓住。"
蘇晚晚沒說話,但她停止了敲代碼。
"真正的觸發(fā)點(diǎn)有兩個(gè)。"林北伸出兩根手指,"一個(gè)是被忽視,一個(gè)是被誤解。這兩個(gè)情緒出現(xiàn)的時(shí)候,你的冰凍輸出會直接跳到平時(shí)的兩到三倍,而且你的主動抑制效率會下降大概百分之六十。"
蘇晚晚轉(zhuǎn)過頭看他,表情還是那副標(biāo)準(zhǔn)的冷淡,但林北注意到她握鼠標(biāo)的手收緊了一點(diǎn)。
"所以呢?"
"所以我需要追問一個(gè)問題。"林北說,"你知道的,做根因分析不能只看表層。這兩個(gè)觸發(fā)點(diǎn)不是隨機(jī)的,它們一定有一個(gè)共同的底層原因。"
蘇晚晚沒有接話。
辦公室的中央空調(diào)嗡嗡響著,有人在遠(yuǎn)處笑,有人在打電話。陽光從落地窗照進(jìn)來,照在蘇晚晚的側(cè)臉上。林北注意到她桌上那杯咖啡的杯壁上正在凝結(jié)細(xì)小的水珠——不是結(jié)霜,只是正常的冷凝。
但溫度確實(shí)在降。
"你不用現(xiàn)在回答。"林北說,語氣放松了一些,"這個(gè)不是必填項(xiàng),不影響后續(xù)流程。我只是……想讓你知道,我看到了。"
蘇晚晚偏過頭,不看他。
沉默持續(xù)了大概十秒鐘。
然后她說:"你的日志分析做得還行。但你的散點(diǎn)圖應(yīng)該用箱線圖,散點(diǎn)圖看不出分布的集中趨勢。"
林北愣了一下,然后笑了:"你怎么知道我畫的是散點(diǎn)圖?"
"你這種人一定畫散點(diǎn)圖。"蘇晚晚面無表情地說,"初級數(shù)據(jù)分析師都畫散點(diǎn)圖。"
"我那叫直覺可視化。"
"那叫偷懶。"
林北發(fā)現(xiàn)她在轉(zhuǎn)移話題,但他沒有戳破。有些防御機(jī)制不該被強(qiáng)行突破——這個(gè)教訓(xùn)他上周已經(jīng)學(xué)過了,代價(jià)是一間被凍成冰窟的辦公室。
他拿起自己的咖啡喝了一口,然后說:"行,下周我改用箱線圖。但是日志你得繼續(xù)記。"
"繼續(xù)?"
"對。你現(xiàn)在的采樣密度不夠,一天一到兩條太少了。而且你的情緒分類太粗糙,需要細(xì)化。"他想了想,"你把那個(gè)enum擴(kuò)展一下吧。"
蘇晚晚看了他一眼。
"你看了那條。"她的語氣不是疑問,是陳述。
"我全都看了。"林北說,"包括周三那條。"
又是一陣沉默。
"周三那條沒有任何異常數(shù)據(jù)。"蘇晚晚說。
"嗯。"林北點(diǎn)頭,"但是一個(gè)監(jiān)控系統(tǒng)最可怕的不是報(bào)警太多,而是該報(bào)警的時(shí)候不報(bào)警。你把一個(gè)該標(biāo)sad的情緒標(biāo)成了neutral,把該記錄的東西跳過了。"
蘇晚晚的表情終于有了一絲裂痕——很小很小的,就像冰面上一道幾乎看不見的細(xì)紋。
"那你建議我怎么標(biāo)?"她問。
"誠實(shí)地標(biāo)。"林北說,"監(jiān)控系統(tǒng)的第一原則就是誠實(shí)。數(shù)據(jù)造假了,后面所有的分析都是白搭。你騙得了編譯器,騙不了運(yùn)行時(shí)。"
蘇晚晚低下頭,看著桌上那杯咖啡??Х冗€是熱的,杯壁上的水珠正在緩緩滑落。
"……我試試。"她說。
林北站起來,拍了拍褲子上不存在的灰。"行。那我下周同一時(shí)間來收日志。對了——"
他走了兩步,又轉(zhuǎn)回來。
"你那個(gè)enum,最后那個(gè)TODO,'被人當(dāng)面說你冷但你其實(shí)不想冷的那種感覺'——"
蘇晚晚猛地抬頭。
"那個(gè)情緒的名字叫'委屈'。"林北說,"命名參考,僅供參考,你可以自己改。"
他沒等蘇晚晚回答,擺擺手走了。
身后安靜了很長一段時(shí)間。
然后他聽到一聲很輕很輕的、鍵盤敲擊的聲音。
像是有人在給一個(gè)TODO寫上了答案。
回到自己工位上,林北沒有立刻開始工作。
他打開自己的筆記本,在"蘇晚晚-異能分析"那頁的最下面寫了一段話:
*核心觸發(fā)條件確認(rèn):被忽視、被誤解。兩者指向同一個(gè)底層需求——"被看見"。不是被注意,不是被關(guān)注,是被真正地、作為一個(gè)完整的人地"看見"。*
*推測:抑制手環(huán)戴了三年,情緒長期被壓制,導(dǎo)致她在外界看來始終是"冷"的。但這個(gè)"冷"是果不是因。因是——在她開始壓制情緒之前,一定發(fā)生過什么,讓她覺得"被看見"是一件危險(xiǎn)的、或者不可能的事情。*
*所以她選擇了不被看見。*
*冰是最好的偽裝。沒人會覺得冰山需要擁抱。*
林北把筆記本合上,盯著蘇晚晚的工位方向看了一會兒。
隔著半個(gè)辦公區(qū),他能看到她的后腦勺——頭發(fā)扎成利落的馬尾,肩膀端得很直,坐姿完美得像一段經(jīng)過優(yōu)化的代碼。
但他現(xiàn)在知道了。
那不是優(yōu)化,是防御。
就像一臺服務(wù)器把所有端口都關(guān)掉、防火墻規(guī)則拉滿、只允許最基本的通信——看起來固若金湯,安全得無懈可擊。
但那不叫安全。
那叫孤島。
林北拿起咖啡又喝了一口,發(fā)現(xiàn)已經(jīng)涼了。
他看了看杯子,又看了看蘇晚晚的方向,自言自語地嘟囔了一句。
"下周的箱線圖,我做漂亮點(diǎn)。"