繼上篇分享經濟轉資工之路,這篇把ML到SWE的部分補齊。
內部轉組半年多,上個月正式從Machine Learning Engineer轉為Software Engineer了。最近聊天常常被問到為什麼想轉後端,也有一些在做ML或DS的朋友考慮要轉,剛好整理自己的想法,希望哪天厭倦SWE了,回來看一下當初為什麼做這個決定。
下面分享轉後端的原因,以及工作內容的轉變。
💡 縮寫對照表
DS: Data Scientist 資料科學家
MLE: Machine Learning Engineer 機器學習工程師
SWE: Software Engineer 軟體工程師 (這裡針對後端)
為什麼不做MLE了?
工作性質
SWE是一個從0到90的從無到有,當PM提出新的產品需求,可以很直觀的在幾個禮拜/月之後,看到新功能上線;而MLE追求的是90到99的優化,像是怎麼更精準投放廣告、chatbot怎麼回答更像真人、偏向MLOps涉及怎麼讓一個巨大的ML模型預測得更快速等。覺得自己對於那1, 2%的提升沒那麼有耐心,更喜歡從無到有的過程,從SWE得到更大的成就感。
另一方面,自己對ML有點失去信心。之前有一部分的工作是跑模型加解釋模型,雖然現在有很多針對模型可解釋性的工具,但通常那些工具也只是告訴你哪個feature重要,還是得針對產品、資料把結果用一個故事包裝好。然後有一天發現程式某個地方寫錯、feature沒處理好、或樣本有偏差,重跑模型發現之前講的故事就不適用了,會覺得那我是不是只是看圖說故事而已。另外很多人可能都聽過的調包俠、調參俠MLE,嗯…就不用多說了。
當然ML還是有很多有趣的地方,看看最近這麼紅的ChatGPT,但非我所能及,還是當個使用者就好。
面試準備
有找過SWE職缺的人應該都知道,準備面試就是刷LeetCode和system design,網路上可以找到很資源,準備起來比較直觀,而且這兩項準備起來幾乎可以適用每家公司。
MLE的面試多樣性高很多,依照工作內容,偏向software engineering的一樣會要求LeetCode和ML system design;偏向模型的可能會有case study問怎麼用ML處理某個問題,也會有快問快答式問的觀念和數學理論,而RecSys、NLP、CV又都很不一樣;偏向MLOps會問怎麼讓模型上線、上線後怎麼監控和維護、CI/CD等等。所以除非是某個領域的大牛,只針對個人興趣和經驗投缺,不然要準備的東西可以涵蓋coding, statistics, ML/DL models, MLOps,相當累人。
目標感
最後這個跟公司所處的階段很有關係,只針對我的情況。
簡單來說,我們公司還在偏向用戶成長的階段,更著重在開發新功能和產品,而不是怎麼優化現有的功能。因此就遇過當初上層想要做某個模型,但做好之後有其他更重要的需求,所以就不了了之。這種事情發生一次兩次之後,我會覺得不知道自己在做什麼,可有可無、沒有目標感。但也有同事覺得過程是自己喜歡的,最後怎麼樣我們無法控制,做喜歡的事又有薪水就好啦。
(最近聽前組員說,現在開始有一些被重視的專案可以做了,替他們感到開心。)
工作內容的改變
列了5個進後端組比較大的差異:
- 程式語言:最直接的不同,現在幾乎不寫Python,都是用Go。
- API:產品組後端應該都會遇到的東西,進組第一個任務就是開一個API給內部工具使用。
- Kubernetes (k8s):以前infra主要還是data pipeline、data/feature storage、model management,沒有太多碰k8s的機會。換組後剛好遇到一個全新的service,從無到有佈署了一次。
- 跨組合作:畢竟是在產品組,所以新功能會同時需要跟前端合作,了解彼此的時程、定好contract、討論什麼東西會block對方要先處理等等;比較大的功能發布時,也會需要跟marketing、businsess system保持溝通,確保同步上線。
- Design:以前在ML組系統沒那麼複雜,要做一個改動可能就是某個service裡的某一個模型。但在後端組,一個功能會牽涉到多個services,比如之前有個Auto Trial Start專案,就是當用戶註冊我們的硬體裝置,比如智能攝影機,用戶可以不用填寫信用卡資訊,直接獲得兩個月的軟體服務適用期,這裡牽涉的services就包括訂閱管理、系統監控、通知推送等等。
以上紀錄一下,目前很滿意轉成後端工程師,更廣泛的了解整個系統怎麼運作,自己能做的事情又更多了。
如果有在思考要不要跨入MLE、或想從DS/MLE轉走的朋友,還是得說不同公司、不同組的差異很大,多聽聽各方意見再做決定吧。