會寫這篇文章主要是因為最近開始找第二份軟體工作了,發現面試其實是一個會與使自己大量思考人生規劃的時候,與面試官聊天的過程中,也了解到了自己在成為優秀的軟體工程師上有哪些不足的地方,記錄下來,過段時間回來看,可以作為給自己作為提醒。
很多時候並不是不去解決問題,而是沒有意識到問題在哪裡,透過這次面試經歷,回頭檢視自己一年來的學習方式跟成長,覺得還有很多方面可以做改進。
先說一下我的學經歷,網頁前端工作經歷一年,非理科學院背景。
今年找工作是在台中,尋找第二份 junior 職位,全端或是前端都可以,非博弈,年薪 60w-65w 為目標。
與去年找第一份工作時的差異很大
- 面試機會跟產業更多
2021 年投了 63 間,回覆 4 間,面試邀約 2 間,拿到 1個 offer。
2022 年投了 22 間,回覆 3 間,面試邀約 10 間,拿到 4 個 offer。
這次大部分的面試機會,都是更新 104 履歷後人資主動來尋才的,而不是由我主動投遞的公司。
多了一年的工作經歷,會的技術也更多了,所以也更符合各企業需要的。
產業也從只有博弈到各行各業,有 AI 影像辨識、B2B 軟體代工、跨境電商、醫院、直播平台。 - offer 更多,談薪水的籌碼也更多
當年只有拿到 1 個 offer 的時候,沒有經歷也不是本科系,人資砍薪水的時候,都不敢喊價,「錢多少我都去」、「請收留我吧!」這樣子的心態 QQ。
這次預期薪資被砍,就有談薪水的籌碼了,也可能是有了經歷之後,知道自己大概在哪個價格區間,知道我可以往區間的最高值去談判。面試完之後才看到泰瑞分享的 如何談薪水Like A Pro,這完全顛覆了我跟公司談薪水的方式,先筆記下來之後談薪水可以採用。
10 間快面完的時候,就有心儀的 offer 了,所以直接婉拒了後面兩間的面試與另一間的二面,所以實際只有面 8 間。
小小補充一下,因為預計要面試 10 間,所以請了五天特休,都是早上、下午各一間,第一次這樣安排面試,算是蠻悠閒且時間非常充裕的。中間也遇到清明四天連假,所以直接休了九天的假,真的覺得特休太重要了 XD
面試官的問題讓我發現我不瞭解自己
- 你未來的人生規劃是什麼?
- 你的期待薪資是多少?
- 什麼樣的公司會讓你想要一直待下去,有什麼條件嗎?
我以為面試官要問的是五年的人生規劃,我回答累積經驗、調整思維然後成為資深工程師。但他接著問我有沒有人生長期的終極目標?我當下是回答買房子跟結婚生小孩。我雖然自己也認同這個答案,但這個答案卻不是經過整理與深思熟慮過後的,所以問題就埋在我心裡面,有空的時候就會拿出來想一想。
期待薪資想喊高於 60–65w 的,但是自己的學經歷跟能力的行情在台中無法達到,這時候就會想,自己得多努力一些,不能浪費青春。
什麼樣的公司環境會讓我想待下去,想了一下對我而言理想的條件應該是:
- 公司營運穩定。
- 每年根據年資與能力調薪。
- 團隊成員可以互相討論技術。
- 在崗位上可以有成長,並有機會可以改善流程,而不是一套模式用到底。
- 可以偶爾加班,但不會頻繁且大量到影響生活品質。
最後的選擇
其實對現階段的我來說,到哪裡都是新環境,都有值得學習跟成長的空間,翻修舊系統,把它改成新技術,提升程式碼的可維護性、可讀性、可擴充性、重用性,我可以累積翻新架構的經驗,應該可以學到很多。選擇全端的方向,擴充後端的技能樹,並加強前後端連結的知識,也很吸引我。選擇前端的方向,接觸另一個框架,或是在已經會的框架基礎下,繼續深入去學習更多的前端知識,我想我應該也算是比較樂觀的人,就算看似屎缺,我也能想到其中能帶給我的優點。
寫這邊文章的時候,參考了 Huli 的這一篇:關於求職,連我自己都不知道我要什麼,看到面對不知何選擇的時候,可以用這種方式決定:
舉例來說,如果 A 代表 0,B 代表 1,起始點是 0.5(兩個都同樣想去),可能今天你想到更多 A 的優點,就變 0.3(離 A 更近),隔天發現 B 也一樣,就回到 0.5,後天覺得 B 更好,就變 0.8(離 B 更近)。
直到發生以下三種情況,才會下決定(有些人只有出現 1 的狀況才會做決定,所以才會猶豫很久):
心中的天秤數字出現 0 或是 1,某一邊大獲全勝
某一天突然決定不想了,直接根據當時的數字選擇更靠近的那邊
數字穩定傾向某一邊持續個幾天,於是決定選擇那一邊
最後我也是因為情況 3 ,在現階段我更嚮往有很多很強前輩可以討論學習的環境,在第一間公司的時候原本有很多同伴,但後來都相繼往更好的地方前進了,工作的現況也會懷念當時團隊的氛圍,所以選擇了有許多前端前輩的一間接案公司,繼續在前端深耕,磨練大型專案經驗,產品的面相很廣,購物網站、類社群網站、ERP 系統、交友軟體、看盤整合系統…等等都有做,與一般套版的接案公司風格不同,可以接觸大量不同產品與應用,面試的時候也看得出是很重視技術交流的公司。
自己有很多的不足
這邊會講一些技術細節,不看可以略過 😌
- 對於基礎演算法與資料結構的不足
這次面試少數有考算法題或是聊到,但聊到這部分的時候,實在是有點羞愧,也講不出一個名詞或是架構。
平常在寫較複雜的功能的時候,腦中沒有想法,只能徒法煉鋼寫,雖然最後都可以寫出來,但也不知道如何評估這樣是不是有達到最佳的時間與空間運用,希望可以增強這方面的能力,面對這方面問題的時候,可以更快想出解題核心,並完成實作。 - **系統架構能力與流程改善的思維
**面試的時候被問到是否有優化過專案的架構,完全答不上來有什麼經歷。覺得自己並沒有很擅長在流程改善這分面的思維,很多時候我們正在做的事情其實都可以想辦法自動化來節省時間,在工作上有看到資深的工程師如何把工作流程提效、優化,才想到自己從沒有去思考這方面,而是用現有工具埋頭苦幹的開發。
簡單舉例:- 像是上版流程的優化,以前是透過 excel 來記錄各個節點,是否已經上測試環境,若送測了就手動記錄,但其實可以利用分支 diff 的圖形化工具,像是:git-cherry-picker,來比對分支,並選取想撿的節點,自動產生 cherry-pick 的指令,整個過程只要選取、複製指令、貼上就可以了。
- 送測的時候告訴 PM 送測的功能、bug 是什麼,這些都是手動去複製節點訊息,或是自己簡化節點內容,但可以透過 standard-version 自動產生 change log 跟版號,把整個流程簡化成:輸入指令、複製貼上就好了。
- **很多技術並沒有完整瞭解
**因為處理的產品比較單一,也沒有自己去詳讀官方文件,所以對任何技術都可能懂了皮毛,或是只懂一半,例如:SSR 的處理、Canvas 畫布的應用、前後端在圖片傳遞是怎麼運作,router 的兩種模式等等。 - **對於底層的原理深究不夠
**了解工具怎麼使用,卻沒有去瞭解原理,如:研究了 Vue 響應式的原理,但卻沒有了解其他語法是怎麼實作的,像是 v-for、vue 2 中的 data 為什麼要是一個 function、vue3 的模組引入要怎麼做到避免全域污染、fetch 跟 xhr 有什麼差別…等等的問題。 - **把自己當作前端工程師,而不是軟體工程師
**很多知識會覺得是後端才要會,就刻意去迴避,但其實應該當作軟體的知識去學習,不應該區分而迴避掉了學習的機會。迴避掉的知識在某些時候會用到,就會覺得自己怎麼這麼無知,像是基本的資料傳遞格式,只瞭解 JSON、但不了解 FormData。
另外要提到的就是 CI/CD,很多面試官會問:會不會 docker、會不會 CI/CD,從以前就知道在現代軟體開發中,將環境建置、打包、部署的行爲自動化是可以有效省下非常多時間的,但現階段的自己並不具備這樣的能力。
一些期許跟感想
累積 Side Project 的好處
看到 Side Project 經驗分享! 軟體工程師如何累積作品集? | 在地上滾的工程師 Nic 分享的影片更具體的瞭解了 Side Project 的好處。
Side Project 的定義不僅侷限於實際可以應用的網站,也可以是別的東西,例如:學習心得、技術分享文章、YouTube 頻道、Podcast、音樂作品,當然希望可以都跟軟體工程有關係。
通常工程師的作品都是公司的產品,但有時礙於保密原則,在面試的時候是不能直接 Show 程式碼給面試官的。這時候 Side Project 就可以派上用場,因為你就是程式碼的擁有者,面試官也可以透過程式碼架構、邏輯來聊更深入的問題。
產品規模可大可小,可以是 TodoList、小型購物網站,也可以是短網址服務。可以從生活中出發,任何可以解決生活中繁瑣的事情的應用都可以。可以當作一個新技術的練習,也可以用熟悉的技術來解決的問題,時間範圍可侷限在一到兩個月內。
英文聽說讀寫能力當作基本
在看技術文章的時候其實大部分都是英文,目前我看到英文的文章就會想要自動迴避,看有沒有中文的,長期來看對英文能力並沒有好處。要吸收最新知識,閱讀英文文章是基本的,因為在軟體這個社群英文是全球通用且被廣泛使用的,所以能夠快速閱讀並吸收。
若我想要在社群中成為一個貢獻者,也勢必要撰寫英文的文件,使用英文與協作者溝通。
未來方向跟目標
- 學習演算法跟資料結構基礎
- 系統設計的能力
- 資訊安全的知識
- 累積 Side Project
- 累積英文聽說讀寫
- 職涯三年內達到年薪百萬
目標不一定可以實現,但至少我可以朝著這個方向前進,一方面是希望可以透過更高的薪水達到更好的生活品質,也希望自己可以在職涯上有一些成就,累積自己的能力,對世界有更多的貢獻。
這幾天有朋友分享了這篇文章,如何才有資格稱為資深工程師 ,我覺得寫得很好,希望自己未來也能擁有文章提到的特質。
預計 5 月要到新工作上崗,希望一切順利!