聽說你想轉職軟體工程師?先來讀這篇勸退文吧

2023年2月4日

💎 加入 E+ 成長計畫 與超過 250+ 位軟體工程師一起在社群中成長,並且獲得更深入、系統性軟體工程內容

最近看到新聞提到,今年的年後轉職潮是歷年來最大的一波。這幾年轉職軟體工程師的風潮一直沒有減退,程式培訓的課程越來越多。許多轉職軟體工程師的培訓課程都會標榜工作機會多、薪水高(百萬年薪是最常看到的廣告詞了……)、努力就會有成果等等。

但是轉職軟體工程師真的有想像中的好嗎? 很可能並沒有。先前我有寫過一篇《轉職軟體工程師之前請三思,淺談轉職的現實面》,裡面有談到一些轉職軟體工程師的現實面。例如工程師的爛缺也很多、功能寫不出來壓力山大、技術每年都在更新讓人覺得學不動了。這些都是培訓課程宣傳中不會提到的。更不用說最近幾個月全球軟體大廠接力裁員,過去的模範企業都神話破滅,假如在考慮轉職軟體工程師,真的要再想想。

即便如此,在年後轉職潮,因為自己轉職工程師的經歷,有些認識的朋友會詢問轉職的事。我在跟他們聊到轉職的現實面時,發現有些讓我曾經萌生「我做不下去了」的片刻,並沒有寫進先前那篇文章中。

因為工作不是人生的全部,轉職不該僅用單一面向思考(例如百萬年薪)。畢竟轉換職涯不是容易的決定,要投入的成本也不小;假如能在做決定前有更多角度的思考,可以避免真的投入後反悔。希望透過這篇勸退文,讓在思考年後轉職的版友,可以有更多元的思考維度來評估轉職工程師這件事。

不僅要能動,還要寫得好

在轉職期間,許多人大概都經歷過寫不出來想要拿頭去撞牆,起碼我自己有過不少這種片刻。但是真正轉職成軟體工程師後,寫出來能動、如預期的功能只是最基本的。特別是薪水高的大廠付錢請你來工作,對你的期望不會只是寫出來能動。你會被預期寫出效能好、安全性佳、好維護好擴展的程式。假如你有無限時間,大概不用擔心這件事。但現實是在實際工作時,大到產品、小到功能,每一個都有期限,晚一天上線都會造成商業上的損失。換句話說,你會被預期在有限的時間內,寫出好的程式碼。假如做不到,你會背負非常大的壓力。

我自己在剛轉職時,常常寫完覺得功能都正常鬆了口氣後,就會在 code review (程式碼審查) 收到很多直接的評論。一般的同事六點就下班,但我為了修改我的程式碼到能通過 code review ,往往要弄到晚上十一、十二點。即使當時在的公司不是強度特別高的公司,多數同事沒有加班的狀況,但加班還是成為我的常態,只因為我的基礎不夠扎實,導致要優化修改的東西太多了。

收到這些評論固然挫折,但假如沒收到往往更慘。舉我一個前同事的例子,先前我們有個在線上的事故,是因為寫一個過慢的 SQL 查詢語句,導致線上的資料庫伺服器堆積了大量請求,造成後面堆的請求都超時,終端使用者的請求失敗。對使用者來說,就是功能不能用,然後就被回報出事故。修復完問題開檢討會議時,我看他一臉壓力超大。他是名校本科畢業的都會出這種包,如果是轉職少了扎實的基礎訓練,寫出時間複雜度差的程式碼,當出事故結果查出來原因在於自己寫的糞程式碼,那個當下真的會讓人想要找個洞鑽進去躲起來。

我覺得這是考慮轉職的人一定要想清楚的,現實多半不會是你轉職後就能愜意地在海邊,當數位遊牧寫程式;而會是在同事們都下班後,你還為了能寫出來、為了能夠寫好而掙扎到深夜。

以為學好技術就能掌握工作,但其實不然

很多想轉職工程師的轉職理由是可以專注在技術面,可以不用去管那些跟人打交道時的狗屁鳥事。然而,如果你的轉職理由是這樣,必須跟你說這很可能不會發生。即使你克服上面提到的技術問題,寫出的程式碼不僅功能無誤,效能也好,仍然是不夠。在現代軟體開發,與不同利害關係人打交道,佔軟體工程師工作很大一部分。

假如是寫應用程式的工程師,跟產品端的溝通協作是少不了的。網路上可以看到很多工程師與產品經理交手時的不愉快經驗,看看靠北工程師或者 Blind (一個多數軟體工程師會用的論壇) 上面的怨氣,你就會知道你的工作不會只有純碰技術,人與人交涉會遇到的鳥事絕對少不了。

退一步來說,就算你是往底層去做基礎架構的工程師,你的工作中仍會有非常大量的溝通。特別是如果你想要往上爬,在工作中需要的軟實力佔比會更高。先前前讀 vgod (一個保送台大然後拿到 MIT 博士,目前在矽谷做到 L7 級別的工程師) 大大的文章,他提到很多人沒辦法突破資深工程師的天花板,無法從資深進到主任工程師 (L6),多半不是技術能力不足,而是少了溝通、專案管理、跨團隊合作等能力。

特別是工程師不像管人的經理,多半沒有實質的權力去叫別人做事,因此需要靠技術願景來說服其他人,這件事對保送台大資工拿到 MIT 博士的 vgod 可能不難,但對於轉職的工程師,難度會很大。我先前提出一些技術觀點時,同事們就提出很多質疑與挑戰,以及提出不同的觀點。同事提出的點很多甚至是我過去沒聽過的 (例如某個不同的設計模式),因為缺乏札實地底,我需要額外花更大的力氣去研究,然後回頭試著再跟同事討論一次。

上面提到的溝通問題會因為公司規模或專案規模變大,而變得更加困難。以我自己在軟體大廠的經驗來說,大型軟體專案的開發,會需要同時非常多不同組的人。而人一多,自然各種拉里拉雜的不愉快都可能出現。之前看過一篇  Amazon  工程師寫的文章,在討論一般同事跟好的同事。他提到他在  Amazon  遇到的跨組合作,很常會遇到對方說「這不是問我」,或是翻來覆去、一直跳針。

我自己對這類狀況完全心有戚戚焉。舉例來說,先前我去找相對應業務的接口問事情,結果對方說不是問他,或回說不是他該負責處理,然後就沒了。我收到這種回覆只能大傻眼,該業務就是你們組負責,你也是負責的項目對接人,不問你我問天?

這種無奈感不是單一案例,而是經常會出現的。因此,假如你想轉職的原因,是因為過去跟其他職位的人打交道讓你不喜歡你原本的工作,這問題不會因為轉職成軟體工程師而消失。

Oncall 輪班

多數職業沒有 oncall 這種東西存在,但偏偏軟體工程師這職業就有。有些職業的輪班是輪到大夜班但白天不用工作,但軟體工程師的輪班不是換到晚上工作,而是要 24 小時待命,沒錯是 24 小時,收到通知隨時要回應。換句話說,你白天的班還是要上,只是晚上睡覺時,你要隨時待命,因為可能會突然被叫起來修東西。

這主要因為現代的軟體多半是全球化的,舉例來說,一個 App 的使用者可能來自全球。所以即使你在的時區現在是晚上大家都在睡覺,其他時區也可能有大量的活躍使用者。但其他多數職業沒有這種跨時區的問題,所以下班睡覺也不太會有被叫起來做事的情況。

我轉職成工程師前,看別人在講 oncall 都沒感覺,直到自己輪 oncall 後才知道有多可怕。oncall 的可怕在於,你遇到在線上發生的問題,你根本沒有碰過那部分程式碼,所以你要在很短的時間內搞清楚發生什麼事,然後找出問題點,然後在很短的時間內把問題修復。假如處理不了,還要大半夜時很不好意思地打給其他同事,叫醒其他同事一起來幫忙修……。

除此之外,輪到 oncall 那週會很明顯感受到生活品質變很差,特別是如果有半夜被叫起來處理事情的時候,整週的心情指數都很低。我們組有些同事是有小孩的人,同時有小孩半夜會起來哭,然後又有 oncall 的東西要處理,真的是超級崩潰。假如你打算轉職軟體工程師,先想想這真的是你要的嗎?

裁員與 PIP

很多提到轉職軟體工程師的文章,都會講到軟體工程師的工作機會多、就業市場好。但事實是,軟體公司雇人不手軟,裁起人來更不手軟。在 2022 年末到 2023 的現在,幾乎看到公司層級的大規模裁員,多半是軟體與科技公司。大間一點的公司,裁起人來都是以萬為單位。

事實是,你其實沒有那麼不可取代。Google 今年的大裁員後,就有新聞報導任職二十年的資深工程師,甚至名字被冠上某個演算法名稱的大神工程師,都會在隔天早上起來發現自己已經失去所有權限,然後僅被一封 email 告知被裁了。除非是自己創業,不然當工程師本質上仍舊是個打工仔。任何打工仔在資本家面前,都是隨時可替換的,只是有沒有輪到你而已。

在景氣不好時,軟體工程師被不手軟地裁;但在景氣好的時候,還有另一個可怕的問題要面對,它叫 PIP (Performance Improvement Plan) 制度。所謂的  PIP  就是會把績效排名比較差的人,放到一個改進項目中,然後在一定期限中如果沒有改進,就會被炒魷魚。雖然說  PIP  美其名是個改進績效的機會,但實際上真的在  PIP  後還留下的人,非常之少;多數人被放入  PIP  後,基本上都意味著要準備被炒魷魚。幾年前就有 Facebook 的工程師,因為被放到 PIP 壓力太多,最後跳樓自殺的新聞。

除此之外,有些軟體大廠會有  PIP  額度,換句話說工程經理一定要把某個比例的人放到  PIP  中。你可能會問,假如整個團隊的人都表現很好的話,那要把誰放到  PIP  當中?

這是個好問題,因為這延伸出另一個大廠常見的扭曲現象  —  雇完即炒  (hire to fire)。這是因為工程經理實在沒辦法挑出一個要放到  PIP  的人,既然如此,就招聘新人,然後把招進來的新人放到  PIP  當中。這是為什麼進到像  Amazon  這類大廠,一定要先打聽好組上的狀況,確保自己不會進去就準備被裁。

對於轉職的人來說,要能在競爭的績效考核中生存、要確保自己不會被 PIP,會需要付出更大的努力。當你在思考轉職能帶來的好處時,也不要忘了你沒有鐵飯碗、可能被 PIP 掉,都是你要承擔的潛在風險。

當高牆擋在你的面前

以上這些點是補充先前《轉職軟體工程師之前請三思,淺談轉職的現實面》沒談到的,或是談不夠深入的。主要是希望給在考慮轉職的人,多一些思考面向。當然軟體公司很多種,上面提到的也不必然會出現在每間公司。只是要有心理準備,因為轉職成軟體工程師,都會有機會遇到這些問題。

不過話說回來,假如你在通盤考慮後,仍覺得想要轉職,那就努力朝著這條路前進吧,不要因為這些因素而阻擋了你自己。這邊送上一句已故教授 Randy Pausch 在他生前的最後一堂課中分享過的這句話 「眼前的高牆不是要擋著我們,而是要給我們機會來證明我們有多渴望向前」。

The brick walls are not there to keep us out. The brick walls are there to show how badly we want something. Because the brick walls are there to stop the people who don't want something badly enough. They are there to keep out the other people. — Randy Pausch

假如看完這篇勸退文,你仍想要轉職。在 ExplainThis,我們匯集了網頁前後端軟體工程師的面試問題與詳解,免費分享給在面試路上努力的你。最後,不論你有沒有轉職,都祝你能朝著自己理想的職涯與人生前進。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們