寫給學弟妹的科普:後端工程師、軟體工程師(上篇)

Adrian Hsu
7 min readFeb 4, 2024

--

後端工程師有非常非常多種,並不只 Web Programming 課學過的 Back-end 而已。通常 軟體工程師 或 General Software Engineer 都在做 Back-end。事實上, Back-end 佔絕大多數,Front-end 少一些。

Web / iOS / Android 則是 Client Software Engineer,是廣義的 Front-end,技能點跟 Back-end 不同。

這是本系列的第一篇,第二篇請點此:

源起

年初回台灣,與 10+ 位大三、大四的電機系學弟妹聊天,發現不少人對矽谷軟體業的理解有限:

  1. 我修過學校的 Web Programming 這門導論課,我學到 Software 分成 Front-end 與 Back-end。Front-end 是用戶看得到的,Back-end 是用戶看不到的
  2. 我在台灣的 ~10 人新創實習過,他們 Back-end 有兩人,各自負責哪些
  3. 我問身旁剛找到工作、入職場 0.5 年的學長姐,他們 scope 所及的 Back-end 開發

這些理解都沒錯,但有誤區 — — (1) 你覺得寫 Back-end 就是寫 Web、都在做 CRUD;以爲 Back-end 是 support 前端做產品、覺得 Back-end 跟產品無關 (2) 你新創的 Back-end 經驗,並不能推論中大型軟體公司的 Back-end (3) 你問的 Back-end 前輩本身深度與廣度不夠,能講的有限甚至乏味。

這讓部分學弟妹對軟體業失去興趣,尚未探索、就另尋出路。我覺得很可惜。

本篇主旨

於是,我想寫篇針對 Back-end 工程師的 Overview 給學弟妹,旨在了解中大型軟體公司的分工。我會以 Consumer-facing 的 Social Media 公司如 Twitter、LinkedIn、Pinterest、Snapchat、IG 為例。

  • 上篇:Social Media 公司的組織架構。一家軟體公司需要哪些工程部門?
  • 下篇:Back-end 工程師做什麼、需要什麼專業。深入討論每一種 Back-end 以及能趁在學時點的技能點

這篇文章無法套用於 Apple (hardware)、Salesforce (enterprise) 等大型公司。

我的背景

我在 X / Twitter 做 Software Engineer 滿三年。做的一直是 Recommendation System、社群媒體背後的演算法。簡單來說,你打開 app 所能看到的每一則 Tweets 是我們決定的。有興趣可以看官方的文章,記錄我們把推薦演算法完整開源:Twitter’s Recommendation Algorithm

我前兩年專注在 Back-end。近一年公司大幅精簡,我的 scope 延伸到 end-to-end 的推薦系統,開始做 ML,寫 PyTorch 訓練 Ranking Models 排序 Tweets 等等。我目前的組叫做 Core Product Team。

Social Media 公司的組織架構

當用戶在手機上點開 App,打開 IG / X 的動態時報,背後發生了什麼?

簡單來說,有一個 Request 會被 Front-end 接收,經過 REST API 送到 Back-end,然後 Back-end 做了非常非常多的事。在毫秒之間,回傳 Response 到 Front-end ,例如: 50 篇演算法猜你可能會喜歡的 Posts。

(Spoiler Alert:在《下篇》會舉例解釋 Back-end 實際上做了哪些事,敬請期待)

要了解這背後的黑魔法,我們應該先問:一家軟體公司 minimum 需要哪些工程部門、才能順利運行?我會用我熟悉的 Social Media 公司來舉例。

以下是我自己理解多間 Social Media Companies 組織架構,Generalized 後的 Mental Model,如有疏忽之處、請路過的前輩不吝指教,一起讓台灣 Software 人才更好。

我把 Back-end 切成三層,不同功能單位負責多個 Microservice (wiki) 並用 API 溝通。最上層是跟用戶直接有關的 Product、Trust and Safety 和 Ads。

  1. Product Infra: 用戶能直接體驗到的功能。 Facebook 的動態時報、IG 的 Stories、Reels、Notification、留言串、搜尋、還有背後的 Recommendations 演算法(我的組在這!)Messenger、Payment。還有 Media 相關,上傳或下載照片影片、直播、打電話等。
  2. Ads Infra: 每篇貼文之間、留言區、搜尋等,都會有廣告。像是 Pinterest 的 promoted pins 或者 IG 與 X 的廣告。
  3. Trust and Safety Infra: 通常是在 50 個 Posts 算出來的最後一步前,要過的一層層 Filter。確保用戶所看到的文章和對話,都是安全、合法、健康的。

第二層有三個基本功能單位,他們是 Internal platform 給內部員工使用的。

  1. Business Analytics Infra: 要決定 Product / Ads / T&S 方向,需要很好的商業洞見。不管是跑 SQL 或者做圖表、算統計迴歸、 online A/B testing,都需要有好的後端,使 Data Analyst、Data Scientist 或 UX Researcher 簡單操作大數據。
  2. ML Infra: 以用途來說,可分成 Training 與 Serving。ML Training 讓多位 MLE 能同時丟多個 ML Model 上去訓練; ML Serving 把訓練好的模型、丟進去 Product 裡面做 inference(例如 Tweet Ranking)。以目標來說,可分為 ML Compute 及 ML Ops。ML Compute 是用最少的資源、達到最快的速度。ML Ops 是搭建平台,讓 MLE 用最快的速度、最好的體驗進行實驗。
  3. Data Infra: 第一是資料分析方面,分為 Online (Stream) Processing 與 Offline (Batch) Processing。訓練 ML 模型、做 Business 資料分析,都要有 Data Pipeline 把它讀進來 → 做分散式運算處理 → 然後寫到分散式資料庫裡。第二是線上的 Observability Monitoring Tools,即時監測每台機器,不健康時 24/7 的 oncall 就會被通知。

第三層是最底層,第二與第三層的差異較難界定。

  1. Core Services: 如存放各類 Source-of-Truth,例如 Instagram 的 User / Post 的 Metadata,或朋友之間的 Follow Graph。前後端的溝通橋樑 RestAPI / GraphQL。DevOps 如 CI/CD 的 Jenkins、Build Tool 如 Gradle、版本控制 git 以及 code review tools;IDL 像是 gRPC,用戶 authentication 等。
  2. Security: 確保 User Privacy、資料都符合 DSA compliance,防止資安線上攻擊如 DDoS attack 等。
  3. Networking, Database, Cache, Hardware: 最底層的基石,掌管 IP 等網路設定,封包、資料存取,硬體與 Cluster 運作等。
  4. Command Center: 中控台,24 / 7 小時會有 SRE 輪班監測系統健康。出問題時,把流量導流到不同 Data Center 降低傷害,還有叫各組 oncall 救火。

看不懂沒關係,下篇有個舉例 (Life of a Web Request)會把這三層串起來。現在只需要知道架構圖上有哪些方塊就好。

這三層的每個單位,都有自己的 Front-end 與 Back-end。最上層的 Front-end 是給用戶用的,所以會有 Web/iOS/Android。二三層的 Front-end 是給內部員工用的。

越上面的層級越靠近產品,product leverage 較高、但 technical leverage 較低。越下面的層級則相反:影響到越多工程師,但不易被用戶或公司 leadership 看見。

點擊此看下篇

--

--

Adrian Hsu

Software engineer at X/Twitter@SF working on Recommendation System. Also an entrepreneur, enjoys financial analysis and cognitive/social psychology.