上禮拜跟我們Discord社群的人一起做了pair programming
挺好玩的也讓雙方互相學到東西不同的觀點
本來沒有想做成正式活動的想說是社群上的朋友問能不能練習
沒想到蠻多人有興趣的
maybe之後會是個活動吧
以下開放報名或是有其他需求都能在社群上問
上面很多大神都很樂意回答問題
只怕你不問而已
職涯方面我常常被問到一個問題說要怎麼升上senior
或是senior的定義是什麼
我能怎麼做才可以升到下一個level
今天想講一下工程師大概有幾個level
每個level的工程師主要職責是什麼
而且要怎麼晉升到下一個
我自己是在工作四年後升上senior的
當時和同事弄了一個plan做system migration
從當時的Java monolithic把前端搬出來變成自己的SSR service
然後架設了GraphQL server
算是當時蠻重要的project因應當時的快速發展
應該是因為這個project而升的
撇開升職不說 這project對我影響蠻大的
幾乎從零架構且怎麼說服stakeholder我們需要這個
然後弄了個plan怎麼同時有business feature又可以邊做technical upgrade
最後是挺成功的而且現在還在用
今天要講的level其實每間公司可能都有名字不太一樣
就算level一樣但涵括的範圍和需要的技能可能不一樣
levels.fyi除了能看公司薪水多少也有個圖會告訴你比如Google的L5 senior是微軟的 63 64
然後微軟senior有兩個level但他們沒有staff位置所以下一階會跳到Principal
以下資料是我google到的加上根據我公司的評分表
可以當參考但不一定每一間公司都一樣
我們公司評分表蠻好玩的會拿繩子來比喻你應該懂多少
蠻奇怪的我們是做電動車的怎麼會拿繩子而不是車子比喻
比喻如果有一條繩子的話SWE 1了解什麼是繩子和繩子的定義是什麼
面試過程中會比較注重在computer science 的基礎
會問一些問題來看你對程式語言的熟悉度
假如今天你面試這個position是後端用Java 可能會問很多OOP 的概念
前端或許會問基本的const let var有什麼不一樣
CSS哪一個rule會被apply
怎麼query HTML DOM
然後問問框架類的問題來看你有沒有用過
如果你有其他的實習經驗那會有很大的加分
代表你有和別人一起共事的經驗
一些工程工作flow你或許也會了解
比如為何需要用git和了解code review的重要性
工作方面你可以在資深工程師領導下完成你的ticket
這階段不會期望說你要own某個feature或是自己獨立帶一個小團隊做feature
雖然這麼說但如果你覺得你準備好想要往下一個level邁進
你可以和經理提表達你的立場看看能怎麼往這個方向前進
之後sprint planning時候或許會給你一些超過你的level該做的事情
這方面之後的level都一樣
先和經理溝通表達你的意願然後draft a plan看看怎麼達成
你可能會在這邊待一到兩年然後promote到下一個
比喻為你可以拿繩子繫基本的繩結
面試過程和SWE 1差別沒有說特別大
問得東西可能也差不多但這時候你應該對語言的掌握或是框架的熟悉度要比之前高一點
也會了解best practices有哪些 效能怎麼處理 或是知道也寫過單元測試
可以簡單的比較出為何某些library比較好或是library怎麼運作的
這階段是你對coding比較有信心了而且因為有些經驗了你有一些自己的想法和邏輯
這在你之後想升senior的話會非常有幫助
工作方面你可能會有機會自己做一個feature而不是像level 3時候是別人lead而你是幫忙的
這個feature或許不是很大但至少是個responsibility
比如今天的feature是要把landing page的UI改一下
設計師會找你溝通
PM會問問你時間上行不行
ticket有可能是別人開給你或是你得自己開
其他時候比如有個bug或是需要解決方案時候
你也能給出自己的意見
不一定是最好的但能給就行了
比喻為了解各個不同的繩子和打各種不同的繩結
大部分擁有4,5年左右經驗的人會到Senior
面試方面會比較多元化 會想更多的了解你有沒有帶project的能力
會不會主動的去解決問題和與stakeholder做協調
換句話說就是你有沒有領導力
技術方面除了coding以外也會多一輪叫做系統設計system design
有看我發的推文 or X文 whatever it's called
前端系統設計我自己遇過滿多的例子是給一個API
做一個search function和把結果弄成一個list
可能會要求說邊打字邊做search
做pagination
或是問做infinite scroll的話要怎麼保證效能
如果你不清楚我在說什麼的話
你下次可以試試自己做infinite scroll而且list很長的時候你整體效能感覺如何
工作方面你可能會帶一個team或是 畢竟這個是前端的podcast 負責一個project前端的進度和細節
會需要你去主動的了解business需求 product需求 和designer溝通
最後開ticket和經理溝通timeline來決定什麼是第一版最重要的東西和什麼時候可以上線
總而言之你會有更多的responsibility和ownership
某個feature有問題 負責人是你他們就會來問你
根據公司政策你可能也會需要加入on-call 雖然很多人可能會問前端的oncall要做什麼
也會因為公司的制度你或許會開始當其他人的mentor
技術領域方面你因為之前的種種經驗會知道很多不同的做事方式或是新的pattern
你可以幫忙評估什麼樣的場合可以用什麼樣的pattern
用你所知道的技術和domain knowledge去不光是幫忙做code review也幫忙做business和engineering之間的協調
然後因為你是senior了 code quality幾乎會自然而然的由你來幫忙決定和維護
大家會自然而然的以你為準 採納你的意見
若senior開始放鬆了 quality大概就直接下去了
可能開始performance越來越差了 測試開始不寫了
雜亂的code開始被merge了
這些總總不能說都是senior的責任但senior肯定有疏忽
概括總結就是
作為senior你會有更多的responsibility
你會有更多展現自己領導力的時候
和用自己的經驗才確保code quality
我們公司是有staff和senior staff不過就一起講吧
比喻為你知道繩子是怎麼製作的還了解各種不同的繩子
面試方面除了coding外會更加注重在你團隊能力 領導能力 和比較大方向的系統設計
我曾經被問過假設這裡有個舊的系統我們要換到這個新的系統
我會怎麼做
這很open ended而且也沒有所謂的一個正確答案也是一個Staff以後工作上會遇到的事情
工作上你會有project是需要跨組的而不完全只侷限在自己的組裡
可能會有個feature或是migration需要很多不同的組一起做而Staff就需要幫忙協調和決定這技術的大方向
這時候的project其實不會像還是SWE 1的時候那麼的比較有detail
會需要你去釐清為何要做這些事情
或是某個workflow其實可以更好而Staff就需要幫忙評估和決定能怎麼做
其實這個職位除非公司規模比較大或是比較注重工程文化
要不然這個和下一個Principal應該都很少見
比喻為你發明了繩子
面試方面和工作方面其實和Staff有點像
但scope會比Staff大很多
一間公司Principal Engineer可能才幾個人
管的東西可能是一個或多個不同的系統設計
你的影響力不侷限於你的組而可能是整個公司的
加入今天有個人要把GraphQL帶進公司說服大家federation是多好的東西可以幫助不同的team一起合作
這種能影響整個公司工程運作的人通常是Principal Engineer
不過這當然是看公司規模
同樣的技術在不同規模下所需要考慮到的東西都不一樣
Principal 上面還有一個叫Distinguished
這職位大概全公司就一個人
這種神級別的人物我也不清楚他們具體在做什麼