Thursday, March 25, 2021

System design | Andrew Wu | 後端工程師想要晉級到架構師

Here is the article. 

講師介紹:

談論各種軟體開發與設計的大小事,有 20 年的大型與雲端服務的開發經驗。

喜歡研究各種技術背後的原理與實作細節,期許自己做個優秀的系統架構師。

主題以: .NET / C# / OOP / Container / Microservices / Azure / Distributed System / Cloud Native / DevOps 為主軸,同時在部落格上也持續分享相關主題的一系列文章。期許能將這些實作經驗分享到社群。

  • 任職 91APP, 首席架構師 Chief Architect
  • 榮獲 Microsoft MVP 微軟最有價值專家 獎項,2016 ~ 2021
  • 曾任 一宇數位科技 技術長
  • 擔任資策會 雲端系列課程 Azure PaaS 講師
  • 擔任多次 Microsoft Azure Cafe, TechDays, TechEd, DevOpsDays Taiwan, .NET Conf 等大型研討會講師

會開啟這系列文章,以及背後的動機,其實是來自這十幾年工作上面臨的挑戰,思考下來的結果。我踏入軟體開發這行,已經超過 20 年了 (Orz..), 經歷過幾年的工程師,技術經理,技術總監,一路到技術長,典型的工程師到管理職的過程。不過我希望台灣也能發展出真正的軟體業,能真正做點不一樣的服務出來,於是最近的幾年,我開始有計劃的轉職為架構師,重新回到專注技術的領域。

這轉換的過程中,越來越體認到,只有把 code 寫好是不夠的,在擴大架構團隊的過程中,我面試了很多人,也談過了很多人選,其實其中不乏實作能力比我強的高手啊! 但是談完後回到團隊的定位,總覺得缺少了些什麼,軟體開發不應該 “只有” 把需求做出來的過程,這過程只能算是軟體 “代工”,而不是軟體 “研發” 啊。在尋找這樣特質的人才過程中,我開始思考這樣的人除了 “招募” 之外,該怎麼 “培養” ? 所以才開始有了這念頭,想要好好地把我自己過去學習的經驗,用有系統的方式告訴大家,該如何培養自己在軟體產業長久發展下去的能力。

要在這行長久發展,你得要有能力跨過 40 歲這關卡。這門檻不會只有技術能力而已,一定還有其他更有價值的能力搭配才是。”高齡工程師” 這類話題最近幾年很熱門啊,只要有留意相關社群或是媒體,不難發現每隔一段時間都會有高齡工程師去留的問題被熱烈討論。我都當過 CTO 這樣的角色了 (雖然公司規模不算大),不過我想我開始能想像老闆的角度會考量什麼事情了。 40+ 的工程師,你除了把 code 寫得更快,工具更熟練,框架學得越多之外,你必須還要有一些年輕人取代不了的能力才行,否則老闆用 “scale out” (用在這裡好像怪怪的 XDD) 的策略,如果多找三個年輕人可能就能取代你了,那它還有可能用三倍以上的薪資聘用你嗎? 這些能力是需要漸漸培養累積的,等你 40+ 才開始做是來不及的,你必須在 30+ 摸清楚產業跟你自己職涯方向後,就要開始有計劃的學習累積才行。

 

舉個例子來說明好了。公司內部我們負責的一套系統,需要深入的了解 Rabbit MQ 設定跟管理的細節,我就以 Rabbit MQ 來當作例子,說明每個 Level 應該有的行為表現:

LV2:
我會 Rabbit MQ, 代表我知道如何安裝、設定、管理 Rabbit MQ 服務;我也知道如何透過 C# 將 Message 送入 MQ, 也知道如何將 Message 取出處理。 基本上就是知道 Rabbit MQ 是拿來幹嘛用的,同時有能力正確使用他的 SDK,基本上就具備 LV2 的要求了。

LV3:
我了解什麼情況下需要用 Message Queue 來解決非同步任務執行的問題;我知道 Rabbit MQ 的特色: Exchange / Queue 的組合與應用,何時該用 Fanout, 何時該用 Topic。基本上你對 Rabbit MQ 已經有一定的了解,如果你的團隊來了個新人,你除了自己會用之外,也有能力開始跟新人說明介紹 Rabbit MQ 的概念與操作。

LV4:
Rabbit MQ 適合用來處理 “生產者與消費者”問題,非同步任務產生後可以交給 MQ 處理,不需等待回應可以繼續後面的動作,而另一端可由 Worker 負責消化任務。MQ 後端可以善用平行處理的技巧,提高整體的處理能力,也能同時用多個 Worker 分攤處理的任務。每個 Worker 都能夠以最佳效能運作,處理完畢後才領取下一個任務,輸出穩定,不會受到瞬間大量所影響,這種情況下能達到最佳的處理效能。

No comments:

Post a Comment