開刀之後休息了兩個月,回到工作崗位又過了幾個星期。時而覺得清閒,時而覺得還有很多事情未完待續。

我對於正在發生的新技術往往感到興奮,希望這些技術可以讓手上的專案在百尺竿頭上更進吋許。這樣的開發方式不見得適用於 eBay 這樣充滿 legacy 的老公司,相反地,在我已經沒有興趣的 startup 裡反而常常採用。因為 legacy 很多,往往針對問題就出現了特定的解決方法;這些方法不見得放諸四海皆準,有時還跟 open source community 的新版本有所牴觸。與當年 Microsoft 的氛圍稍稍不同的是,這些問題根源於 eBay 改過的老版本,而不像 Microsoft 往往重啟爐灶的原因,是基於上層的角力或政治鬥爭。

我一直不喜歡學習這種所謂「專門用在這個地方」的作法,對我來說這些 hack 知識的累積,像是 Foucault 所謂的 pseudo knowledge,知識無法累積,離開了這間公司就與我毫不相關,但在這個時點上卻又是 necessary evil,非如此不能解決目前的景況。

最近跟 team 裡一個很資深的 engineer 有過幾番長談;我們考慮的面向不同,對於技術採用的時點與追求也不一致。談過幾次以後,我毋寧相信這樣的交流是正向的;畢竟大家考慮的點不同,方方面面思考以後,對於未來一起工作的綜效是有幫助的。也許要妥協,也許希望 eBay 不要像 Amazon 一樣充滿政治跟派系,也許傷害就算發生了,也還在可控的範圍裡,不用看見星火就急急的認定有燎原之勢。


工作超過十年,換了很多公司,我常常扮演的角色都是不受歡迎的 gate keeper。設定 code coverage tool,弄了一堆 Jenkins,把 findbugs 跟 dependency check 放進 project 裡。花了時間精力做完這些事情之後,我在 team 裡是隻聒噪的烏鴉,「這個不行,那個不對,findbugs 又出了什麼狀況,你 build 不過是因為 dependency 沒弄清楚,runtime 出問題是很嚴重的….。」

我嘗試想在 team 裡改變的,是 open source 下 coding 的技術或經驗,而這些積累的技術或經驗,往往是放諸四海皆準的。因為這些事情非常基本,有時甚至有點難為情;犯錯是無傷大雅的;如果可以在 commit 到 master 前把這些工具提點的問題一點一點的修好,長此以往,對於程式語言本身,甚至軟體工程的慣例,會有更基本的認識。

我自己很清楚,這些事情是吃力不討好的;這不是 deliverables 的一部分,這對我的年終 review 沒有幫助,這更不是光彩奪目,可以轉動蹦跳,可以拿出去給高層做 demo 的前端平台。我沒有強制組員遵循規範的權限甚至意圖。如果大家有追求 engineering excellence 的野心,那我們可以一起追求;如果其他的目標更加重要,那我們也不需要呲牙咧嘴的,如小狗追著自己尾巴般,在同樣的課題上一直轉圈。那沒意義,現在的我更沒這個體力。

我只是擔心意外會發生,所以我需要確定事情在我可控的範圍內完全安全,對於在別的平台上流竄的 0 與 1 我是無能為力的。這些事情影響到的不是我自己,因為我已經習慣這樣的設定;在一個沒有完整規範的 team 裡,這些 check 往往反而變成 release blocker,然後因為尊重而協商,因為出貨壓力而妥協,然後成為一段 @TODO 的斷簡殘篇,sprint 的歷史又畫過了新的一頁。


花了非常多的時間裝修我們在 Almaden 的家居之後,我們與幫我們裝修的 contractor 宋師傅成為很好的朋友。上個星期他約我們一家去烤羊肉串,跟著宋老大的朋友們胡扯;肉香也好吃,幾道東北菜也是一手絕活,我難得過了一個閑適的週六。

在宋老大家閒逛的時候,他展示了家中強大的火力,八把各色步槍或手槍,幾萬發子彈,然後得意的告訴我,這就是為什麼他不需要像我一樣,在家的各個角落滿滿裝上監視器的原因。好樣的,我是個非常反對 2nd amendment 的右派,不過我估計宋老大完全不知道這玩意是什麼。

我跳了起來。「你家門口沒有監視器?你槍櫃的鎖到底能不能用?」然後立刻在 Amazon 上訂了一套兩個攝影機的 Blink 給他,一個放窗邊一個放門邊,說好有時間再幫他去裝。

當宋老大拿槍給我看的時候,竄到我腦裡的第一個念頭就是,如果這成堆的武器被偷了,該怎麼辦?宋老大多久點一次貨,知不知道東西少了?宋老大的英文不好,有沒有辦法說清楚,這些東西失竊了,如果發生事情不是他的錯。

我大概太容易擔心這些的意外,就算期望值再小,能免則免。現在東西已經到了,我傳了個 installation video 給宋老大,看他能不能自己先嘗試裝看看;不然等改天下班吃完飯,順道過去幫他花個幾分鐘就裝起來了。


這個週末,玩了兩個星期的 drone ,愛上了鄰居的棕櫚樹,決定離家出走跟它私奔去了。我下意識地第一個考慮的不是損失,而是「如果弄不下來,之後砸到人怎麼辦」。Alice 辛苦的約到了難找的園丁,在沒見過面的鄰居後院,架著長長的梯子,在相較之下更為巨大的棕櫚樹下,用著連結起來的棍子撈著,在茫茫的樹葉中找尋失事的機器;一直拍打著枝枝葉葉到天要黑了,還是沒能找到殘骸,只能鳴金收兵,挫敗的回到家裡。

信用卡公司的 Purchase Protection 不包括 aircraft,所以也不能理賠。我們只能站在後院,望著那棵樹興嘆;知道它在某個經緯度曾經送出最後的訊號,可是現在靜靜的什麼也不做了。

朋友很夠意思的匯了 Paypal 給我,我對再買一台回來卻有點意興闌珊;本來腳走不好的我,買 drone 的原因是對於頹腳的補償,還想看看原來極目所不能見的視野,然後輕盈地飛到我辛苦才能走到的地方。現在的我意識到,這樣的方式原來是不切實際的。我還是得靠自己的腳,慢慢的復健,然後接受自己身體的極限,走到自己能走到的地方,一步一步的走,不拖拉也不拿拐杖,這比拿著 drone 亂飛亂竄切實多了。


什麼是安全,不論是公司的程式,我朋友的槍枝,或者我自己的家居生活,我堅持的到底是什麼,是那或然率極低的意外減免,還是我單純地只是想規避責任呢。

同事們一直很友善地要我「悠著點」,我的理解就是台灣人說的「放輕鬆」;復健師有一次說我做了太多動作,有點受傷了,要我慢慢來。Alice 也覺得我的生活過的太緊張了。我到底在擔心緊張什麼,老實說,我也回答不上來。

我對人生感到了巨大的困惑啊。


有人問我,這篇 blog 的題目到底是什麼意思。直接的翻譯是,「等我有空,一起喝酒吧」,我的意思是,我的體力很差,要好好思考到底什麼是應該追求的。