系統設計時不要沒來由就開始估算

2024年6月11日

💎 加入 E+ 成長計畫 與超過 400+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

在一些坊間的系統設計教材中,會提到當了解完系統需求後,要進一步做系統流量的估算 (俗稱 back-of-envelop estimation)。然而,強烈推薦不要沒來由就做這件事

在系統設計面試中,如果你估算的東西,對關鍵設計的判斷一點幫助都沒有,跳下去做估算,很可能是白白浪費自己的時間。例如你花了五分鐘估算,然後估算出來的數字在接下來的設計都沒有提到怎麼用,那等於白白浪費那五分鐘在做沒幫助的事情,這反而會是負面訊號。

當談到估算,就不能不提 Google 的頂點工程師 Jeff Dean,他是何許人也?

Jeff Dean 是傳奇軟體工程師,也是 Google 唯二到達 L11 的工程師。有興趣了解其故事的人,非常推薦紐約客雜誌多年前寫的《The Friendship That Made Google Huge》一文。

Jeff Dean 在 2010 年時,在史丹佛大學給的經典演講《Building Software Systems At Google and Lessons Learne》

Building Software Systems At Google and Lessons Learne
Building Software Systems At Google and Lessons Learne

在該演講中,Jeff Dean 問台下的聽眾 「給定一個問題,有許多不同的解決方案,我們要如何判斷哪個是最好的?」

關於這個問題,要能夠做判斷,就會需要有相對應的衡量指標。更理想的狀況,是在實際建造系統前,就有辦法作判斷,才不會花大量成本後才能判斷。那麼,要如何才能在建造系統前就判斷呢? 這時就需要有估算的能力。

Jeff Dean 給了一個具體的例子:當今天有兩種讀圖片的設計,一個是串行 (serial),一個是併行 (parallel),要如何快速判斷哪一種設計比較好? 使用估算,Jeff Dean 在短短不到一分鐘就能做出有效的判斷。

如果用串行,給定從磁盤讀一個 256 KB 的圖片需要 10 毫秒,如果讀三十張圖片,就會需要約 560 毫秒。560 是來自 30 張圖 x 10 ms/每張圖 + 30 x 256K / 30 MB /每秒 (後面這個是網路傳輸時間)。

然而,如果是併行,則只需用 18 毫秒,因為 10 ms/每張圖 + 256K read / 30 MB/每秒 = 18ms。

從上面的例子,可以看到當你使用估算,將能迅速判斷哪種設計比較好。這種時候才該做估算。

在大致了解完估算能帶來的幫助後,你可能會問所以具體在面試中,什麼時候該用? 以及可以如何一步步拆解做好估算?

如果你想更深入了解,歡迎閱讀 E+ 這週的主題文,我們完整講解如何在工作上、面試中做好估算這件事,讓你不會白花時間、不會做了估算反而傳給面試官負面訊號。

E+ 的詳細介紹可以看這邊 https://www.explainthis.io/zh-hant/e-plus

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們