カランのブログ

ソフトウェアエンジニア / 台湾人 / 福岡生活

今のモード ライト

接觸前端即將邁入第一個十年了。

資訊系的學生沒有意外大學都會碰網頁課,當時 Angular 名聲比 React 響亮,Vue 應該已經發布了但我當時還不知道。

經歷那段前端戰國時代,對於後續前端的變化和體悟都很有幫助。回頭看看社群裡的討論,有不少都是好幾年前就討論過的問題,不免感嘆原來這就是長大了嗎。

職涯初期做過很多嘗試,寫文章、發表、做小專案,不過最主要的貢獻都還是侷限在公司的產品、服務裡頭,算是我蠻懊悔的一件事。

這邊分享一些對未來與職涯的想法,歡迎交流。

對前端與未來的想法

最近的感覺到前端工程師的市場已經趨於飽和,沒那麼好找工作了。

就算是非專精前端的工程師,甚至是只要對電腦熟悉一點,不排斥寫程式碼的人,看看 React 或 Vue 的文件,找個順手好用的 UI 元件庫,搭配 ChatGPT 或在本地跑 LLM 兜出一個網頁完全不成問題。當然對初學者來說可以想見會花時間除錯。如此一來,前端工程師的價值勢必要體現在其他地方,也代表著比較剛入行的前端工程師會比較難找到工作。

這邊可以講講另外一個路線。

大部分的初階工程師會把自己定位在一個區域,例如前端就是前端,除了網頁之外的東西都不碰,只負責完成需求跟切版 UI。雖然說短期內這樣的需求仍然存在,但隨著門檻降低跟 UI 元件庫的成熟,這些開發者勢必會遇到一個瓶頸:如果大部分的需求都能被其他開發者完成,或是只會把業務需求轉譯成程式碼的話,那麼你的價值體現在哪裡?

在短中期之內,我自己的答案是軟體工程師。

在前端工程師之前,你應該要是一個合格的軟體工程師,只是對前端領域有比較多的理解。

這方面包含計算機結構、演算法、資料結構、資安等等,當然這些都是大方向而已,你懂得越多自然看待一個問題的角度就會越廣。例如對計算機結構的了解、玩 Arduino 理解了各種底層協定、學 Svelte 時好奇背後運作寫了簡易版的 HTML 解析器,這些都是和前端沒有太大關聯,但能夠讓你在面對問題時有更多思考空間。

我遇過很多技術很厲害的軟體工程師都是這樣,他們不一定寫了很多 LeetCode 題目,但對底層運作有很深的理解。曾經有一位同事很興奮地跟我分享他改造加濕器加入繼電器,這樣一來可以透過 Arduino 來控制開關,間接達到定時開關等等有趣的功能。

我還會建議對領域知識有一定的理解,例如之前在做證券相關的服務,進而理解日本的法規限制、NISA 制度、信用交易乃至於學習量化交易、跟外部服務串接(私書箱等等);研究日本的放送機制時寫了簡易的字幕分析器。這些都是讓你比其他工程師更突出的關鍵。

另外一個路線是加入生態、創造生態。

React 的出現改寫了業界對 UI 的建構方式,把 UI 抽象為函數與狀態管理,把副作用抽出來管理,讓 UI 可以拆分成各種可複用的元件。

這是前端工程師可以嘗試的另外一條路線,但是在公司規模不夠龐大時,你很難找到可以下手的地方,只能從開源社群中切入,也不是所有人都有這種能力去改變生態。不過也不用妄自菲薄,像是 Svelte 的作者 Rich Harris 本來是一位記者,做視覺化報導寫程式寫一寫寫出了 Svelte。

還有另外一條路線,是往前端領域的各個分支做探索。一般講到「前端」,通常會以網頁開發,更精確一點是用 HTML 與 JavaScript 建構 UI。不過瀏覽器的能力日新月異,也衍生了許多分支,包含但不限於:

  • 資料視覺化(Data Visualization)
  • 動畫(UI 動畫、轉場、micro interaction 等等)
  • 無障礙設計(Accessibility)
  • 網頁遊戲
  • WebGPU 的應用。如將 LLM 移植到網頁平台、搭配 WebGPU 把以往只能在本地端跑的應用移植到網頁
  • WebAssembly
  • 特效、3D:WebGL 或 Three.js
  • 各種 IoT 的網頁串接如:WebSerial、Web Bluetooth、WebUSB 等等。我自己覺得這一塊雖然市場有限且有點 niche 但潛力很大,例如 VIA 在客製化鍵盤玩家的眼中可以說是必備,能在網頁直接修改鍵盤的鍵位就是活用 WebUSB 的案例之一。
  • 底層協定:像是 WebRTC 的應用、最近新出的 WebCodecs API 等等
  • 效能優化

熟悉的分支越多自然越難以被取代。

雖然前端門檻降低(本來也就不高),但要寫出一個兼顧 SEO、效能、無障礙設計的網頁仍然需要一定的經驗,LLM 現階段或許可以兜岀符合需求的網站,但要能兼顧以上幾點就不容易了。

其他方向

從軟體開發的角度來看,像是 CI / CD、自動化部署、版本管理、測試也都是可以嘗試的方向,但我覺得這算是軟體工程師自然而然會了解的東西,除非部署的服務比較複雜,不然很多時候是寫寫設定檔就可以做到大部分的事。

最好是可以搭配一個產業,如太陽能產業、食物業、服務業等等。從有興趣的產業當中找需求,並想辦法做出 MVP 解決驗證,到最後就會發現前端只是達成目的的一種方法。

最近在看 Pieter Levels 與 Lex Fridman 的 Podcast,PHP、jQuery、MySQL,多數專案都是自己開發,每個月賺 300K 美金。

都是又老又舊的技術,但能解決問題。我覺得這也是一種路線,用做服務、做產品的思維開發,技術什麼的只要夠用就好。

這個核心理念跟 Git 的故事:這一次沒這麼好玩裡頭 Linus 在寫 git 跟濱野純(Junio Hamano)的交流也有點像。(這篇文章很精彩,推薦閱讀!)

當時 Linus 想要寫合併演算法,但覺得用腳本語言比較適合,於是徵求別人來幫他,剛好被濱野純看到,用 Perl 實現了一個版本,又快又髒。

Linus 的回覆寫道:

…Quick and Dirty That’s exactly what I wanted. Q ‘n’ D is how the ball gets rolling.

這句話意外打中我。我覺得一位優秀的工程師就應該擁有這樣的特質,先追求 Quick and Dirty,剩下的之後再說。

對職涯的思考

我一直沒提到軟技能,像是溝通、領導、管理等等,當然這些事情都很重要,只是我最近的想法是這些軟技能是相輔相成的,你在提升自己的技術同時,也是在加強自己的溝通能力。

很多人會問要怎樣才能升職、要學哪門程式語言比較好找工作,這些想法沒有任何錯誤,甚至我以前也常常會想這些。要怎樣才能升上管理職、要怎樣才能加薪。

然而,我覺得一旦累積經驗到一定程度,追求更好的職涯就不應該當作目標,而是一種手段才對。

除非你的目標很明確,在公司打造你喜歡的服務跟產品是你的目標,不然以資本市場的角度來看,我們就是在用自己的時間交換金錢,而如果只用時間來換的話相當不值得。

這方面也是我在努力嘗試的,如果在不錯的大公司工作,可以嘗試多累積人脈、善用關係跟資源,去學自己想要的東西,人脈的累積是就算離開公司也帶得走的。最近專案的改變我目前是以後端開發居多,從中理解到蠻多以前不會特別注意的觀點,也算是收穫不少。

最近感受很深的體悟是每個月有穩定的薪水,是定心丸、也是毒藥。

當你有壓力的時候會想到再撐幾天就能領薪水了;公司交付的任務完成了,就能早早收工回家;這種穩定有好有壞,但對現在的我來說是壞處居多。

當然這跟我能力不足或個性不匹配也有關,很多時候就算在開發上可以大顯身手,大部分的時候還是只能依照規格書的需求實作,很難從零到一主導一個專案。更別說在大公司裡,光是開個伺服器就要先過一堆安全檢查跟法務部門審核了。

我在幾年前也對這種迷思深信不已。

在「做自己的生命設計師」有提到,James Carse 所講的有限遊戲與無限遊戲的概念

如果是有限遊戲,我們會照規則走以求獲勝;但如果是無限遊戲,我們會享受一直玩下去的樂趣。

先不說每個人追求的人生不同無法一概而論,但我覺得從小到大不管是考試、競賽、找工作,都是在灌輸一種觀念,只要達成某個目標,人生就會美滿了。然而實際上通常不是這樣。

總之,我的想法是我們應該把目標放在職涯以外的事情上,更重要的是你想過怎樣的人生,你現在在做的事情跟你想過的人生相符嗎?

有些物理限制可能比較難突破,像是工廠、製造業、IC 等等,總不可能今天裸辭馬上自己設計 IC 開晶圓廠,但可以反過來問問自己現在的職涯是否跟自己的目標匹配。

以後我每天都要問自己一句,你今天 Quick and Dirty 了嗎?

當然關於職涯也好、人生也好,我也一樣在迷惘。你有什麼想法也歡迎與我分享。

次の記事

最糟糕的程序員讀後感

前の記事

對寫技術文的重新思考

この文章が役に立つと思うなら、下のリンクで応援してくれると大変嬉しいです✨

Buy me a coffee

作者

Kalan 頭像照片,在淡水拍攝,淺藍背景

愷開 | Kalan

Kalan です。台湾出身で、2019年に日本へ転職し、福岡に住んでいます。フロントエンド開発に精通しているだけでなく、IoT、アプリ開発、バックエンド、電子工作などの分野にも挑戦しています。 最近、エレキギターを始めました。ブログを通じて、より多くの人と交流できればと思っています。気軽に絡んでください