【系統設計觀念理解 #1】什麼是系統設計?

整理系統設計這類「模糊需求」題型的觀念:為什麼工程答案都是取捨的結果,以及開場最關鍵的一步「對標問題」,把需求對齊了再談技術。

前言

系統設計在越資深的職位通常都會被當作是獨立的考點,
有業界經驗的工程師,基本上都多少接觸過系統設計的問題。
只是通常都是在接觸層(碰到一個問題解一個問題),
拿來當面試考點時,如果只憑印象也不是說回答不出來,
但就會很像是問一題回一題那種答法,聽起來容易顯得零散、拖泥帶水,
因此這邊想來個系統性的整理。


題型定義

系統設計這類題目通常都會有一個特性,「模糊需求」。
有在職場待過其實一定都有碰過,經常都會收到「一個不明確的需求,只知道要達到什麼目標。」
這其實就是把這類問題應用於面試,考驗的是短時間能不能講出一套有系統的解決路徑。

不同於實際在職場可以慢慢分析問題,
面試沒有那麼多時間,因此快速切入重點就是回答好這類問題的訣竅。

心法

所謂的工程問題,並非非黑即白只有唯一答案,
不同於一般的考試,很多工程上的答案都是取捨 (trade-off) 的結果。

例如:我們在解客戶的各種需求時,經常會遇到「速度/精準度/空間」的取捨,這個問題沒有絕對的答案,
都需要去反問面試官,以這個問題來說速度重要?還是精準度更重要?
像 LeetCode 經典的 2 Sum 問題,就存在用 Hash Table 以空間換取時間,
如果空間不允許,那就必須要用更多的時間去換空間使用。


解題入門 - 對標問題

首先,確認問題的理解,是最重要的,
初入職場時我也犯過類似的錯誤,對方說了某需求,自己「以為」自己已經理解了問題,
然後就開做,最後發現不是對方要的。

如果面試時急著回答,最後對方發現完全不是他要的,那這題就掰了。

因此,不論自己再怎麼理解對方可能想要的東西是什麼,「對標問題」絕對是解題第一步。

「對標問題」的技巧:用自己的話複述對方的說法一次,如果對方也說沒錯,那就對了。

反之,如果複述的過程,對方覺得你理解問題有誤,他會即時更正你,這時也不用慌,這正是在對的路上,
因為很多真實場景中,客戶其實也不一定能明確敘述他要的是什麼
(就像「客戶語言」與「工程上的專業語言」本身就會存在一些誤差)
這種對齊需求,是所有後續技術回答前的關鍵步驟。

對齊需求是第一步,也是最重要的一步;後續篇章再往下走粗估與細部設計。

使用 Hugo 建立
主題 StackJimmy 設計