第七章〈推斷〉
台版 v3
地點:鏡界・翠鏡島 時間:1023年9月—10月 主角:林昭明
林昭明回到翠鏡島的第一天,走進辦公室。
不是像居家辦公(WFH)那樣的辦公室——螢幕裡的格子。而是真正的辦公室,有桌子、有椅子、有人。有冷氣運轉的聲音、有咖啡機運轉的聲音、 有人走來走去的聲音。
八個月沒回來了。
他站在門口,望著裡面。好像一樣,又好像不一樣。
第一件他留意到的,是桌子。
準確一點說,是過渡期那種奇怪的混雜。
有幾層樓還是舊款。桌面深、隔板高、走廊寬。那些樓層名義上都是彈性導位(hot-desking),沒人分配固定座位,但他的同事——大部分人——都去那邊。去了就坐同一個位子,無聲無息,有一種默契。沒人說是你的位子,但就是你的位子。桌上有杯子、有筆筒,有人貼了便條紙在隔板上。山寨版的「地契」,不成文,但人人都懂。佔住位子,就是佔住了地盤。
有些人還會自己搬張椅子過來。兩個人坐同一張桌子,擠在一起。系統沒說不可以,彈性導位只說沒有固定座位,沒說不能坐在一起。所以他們就坐在一起,很自然、很正常。沒人反對。
林昭明後來回想,其實哪層樓不是重點。新樓層有人留下,舊樓層也有人走。座位看不出命運。真正的指標是另一樣東西——是「關係」。但那時候,他還沒想到這層。
裝修過的樓層在另一邊。桌子窄、走廊縮水了。隔板有些地方有,有些地方拆了。這層樓容易找位置——去的人少,沒人來這裡「圈地」。
林昭明去新樓層。
不是因為位子好。位子其實差一點——窄桌子、沒隔板、沒固定座位。但是簡單。你來了,你坐下,你走了。沒有那種「你坐錯位子了」的眼神。
他不是進不去舊樓層,是不需要。
他拿出自己的眼鏡,戴上。
這副眼鏡是他自己買的。公司也有幾副共用的,但全層樓不夠分。他本來就不喜歡全像投射(holographic projection)——所有東西攤在空氣中,你隔壁的人走過就全都看光了。他不習慣這樣做事。戴眼鏡,只有自己看得到,安靜、乾淨。
他啟動眼鏡,畫面亮起。只有他看得到。
他望了望四周。有些面孔認得,有些陌生。以前那些面孔,很多消失了。他不知道那些人是什麼時候走的,沒人通知他。
有一張臉,他確定沒見過。 那個人坐在靠窗的位子。臉是陌生的——林昭明在這個 team 待了兩年,他可以確認這個人以前不在這裡。 但他坐的樣子不像新來的。 椅子調到剛好的角度。桌上有杯子,不是紙杯,是自己的杯子。眼鏡戴著,全像投射收起來了,只對著自己用。沒有打量四周。沒有那種找廁所在哪、茶水間在哪的眼神。 阿K從另一邊過來,看見他,說:「你昨天那份東西,我看了,等一下跟你說。」 那個人抬起頭:「好,你說。」 然後阿K走過去,兩個人開始聊,聲音很低,林昭明聽不清楚說什麼。不是刻意壓低,是那種本來就不需要讓所有人都聽到的音量。 林昭明轉回自己的螢幕。 他說不清楚剛才那一幕有什麼奇怪。 也可能沒什麼奇怪。一個人調過來,以前就認識的,說幾句話,很正常。 他沒再多想。
前幾天,他主要在翻舊電子郵件(email)——從他離開那天開始,逐封篩選回來。
八個月的存檔,幾百封。大部分是他待在中介島時沒細看,或者是看了沒放在心上的。
翻回去才知道,有三個老闆走了。一個退休、一個轉調部門、一個「因個人原因離開」。研發(R&D)那邊,架構名義上沒變,但產品工程(PE)、專案管理(PM)那邊的人走了一大堆,由研發部接收過來。結果研發部的人都在做產品工程的事,沒人有空做真正的研發。
以前那群做決定的人,不在了。
現在待在這裡的人,是另一批。
他決定自願重返辦公室(RTO)。Return to Office。三十九天。
這不是公司逼的,是他自 己的決定。
他在中介島的那八個月,所有的事都是隔著螢幕做的。電子郵件沒人回覆、備忘錄沒人理會、分析被人拿走。他得出一個結論——
人不在現場,你做的事就不算數。
那他就回來。用三十九天,面對面,親口說。拿著他的數據、他的規律(pattern)、他的地圖,在會議室裡,說給對的人聽。
九月中。
林昭明做了一個模擬。
不是公司安排的,沒人叫他做。是他自己搭的——用他在中介島那八個月收集的數據,加上他回來後取得的一些新測試結果,在他自己的環境裡做的一個系統級(system-level)模擬。
模擬的目的很簡單:重現那個間歇性的當機。
他之前在中介島時,已經畫好了一張地圖。規律很清楚。每次系統從休眠喚醒,特定的操作序列(sequence),特定的運算負載(processing load),就會出事。他推斷是底層——BIOS或者韌體。
但推斷歸推斷,他沒有證據(proof)。
所以他做模擬。
模擬跑了幾天。大部分時間沒事,正常、穩定。
之後,在第四天的深夜,他盯著螢幕。
出事的那一瞬間——系統從休眠喚醒的那零點幾秒——他見到了一樣東西。
一個空指標(null pointer)。
在正常情況下,這個指標應該指向一個有效的記憶體地址。但在喚醒瞬間,因為某些初始化(initialization)的順序問題,它指向了一個空的地址。Null。
然後系統試圖讀取那個地址,讀到 Null。之後——視當時的負載、時序(timing)和其他幾十個變數而定——有時當機(crash),有時沒事。當機的那些,就是用戶見到的「莫名其妙的故障」。
林昭明盯住螢幕。
他找了大半年的東西,就在這裡。
不是能芯的問題、不是供應商的問題、不是硬體的 問題。是系統底層初始化程序(initialization sequence)裡的一個空指標。一個程式碼等級(code level)的問題。
他深呼吸。
然後他提醒自己:這是模擬,他自己搭的環境,不是生產系統(production system)。他見到的是一個指標在他的模擬中指向 Null。這跟真正系統中發生的事,可能有關,也可能無關。
他有的,始終只有推斷。
但是這個推斷,跟他過去八個月收集的所有規律,完全契合。
第二天,他去找技術長(CTO)。
CTO還在,這點是他回來後確認過的——CTO還沒走。
他約了一個一對一(one-on-one)會談。視訊。CTO在另一個辦公地點。
林昭明將他的模擬結果分享出來。一步步說明。規律、數據、模擬設定。最後——那個空指標。
「我見到這段程式碼。」他說,語氣很平靜。「我推斷這是根本原因。但是完整的日誌——生產環境(production environment)的日誌——在後台。我沒有權限,你能不能幫我查?」
CTO沒有即刻回答。
沈默。
正常的一對一會談,你問一個技術問題,對方會立刻開始討論。或者說「我想想看」,或者是「你多講一點」。
但 CTO 的沈默,比正常長了一點。
不是很久,可能多了兩三秒。但是林昭明留意到了。
之後 CTO 開口:「你的分析做得很細。我看到了你的規律。」
停了一停。
「我需要一點時間看後台那邊。」
「多久?」
「我盡量。」
收線。
林昭明坐在辦公室的彈性座位上,盯著螢幕。
「我盡量。」
不是「我幫你查」,不是「我先看看」,是「我盡量」。
他不知道這三個字到底是什麼意思。可能只是一個忙碌的人的正常回應,可能什麼都不是。
他沒再多想。等。
過了幾天。
辦公室裡有個工程師,做韌體(firmware)的。林昭明跟他聊過幾次,他懂行,講到空指標,他聽得懂。
有一天,林昭明在茶水間遇到他,聊了幾句。林昭明順口問:「那個初始化程序的問題,你有沒有注意到?」
對方望著他,好像想說什麼。之後說:「我明天放假。」
「喔,要去哪邊?」
「回家。」
「什麼時候回來?」
「不知道。」
林昭明覺得有些奇怪,但沒追問。放假就放假。
一個禮拜過去,沒回來。
兩個禮拜,沒回來。
林昭明問其他人。有人說:「他好像不回來了。」
「什麼意思?辭職?」
「不清楚,好像是。」
一個月後,人資(HR)的電子郵件寄出了。確認離職,生效日期追溯到他「放假」的那天。
林昭明看著電子郵件。
他記得那天在茶水間,那個工程師望著他的眼神。好像想說什麼,最後只說了「我明天放假」。
他不知道那個工程師想說的話是什麼。永遠不會知道了。
之後,CTO 辭職。
不到一個禮拜。
林昭明是從電子郵件中知道的。一封簡短的通知。「CTO 因個人原因離開公司,即日生效。」感謝他的貢獻,祝他前程似錦。
即日生效。
林昭明讀了兩次。
他跟 CTO 講完那個空指標的模擬,不到兩個禮拜。他叫 CTO 幫他查後台的日誌。CTO 說「我盡量」。然後 CTO 就走了。
他不知道 CTO 有沒有真的去查,不知道 CTO 查到了什麼,不知道 CTO 離開的原因是不是跟這件事有關。
他什麼都不知道。
他只知道:他找到的東西——那個空指標、那個規律——知道這些事的人,都走了。
韌體工程師,走了。 CTO,走了。
在中介島那段時間,還有人聽得懂。CTO還在,識得空指標的人還在。林昭明講話有人接得住。
現在,接得住的人,一個一個消失。
辦公室裡,不是完全沒人提起。
有人說 CTO 走得很不值得。這是私底下說的,茶水間那種,沒人在公開場合講。
有同事來找林昭明聊。不是聊技術,是那種:「你覺得公司有沒有開除錯人?」
林昭明沒表態。
因為他知道——無論他說開除人是對是錯,都可以拿來做文章。兩邊都是把柄。
其實不只有那個同事問。
林昭明之前——在中介島那陣子,還有回來之後——都試過跟很多人講。講那個初始化的問題、講他的推斷、講他覺得系統到底出了什麼事。
大部分人的反應?不支持。或者裝作聽不懂。
你講空指標,他們說「蛤?什麼指標?」你講數據規律,他們說「蛤?什麼規律?」不是真的不懂,是不想懂。懂了就要表態,表態就有風險。
有少數人,本來是支持的、聽得懂的。但那些人——一部分走了。自願的、被裁員的,總之不在了。
支持的人變少了,走的人變多了。留下的人就更沒人敢支持。這是一個迴圈。走掉一個人,那個迴圈就收緊一圈。
那個禮拜,他回到家。
老婆在廚房。
「你回來啦。」她說。
「嗯。」林昭明將背包放下,坐在沙發上。
「吃飯了嗎?」
「還沒。」
老婆走過來,坐在他旁邊。「你最近很忙?」
「老樣子。在那邊查一個問題,很複雜。」
「找到答案了嗎?」
林昭明想了一陣。
找到答案了嗎。
他找到了。在他的模擬裡,一個空指標,指向空白的地址。幾百次用戶投訴的根源。供應商被迫做了幾個月無止盡測試的原因。平安夜一個工程師想過死的原因。
他找 到了。但他沒辦法證明——因為他沒有後台的日誌。而能夠拿到後台日誌的人,走了。
他找到了。但他沒人可以說——因為聽得懂的人,全部走光了。
他找到了。但他連「找到了」這三個字都不敢肯定——因為他有的,始終只有推斷。
「還在查。」他回答。
老婆望著他:「加油。」
他笑了笑。很淡的那種笑。
「謝謝。」
晚上。老婆睡了。
林昭明坐在書房。
他打開電腦,望著自己那張地圖。八個月在中介島畫的,加上回來之後的模擬結果。空指標的位置、規律(pattern)的分佈。所有東西都指向同一個方向。
但是這張地圖,現在沒人看懂了。
他想起中介島的書房。想起他在六月時,打開能芯的韌體規格(firmware spec),第一次注意到:在一個簡單純粹的底層邏輯之上,堆疊了將近一半的功能。一層又一層,每一個都有名字,每一個都有文件。但他問過幾個人,沒人答得清楚那些功能到底是在那邊做什麼。
他那時候沒深入去拆解,只是記下了這種感覺——有些東西,在裡面,埋藏得很深。
現在,望著那個空指標,望著那個韌體的規格(spec),望著 CTO 走前那兩三秒的沈默——
這些碎片,在他腦海裡旋轉。
他沒辦法將它們拼成一幅完整的圖。沒辦法解釋為什麼 CTO 走,為什麼韌體工程師走。為什麼他問的每一個問題,都好像踩到一個不該踩的地方。
他只知道一件事:他找到了他能找到的東西。
之後,知道他找到了什麼的人,一個一個消失了。
「他找到了他能找到的東西。之後,知道他找到了什麼的人,一個一個消失了。」