AppWorks School — System Design Class 參加回顧

Charlie | 查理
Aiworks
Published in
May 11, 2022
為期 8 週的系統設計課程最後 1 週大合照(照片提供:AppWorks School)

2022年3月,在準備到新公司報到的前幾天,老闆發來一個連結,說有個課程可以上,看看我有沒有興趣;前幾個月都在準備面試,一看到 System Design 這個關鍵字,又想說公司會出錢就不疑有他(?)的直接回覆報名,開始了這個有點奇幻的八週課程。

身為一個同時有兩份新工作要上手,還得顧小孩、推艾爾登法環的進度(?)的略有一點忙的平凡人類,拿所剩無幾的下班時間去參加課程看起來真不是個聰明的決定。

但結束之後回頭看,這次的課程耗用很少的資源,換來很大量的知識,我覺得這八個晚上的時間花得很值得。

對 AppWorks School 這個名字,我最有印象的是它們的轉職班,比起外面各種同質機構動輒上萬元的學費,免費上課再送媒合,好得跟詐騙一樣。這次趁機會也跟校長詢問了這些免費培訓背後的細節,絕對會介紹有動機的朋友去報名。

這次上課的模式也跟相仿:只需要繳交保證金、如果課程有到、作業完成,會在期末全額退還,也不用打卡按讚,一樣是佛心來的。

誰適合來上?

個人的開發經驗約四年,對 System Design 的理解僅止於書本及網路知識(還有面試準備),沒有實戰經驗,可說是個設計菜鳥。所以課程中不少觀念都是全新沒聽說過的。

考慮軟體工程的知識量之大,變化之快,作不同需求的系統也會有全然不同的考量點。我認為只要時間允許就可以參加,不會虧。

課程內容是什麼?

System Design Class 似乎是 AppWorks School 的新嘗試,這次有約 35 個學員,其中有約一半的校友,也就是透過 AppWorks School 培訓並就職成功的工程師,所以第一天碰面看起來有點像同學會。

原本怕下班已經沒什麼精力了,要在室內聽課會睡著,不過講師 Arthur 將節奏及內容深度都掌握的很好,帶我平安清醒的度過了每週三的晚上。怕會太無聊打瞌睡的朋友不用擔心。

這次課程共有八週,大綱如下:

  • System Design 基本概念介紹
  • Scalable System 的常見議題 (學員分享)
  • 經典設計案例分享:Facebook’s Newsfeed
  • 業界專家分享 –大型軟體開發 實務與管理
  • 文本相關系統深入探討:關鍵字輸入提示、全文搜索、模糊搜尋(學員分享)
  • 地圖相關系統深入探討:以 Yelp & Uber為例
  • 業界專家分享 — Domain Driven Design
  • 期末專題(學員分享)

可以看到其中有三週是讓學員報告作業、兩週邀請業界工程師來分享,由講師直接講的課程有三堂,每週沒有很強的連續性,講不同的主題。

我個人從第一堂課「System Design基本概念介紹 」的基本系統「短網址」開始,就學到了很多,節錄一部份的課堂簡報:

流量預計有多大 ?
假設每月寫入 500M 新 url 、寫與讀的比率為 1:100 ,那讀的 QPS 是多少? 需要多少硬碟?

DB 選擇

  • 資料量達到數十億筆
  • 每筆資料都很小
  • 資料間沒有關聯
  • 讀比寫重很多

Encoding 考量點

  • Key 的合適長度?
  • 撞 Key 如何處理?

這些問題寫出來粗淺的有點好笑,不過在個人待過的幾個團隊裡嘗試將專案描述的這麼清楚的次數趨近於零,遺憾的是當時的我也沒有要提出這些問題的認知。

跟看書相仿,有時候短短的一個名詞或一個概念就足以產生重大的改變。個人的習慣是把聽到有興趣的關鍵字記下來,再找有餘裕的時間拿關鍵字去餵 Google ,順著爬下去就可以學到不少新東西。

這次比較可惜的是,大部份的學員分享都是採自願參加的,我因為時間因素,沒有積極要求上台報告。否則將自己的經驗整理輸出給其他人,講者可以學得比聽者更多。

軟體工程的博大精深,兩個小時的課程內是不可能講到多詳細的,重點在於拓展視野,將「未知的未知」變成「已知的未知」;就算還沒學會絕世武功,先讀過絕世武功的目錄也是很不錯的。

AppWorks School System Design 課程介紹可參考:

https://bit.ly/3LgE9iv

最新一期軟體工程師培訓營招生資訊可參考:

https://bit.ly/3Nh1e65

--

--