第 5 章
第五章:memory leak
漁村的東西壞得很有規律。
禮拜一是阿枝嬸的電風扇,禮拜三是港邊冷藏櫃的溫控,禮拜五是誰家的收音機只收得到一個台語佈道節目。阿海蹲在地上拆、修、裝回去,像一個沒有掛號的門診醫生,而他的病人全是家電。
那台筆電是阿枝嬸的兒子寄回來的,說大學畢業用不到了。阿枝嬸抱著它來找阿海的時候,表情像捧著一枚未爆彈。
「阿海,這個你會弄嗎?它中毒了。」
他打開螢幕。桌面上有四十七條不明工具列、三個假防毒軟體、以及一封「恭喜您獲得 iPhone 大獎」的釣魚郵件正在閃爍。他的表情大概像一個外科醫生打開腹腔,發現裡面有一整套餐具。
「阿嬸,這個不是中毒,這是器官衰竭。」
「蛤?」
「沒事,我處理。」
他花了一個下午把那台筆電清乾淨。重灌系統的空檔,他的手指不自覺地打開了終端機,輸入了幾行指令。螢幕上跑出一串他看得懂的東西——版本號、環境變數、編譯器路徑。腦子裡還是一片空白,但手指知道下一步該按什麼鍵,像一個被反覆走過的路徑,即使地圖被撕掉了,腳底的肌肉仍記得每一個轉彎。
他可以寫程式。
這個發現比「會修發電機」更具體、更不可迴避。修機械可以說是手巧,但寫程式是一種語言——他不記得自己會說這種語言,卻打開檔案就能讀、能寫、能挑出別人的錯。
後來有人請他寫小程式,是隔壁村一個開民宿的年輕人,想要一個訂房網頁。阿海用那台清完毒的二手筆電,坐在側屋的摺疊桌前,窗外是漁港和永不休假的海浪聲,螢幕上是他正在一行一行搭起來的東西。
他覺得安穩。不是快樂,是一種很深的、像地基一樣的安穩。手在忙的時候,胸口那個悶悶的洞會縮小一點。他不知道那個洞是什麼,但他知道只要一直蓋東西、一直修東西,就不用去看它。
幾個月下來,案子一個接一個。第一個民宿網站交出去之後口碑傳開了,長濱附近幾家民宿都來找他,要架網站、要做線上訂房、要把「老闆娘手寫在筆記本上的住客資料」數位化。阿海接了,一個一個慢慢做。
他寫程式的時候有一些奇怪的習慣。
變數命名會不自覺地用疊字。btnBtn、imgImg、listList。他打完之後看著那些名字,覺得哪裡不對——這不是好的命名規範,任何受過訓練的工程師都不會這樣寫。但他的手就是會往那個方向走,像在跟什麼人說話,用一種把所有東西都加上韻律的方式。
還有註解。他在一個函式上方寫了一行:
// 這個 function 要寫得讓完全不懂的人也能用
他盯著那行字。這不是寫給自己看的。這是一個對「某個人」的承諾,但那個人在他腦子裡連一個輪廓都沒有。只是一種確信——有一個人需要他把事情變簡單。
民宿老闆看完網站之後很滿意,在電話裡說:「不錯不錯,但你可以加一些會動的效果嗎?那種閃閃的字。」
阿海看著自己花了三小時寫的響應式設計、乾淨的版面配置、精確的斷點設定。
客戶想要的是跑馬燈。
他加了。工程師有工程師的驕傲,但驕傲不能當飯吃。跑馬燈在螢幕上閃爍的時候,他覺得自己的靈魂被輕輕刮了一下。
成功鎮比漁村大太多了。
阿海搭海生伯認識的貨車司機的便車,四十分鐘,從台11線一路搖到成功。車窗外的海岸線從他熟悉的灣口切換成陌生的漁港、加油站、便利商店。肩膀在不知不覺中收緊了,呼吸淺了半拍。人多了一些、機車多了一些、聲音從四面八方擠過來。他可以忍受,但要花力氣。
市場在鎮中心。水果攤的色彩像被打翻的調色盤,魚攤的碎冰在陽光下反光得刺眼。他買了海生伯交代的東西——薑、米酒、一包粗鹽——塞進帆布袋裡,沿著街走回去。
他經過一家店的時候,腳步慢下來了。
童裝店。不大。門口的衣架上掛著小小的T恤、短褲、附帽子的外套。往前走的指令從大腦送出去了,但腿不執行。
他站在那裡,看著那些小小的衣服在風裡輕輕晃。
角落有一件黃色的雨衣。很小。大概是五、六歲小孩穿的尺寸。帽子上有兩個圓圓的青蛙眼睛。他伸手把它從衣架上拿下來,塑膠布料在手裡發出窸窣的聲音。
「買給你小孩的喔?」老闆娘從櫃台後面探出頭。
他的手停在半空中。他沒有小孩。他不知道自己有沒有小孩。他不知道這件雨衣要給誰。但他的手不肯把它放回去,像一個被寫死的迴圈,跳不出判斷式。
他沒有回答老闆娘。他把雨衣拿去結了帳。
回到漁村,他把那件小黃雨衣掛在側屋門後的掛勾上。青蛙的眼睛圓圓地看著他。他看著它,覺得這個房間裡多了一個不該存在的東西——但同時,少了它的那些日子似乎才是錯的。
他沒有試著解釋這件事。他知道任何解釋都會指向一個他打不開的檔案。
他把那件雨衣留在那裡。每天出門前看它一眼,回來看它一眼。它什麼都不是。它什麼都是。
除夕。
海生伯今天穿了一件比較不舊的格子襯衫,算是他的正式服裝。隔壁的阿德一家三代從台東市回來了——阿嬤、兒子媳婦、兩個小孫子。整個漁村活過來了一點:鞭炮聲從下午就開始零星地響,空氣裡有滷肉和炸年糕的味道。
海生伯煮了一鍋比平常大三倍的魚湯,叫阿海過來吃飯。他坐在海生伯家的客廳,塑膠椅、老電視在播年節特別節目、桌上的菜比平常多了一倍。阿德的兩個孫子在桌底下鑽來鑽去,被罵了之後安靜十秒,然後故態復萌。
海生伯夾了一塊魚肚給他。阿海接了,低頭吃的時候,他的筷子在碗裡停了一下。他想把那塊魚推給旁邊的人。這個念頭很短,像一個被立即回收的記憶體區塊,還沒展開就被釋放了。但它存在過。
飯後,阿德一家在客廳看電視。阿嬤的膝蓋上坐著一個小孫子,另一個靠在爸爸身上打瞌睡。媳婦在收碗,邊收邊罵丈夫不幫忙,丈夫假裝沒聽到,被罵了第三次才慢吞吞站起來。
阿海坐在角落,手裡捧著一杯茶。
他看著他們。完整的人。完整的拼圖——每一塊都在它該在的位置上,邊緣咬合得剛剛好。而他是一塊被拔出來的碎片,不知道自己屬於哪幅圖,也不知道那幅圖還在不在。
胸口的洞疼得不像話。不是尖銳的刺痛,是一種很深很鈍的東西,從胸骨後面慢慢往外推,推得他呼吸要刻意才能維持節奏。
他放下茶杯,站起來。海生伯看了他一眼,沒有問。
他走出去。
深夜的漁村沒有路燈。遠處的鞭炮聲和電視裡主持人倒數的聲音被風吹得斷斷續續。他沿著他走了無數遍的那條路,穿過曬漁網的空地,走到海邊。
沙灘是深灰色的。海面一片黑,看不到邊界——海和天黏在一起,像一個沒有定義回傳值的函式,呼叫了,但什麼都拿不回來。遠處有幾點漁火,微弱地浮在黑裡。星星很亮。風很冷,把他的外套吹成鼓鼓的形狀。
他站了很久。
海浪拍上來,退下去。拍上來,退下去。深夜的浪聲比白天沉,像一個很大的東西在呼吸。他的腳下是冰涼的沙。遠處傳來倒數計時的尾聲,有人在喊「新年快樂」,聲音很小,像另一個世界的事。
他一直在試著理解。那些多買的鮮奶、那些疊字的變數名、那行「讓完全不懂的人也能用」的註解、門後那件不知道要給誰的小黃雨衣、夢裡那兩個看不清臉的小小身影。他試著把它們排列、歸因、找出一個邏輯——像 debug 一樣,從症狀往回追蹤,一定有一個 root cause。
但沒有。
所有的線索都指向同一個方向,但那個方向是一面牆。他看不過去。他分析不出結果。唯一確定的事情是:他在想念。不是「想念某個人」——他連對象都不知道。是一種沒有目標位址的封包,被反覆發送,每一次都被退回。
他的嘴唇動了。
不是決定要說話。是那些一直被壓在喉嚨底下的東西,在這個全世界都在團圓的夜裡,終於找到了一道裂縫。
他聽見自己的聲音。很輕,被風拖散了大半,但每個字都是完整的:
「我不知道你們是誰。」
海浪蓋過了一個節拍。
「但我很想你們。」
他說完了。就這樣。沒有人聽見。海不會回答,風不會傳話,黑暗只是黑暗。但他說出來了——第一次,他不是在承受身體塞給他的那些碎片,而是用自己的聲音承認了它們的方向。思念。他在思念。即使他不知道思念的對象是誰。
他站在那裡,風把他的影子壓在沙灘上,歪歪斜斜的。海浪繼續拍打礁石,頻率沒有變。遠處的漁火在夜裡一明一暗。
他轉身往回走。
口袋裡的手機震了一下。他拿出來看——民宿老闆傳了一條訊息:「阿海新年快樂!🎉 明年繼續拜託你囉!」
他看了三秒。螢幕的光照在他的臉上。他把手機收回口袋,沒有回。
回到側屋,他把門關上。門後的小黃雨衣在黑暗裡看不見,但他知道它在那裡。青蛙的眼睛在等他。
他沒有開燈。他躺下來,閉上眼睛。海浪在窗外。
胸口的洞還在。但它的形狀好像清楚了一點。