起源
現在時間是 2022-03-16 的午夜,為什麼特別紀錄現在的時間,是因為希望這篇文章能夠盡快產出,不要胎死腹中了,先稍微介紹一下我自己,學歷是中正大學學士,我的工作資歷,去除掉實習的工作,第一份正式工作期間是 2019-04-01 ~ 2021-10-15 職位是從助理工程師升到工程師(不過職位其實不用過度拘泥,參考就好),第二份工作從 2021-10-18 ~ 撰文的這個時間點,擔任的職位是資深前端工程師,其實這篇文章只是一篇 murmur ,聽說人只要過 30 天就會忘記很多事情,我想先筆記下來,搞不好哪天就能用上了也說不一定。
更: 今天是 2022-08-21,我也準備要正式宣告離開 DeepQ,前往新的一份工作了(2021~2022 前端工程師面試心得,涵蓋去年跟今年的面試),近期跟朋友聊天才發現,寫部落格的一言一語好像很容易被放大解釋,所以才決定給這篇文更新更新,畢竟又過了半年心境總會有些不同,加上在這間公司也待的時間相對來說也很短,所以還是想把完整的心得整個再補充一輪,以下標註"更:"會是新的心得。
資拓宏宇氣象部門 2019-04-01 ~ 2021-10-15
面試
有點不知道從何說起,記得我是以全端工程師的身分錄取的,那時的我由於實習以及學校專題的關係,專案經驗僅有寫過爬蟲跟非常簡單的後端 api 程式,使用的語言是 Python,Javascript 則是隨便練習(抄)一下 Js 30 的功力而已,(註:如果你現在還是程式菜鳥,記得一件事情:抄沒有關係,只是你必須理解所有你複製而來的程式碼即可),面試的時候純靠一張嘴,似乎糊里糊塗就面試上了,當時的面試官(前主管)在面試的時候提到許多工作、職涯規劃的事情,讓我獲益良多,於是乎沒有思考過多就馬上決定加入,我相信所有跟他面試過的人或多或少會有一些收穫的。
工作
剛進入公司時,分配給我的工作是一個小規模的網頁專案,我需要維護 django 為 base 的後端網站,有使用到的技術,除了 python 外是使用 docker 的生態系(compose, swarm)以及 apache, MySQL, 大致上工作就是撰寫能夠將每天輸入成檔案形式的資料轉存進 db 中(ETL),而後透過 django 讓前端能夠存取資料,進而繪製出地圖或是統計圖表提供 user 查看,總體來說複雜度並不高。
在入職大概兩到三個月左右,開始加入前端的工作,也是先以小網頁為主,這個網頁只需要提供遠端的圖片檔案,讀取、排版、適當的切換等等功能,也是給當時的萌新上手上手罷了。
直至入職半年以後,我開始加入我在這份職涯中,經手時間最長也自認為最值得驕傲的專案,是一個負責氣象資料繪製具備疊圖、時間軸比對氣象資訊的網站,一路從助手的身分到獨自開發,從接手主管交辦的需求,到與客戶開會承接需求,從第一版的 UI 介面開發成第二版的 UI 介面,將不好擴展的單一版本,重構成相對可擴展的前端網頁架構,持續更新前端開發套件(離職時用了 Vite, eslint, prettier),導入 I18n 做到語言切換的功能,換過底層的非 open source 繪製地圖元件,現在想起來真的是付出了許多心血在這個網頁上。
除此之外中間也或多或少有一些額外的網頁維護或是支援同事的工作,雖然沒有上面提到的這個專案這麼熟練,不過也增添了很多練習機會,這算是我認為接案公司最大的優點:相對多的需求,相對急的時程,可以讓前端實作的經驗大幅提升,也就是從這些專案之後,我投入前端工作的時間大幅拉長,到後來便專心以前端開發為主。
當然也並非是完全沒有缺點的,由於工作的需求很多,整個小組要開發、維護的網頁數量也相當的多,以我自己來說平常就要維護一個 toC 網站的全端,加上專職 toB 網站的前端,在這樣的情境之下,同事間彼此討論或是 code review 甚至 coding 規範,以現在的角度來說都不算落實得很好(當時僅有每個禮拜的技術分享,其餘時間大家就各自開發),各個 pm 間的專案時程管理以及 issue tracking 的工具,沒有什麼統一的模式,不能說完全亂糟糟,但值得做更好的統合。
薪水
這份工作的月薪說來其實不高,好消息是每一年我都有得到已調薪(非跳槽)來說不錯的加薪幅度以及部門績效(公司排名第一的部門)所帶來的回饋,綜合加總之下我想還是勝過最最一般的純軟小公司,不過我得先聲明,以上的結論源自於主管給我打的考績很好(保守估計至少總排名在所屬部門的 20%),看到這邊如果你是剛畢業的話,其實也不用太擔心績效問題,軟體工程師這個職業基本上平日生活不進則退,你既然選擇了這個方向,總不會第一天上班就想打混摸魚吧?
夥伴
這間公司的同事親和力都很高,聽起來有些浮誇,但是連那種第一次合作的別的 team 的同事合作起來,大多時候也都會覺得是舒適自在的,我認為這與團隊氛圍有關係,從我自己 team 的主管到更高階的經理,每個人都起到了承上啟下的作用,其實我至今也不知道所謂的團隊氛圍到底該如何刻意塑造,但在這裡我了解到了一件事情,便是有友善的工作夥伴,絕對是可以大家一起提昇向上的,一份能夠同時得到成就感以及歸屬感的工作,是非常值得珍惜的。
離職
更: 其實我在剛出社會時,就早已知道如果一個軟體工程師,想要快速提升自己的薪資,最簡單的辦法絕對是跳槽,所以其實當初我就有給自己訂下一個目標是每間公司待滿一年,就可以準備離開,當然事後為什麼拖那麼久,其實是自己過於懶散了,這份工作的離職,最主要還是覺得要趕快提升自己的技術能力、薪酬,所以才決定離開的。
HTC DeepQ 奧啓迪 2021-10-18 ~ 2022-09-XX
面試
找第二份工作的期間,我確信了自己並非一個喜歡面試的人,覺得自己在面對陌生人的評斷總是感到非常不自在,在面試到這間公司之前我大概也只面試了六七間公司,我想這跟網路上有些人動輒分享二三十間的數量比起來應該算十分少了,這間公司的面試流程需要經歷兩位資深工程師,一位與我討論曾經做過的專案、JavaScript 的基本觀念,event loop, promise, call by sharing 等等,另一位資深工程師,則是與我討論一些演算法的問題,不過當時沒有給太多回饋,我認為有點類似考試,寫得出來就通過了,我在與兩位工程師討論的過程中,了解到這間公司的工作夥伴,技術能力都非常突出,而這正是我在前一間公司,比較難得的經驗,而且運氣非常好的,當下我就得到了口頭 offer ,只經過短暫的考慮,便決定要加入這間公司。
工作
至今為止,我所負責的案子僅有一個而共計也才兩個網頁 repo ,這與我在前一份工作至少接觸過大於十個以上的網頁 repo 有所不同,每次開會的需求少了非常多,且每當有需求提出時,我能夠直接得到至少有最終需求 80 % 完成度的 wireframe ,同時也有相應的 issue tracking 工具,還有 QA 團隊在輔助我們,這當然令我可以更專注在撰寫程式碼之中。
使用的技術方面,從使用 Vue 轉型成了使用 React,並且專案有使用到 RxJs, Jest 這兩項會在徵才網站上看到的進階條件技術,其他各種 CICD ,PR 的制度也都已經被建立好了,表面上看來我在找第二間公司的另外一個目標:希望可以使用到更艱深的技術,接觸到更嚴謹的軟體開發模式,這樣的事情看起來已經達成了。
但現實哪有總是那麼順利,專案中的 legacy code 非常多,有時候真是令人啼笑皆非,時常發現意義不明的程式碼封裝,看起來畫蛇添足的撰寫模式,這在剛開始也給了我很大的痛苦,幸虧在與同伴重構了近三個月以後,終於能夠感覺到情況慢慢的在好轉了,對此我其實非常佩服現在正帶領我的專案 owner,我經常臨摹他的一些寫法,並且他也經常給我的程式碼帶來建議,在我看來,前一批的開發者,也許有些太過於專注在使用工具之上,而忘記了系統設計的本質,例如他們導入了很多新潮的 library,希望透過這些 library 優化程式碼,但卻也許被新的需求所困,或是任何其他的理由,將手邊重構的工作閒置,結果反而造成這份專案在實作相似的流程時,例如將資料儲存於 Redux 中這件事情,就有整整三四種不同的寫法在運作,造成我們作為接手者非常難以維護專案,這件事情令我了解,必須有充足的時間,經過完整的評估後,才考慮引入新的專案,更改程式碼的大架構(這邊提到的是大架構,平日積極於維護程式碼的整潔永遠是必須的)。
更: 後來輾轉又經過了幾個月的重構,code base 變得越來越佳,而且我們現在也準備展開一個大計畫,用到了 monorepo ,用以統合所有 repo 會用到的 common config,將會用到的第三方套件重新做了整理,並且進行了多個 repo 共用 module 的抽離。
薪水
我今年 26 歲,在這個年紀的大學同學朋友們處在一個強勢的對抗期,見面了總是討論工作、薪水,總得有個地方勝過其他人,技術用的艱深,薪水比別人高,工作比別人輕鬆,就如上文所說,我前一份工作的薪資收入算是普通,其實不到慘淡,但考慮到朋友們一間公司接著一間公司轉換,總有幾個人已經拉開差距了,為了證明自己的能力(雖然如此陳述,但永遠記得不要陷入薪水等於能力的迷思),我給自己設定了一個換公司的最低薪資目標,最終我在這裡所得到的 package 比這個最低目標多了大概 10% 左右,跳槽的提升幅度大概在 35% ~ 40% 間,如果你是一個非常渴求高薪的人,你應該知道自己該做些什麼了吧?
夥伴
其實為什麼要提到夥伴這個項目,就是因為我在這個環境算是有些的不適應,到今天為止剛好我在這裡待了足足五個月左右,老實講至少前三個月吧,我覺得自己跟同事除了公事似乎根本沒辦法有任何交集,這件事情在剛開始時,真的給自己萌生一股非常想要再換一個環境的想法,直到近期才稍微有些轉變,至於為什麼能轉念,主要是因為開始敬佩同事們認真上班的態度,我如果只會一直想要逃避,也無法昇華,只有換個視角去體驗,有經歷過之後,就算仍然不適應,至少到時候才真正了解到自己的需求為何了。
更: 我看了自己五個月前說的話,發現真的看來好生沉重,今年後來由於 covid-19 的關係,居家工作了好一陣子,本來以為回去以後又要面對辦公室有些沉寂的環境,結果發現其實辦公室的大家,雖然安靜,但似乎其實是君子之交淡如水,而且在這種模式之下老實說我認為自己的程式產出是相對豐腴的,所以其實也還蠻值得高興。
離職
更: 待在 DeepQ 的時間真的算非常短,在這邊由於 repo owner 的 review,學到的東西也真的非常多,而且公司的福利也超級棒(假很多、工時不長、有拿鐵、下午茶、餐費),說實在自己為什麼選擇離開,完全是反骨心態,覺得自己既然頭銜已經掛了 Sr.Engineer,總是想多做點些什麼,而非只是身為一個小螺絲釘,所以才萌生了想離開的念頭,而剛好又因緣際會,朋友推薦了新的公司,也運氣很好的得到了認可,所以才決定離開的。(如果你不排斥我上述提到的公司缺點,也許在我走之後會有位置的,趕快手刀面試呀!)
結論
我給自己的結論是,下次再找新的工作時,除了薪水以及技術之外,希望同時也能擁有不錯的相處氛圍,還有優良的軟體開發流程,或是至少我加入後,能夠以自己的經驗與同事們一起提升,工作不可能永遠都是那麼完美的,但自己的能力一旦越高,擁有的選擇才更多。
更: 很感謝你讀完這篇文章,如果你有機會面試或是已經成功面試上了這兩間公司,如果有什麼好奇的地方也歡迎與我聊聊,我非常樂意給我的老東家介紹優秀的人才,如果你有些害羞,我認為你可以根據你現在的實力跟你在未來的一到三年想要得到什麼來決定是否加入,對我來說,兩間公司帶給我的東西完完全全是大相逕庭的,他們各自都有很棒的優點,以及相對的缺點,加入這兩間公司我完全不覺得後悔,希望在看完這篇文章後,對你的職涯有些微的參考價值,也祝福你可以找到合適的工作!