· 3 分鐘閱讀

Breaking Changes

讀到 Lauren Tan 以前寫的一篇短文《Warning — Breaking Changes》,裡面有一句話打中了我:

Upgrading software that contains breaking changes involves fixing something that already works. Depending on the degree to which you relied on it, upgrading can sometimes be a painful process.

在軟體開發的世界裡,我們對 breaking change 很熟悉。

每當套件發布 Major release,改了 API 簽名、拿掉 deprecated 的函數,甚至是換了一套底層依賴,升級時 npm install 跑下去,等待你的往往是一整排紅字。

Legacy Code 其實在 production 跑得好好的,但為了往前走,還是必須親手把原本能動的東西拆開重構。

版本升級不只是修改程式碼而已,為了確保資源,有時還得說服上層為什麼要重構,這會帶來哪些影響。

這幾年回頭看自己的職涯,不管是當初決定深耕軟體開發、換工作,還是後來收拾行李搬到日本,每一次外人看來的升級,本質上都是一次 breaking change。

看似光鮮的 Major Release

剛到海外工作的第一年,在社群平台或是跟台灣的朋友聊天時,大家最常有的反應多半是:「哇,去日本工作很棒耶」、「生活感覺很充實」、「大公司資源很多吧」。

從外在指標來看,拿到簽證、有了不錯的薪水、住進空間比較大的房子、廚房設備齊全,到後來買房,工作上也接觸到以前碰不到的架構,認識來自各國的開發者。

國中的我討厭唸書,成績屬於吊車尾。國三時受到環境影響,以及認知到要靠讀書翻身,後來成功考到國立高職電子科。

我很幸運,能進 CS 領域一部分是誤打誤撞,單純是因為分數不夠念到電機系。

這個誤打誤撞,對我之後的職涯造成極大影響。

市場對軟體開發的需求極大,幾乎不怕找不到工作,IT 產業相比於其他產業,更容易拿到工作簽證,永住權的門檻也相對較低。

AI 的出現或許會改寫軟體開發,但我仍然認為學 CS 的價值極高。

它不僅僅只是教你寫程式而已,計算機原理、作業系統、資料結構與演算法、統計、線性代數,這些知識都對如何系統性解決問題有極大用處。

然而版本升級的背後,往往很少人看得到 migration guide 裡沒寫出來的代價。

搬到異鄉意味著抽離了原本二十幾年習慣的家鄉。

熟悉的朋友隔著海,語言和文化的不同像是一層看不見的牆,日常最微小的互動都多了些磨擦力,久而久之大家也都漸行漸遠了。

強烈的孤獨感常在毫無預警的時候湧上來。甚至當你把煩惱吐出來,很多人第一反應是不理解。

「你明明就是比較高薪的族群,為什麼那麼不知足」

卡在喉頭的無奈又更難傾訴了。

這段期間,我很感謝老婆 Haruhi 在我身邊,讓我可以全心投入在工作與提升自己。

沒有 Rollback 的重構

現實生活沒有 rollback 機制。

既然選擇了往前跨一步,就只能接受舊的依賴已經不相容的事實。那些生活中的不適應、焦慮、跟異地文化碰撞時的挫折,就像是 compiler 不斷噴出的 error log。有時候修好了一個 bug,另一個地方又破了洞。

以前我總覺得,只要技術變好、職涯繼續往上爬、拿到更好的 offer,很多焦慮就會迎刃而解。

後來慢慢體會到,人的內心容量其實就那麼大,每一次生活環境的重大躍遷,本質上都是取捨。

我得到了一些視野和成長,相應的就是得交出原本習慣的安逸與陪伴。或許這就是重構的成本吧。

「你最近好嗎?」

Lauren Tan 在文章最後提到,很多人即便表面上把生活和工作打理得有條不紊,內心深處可能正獨自對抗著極大的空虛與孤獨。

在工程師圈子裡,大家很習慣談架構、談技術突破、談薪資與職涯規劃,但很少人會停下來聊聊生活調適上的狼狽。越是看起來獨當一面、把事情處理得很好的人,往往越擅長把這些情緒藏在心底。

如果有機會,不妨問問身邊那些最近剛換環境、剛接下新挑戰,或是很久沒見的朋友一句:

「你最近好嗎?」

在人生遇到重大 breaking changes 的時刻,一句溫暖的問候,有時候就是支撐那個人把程式碼一行一行修回來的最大鼓勵。

相關文章

探索其他主題