2021年4月22日

職場 | 後端工程師的職涯發展與建議 ,試想十年後的自己在哪裡?

大家是否會好奇後端工程師的職涯發展?我自己在剛開始工作的時候,就常常在想做這一行,下一步要往裡走比較好?很當時希望有人可以討論跟指引方向。

不知不覺中,我自己在業界也待了一個說長不長,說短不短的日子了,就想說也許也可以依照自身經驗,還有自己所看到的,來寫一篇文章分享。

我自己曾經待過千人、甚至萬人的跨國企業,也待過只有十幾人的新創小公司,每間公司都有不同的特性。

而我今天主要想分享的是,我過去在一家中型的公司的經驗,一來是我認為這應該比較適用於大多數人、二來是因為這間是我目前為止待得最久的公司,可以敘述的比較詳細。

我大概簡單介紹一下背景,這間公司的工程團隊大概100人左右,是台灣本土的網路產業公司,有將近二十年的歷史,因此公司已經有一定的制度了。

我會從工程師一路介紹到技術副理的角色,再往上走的話,一來是差異性會比較大,二來是自身的經驗還沒有那麼多,所以我只會講到技術副理為止。

(菜鳥)工程師

英文是Engineer或Junior Engineer。

這個階段是我自己特別加的XD,其實就是工程師,

特別強調菜鳥是因為,基本上你可以被視為什麼都不會,就是來學習的XD

工作內容

工作內容基本上以維護(修bug)為主,偶爾可以碰到新功能開發比較旁支的部分。

發展方向

這個階段的你剛離開學校,在學校有學習過程式語言,或是在補習班有上過課,有做過期末專案,但是缺乏實務經驗。

因此你會需要邊做邊學。學習可以分兩個大面向,

一就是寫程式的能力,雖然在學校有寫過程式,但是寫出來的程式品質可能不夠好,考慮的面相不夠完整,沒辦法應付實務上的需求。實務上要考慮的狀況很多,例外處理、擴充性、可維護性、可讀性等等,所以不能只考慮是單一面向,也不能總是用自己開心的方式來撰寫程式。

這個時期通常會安排你透過修 Bug 的方式,讓你逐步調整寫程式的慣例,並且了解正確的開發知識與流程。

再來就是系統架構也會學習,在學校比較少有機會碰到大型架構,所以要開始熟悉大架構的運作方式,並應用在開發上。

二是所謂軟實力,包含要了解商業邏輯,公司的運作方式、職場應對方式等等,工作態度跟習慣的養成在這個階段很重要。

工程師

同上,就是工程師,只是你已經不再是菜鳥了,到這邊才會把你算入戰力。一樣叫做 Engineer 或 Junior Engineer。如果大學已經有相關實習經驗,或者已經通過試用期了,大概就可以把自己放在這位置。

工作內容

工作內容基本上以維護(修bug)為主,新功能會負責比較旁支的部分,偶爾有機會接觸到比較重要的功能。

因為已經熟悉基本的東西了,所以前輩或主管可以放心的把簡單的事情交代給你,你基本上被預期可以獨立完成小 Task,商業相關的名詞或流程你也大致上熟悉了,其他人在討論的東西你大致上都聽得懂。

但較困難的東西依然會有資深以上的工程師跟你討論,並在一旁協助你進行,例如比較敏感的商業邏輯(金流)或比較複雜的流程(第三方API串接)等,會需要資深工程師協助 review。

這個階段寫出來的程式,要有一定的品質,不能 bug 滿天飛,要穩定產出。

發展方向

如果想要往下個階段邁進,要去學習複雜邏輯運作方式,例如每個系統間的溝通方式,也要開始去了解架構面的東西,例如,伺服器架構、資料庫設計、網路、資安等其他的議題,簡單來說要去多瞭解屬於開發上的事情,不只是寫程式而已。

建議閱讀

程式設計師的修煉之道 The Pragmatic Programmer

資深工程師

英文是Senior Engineer。資深工程師有兩種,一種就是字面上的意思,年資到了自然就是你的,一種就是能力很強,公司願意提高你的職等。一般來說工作3年以上有機會來到這個層級。

工作內容

工作以新功能開發為主,要負責核心功能的開發;可以負責中小型專案的系統設計;需要幫忙釐清 bug 的問題跟提出解法,讓工程師可以處理。

資深工程師基本上是公司的主力開發人員,大部分的實際產出來自於公司內可靠又穩定的資深工程師。

到這個階段,你可能要開始協助帶領新人,幫助新人進入狀況,或是協助新人進行工作,要能夠進行有效的 code review,寫出符合規範的良好程式碼。

工作上,基本上不再需要有人協助。遇到問題的時候,主管也會希望你可以自己提出解法。

發展方向

要往下個階段邁進的話,要更精進架構面或 DevOps 相關的東西,除了理解以外,也要有辦法自行設計,並能夠判斷該採用怎樣的設計。並且建議要主動積極參與公司的重點專案,了解公司的發展重點。

此外也要開始培養溝通的技能,因為除了跟工程師溝通以外,跨部門溝通可能會越來越多。

關於資深工程師,我在另一篇文章有做更多討論→關於資深工程師的三大面向

主任工程師

英文是 Staff Engineer。有些公司可能沒有這個職階,會用資深工程師的名義。主任工程師可以算是 Tech Lead 的角色。

通常只有少部分資深工程師可以升到這個階段,不是因為技術能力不夠,而是到這個階段需要更多的溝通能力跟管理潛力。工作5年以上有機會來到這個層級,如果只是年資高的資深工程師,不太有機會。

工作內容

工作以重要核心功能的開發為主;要負責中大型專案的架構設計,將複雜的商業邏輯,拆解成工程師可以理解的架構,並考慮未來可能的發展;要review工程師們的產出;至少會有約一至三成的時間在開會或溝通。時常要協助新進人員面試。

到這個階段,你會開始負責一個中大型專案,專案的成敗很大的成分取決於你,你要負責這個專的架構規劃,伺服器架構或是資料庫Schema設計等等,並協調團隊中的工程師及資深工程師,根據你設計的架構,互相合作,完成專案。

同時要為每個人的產出品質負責,你有責任帶領同仁提昇各自的能力。

寫程式的時間相較之前會變得更少,越來越多會議要開,跨部門溝通,對組內工程師的溝通都越來越多。

主任工程師雖然不會是開發主力,但是掌握公司系統的重要架構跟流程,而且大部分的問題都知道如何解決,公司系統的穩定性跟效能很大程度掌握在主任工程師手上。能力強的主任工程師,若被挖角到其他公司,有能力設計出八成相似的系統。

發展方向

這個階段基本上再往上走會面臨抉擇,要往管理職發展,或繼續專研技術領域。管理職的話,就會是副理。技術職可能會是資深主任、架構師或研究員等等,但是在台灣本土企業,比較少有這方面的選擇,因此很多人要往上提升,只能選擇往管理職走。

技術方面,為了溝通協調上的需要,除了後端、系統架構、維運以外的技術也要去了解,但可以不用深入,例如前端相關的技術。

推薦閱讀

Staff工程師之路|獻給個人貢獻者成長與改變的導航指南

人月神話:軟體專案管理之道

技術副理

英文是 Assistant Manager。到這邊算是正式邁入管理職,會是小部門或 Team 的主管。要到這個階段要有些機緣,因為管理職不是那麼容易有空缺的。工作7年以上的有機會來到這個層級。

工作內容

工作內容基本上就是負責開會,釐清需求,時程安排,資源跟人力分配。身上可能會同時好幾個專案在跑。要負責底下工程師的考績,和工程師招募。

因為負責一個開發 Team,底下通常不會只有後端工程師,還會包含前端工程師或專屬的 DevOps 工程師。

開發專案的成敗基本上就取決於技術副理的決定,有沒有跟上級或其他部門協調好合理的開發時程,有沒有安排合適的人力進行專案。

除了跟其他部門開會以外,也要定期與底下的工程師開會,透過1-1 meeting或專案檢討會議,去定期了解底下工程師的狀態,是否有穩定產出,並且協助工程師的職涯發展。

還要負責建立新流程或改善既有流程,以改善開發速度,或確保開發品質。

發展方向

繼續往上可能會是技術經理的角色。

總結

以上是我個人的經驗分享,不一定適用於每間公司,取決於每間公司的規模跟風格。像是新創公司可能人人都是CTO(因為只有你一個工程師XD)。

但,我認為職涯發展方向,除非你轉換跑道,不然外乎就是,你負責的專案規模會越來越大,接觸的人會越來越多,會與越來越多不同職種、性質的人接觸,同時責任也會越來越大。

我認為處在每個不同階段的人,都可以思考自己未來的目標在哪裡,就像副標題提到的,「十年後的自己在哪裡?」,多去詢問別人的意見、或是去尋找職場榜樣,看看他們具備哪些能力或經驗,而自己目前還不具備的,就可以去培養和規劃,這樣機會來的時候才不會錯過。

而「十年」是我認為是一個不會長到沒辦法想像,或者短到無法進行規劃的長度。

參考

台灣軟體業業界現況詳解、軟體工程師指南

 

更多《職場甘苦談》系列文章