(2025台積電短篇小說新人賞——正賞/全文刊載於印刻文學生活誌第267期)
「幹,公司怎麼找個一行code都沒寫過的進來?」
她還記得師父的表情,跟爸當年聽到她選文組時一樣錯愕。
念文組,妳考得上法律系?不然以後要幹嘛?爸連續念了好幾天,聲音被生煎包進鐵鍋爆出的滋滋聲切碎。熱氣將排隊的人影蒸糊,她用力按按按,把生麵團揉成扁扁的皮傳給爸,包餡。念理組到底哪裡不好?爸問。
理組沒有不好,是我的物理化學不好,她這樣跟爸講。念文組以後會在夜市賣生煎包,爸這樣回。
多年後證明爸是錯的,文組也可以當工程師。
「幹不是,測試工程師也要懂code啊,不然怎麼溝通?只會在那按按按怎不找個工讀生來?」師父一陣狂抱怨。
「幹」是師父的口頭禪,她曾禮貌詢問師父能不能改用別的字,例如「暗」。這種替換其實很常見,發語力道也有完整保留。
「幹,不要。」
後來她發現,師父的幹有層次,基本原則是越多幹心情越好。東西好吃,幹。遊戲打贏,幹幹幹。刮刮樂中兩千,幹幹幹幹幹……。師父邊抽菸邊寫程式,一頭金髮像野芒草般張牙舞爪地炸開。這種人也能當工程師?她覺得師父更適合在夜市擺套圈圈攤或賣假皮包。
哎不對不對,這種刻板印象不就跟爸一樣了嗎?她邊捏鼻子邊搧風,衝去打開窗戶,大口大口吸氣吐氣。窗外幾乎是一片荒涼,閒置農地與半遮掩的鐵皮工廠構築遠近景,醜醜的,一點高科技感也沒有。傍晚下課的小屁孩在附近玩沖天炮甩炮,用BB槍射公司窗戶。旋轉上升的蝴蝶炮飛過,閃爍蜿蜒出銀藍與金黃的火光。
HR姊姊、老闆與師父圍成一圈召開人事會議。她保持禮貌地站在旁邊,專注於他們背後開了破口的舊紗網,與窗溝一顆顆藍色BB彈,想像自己待會如果在關鍵時刻衝去捨身擋子彈,說不定能動搖討論的方向。老闆說著好啦好啦,對師父的肩背又拍又揉,次數多到像在幫助咳嗽卡痰的病患。HR姊姊拿出幾張履歷表,三人音量轉低,她讓耳朵跨過對話聽外頭吹過田埂的細碎風聲。
「好啦,我跟俊凱講好了,他會帶妳做,妳要好好學!」老闆拍著她的肩膀說:「機器手臂這塊,大陸那邊好幾個客戶在談,機會很大喔。」
「反正我就寫我的code,沒抓到的問題都算她的。」師父說。
「好啦俊凱,人家是台大高材生耶,測試這種事怎麼可能難得倒她?先前有些不也是佳茹抽空幫忙測的嗎?」
HR姊姊猛點頭。
「不會寫code的人抓bug就是在瞎矇而已,」師父又點起一根菸,「算了,那些工廠操作員程式也都亂用,給妳亂測說不定剛好。」
她趕緊說沒問題,一定會全力以赴。
公司所在的倉庫共兩層。二樓是辦公室,一樓擺放機器手臂機台,兩層間由一座搖晃的鐵梯相連。靠角落那台是她的測試機,不能連網,只能用usb傳師父寫的程式。師父寫,她測,用usb交換,每天爬鐵梯超過十趟。鐵皮倉庫沒冷氣,她不敢想像夏天。
她看過師父測自己寫的程式,滑鼠輕點慢滑,像對待易碎國寶古瓷,又像呵護心愛之物,屏氣斂息地操作著;就連觀察機器手臂移動的眼神,都溫潤了起來。她接手後,視窗上能按的按鍵一律按爆,拖拉元件競速折返跑,數值填到超出空格。逼逼——程式瞬間crash,機器手臂進行詭異的錐擺運動,機台亮起紅燈。書上說這叫做隨機測試,英文是Monkey Test。沒錯,Monkey就能打敗師父。師父邊罵邊拿usb回去改。
徵才網站寫測試工程師薪水35000,軟體工程師50000起。她上網搜尋「寫code 基礎」,去圖書館借《深入淺出程式設計》和《無瑕的程式碼》,小心翼翼地跟著範例打,一個空格都不能多或少,最後成功產出幾行質感透明乾淨的費波那契數列。
費波那契數列中兩兩相加等於下一個數,兩兩相除則無限逼近黃金比例,所以也被稱為黃金數列。黃金比例凝聚了數學、神學、藝術之美,是理性與靈性於塵世的匯流,但在程式書裡卻僅僅是新手入門的簡單範例。
她想起黃金比例於人體的應用,達文西的經典之作《維特魯威人》——雙手平舉、雙腳微張,身體宛如撐開宇宙的星圖,以臍、膝、肘關節等作為黃金點完美切割。純粹的美。
0、1、1、2、3、5、8、13、21……,師父經過,看到她在寫程式,停下腳步。
「台大生,死讀書,寫這什麼廢code。」師父一頭金芒草像颱風來襲般左右搖晃。
費波那契數列,她說,但她懷疑師父沒聽過。
「聽起來就超廢。」師父把她的書扔進垃圾桶:「寫code的重點是實作,要算數學回學校去算。」
師父拿起紙筆,隨手畫了幾棟樓,標註相對應的程式術語:「來,妳仔細聽,程式其實一點都不難,把它想像成在蓋城市就對了。行人負責傳遞資料,建築物實現各種功能,隨著越蓋越複雜,城市能做到的事情就越多。就是因為這樣,所以才叫做程式。」
嗯,聽起來非常牽強。她按照師父的指示,用整數型別創造了一個行人。要幫他取什麼名字?她問師父。
「名字隨便啦,aab還是ababc都可以,妳快點我要教後面的了。」
咚。一間代表「啟動Start」的灰白矮房落在視窗中央。她放入兩個行人(名稱暫定abc與bac),負責遞送機器手臂的旋轉角度與移動速度。abc與bac在矮房內外進進出出,被套上無窮迴圈的項圈,24小時不間斷地工作。差使這些隨機輸入的名字讓她感到心安,她擁有全面支配的實感。
師父的程式碼是野路子,能跑就行,壞了再說。她邊做邊改邊學,歷經了數不清的crash與錯誤,終於頭一次進入自己親手建造的城市——幾間矮房、原地繞圈的行人,很乾淨的空曠。輸入數字,按下啟動鈕,機器手臂如預期成功運轉。她握拳說yes師父好強。
「還可以啦,就是介面擺得太醜,有點美感行不行?」師父說,「等妳會寫code了,看妳還會不會用之前那種鬼方法測。」
這種威脅式口吻跟爸很像。每次她叫爸不要煩不要管她選什麼組、幾點回家、畢業後要幹嘛的時候,爸會說,等妳以後沒工作、等妳以後有小孩,看妳還會不會這樣講。爸擔心多了,文組可以當工程師,現在還學寫程式,未來薪水蹦蹦三級跳。
她週末也抱著筆電寫,在三峽的長照中心,五樓右邊走廊倒數第二間。從家過去三峽的路程遠又繞,捷運轉公車要快兩小時,她每週都去。半年前爸腦血管爆開倒在煎檯旁時,她跟李雨琦和王宣在沖繩畢旅,討論年底要去柬埔寨當志工的事。
當志工?等妳做了以後沒錢看妳還會不會……。
啊,那像現在這樣,能在履歷上寫有志工經驗嗎?她幫忙看護替爸前後伸腿、按摩、側翻身與拍痰。不確定,有寫有加分吧。她看著收據,上頭的數字像刀。
師父問她有沒有興趣賺外快時,她一下就答應了。那時她才知道師父上班之餘還接案,手上有一支Android APP正準備交件,測不來。她跟師父合力把案子結了,刷存款簿時師父的幹比刮刮樂時還多,她用分到的錢繳清半年的看護費。
「這才叫賺錢嘛,不要整天在那拿命換薪水。自己當老闆,才有機會把資源盤活!」
遞離職信那天,叼著菸的師父在窗台架起一把瓦斯衝鋒bb槍,與樓下嘰嘰呱呱的小屁孩互轟,勝負一下就揭曉。「看到沒,資本的力量。」師父說。
金髮、香菸、衝鋒槍,她突然覺得師父還蠻有型的。
工作室大約就在那個時候成立,市區一棟舊公寓的三樓,八坪空間塞進兩張電腦桌、人體工學椅與視訊會議用的大螢幕。師父以前做過業務,很會講,把程式當成夜市藍芽喇叭在賣,APP功能五加一,再送Loading Page精美小動畫。她負責整理數據、市場分析,用英文專有名詞塞滿投影片,搭配充滿巫性的圓餅圖占卜企業未來。
「IOT是我們的機會!」
師父跟客戶隔著螢幕舉手一起喊,IOT是我們的機會!IOT──Internet of Things,物聯網,今年最紅的話題。傳統產品加裝感測器,連結網路或藍芽,用手機APP控制,大數據分析,就可以加上一個神聖的抬頭——「智慧」。
智慧。多麼有攻擊性的詞呀,拐著彎罵不做的是笨蛋。聰明的客戶被師父唬一下,急著簽約匯款。師父將中小企業老闆的照片印出來貼在牆上,用紅色麥克筆畫了鎖定目標的大叉叉。電風扇吹過去時,老闆們的表情皺褶扭曲,變成奇怪的狡詐笑容。
她跟李雨琦約在工作室附近的星巴克。李雨琦問她要找王宣嗎,她說不用啦,只是拿個東西,下次再約大家一起吃飯。
「欸妳真的很誇張,臨時不去柬埔寨就算了,連畢業典禮也沒來。」李雨琦把繫著鵝黃流蘇的黑色捲筒交給她。
她說沒有啦,剛好有不錯的機會,所以先開始上班。
「什麼公司,不用畢業證書就能去?妳小心被騙。」李雨琦說。
李雨琦沒上過一天班,連家教或打工都沒有過的那種,講得好像知道公司流程一樣。李雨琦家是做進口化妝品貿易的,當她每個月精算生活費時,李雨琦只要回家一趟錢包就會自動補滿鈔票,還順手拿超多化妝品試用包給她跟王宣。她後來覺得,李雨琦還蠻適合念社工系的。
哎,應該是說,至少比她這種照分數填志願剛好上的人適合。
「所以妳到底在做什麼工作?」
在寫程式啦,她說。
她喜歡李雨琦驚訝的表情,與追問她什麼時候學的語氣。沒有啦,運氣好,剛好跟到一個很厲害的師父,她說。
她給李雨琦看師父的照片。
「哇,他就是你師父?還蠻帥的耶!」李雨琦睜大了眼睛:「他帶妳出來開工作室一起接案?怎麼聽起來有點浪漫啊?好羨慕妳喔!」
系上大部分人畢業後考公務員,有的出國念書,只有最酷的李雨琦找她跟王宣去柬埔寨當志工。雖然最後她沒能去成,但她現在覺得寫程式很不錯,讓李雨琦覺得很酷的自己也很酷。
「欸妳知道嗎?那個大我們兩屆的學姊陳婉樺,負責的個案一直找不到安置資源,被逼到差點要把老人家帶回自己家裡照顧耶。」李雨琦搖頭,「真的超扯,社工師環境越來越爛,去柬埔寨教小朋友織布袋都好多了。欸,等我回來妳教我寫程式好不好?」
她說好。原本她還打算跟李雨琦解釋IOT,或分享工作室接案遇到的鬼故事,但師父傳訊息叫她趕快回去,客戶臨時要開會。
「好啦下次再約喔,不是一直說要去妳爸的餐廳吃嗎?」李雨琦說。
曾經說過家裡是做吃的,有點類似小籠包那種。但也許表達太模糊,或是她始終沒勇氣講出夜市兩個字,李雨琦跟王宣一直以為她們家是像鼎泰豐之類的高級餐廳。
反正現在也都收了,無法拆穿的不算是謊話。她揮揮裝畢業證書的捲筒跟李雨琦說掰掰。
李雨琦總是讓她想起國中同學梁懷萱。
哎,這樣說其實對李雨琦不大公平。雨琦是好人,特地送畢業證書來給她。梁懷萱的個性可就差多了,她大學同學裡,沒有人會像梁懷萱那樣的。
但她的腦迴路就是會不由自主將兩人連起來。
國中畢業之前,她對金錢的概念與三顆二十元的生煎包全面掛勾。例如學雜費約等於三百顆生煎包或參考書是四十五顆生煎包之類的。這種轉換法在某些情況下意外地好用,像當時校門斜對面的一間鬆餅屋,光是鬆餅加飲料就要花費二十二顆生煎包,她馬上就能知道這不對勁──誰會吃二十二顆生煎包當早餐?
梁懷萱打破了她的認知界線,鬆餅飲料套餐再加三種不同口味的可麗露,每顆只抿一口上嘴唇,第二節下課前就全扔進廚餘桶。超浪費。她想像幾十顆大白澎澎的生煎包塞滿爆出紅色桶身,像喜宴上的造型桌花。要不是開學那天她們兩個剛好坐隔壁,她根本不可能有機會能跟梁懷萱混在一塊兒。國中生的個人標籤是基於小團體的,她因而獲得了「酷」的形象。
她學梁懷萱講話。
她學梁懷萱裝無聊,裝懶。
她沒辦法跟梁懷萱一樣吃鬆餅套餐。考慮過拿幾十顆生煎包在早自習啃,但想了一下放棄。
將制服裙頭內褶兩次,裙襬輕盈地移到曝光邊緣,穿上顯眼的泡泡襪與厚底鞋,終於跟梁懷萱有八分像。她們下課時披著國三學長過份寬大的外套,在走廊拖著鞋底超慢速滑行,梁懷萱耳際的銀圓環晃呀晃。無聊的節奏弧度。
「好無聊喔,放學要幹嘛?」梁懷萱說。
妳不是要去染頭髮?她問。
「設計師跟我改時間,超爛,我想漂紫色想超久了。」
還是要去西門町拍貼?
「不要,上禮拜才拍。」梁懷萱無聊到打開水龍頭的水開始洗手,淅瀝瀝的水聲聽起來真的比較不沉悶。她們把整排水龍頭都佔起來,洗手。
叫妳乾哥騎車載妳出去?她邊洗手邊提出建議。
「不要,坐機車屁股很痛,而且只有我去很無聊,」梁懷萱突然把水龍頭關了,「啊,我想到一個有趣的……」
那天放學她們在後門集合。過六點後天色漸暗,行人漸稀,當百褶裙影子被柏油路面吞沒時,梁懷萱從口袋拿出一串銀亮亮的鑰匙。
「我乾哥說,車漆有好幾層,有的車刮下去顏色會不一樣,要看運氣,你看。」梁懷萱朝旁邊一台黑色Toyota隨手一劃,一條俐落的直線:「像這種灰白色的就是最普通的,抽獎失敗。」
梁懷萱將鑰匙遞給她。
「喏,換妳。」
她接過,看向身旁一台寶藍色轎車。上面的Logo她沒看過,沒看過代表陌生,陌生代表稀少,稀少代表很貴,很貴她沒有錢。
她猶豫了。猶豫就不酷,是梁懷萱的大忌。
「嘖,這也不敢。算了,妳去把風。」
梁懷萱開始刮。
刮車的聲音很難形容,不是那種指甲抓黑板的高亢尖聲,反而更近似於落葉被風吹動互相摩擦的「咻」。咻咻咻,一台咻過一台,她死盯著路口,汗從眉心匯聚滑落至眼角,與路燈的光影融合,她趕緊抹了一下眼睛。欸!有人來了,她轉頭叫喊時看見梁懷萱正華麗的一刮,金屬與車漆接觸剎那閃現了亮粉紫色的微光。
啊,刮中了。她當下這樣以為。但事後在警察局看照片,那條刮痕也是灰色的。
她跟爸講,她沒刮,她只是站在那邊把風而已。
「那又怎麼樣?人家要告是一起告。」爸說,「賠錢可以和解就賠一賠。」
回家後,她以為爸會說看妳下次還敢不敢這樣之類的。但是沒有,太安靜的客廳讓她很不習慣,她提議調監視器或找梁懷萱對質,要找梁懷萱的乾哥也可以,說不定他會幫忙作證!爸沒回應,推著攤車出門。她坐在那努力回憶梁懷萱乾哥的名字。
賠償金額是九千零六十顆生煎包。
事情過後梁懷萱還是梁懷萱,但她變回班上最乖的那種乖乖牌。上課下課,認真念書,放學回家。守規矩很便宜,她心想。
智慧燈泡的案子,她第一次跟師父吵。
也不是真的大吵,她只是沒講話,讓沉默殺死空氣。該講的講過一百次了,上次被這個客戶弄得不夠慘嗎?智慧手環的時候就知道他們家產品不行,一堆功能要靠APP救,到現在她都還在測手環心跳傳到HTC會掉數據的問題,還敢再接他們的案?
「現在誰還拿HTC啦?都妳自己在那死腦筋,沒事找事。」師父說,「大不了這次我們合約簽細一點,放掉HTC。」
根本就不是這樣。
她舉起箱子,把裡頭的手機一股腦全倒在桌上,Sony三星LG華為小米OppoVivo,撞飛旁邊間或亮暗的HTC。客戶產品的問題,讓她多測了這麼多品牌的手機才勉強結案。智慧手環,測心跳,她上個月每天繞大安森林公園跑,距離加起來超過一場全馬。全馬耶,她強調,還是這次會有五隻Monkey幫忙跑?
Monkeys。師父說,台大生英文行不行啊?
她怎麼可能不懂。師父滿腦子想的當然不是燈泡手環,是熱錢、是賽道,是站在風口上豬也會飛。IOT物聯網就是風口,他們正展翼。當年上映的電影《中國合伙人》師父在工作室看了三次,每次都停在黃曉明跟同伴在工地大喊「有錢啦」,朝天空撒鈔票的畫面。
「妳看他們辦公室比我們的還破,這就叫屌絲逆襲。」師父的眼神銳利,如芒草初放的尖葉。
師父很矛盾,做案子時罵得比誰都兇,罵完又要接。整天仇視資方,又幻想變成資方,有需要把這麼多衝突塞進來嗎?她問師父。
「台大生,嘗過苦日子嗎?養尊處優。」
燈泡送來了,一組七顆架在兩張電腦桌的中間,劃分楚河漢界。她還在不爽,刻意無視師父「喔幹幹幹幹幹連線了會亮囉會亮囉」的假嗨歡呼。
戴上耳機打開筆電連到GitHub,她寫的APP「GO水瓶金魚」今天又得到三顆星星。為了符合手機螢幕,她精心設計長形雪克杯狀的透明魚缸,心情按鈕是魚飼料。連按好幾個怒,紫赭色的怒怒魚這幾天一直長大。魚兒沿著無形的圓環路徑游,到遠處時身影剪裁縮小輪廓模糊,只剩微微鱗光,像掉進手機深處。
「GO水瓶金魚」是她的心血,用上所有跟師父學的寫程式技術。最近加入3D景深系統,取代原本左右來回撞牆的扁平2D魚,一上線就多了好幾顆星星。討論區陌生人反應更新後魚有時會卡在遠景的bug。卡就卡吧,她現在不可能找師父求救。
一陣叮叮咚咚的旋律帶著燈光起伏,原來這款智慧燈泡還能搭音樂節奏,工作室一下教會一下夜店。師父用倒退月球漫步靠上她椅子,一直頂,非常幼稚。
「拜託啦幫忙測一下啦。」
「動動手指就好了,第一版已經可以測了啦。」
……哎,好吧。
她接上手機,點擊APP首頁的Start鍵,按了幾下毫無反應──是怎樣,耍人嗎?她火大了,像討債集團按門鈴那樣狂按:「欸,你這什麼爛版本,搞……」
工作室突然陷入漆黑,桌上的燈泡組依次亮起。光影錯落,她的手機螢幕跳出復古電玩風格的像素圖畫,幾十朵紅白色玫瑰花左右擺動,耳邊響起那首小朋友都會唱的歌。
……什麼鬼?
師父捧著一顆黑的蛋糕,邊唱邊罵,幹妳按太快了都還來不及點蠟燭。她從口袋摸出打火機,點燃,許願,吹熄。接在生日快樂歌後面的是不知名鋼琴曲,層層燈光化作潮水,他們在綿延脈動的浪裡吃蛋糕。
師父問她許什麼願,哪有人三個願望都不講的。
六吋蛋糕兩個人只吃得了一半,師父睡著了,頭髮像枯草一樣垂落。秋夜微涼的風抽上背脊,她深深地吸入,肺泡與焦油尼古丁共燃。點開「GO水瓶金魚」,餵了一點飼料給蘋果綠色的嘿皮魚。
爸當然不知道她抽菸。
……等妳哪天肺出問題看妳還會不會抽。
跟師父學的,在工作室,他們第一次做完之後。胸腔一陣燒灼後緊接的是劇烈的咳,一口氣差點吸不上來。「哎唷學壞囉台大生,學抽菸。」師父在旁邊嘲笑。她咳到眼淚流出來,又賭氣般猛抽了幾口。
她叫師父師父,師父叫她台大生。師父的調侃裡帶著某種她很熟悉的自輕。是她還穿著制服,在夜市擺生煎包時就認識的劣等感。所以她一次也沒跟師父提過三峽的事,她知道他們永遠不會真的交往。
嘗過苦日子嗎?
她想起那時爸剛出加護病房,準備轉院至長照中心,她不得不去找叔叔伯伯討論。
「唉,真的不是我們不願意,只是妳爸之前借的也還沒還清……」叔叔將借據放在桌上,一張一張一張擺正,上面除了爸的簽名字以外都很陌生。同樣在桌上的看護費明細顯得形單影隻。
「很心疼妳,但我們也有生活要過。」對方為難的表情讓她自卑,她低頭,感覺眼角很麻。
「每個月幫忙一點是沒問題,但是要……」大伯的聲音斷在一半。要多少?要多久?不知道。她也不知道爸要躺多久。
什麼都不知道的她,確實沒嘗過苦日子。
希望爸能好起來,希望能把欠叔叔跟大伯的錢還清,第三個願望怎樣都行。
她滑到IG,幫李雨琦跟王宣和那群露出超大笑容的柬埔寨小學生合照動態按愛心。
提案、開工、測試、驗收。客戶給的壓力很大,她跟師父用生命燒,菸從一天兩根到兩天一包。把功能寫完、bug解開,把自己燒成菸蒂,把菸蒂從陽台彈出去。客戶終於結案,入帳,她把數字轉去長照中心。
她不想讓爸聞到菸味,所以越來越少去。
客戶說APP有問題。
客戶的客戶反應半夜睡覺時,所有燈泡突然自己啟動,各種顏色的亂閃。對方是搞豪華露營的,聽說整個營區掛了超過三百顆燈。
「像鬧鬼一樣,哈哈。」師父說。
她笑不出來。
APP開的功能自由度太高,她當時就說過。燈泡迴路在自訂模式展成樹狀結構,越多燈就越複雜,很難測。她還在論壇上看過有人為了展現智慧,拆解產品電路,自己加裝交流馬達、光敏電阻跟紅外線sensor。
「幹,這不是我們的問題吧?」師父說。
她硬著頭皮,跟客戶要了豪華版冰藍色六十燈系列,五組。三百顆智慧燈泡掛起來,從兩側牆面延伸到天花板,像整齊列隊的藍背甲蟲。
師父整個禮拜沒進工作室,他說幹妳有病,他有密集恐懼症。
……啊不然要怎麼測?
打開APP,派對、影院、運動、舒緩模式,看起來功能正常。進入自訂模式,在上面亂拉一堆迴路與倒數計時器,關燈。無光的工作室裡,她與燈泡展開整夜漫長的對視。因為擔心某些不明電性因素干擾,她沒開冷氣,連風扇都不敢接上。
來,我看你會怎麼突然自己亂閃。
工作室很悶,身上僅剩的背心溽溼,手臂與肘彎間凝著滑透了的汗漿。她一邊想著乾脆脫掉算了,又因被房內無數燈泡眼睛注視著而感到遲疑。
哎,那些黑心廠商,說不定會在燈裡裝針孔攝影機,偷拍影片外流呢。這種故事網路上太多了。
不可能吧!只要拆開燈泡就會立刻被揭穿呀?
也許有什麼奈米微型攝影之類的黑科技發明了也說不定?
但現在這麼暗不用怕吧!
紅外線攝影?
時間在她自言自語的對話裡流動得很慢很慢。倦意湧上,她的思緒像火爐烤熔的糖漿,黏稠又滯緩。真的太熱了,她決定折衷,找來一個巨大紙箱,除去衣物後躲進去,側臉緊貼箱面,只留下一點小縫隙繼續觀察燈泡。
倒計時數字終於歸零,燈泡像嗑藥一樣閃爍起來,系統運作正常、一切符合預期。這下更麻煩了,抓不到錯誤師父就沒法改。她的黑眼圈糊在嘔吐物般的光暈裡。
客戶一天打三次電話來催,新版本新版本新版本。新你老師新年快樂,bug都沒復現要怎麼修?她客氣請教bug發生時的燈泡串接方式。客戶的臉擠滿螢幕,口水幾乎要從那端噴過來:「怎麼串接?他媽的要不要我順便帶你們去住一晚豪華露營?問那麼多,馬上給我修好就對了!」
「去住啊,幹,去了就知道他們是怎麼亂串的。」師父跟她說。
她把客戶跟師父一起拉進視訊會議,講了幾個小時。客戶勉強同意不是APP問題,但要求他們在自訂模式裡追加保護措施,限制燈組自由串接的功能。
沒有酬勞。時間一樣,兩天後交。
師父沉默,溶進黑暗的視窗背景裡。她感覺那頭有火焰在燃燒。
客戶下線了。
她問師父怎麼辦?
「幹,垃圾公司,要我們擦屁股還不給錢?幹!」
師父也下線了。
暗,她也想罵髒話。
幸好我也會寫程式,她心想。開啟專案,師父被解構成數字與符碼,比赤裸還赤裸的立著。程式碼東一塊西一塊拼貼,用隱藏規則聯絡;遍地寫下又註解掉的功能,混亂的變數名像泥流一樣卡著她前進。髒,很鋒利的那種髒,每行鍵入的羅馬字都是滾過荒地的咆哮──我是誰?我在哪?我為什麼在這?調用、迴圈、反覆執行,她感覺進入了師父的內裡,透過四方型的黑白介面。
這邊刪一點、那邊加一行,OK,程式還會動。她想起在病房時,醫生拿小槌子在爸身上各處敲擊,記錄反應,有時會動有時不。爸的膝蓋帶動小腿彈起,但醫生的說法很模糊。後來她才知道會動不代表什麼。
好不容易尋到自訂模式的區塊,刪除,執行。砰,程式立刻crash,她想像師父的頭爆開彈飛冒出絲絲白煙,趕緊連按CTRL+Z把師父救回來。不要緊,程式很脆弱,但可以重來。試試刪除另一小段,沒事,那好辦了。她一頭泡進迷宮抽象層與多重執行緒中,在裡面掙扎泅泳,反覆刪除、執行、錯誤、復原。主機板升溫,風扇的震動變得急促。她又迷路了,踩到一區限制存取的記憶體位置,砰,再次爆炸──
是被包材與氣泡紙擠壓的爆裂聲驚醒的。在要交件的那天早上。
兩名灰藍制服戴帽子的大哥正打包主機與螢幕,師父在一旁指揮。大哥手指天花板的燈泡,師父說那些留著吧,不用帶。
她問師父交件了嗎?
「早就交了,難不成還靠妳?」
師父請搬家大哥抽菸,對方搖頭說謝謝。她問師父現在是要搬去哪?
「收了啦,幫別人賺錢還要受氣,幹,不爽做了。」
不做了?師父還在罵,垃圾客戶,只給得起香蕉還要求一堆,當我Monkey嗎,接案就是賤。師父把手機扔給她,是智慧燈泡APP。首頁多了俏皮的燈泡動畫,搭配新的免責聲明──明令禁止用戶拆解電路。進入自訂模式,串接方式被特定規則限制。她隨手按了幾下,工作室一陣明明滅滅。
看起來不錯,她說。
「還有更酷的,你按左下方靠近邊緣空白那邊。」
空白那邊?
她疑惑的按了按,沒反應。「多按幾下啦,我藏在附近,」師父說,「用你測試那種手法多敲幾下。」
按。
按按按按按。
燈泡畫面倏地消融,變成一團深海般的全黑,幾秒後,螢幕左上角冒出一個大大的「幹」字。接著是右下、左下、中間、從螢幕外飛進來……有大有小,各種顏色,整支手機被四面八方閃現的「幹」塞滿。層層疊疊的大小幹字與燈泡達成同步閃爍,像染了顏料的銀河,與手機螢幕交互流淌。幹幹幹幹幹,彩色的幹。
「馬的垃圾公司敢搞我,我一定搞回去。」師父說。
她開始打包。
除了電腦與行李箱,師父搬進她家時,還帶著一幅比她雙臂展開略小的畫。說是畫其實有點勉強,上頭只看得到零星草稿痕跡。她那時才知道,原來師父以前念美術的。
這是在畫什麼?煙火嗎?她看著畫布上漫天飛濺的鉛筆線。
「忘記是要畫什麼了。那時家裡出狀況,缺錢。畢製沒來得及做完,就出來找工作了。」師父的語氣,像在講別人家裡的事。
美術系也可以當工程師。她心想。
沒案子可接,他們的日子在做愛、投履歷、抽菸、睡覺之間交替輪轉。
「想抵擋資本主義的剝削,就得坐進資本家的辦公室!」師父說著不知哪個內容農場看到的金句。
目標鎖定大型外商軟體公司。她把做過的案子(除了智慧燈泡)列在履歷,附上「GO水瓶金魚」的GitHub連結。師父想應徵資深研發主管,這類職缺網站上不多,他將自己的名字加註懸賞金額,委派獵頭出擊。
不久後她拿到A公司Smart Home部門的offer,開始上班。師父每天跟獵頭密切通話,偶而穿西裝打領帶出門面試。天氣轉涼,亞麻灰的西服布面由挺轉皺,師父沒事時就寫他的秘密專案、殺手鐧,裡頭用上什麼輕量框架,什麼零接觸部署,還有更多她聽不懂的技術名詞。
「面試時秀出來,保證嚇死他們。」師父說。
跟她猜想的一樣,師父一直沒有找到工作。
入冬後的三峽細雨綿綿,風大,體感溫度比已經很冷的台北又掉了兩三度。爸的東西很少,病歷、照護紀錄與幾套衣褲,一個雙手環抱的紙箱就能裝完。
簽DNR的事她考慮很久,最後還是爸自己決定的。
輕輕敲爸膝蓋下方的韌帶,小腿抽動向前踢,一下兩下,這是她與爸的對話方式。踢兩下的機率大概只有五分之一,她對自己說那踢一下就是爸不想簽。
爸在她簽完兩天後就因為肺炎走了。
師父開iRent載她到樹葬園區覆土。冬日樟樹枝椏零零落落,跟她想像中那種堅韌盎然的綠意大相逕庭。口袋手機震動,她打開看,家族群組的長輩還在tag她,問為什麼急著簽?暗!沒來看過爸的意見還最多。她傳了幹幹貓的貼圖後退出群組。
大學跟李雨琦和王宣在社福中心實習,討論到個案家庭背景單親時,她的身體總像被幾百隻螞蟻爬過,麻癢異常,一次又一次,彷彿變成密布孔洞的蟻塚。現在她成為徹底的孤兒,哎,難道爸是怕她用不上學校學的專業嗎?情緒安撫、心理評估、安全感建立、創傷處理──李雨琦正好傳訊息問什麼時候可以去吃她爸做的小籠包,她回喔沒有啦我爸死了。
念什麼廢系寫什麼廢code救什麼廢人,抽這什麼廢菸,她吐出一片淺灰色的雲,填滿天空跟雨滴的中間。閉上眼睛,舉起手,想像可以集結所有Smart Home部門產品的智慧,做出最智慧的人生選擇,睜眼後卻仍是無盡的灰濛。
她還是沒跟師父講爸的事,反倒說起梁懷萱。
就一個國中同學啊。你知道嗎,那時在警察局,梁懷萱她真的直接裝死耶,不是,不是真的假裝死掉,你先不要鬧。她就一直看地板不講話,搞得好像我也有刮一樣。有,我有說了,但最後還是一起和解。害我們家賠超多錢,她說。
哎,你絕對不知道他們家多有錢,那筆錢就算乘十倍,梁懷萱她爸都賠得起。我就搞不懂,那麼有錢還要拖別人下水到底什麼心態。沒有,我真的沒刮,我就站在旁邊而已。把風也不至於要賠一半吧?她說。
哪會有什麼報應。跟你說,前幾天下班我還有看到梁懷萱,過得好好的欸。就在信義區那附近啊,穿得像貴婦一樣在逛街。其實說真的,我也不求人生要多公平,我可以過得辛苦一點沒關係,但最最最基本的,壞人還是要比好人先死掉才對,還是她說。
就長這樣啊。她拿出手機滑到梁懷萱的Facebook給師父看。不要按到讚喔,她特別提醒。
「她大頭照臉都沒對到焦。」師父看了老半天後說。
「欸欸欸你們有看到最近那個幹幹燈泡嗎?」中午吃飯,同事拿出手機,畫面上豪華露營老闆手持平板與手機,站在營區接受記者採訪。
「靠這個超級好笑,軟體外包,結果被埋炸彈。」老闆隱沒在幹字與數百顆炫彩燈光中,持續對燈泡公司控訴。「這會被告死吧。」同事們把手機傳來傳去,她很配合地一起大笑。
燈泡的事後來在社群上燒起來,知名3C類Youtuber趕在APP下架前進行開箱評測,意外發現師父不只在一個地方埋了炸彈,當場玩起踩地雷。他們在爆炸時歡呼,影片衝上YouTube發燒排行。有人做出相同效果的Library放在GitHub上,那陣子直播圈流行送禮物讓直播主頭上冒出一堆彩色的幹。
雖然有點荒謬,但她想,這件事說不定能激勵一下師父。
師父還是沒有找到工作。
她經常看到師父每隔一小段時間就點一次Email,滑上滑下重新整理。師父說,如果公司信掉到垃圾郵件裡不會有通知。但是什麼都沒有,主信箱與垃圾郵件區乾淨的很沉默。
週末下午,西曬的陽光漫入客廳,師父坐在沙發一角,被縫成無聲的影子,像植物一樣靜靜的。
她跟師父討論,也許最近高級主管缺比較少,要不要考慮改投工程師?師父說,40歲投工程師更困難,公司只要年輕人。她說同事都在傳很多軟體公司現在不找台灣人,改往印度外包了。師父嘆氣說,政府都在搞硬體晶片,寫軟體在台灣沒救了。
其實她知道原因。
那天走進A公司,厚地毯、輕音樂、扎眼的落地玻璃,十七樓底下密密點點的人車穿行。面試官與團隊成員魚貫進入會議室,在投影機的冷光中坐定。過程一切順利,她介紹做過的專案,解釋技術難點,如資優生般完美回答所有提問。直到最後,面試官打開「GO水瓶金魚」專案,她像生物標本般被攤開投上大銀幕。
「妳寫code跟誰學的啊?」面試官問。
在這種場合無論回答師父或陳俊凱都很怪,她用了零點零五秒判斷這其實不是問句。
「Spaghetti code,聽過嗎?」面試官又問。她搖頭。
「形容code像義大利麵一樣,前後左右糾纏不清,亂捲成一大坨的意思。」面試官暫停了一下,「妳這盤是番茄口味的。」
嗡嗡的筆電低鳴聲持續,空調溫度很低,這笑話爛到連他手下的工程師都笑不出來。她也沒笑。
「金魚游到遠景時,會隨機卡進無窮迴圈。妳該解決的是那個loop,不是用timer數卡五秒就瞬移回前景。」一名團隊成員說,「妳要想一下怎麼解,寫code不是會動就好。」
「專案缺乏架構設計,模組化不足。想到哪寫到哪,可維護性極低,難以協作。」,面試官說:「連想幫妳改,都不知道從何改起。」
「寫code習慣太差,程式碼亂到幾乎完全看不懂。命名、框架、物件導向都要重修。」
效率、可讀性,高內聚低耦合原則。討論移轉到玻璃牆,白板筆是手術刀,「GO水瓶金魚」被解剖成數十塊功能模組。肉拆完是骨架,碎片成她幾乎不認識的樣子。怒怒魚、焦焦魚、嘿皮魚切完都還在嗎?還在。他們說,金魚在這個架構下游泳動畫更順,還能擴充。「回收機制做好,要加幾千隻魚都不成問題。」哪來那麼多種心情?她誠懇點頭,拿筆記本假裝在抄。
面試官說她台大畢業,態度很好,可以給她Entry level的Software Engineer職位,進來會有人帶她全部重新學。面試結束後,她在A公司的廁所吐到發抖,馬桶裡漂浮著嘔吐物與腥酸膽液,像師父破碎的程式碼。她幾乎把師父從身體嘔出來。
「最近好多文組的跑來當軟體工程師喔。」
「對啊,不知道他們寫的code會不會把產品炸掉。欸對了你有看新聞上那個燈泡APP……」
一個假日早晨,師父還沒起床,她撿起地板的褲子穿上,坐到師父電腦前。
昨天是大日子,她跟師父各有值得慶祝的事──她到職A公司滿一週年,而師父終於找到工作。他們開了一瓶超市特價香檳,不夠,又去便利商店買兩手啤酒。喝到凌晨三點多,好在是禮拜五。
晨光煦暖,穿過紗窗的微風帶著清新的味道,她點開師父的殺手鐧秘密專案。
程式碼現場,游標閃爍的I字提醒她一切準備就緒。
擠。好擠的城市。建築物用不可理喻的角度相互倚靠、折疊,像隨手堆起的積木,層層向上拔高。她抬頭便看見一座座天橋蜿蜒如蛇,構建不連續的天際線,有的莫名其妙地拉得很長,硬是連接相隔遙遠的大樓。
巷道被擠壓成狹窄的縫隙,作為指引的路標一處有一處無,她小心閃過搖晃的招牌與鋼筋外露的屋瓦。路邊幾支消防栓破裂,水柱噴起數公尺,在昏黃的路燈下折射出色彩。她忽然想起爸在夜市收攤後,接水管沖刷煎檯,霧氣蒸騰,接著流出五顏六色黏滯油沫的畫面。
好擠。她貼牆側身通過,繼續走著。
密不透風的擁擠也來自城市中無數名穿同款灰色帽T的行人。相似的灰色身影交錯流動,帽沿壓低,面容漆黑模糊,從不停下腳步,快速穿梭於天橋與巷弄間。帽T人有名字,在頭頂以銀色懸空字體閃現──aaa、aa、aac或ababa之類的。A公司主管早就嚴禁她用這種方式命名,現在她自己城市裡的每位居民都擁有精巧的名字,一眼就知道任務與型別。
爬上鄰近廢棄公寓的頂樓,她看見城區間的交界僅用一排歪斜的木柵欄隔開,任何aaa與ababa都能夠輕易地跨越,在那裡遇上另一個同名的陌生人。
然後爆炸。
腦海裡響起主管的聲音:封裝、資料結構、MVC架構,蓋工廠管理相同性質的帽T人!A公司有嚴格的程式碼規範,打造出的城市理性、有序,冷靜如玻璃工藝品。
昨天,主管在慶祝會上表揚她,說她這一年進步非常多,是幾個新人中表現最好的。「你們一定無法想像她以前的code有多亂」引發同事的高度好奇,氣氛正烈,有人在部門群組貼了「GO水瓶金魚」的下載連結。表揚大會轉為公開處刑現場。
「你看就是這樣!魚卡住了,游不回來。」
「真的耶,我剛剛點餵飼料它也完全沒有反應……,咦?魚直接飛回來了?欸這解法太搞笑了吧。」
「妳怎麼還沒修這個bug啦?那時不是說了嗎,要用多重執行緒來解……」
哎,上班都沒空了,哪有時間修這個啦,她說。好了啦不要再玩了啦刪掉刪掉,她說。
沒想到那還不是最糟的。
推開家門時,她發現師父的畫已被取下放在地上,邊框用厚紙角夾起固定,氣泡紙包裹嚴實。畫旁立著打包完畢的行李箱。
師父說他找到工作了,下禮拜一就要搬走。
啊?
找到工作了?
她記得很清楚,師父已經好一陣子沒接過面試通知。幾天前,她才看過師父的信箱,和上個月、上上個月一模一樣,空蕩蕩的。哪裡突然冒出來的工作?
她看向師父,師父沒看她。
叫人耳鳴的靜默。
是要去哪?她問。
「妳沒聽過的啦。」師父自顧自地說,「反正該教妳的都教了,也差不多都學會了吧?看過妳現在的專案,寫得不錯,沒什麼需要我擔心的。」
她還想問,唇齒舌卻猛地不同調。
不知怎麼,她在那個瞬間非常確定,一旦她繼續追究:真的找到了?什麼時候面試的?地點在哪裡?為什麼要搬走?師父一定會叫她不要煩不要管那麼多。她彷彿能看見自己所有拒絕爸的姿態,在經過許多年後,很公平地回到她的身上。
反正師父不知道爸的事。反正他們本來就不會真的交往。
總得說些什麼吧?
她想著至少要擠出一句謝謝師父。仍是卡住。
師父打開超市買的特價香檳慶祝。
殺手鐧秘密專案因過度負載而卡頓。城市靜止了一秒。
師父起床了,來到她的身邊。他們比肩而行,在混亂中遊蕩。
「這裡有路。」師父推動房屋A的書櫃,穿越到房屋B。而房屋B的地下室又連通房屋C。城市突然變得像遊樂園,藏有千百個秘密,每座橋樑、每條歪七扭八的路背後都有一點小故事。
「那是我放的生日驚喜。」師父指著大樓玻璃帷幕外牆上的一顆按鈕,漂浮的銀色字體註解寫下「cnt≥20」。cnt的意思是計數器,她照做連按二十下,城市的喇叭播送起生日快樂歌。
我還沒生日,她說。
「我知道,我只是先做起來放著。」
暗門、密道、輸送帶,他們來到位於城市中心的高台,眼前一棵五彩斑斕的大樹巍然挺立。紅、藍、綠、金黃,豔紫的葉片團團簇擁,在微風中顫動。流動的色彩順枝椏延伸,像翻倒的調色盤,填滿她的視線。
她問師父喜歡寫程式嗎?
「幹,怎麼可能喜歡,還不是為了賺錢。」
為了賺錢,你寫這些有的沒的到底要幹嘛啦?她終究沒說出口,只是怔怔地瞧著眼前彩葉繁生。
師父做不成資本家,也坐不進資本家的辦公室,背誦的金句一無是處。在日復一日的鍵盤敲打中,像底下那些輪廓模糊的帽T人,默默化約為廣袤城市的血肉。那一刻,她突然有點理解,師父敲的每顆鍵、寫的每行code,都是抵抗。
說不定師父真拿到大外商的offer;說不定師父又打算自己接案,或回去做機器手臂。
說不定師父不當工程師了。
師父輸入最後一行指令,她按下Enter,樹梢葉片開始隨無聲的節拍閃動。
整座城市的帽T人都抬頭了,一齊看向大樹。他們的臉不再是一團黑,而被閃動的葉片映上不同顏色。光影流轉,像是海沫激起的薄水霧中出現的彩虹,她的臉與師父的臉也成為色彩的載體,扭曲、變形。葉片產生變化,一片又一片,變成她早就猜到的那個字,五顏六色的那個字。大樹被逐漸膨脹的方塊字體塞滿,再更滿,在所有葉片轉化完畢的那一刻,爆炸。
所有的字都飛到天上,成為夜空的一部分,城市像萬花筒一樣亮了起來。
幹,好漂亮。她忍不住說。















