5696 words
28 minutes
成為前(?)端工程師的 5 週年回顧
2025-02-19
No Tags

如果你好像看過這個標題,是因為我前陣子偶然間看到了 Bruce 的 大學畢業後,成為前端工程師的兩週年回顧(ft. Tiktok 前端工程師) 這篇文章而有所感觸,想想自己工作也剛好滿 5 年了,是可以好好回顧一下這一路走來的心得。

或許致敬這個標題的文章已經形成 tree 了 XD

成為社畜#

在開始我第一份工作前我只知道前端有三大框架但可以說完全不認識它們,但我依然在 2020 年 1 月時莫名其妙地獲得一份在接案公司的前端工程師的工作,那時的公司依然還是用 JQuery 作為主要的工具,是一個就連在當年的情況都算有點過時的技術了但也因此讓我可以快速進入狀況。

幸運(?)的是,過了沒多久有一個 React 專案的負責人要離職了,所以我就正式接觸了直到現在依然能夠養活我的框架,只是那個專案可以說是 React 的近代史了,從古老的 mixin 到稍微近代一點的 HOC ,最後是我加入之後開始使用的 hook (2020 剛好是 React 16 release 的那年)。

雖然說那個專案很髒、很不好維護而且也很難加上新功能了,但那時的我還是很開心感覺更像是一個「前端工程師」。

雖然這樣講有點引戰但我覺得就算以當年來看(更何況現在),會使用框架的確是成為一個前端工程師的必要條件。當然,我認為以整個職涯來說框架以外的知識更為重要,只是以「成為前端工程師」為目標的話學會使用框架會更為迫切。

人生第一次離職#

大概在第一間公司待了半年我就萌生離職的想法了,原因不外乎錢、技術過舊和工作環境等等問題,但那時我 React 也是剛入門的程度,所以那時我對於是否能找到下一份工作感到十分憂慮。

同一時間我剛好接觸了 lodash/fp ,那時的我絕對不會想到這可能是目前影響我職涯發展最為重要的 package 了。

那時公司的專案十分愛用 lodash ,某天我無聊在看 github 時突然發現 lodash/fp 這個 package,出於好奇我就稍微研究了一下 FP 到底是什麼,那時只覺得好酷哦、好好玩哦。

直到我在找工作時發現一間公司的 JD 其中一項寫著對於「functional programming 有興趣的人」,其實我那時對於 FP 倒也沒有非常癡迷,只是覺得「好巧哦,不然來投投看好了。」

面試第一關果不其然就先考了許多有關 FP 的問題,但其實並沒有太多的學術探討而只是有沒有聽過某些概念或者怎麼運用某些概念那樣,後來就很一般地考考 React 。

其實不知道為什麼我覺得二面跟主管面完時我就非常有信心的覺得我一定會上,所以我在 offer 發下來之前我就已經先提辭呈了,現在回想真的是太年輕了。

後來 offer 順利下來後在跟主管討論 onboard 日期時,我說大概離職後兩週 onboard 好了,他只回了一句「蛤?休息兩週不會太短嗎?」從那一刻我就知道這間公司一定很棒。

畢竟那時剛被接案公司壓榨到不成人形,聽到這麼 chill 的想法當然會覺得很感動了 QQ

所以我也在同年的九月離開了我人生第一份工作,其實在這之前我沒有想過會這麼快離職,但我十分慶幸我有早點付出行動離開不喜歡的環境。

雖然我在第一間公司的回憶大多是不快樂的,但不可否認的是這裡讓我重新喜歡上寫程式。我在高中時就非常喜歡寫程式所以後來大學也讀了資工系,也許是我在大學時期活得過於糜爛或者學校教的方式我不是很喜歡,總之我在大學變得不太喜歡寫程式了,而開始工作後我終於又能夠體會到寫程式的成就感了。

或許我一輩子也忘不了這裡吧#

還在 GO

我還記得在第二間公司 onboard 當天領完設備後第一個任務就是閱讀一篇有關 「 curring 」的文章,然後下班前跟同事討論一下,這對當時的我十分衝擊。原來工作是能夠在上班期間研究新東西然後有人可以一起交流討論的呀。

接下來一個月的 training 流程就是看完有關 TypeScript、graphQL 及一系列有關 functional programming 的教材,至此我算是跟 FP 結下不解之緣了。

印象深刻的是有一次我與帶我的同事在討論當週的學習進度時,可能是我講的不太對然後同事好像也沒解釋得很清楚,我主管在旁邊聽到有點受不了直接參與討論,那時應該為了怎麼解釋 Applicative 這個概念吧,但當初我聽聽就忘了畢竟真的離 JS 太遠或者至少離我太遠了,但當時讓我知道這個團隊的風氣真的很棒。

除了學習到很多 FP 概念以外這裡對我最重要的影響是算是對職涯的塑形了吧,不管是工作方式或是思維模式我到現在還是深深地受到當時同事的影響。

我也是在這裡第一次體驗到嚴格的 code review ,我也是第一次被說「雖然可以動,但這樣寫不好因為…」的回饋,雖然一開始感到有點挫折但也讓我覺得自己真的有在進步。

總而言之在這裡的生活一定是大拇指的啦。

什麼都沾了一點#

因為公司規模小的關係,基本上所有工程師都是「真・全端」,也就是從手機 App 、網頁前端、後端都要做,但依然還是會根據自己的偏好及產品的規劃來選擇要做什麼事情,但不知道為什麼我對於後端一直都有一種排斥感所以這段時間主要還是專注在前端可能只有一成的時間會去寫後端。

也在這期間我也接觸到了 Flutter ,雖然現在已經不會寫到它了但我還蠻喜歡它的設計,特別是在 UI = F(state) 這個概念以及使用 Dart 作為開發語言讓較為熟悉前端的我備感親切,雖然跟 TypeScript 很類似但多了不少我喜歡的特性,像是 null safety 之類的功能。

我到現在還是會想,如果 Dart 能夠取代 JavaScript 或 TypeScript 做為網頁前端主要開發語言不知道該有多好啊。

現在偶而還是會關注一下這個社群的狀況,雖然還是不溫不火甚至比起 2022 時聲勢可能還更小了點。

就在寫這篇文的當下, Flutter 多了社群 fork 版本 XD

還是離職了#

該說好景不常嗎?因為公司產業導致我們算是疫情重災戶,所以在 2021 年台北三級警戒那時公司的策略開始調整,後來在疫情稍緩後主管找我聊聊接下來公司的方向以及想暸解我對此的看法,簡而言之就是工作的內容會跟以前差距不小,雖說不意外但還是蠻難過的。

所以就又開始準備找工作了,那時依然對自己的能力還是沒什麼自信,感覺 React 好像熟了一點但又說不上真的很熟,TypeScript 跟 graphQL 也是有種還在入門的程度,經過一陣子的折騰後透過大學同學的內推到了現在的公司

即使已經離職三年多了我依舊十分想念這段日子,我真的非常非常非常感謝在這裡遇到的所有人,我何其幸運能夠職涯早期就能夠獲得這麼多這麼棒的經驗。

開始脫離 junior#

可能也因為是第三份工作了,所以轉換開發習慣或工作流程這些事對我來說並沒有太多不適應。那時整間公司大概有 6、7 個前端但負責我們 BU 的只有我跟內推我的同學,後來我同學被調去另外一個 BU 後就變成一個人負責所有的前端開發了。

大概經歷了半年左右的單打獨鬥之後才開始招募其他前端,我大概也是在此時才認為自己不是 junior 了(雖然職稱早就沒了 junior),開始對於自己想要的團隊氛圍、同事及合作方式有了更多自己的想法。

同時我也開始人生第一次參與從零開始做一個產品,從技術選型、專案架構到 coding style 都是在我能掌控的範圍。那時也許是我在這間公司最開心的時候,每天都有新的東西可以玩、新的功能不斷在產出。

跨足後端#

從 2022 年下半年開始我也開始慢慢接觸後端的開發,主要是後端那時剛好有幾個簡單的功能要做但又剛好騰不出人手,主管就問我有沒有興趣做做看,那時我對於後端也沒有特別排斥或喜歡了,但考量到職涯發展我還是決定開始轉全端工程師了。

因為跟上一間公司一樣是使用 Node.js 跟 mongoDB 在開發所以就語言層面上並沒有遇到太多問題,只是開發習慣上跟前端團隊大相逕庭導致在前後端專案來回開發時常常腦袋轉不過來。

除此之外讓我最頭痛的就是 OOP 以及資料庫,特別是 OOP 雖然不敢說自己熟悉 FP 但至少比起用 OOP 的思維來抽象化程式我更習慣用 FP 來思考,但其實寫久了也覺得 OOP 並沒有想像中那麼困難,而資料庫則是之前沒特別深入的領域,以前就只會隨便設計個 schema 及一些基本的語法,直到這時我才正式開始學習資料庫的各種知識。

也有可能是我們的 code base 其實沒有寫得很高深?

能說自己是 senior 了嗎?#

大概在 2023 年我的職稱變成了 senior engineer ,我開始從被指導的角色慢慢轉變成需要去決策或者教其他同事,在這次轉換身份上我遇到蠻多問題的,像是我一直無法拿捏給建議的程度。剛開始時我的態度是如果無法反駁我,那我提出的意見大概會是對的,但其實這樣已經預設立場我通常會是對的導致對方會默默地接受,也許對方有時候也只是不想起衝突而已吧。

直到現在我仍然認為 code review 是一門藝術,因為除了提出問題或者解決方法以外,也要能夠讓對方能夠理解或者接受你的想法以及「讓被 review 的人不會生氣」

到底什麼才算是 senior ?#

那陣子剛好有一個比較資淺的同事問我「到底什麼才算是 senior ?」,我那時回答他「扣掉開發能力上的那些定義,我覺得更重要的還是對於團隊或者產品的想法。」

舉例來說像是「技術選型」這件事情,除了需要考慮這個產品本身的規劃可能還要考慮到同事的能力、導入的成本等等不只是「寫程式」這件事情。

當然可能也有人會說會帶新人、會設計專案架構、會什麼什麼之類的才能稱的上 senior ,但我覺得就只是每個團隊/公司對於職稱的定義不同而已。

以前滑 twitter 時剛好看到一個我非常認同的論點,senior 之於 junior 的差異是在「有無自己的品味」不論是在程式語言、套件、開發習慣、工作流程甚至是偏好的同事個性,我覺得如果擁有自己的品味也就代表這個人知道「自己在幹嘛」,進而可以跟別人說明為什麼自己要做這些決定。

在前端團隊中不做前端的人#

因為跨足後端的關係讓我順便學習了雲服務以及 CI / CD 相關的知識,所以之後前端團隊的各項 infra 就理所當然地變成我一個人處理了,剛好這陣子後端的時程比較緊急所以此時我也將自己定位成前端團隊裡的輔助,平常不接前端功能的 ticket ,只處理部署及其他 infra 的事情。

同時我也開始將一部份精力放到團隊各種事務上,像是提醒大家看 PR 的 Slack bot 以及開始寫些腳本來簡化部署時的繁複操作和 release note 產生器之類的小東西。

值得一提的是建立起前端團隊內部的文件網站,也開始制定開發規範及整理開發過程的筆記。這點算是我覺得相當值得的投資,因為我發現有些事情就算一直在 PR review 中提起或者平常討論中聊到還是遠遠比不上一份文件在那裡讓大家參考來得有用。

當然,之後情況緩解後又回到前後端平均開發的狀況了。

變成 team leader 了#

原本我的主管是管整個軟體部門但或許是產品跟人數都成長了所以她開始感到有點吃力所以在 2024 下半年時主管問我有沒有興趣幫他管一下前端,雖說我原本在團隊就已經是類似的角色之前多半負責團隊事務的討論及決定一些技術選型的問題,只是之後就變成我需要多負責 1 on 1 的部分以及要放點心力觀察團隊成員的產出。

當然除此之外也還有為職涯多做點打算的想法,雖然我一直以來的目標是想要寫一輩子(?)程式,原因也不是我有多熱愛寫程式,而是我覺得管人是一件非常麻煩的事情。只是認真想想我可能真的比較少看到四五十歲的純技術職,所以或許開始接觸管理會是一個相對好的選擇吧?

總之我覺得既然沒多做什麼工作那接受也無妨吧,只是當我真正成為這個角色後會發現有些事情並不是我想的那麼單純,像是對於組員距離感的問題,因為我還是有可能跟他們的績效考核的結果有關係導致我說話可能要比較小心一點,有些幹話也不能隨便說,但有可能是我自己想太多。

這陣子在與組員 1 on 1 時有被問到我對於這個團隊未來的想法及規劃,基本上還是希望除了完成工作以外大家也能保持技術上的熱情,我也期望自己能夠創造一個可以讓大家熱於討論、貢獻的團隊。

被人這麼問時還是有點小感動的,至少讓我知道有人會在意團隊相關事情。

保持大家的熱情#

也許是因為上一間公司的影響我一直認為保持開發熱情這件事情非常的重要,雖然很多時候已經有最佳解或者範例可以抄,但我相信普遍的開發者都會想玩玩看不一樣的東西。

所以稍微有點決策權後便開始舉辦團隊內部的月會,除了讓大家分享新技術以外也有一個適合的場合可以討論組內發展的方向或哪裡需要改善的地方。

藉由這個月會我們成功重構了幾個產品、正式採用 Svelte 作為部分產品的開發框架 、修訂了 coding convention 以及在產品導入幾個新的 library 。而且我自己認為大家的參與度過了半年多還是沒有衰退的跡象這點倒是蠻令人欣慰的。

雖然感覺好像蠻美好的,但其實也發生過因為給予團隊成員無條件的信任但最後成品大家都不太滿意的情況,這也讓我開始對於是否要為了保持大家的熱情而盡量讓大家自由發揮這件事情感到猶豫。

直到現在我還在拿捏什麼時候要介入這些事情,不得不說這個過程是痛苦的因為我能理解提了想法不被採納的心情以及不被其他人信任的感覺,但或許這也是必經的考驗吧?

少數的好處#

也因為開始有點立場、力量可以制定一些規則後,發現自己一直以來看不慣的寫法、流程或者工具終於可以直接說「我覺得這個可能不太好,或許我們可以來改改看」。以前提出類似的想法時雖然大家也是可以討論,但自己內心總感覺怪怪的一直有一種懷疑自己憑什麼出那麼多意見,只是現在可以用一種用心無愧的心情做這些事情可能算是升職後少數的好處吧?

走到現在#

這五年走來累積了一些經驗及想法,如果有機會跟五年前的自己給一些建議的話我會說:

不要只專注前端#

雖然不一定要成為全端工程師,但在 2025 年的現在前端工程師懂一點後端和網路概念真的蠻重要的,不管是在部署架構的選擇上還是 CI/CD 的開發上都能夠有自己的想法,更別說如果平常工作會用到 SSR 的話後端知識就會變得更加重要了。

或許有人從一開始就在大公司所以不必自己煩惱這些事情,但我仍然會建議前端工程師有餘力可以多接觸前端以外的知識,畢竟書到用時方恨少。

擁抱自動化#

也跟上面提到不要只關注前端有點關係但是想特別說說「寫腳本」這件事情,一開始怕麻煩懶得寫腳本想說用人工的方式做一做就好,像是檢查檔案的某些內容、產生某些資料、執行一系列的常用指令等等。但後來開始使用嘗試寫腳本後會發現其實還蠻簡單的而且意外有趣,後來在工作上就會用到 shell script 、 JavaScript 甚至是 Python 來寫寫 CI/CD 相關或者一些自動化工具的腳本。

特別是在這個有 AI 輔助的時代下,我覺得在學習上述兩點時會變得相當簡單。

面試時聊的來遠比能力強重要#

當然還是要有一個前提:在能力達到及格線後聊的來這件事情才會是重要的。

這是我在面試人時深有感悟的一件事情,我個人認為能力只要不要太呱張的爛應該都是有辦法帶起來的,但聊不對盤通常就是會一輩子(? )溝通不良了。

寫文章而且跟別人分享#

我認為寫文章是一個相當有效的學習方式,因為為了讓別人能讀懂我會需要先消化這些知識後再次輸出,而且通常會在尋找參考資料時額外多學到更多有趣的新知識。

雖然一開始會有點不好意思會覺得「我文筆那麼爛寫成這樣有人會看嗎?」、「這麼簡單的東西還有需要我再次寫出來嗎?」。

但隨著寫了幾篇文章後我愈來愈能夠克服這些問題,雖然現在文筆也沒什麼進步但不寫永遠不會進步,就算這些知識再怎麼簡單也終究會有新手還不知道。

只是我還是有一個心魔沒辦法克服:「分享到公開社群」,雖然在自己的 twitter 轉發沒什麼壓力,但如果是到 FB 的社團之類的地方分享的話我還是有一種「好像還沒到這個層級」的感覺。

你很棒#

工作一陣子後會看到有些同事或者社群中的大神明明年紀差不多,但技術、談吐及眼界跟自己好像不是同一個等級的感覺。

這時總會覺得自己蠻爛的然後陷入無窮的自我懷疑,也不知道自己是怎麼走出這個窘境就突然覺得好像也沒什麼好比的,就或許他們真的花了很多時間跟精力在學習及專研這些技術又或者就是天生比我聰明。

羨慕也好崇拜也好嫉妒也好,總之只要不要因此放棄自己想做的事情就好。

後記#

其實這篇文撰寫期間刪刪改改許多次,標題也慢慢從 4 週年變成 4.5 到最後定稿的 5 週年,或許是我一直想找一個好一點的時機發佈這篇文章,但又一直覺得好像太早總結這一段歷程,可是又想寫點什麼紀錄這段時間的自己。

最後決定在 5 年這個算是達成一個小里程碑的時間點發佈,真的非常感謝這五年來遇到的所有人。

成為前(?)端工程師的 5 週年回顧
https://blog.toddliao.dev/posts/5-years-in-frontend/
Author
Todd Liao
Published at
2025-02-19