跳至主要内容

第七章〈推斷〉

港版 v3


地點:鏡界・翠鏡島 時間:1023年9月—10月 主角:林昭明


林昭明返到翠鏡島嘅第一日,行入辦公室。

唔係WFH嗰種辦公室——螢幕入面嘅格仔。係真正嘅辦公室。有枱。有椅。有人。有冷氣嘅聲。有咖啡機嘅聲。有人行來行去嘅聲。

八個月冇返過嚟。

佢企喺門口,望住入面。好似一樣。又好似唔一樣。


第一樣佢留意到嘅,係枱。

準確啲講,係過渡期嗰種奇怪嘅混雜。

有幾層樓仲係舊款。深枱。高間板。走廊闊。嗰啲樓層名義上都係hot-desking,冇人分配固定位,但係佢嘅同事——大部分人——都去嗰邊。去咗就坐同一個位。無聲無息,有個默契。冇人話係你嘅位,但係係你嘅位。枱上面有杯。有筆筒。有人黐咗便條喺間板上面。山寨地契。唔成文,但人人識。揸住位就係揸住位。

有啲人仲會自己搬張凳嚟。兩個人坐同一張枱,擠埋一齊。系統冇話唔可以。Hot-desking淨係話冇固定位,冇話唔可以坐埋,所以佢哋就坐埋。好自然。好正常。冇人反對。

林昭明後來諗返,其實邊層樓唔係重點。新樓層都有人留低,舊樓層都有人走。座位睇唔出命運。真正嘅指標係另一樣嘢——係關係。但嗰陣佢未諗到呢度。

裝修咗嘅樓層喺另一邊。窄枱。走廊收咗。間板有啲地方有,有啲地方拆埋。呢層容易搵位——去嘅人少,冇人嚟度揸地。

林昭明去新樓層。

唔係因為位好。位係差一啲——窄枱、冇間板、冇固定位。但係簡單。你嚟,你坐,你走。冇嗰種「你坐錯位」嘅眼神。

佢唔係入唔到舊樓層。係不需要。

佢攞出自己副眼鏡,戴上。

呢副眼鏡係佢自己買嘅。公司都有幾副共用嘅,但成層樓唔夠分。佢本來就唔鍾意全息投屏——所有嘢攤喺空氣度,你隔離嗰個人行過就見晒。佢唔習慣咁做嘢。戴眼鏡,得自己睇到。安靜。乾淨。

佢啟動眼鏡。畫面亮起。只有佢睇到。

佢望一望四周。有啲面孔認得。有啲唔認得。以前嗰啲面孔,好多唔見咗。佢唔知道嗰啲人幾時走嘅。冇人通知佢。

有一張面,佢確定冇見過。 嗰個人坐喺靠窗嗰個位。係陌生嘅面——林昭明喺呢個team做咗兩年,佢可以確認呢個人以前唔喺度。 但係佢坐嘅樣唔似新嚟嘅。 把椅調到剛好嘅角度。枱上面有個杯,唔係紙杯,係自己嘅杯。眼鏡戴住,全息投屏收埋,淨係對住自己用。冇打量四周。冇嗰種搵廁所喺邊、茶水間喺邊嘅眼神。 阿K從另一邊過嚟,見到佢,講:「你噚日嗰份嘢,我睇咗,等陣跟你講。」 嗰個人抬起頭:「好,你講。」 然後阿K行過去,兩個人開始傾,聲好細,林昭明聽唔清楚講緊乜。唔係刻意壓低,係嗰種本來就唔需要畀所有人聽到嘅音量。 林昭明轉返自己個螢幕。 佢講唔清楚啱啱嗰幕有乜奇怪。 又或者冇乜奇怪。一個人調過嚟,以前識㗎,傾兩句,好正常。 佢冇再多諗。


前幾日,佢主要喺度翻舊email——由佢離開嗰日開始,逐封篩返。

八個月嘅存檔。幾百封。大部分係佢喺中介島嗰陣冇細睇、或者睇咗冇放係心上嘅。

翻返嚟先知,有三個老闆走咗。一個退休。一個轉部門。一個「因個人原因離開」。R&D嗰邊,架構名義上冇變,但PE、PM嗰邊嘅人走咗一大堆,R&D搶埋嚟做。結果R&D嘅人做晒PE嘅嘢,冇人得閒做真正嘅R&D。

以前嗰班做決定嘅人,唔喺度了。

而家喺度嘅人,係另一批。


佢決定自願RTO。Return to office。三十九日。

呢個唔係公司逼嘅。係佢自己嘅決定。

佢喺中介島嗰八個月,所有嘢都係隔住個螢幕做嘅。Email冇人覆。Memo冇人理。分析畀人攞走。佢得出一個結論——

人唔喺現場,你做嘅嘢就唔算。

咁佢返嚟。用三十九日。面對面。親自講。攞住佢嘅數據、佢嘅pattern、佢嘅地圖,喺會議室入面,講畀啱嘅人聽。


九月中。

林昭明做咗一個模擬。

唔係公司安排嘅。冇人叫佢做。係佢自己搭嘅——用佢喺中介島嗰八個月收集嘅數據,加上佢返嚟之後取得嘅一啲新嘅測試結果,喺佢自己嘅環境入面做嘅一個system-level嘅模擬。

模擬嘅目的好簡單:重現嗰個間歇性嘅當機。

佢之前喺中介島嗰陣,已經畫咗一張地圖。Pattern好清楚。每次系統由休眠喚醒,特定嘅操作sequence,特定嘅processing load,就會出事。佢推斷係底層——BIOS或者firmware。

但推斷係推斷。佢冇proof。

所以佢做模擬。


模擬跑咗幾日。大部分時間冇嘢。正常。穩定。

然後,喺第四日嘅深夜,佢望住個螢幕。

出事嗰個瞬間——系統由休眠喚醒嘅嗰零點幾秒——佢見到一樣嘢。

一個null pointer。

喺正常嘅情況下,呢個pointer應該指向一個有效嘅記憶體地址。但喺喚醒嘅瞬間,因為某啲initialization嘅順序問題,佢指向咗一個空嘅地址。Null。

然後系統試圖讀嗰個地址。讀到null。然後——視乎當時嘅load、timing、同其他幾十個變數——有時crash,有時唔crash。Crash嗰啲,就係用戶見到嘅「莫名其妙嘅當機」。

林昭明盯住個螢幕。

佢搵咗大半年嘅嘢,就喺呢度。

唔係能芯嘅問題。唔係供應商嘅問題。唔係硬件嘅問題。係系統底層initialization sequence入面嘅一個null pointer。一個code level嘅問題。

佢深呼吸。

然後佢提醒自己:呢個係模擬。佢自己搭嘅環境。唔係production system。佢見到嘅係一個pointer喺佢嘅模擬入面指向null。呢個同真正嘅系統入面發生嘅事,可能有關,可能冇關。

佢有嘅,仍然只係推斷。

但係呢個推斷,同佢過去八個月收集嘅所有pattern,完全吻合。


第二日,佢去搵CTO。

CTO仲喺。呢個佢返嚟之後確認過嘅——CTO仲未走。

佢約咗個one-on-one。視訊。CTO喺另一個site。

林昭明將佢嘅模擬結果share咗出嚟。一步一步講。Pattern。數據。模擬嘅設定。最後——嗰個null pointer。

「我見到呢段code。」佢講。語氣好平。「我推斷呢個係根本原因。但係完整嘅log——production environment嘅log——喺後台。我冇權限。你能唔能夠幫我查?」

CTO冇即刻答。

沉默。

正常嘅one-on-one,你問一個技術問題,對方會即刻開始討論。或者話「我睇吓」。或者話「你講多少少」。

但CTO嘅沉默,比正常長咗一啲。

唔係好長。可能多咗兩三秒。但林昭明留意到。

然後CTO開口:「你嘅分析做得好細。我睇到你嘅pattern。」

停咗一停。

「我需要時間睇吓後台嗰邊。」

「幾耐?」

「我盡量。」

收線。


林昭明坐喺辦公室嘅hot-desk上面,望住個螢幕。

「我盡量。」

唔係「我幫你查」。唔係「我睇吓先」。係「我盡量」。

佢唔知道呢三個字到底係乜意思。可能只係一個忙碌嘅人嘅正常回應。可能乜都唔係。

佢冇再諗。等。


過咗幾日。

辦公室入面有個工程師。做firmware嘅。林昭明同佢傾過幾次。佢識嘢。講到null pointer,佢聽得明。

有一日,林昭明喺茶水間撞到佢。傾咗幾句。林昭明順口問:「嗰個initialization sequence嘅問題,你有冇留意到?」

對方望住佢,好似想講乜。然後話:「我聽日放假。」

「喔,去邊度?」

「返屋企。」

「幾時返嚟?」

「唔知道。」

林昭明覺得有啲怪。但冇追問。放假就放假。

一個禮拜過去。冇返嚟。

兩個禮拜。冇返嚟。

林昭明問其他人。有人話:「佢好似唔返嚟了。」

「咩意思?辭職?」

「唔清楚。好似係。」

一個月後,HR嘅email出咗。確認離職。生效日期追溯到佢「放假」嗰日。

林昭明望住封email。

佢記得嗰日喺茶水間,嗰個工程師望住佢嘅眼神。好似想講乜。最後只講咗「我聽日放假」。

佢唔知道嗰個工程師想講嘅話係乜。永遠唔會知道。


然後,CTO辭職。

唔到一個禮拜。

林昭明係喺email入面知道嘅。一封簡短嘅通知。「CTO因個人原因離開公司,即日生效。」感謝佢嘅貢獻。祝佢前程似錦。

即日生效。

林昭明讀咗兩次。

佢同CTO講完嗰個null pointer嘅模擬,唔到兩個禮拜。佢叫CTO幫佢查後台嘅log。CTO話「我盡量」。然後CTO就走咗。

佢唔知道CTO有冇真係去查。唔知道CTO查到咗乜。唔知道CTO走嘅原因係唔係同呢件事有關。

佢乜都唔知道。

佢只知道:佢搵到嘅嘢——嗰個null pointer,嗰個pattern——知道呢啲嘢嘅人,走咗。

firmware工程師。走咗。 CTO。走咗。

喺中介島嗰段時間,仲有人聽得明。CTO仲喺度。識null pointer嘅人仲喺度。林昭明講嘢有人接得住。

而家,接得住嘅人,一個一個消失。


辦公室入面,唔係完全冇人提起。

有人話CTO走咗好唔抵。呢個係私底下講嘅,茶水間嗰種。冇人喺公開場合講。

有同事嚟搵林昭明傾。唔係傾技術。係嗰種:「你覺得公司有冇炒錯人?」

林昭明冇表態。

因為佢知道——無論佢話炒人係啱定錯,都可以攞嚟做文章。兩邊都係把柄。


其實唔係得嗰個同事問。

林昭明之前——喺中介島嗰陣,同返嚟之後——都試過同好多人講。講嗰個initialization嘅問題。講佢嘅推斷。講佢覺得個系統到底出咗乜事。

大部分人嘅反應?唔支持。或者扮唔明。

你講null pointer,佢哋話「吓?乜嘢pointer?」你講pattern,佢哋話「吓?咩pattern?」唔係真係唔明。係唔想明。明咗就要企位。企位就有風險。

有少數人,本來係支持嘅。聽得明嘅。但嗰啲人——一部分走咗。自願嘅。被裁嘅。總之唔喺度了。

支持嘅人少咗。走咗嘅多咗。留低嘅人就更加冇人夠膽支持。呢個係一個loop。每走一個人,個loop收緊一圈。


嗰個禮拜,佢返到屋企。

老婆喺廚房。

「你返嚟喇。」佢講。

「嗯。」林昭明將袋放低。坐喺沙發上面。

「食飯未?」

「未。」

老婆行過嚟,坐喺佢隔離。「你近排好忙?」

「都係咁。喺度查一個問題。好複雜。」

「搵到答案未?」

林昭明諗咗一陣。

搵到答案未。

佢搵到咗。喺佢嘅模擬入面。一個null pointer。指向空嘅地址。幾百次用戶投訴嘅根源。供應商被迫做咗幾個月無止境測試嘅原因。平安夜一個工程師諗過死嘅原因。

佢搵到咗。但佢冇辦法證明——因為佢冇後台嘅log。而可以拎到後台log嘅人,走咗。

佢搵到咗。但佢冇人可以講——因為聽得明嘅人,全部走晒。

佢搵到咗。但佢連「搵到咗」呢三個字都唔敢肯定——因為佢有嘅,始終只係推斷。

「仲喺度查。」佢答。

老婆望住佢:「加油。」

佢笑咗吓。好淡嘅嗰種笑。

「多謝。」


夜晚。老婆瞓咗。

林昭明坐喺書房。

佢打開部電腦,望住自己嗰張地圖。八個月喺中介島畫嘅。加上返嚟之後嘅模擬結果。Null pointer嘅位置。Pattern嘅分佈。所有嘢都指向同一個方向。

但係呢張地圖,而家冇人睇得明。

佢想起中介島嘅書房。想起佢喺六月嗰陣,打開能芯嘅firmware spec,第一次留意到:喺一個簡單純粹嘅底層邏輯之上,堆疊咗近一半嘅功能。一層又一層。每一個都有名。每一個都有文件。但佢問過幾個人,冇人答得清楚嗰啲功能到底係度做緊啲乜。

佢嗰陣冇深入去拆。只係記低咗呢個感覺——有樣嘢,喺入面,埋藏得好深。

而家,望住嗰個null pointer,望住嗰個firmware嘅spec,望住CTO走前嗰兩三秒嘅沉默——

呢啲碎片,喺佢腦入面轉。

佢冇辦法將佢哋拼成一幅完整嘅圖。冇辦法解釋點解CTO走。點解firmware工程師走。點解佢問嘅每一個問題,都好似踩到一個唔應該踩嘅地方。

佢只知道一件事:佢搵到咗佢能夠搵到嘅嘢。

然後,知道佢搵到咗乜嘅人,一個一個消失咗。


「佢搵到咗佢能夠搵到嘅嘢。然後,知道佢搵到咗乜嘅人,一個一個消失咗。」