前陣子在分享的時候剛好提到了系統設計,這是大多數初級工程師開始提升職級之後會遇到的問題,也就是該如何去設計一個系統。
然而,這類型的知識通常都需要經驗累積才能夠逐步學會。同時也不是一種容易學會的技能,相比一些城市的技術、原理有實際案例可以參考,要學會去設計一個系統也複雜的很多,因此也不容易有文章或書籍討論。透過實踐學習
想要學習這項能力,最簡單的方式就是直接透過製作一些小專案實踐來學習。初級工程師大多會以「功能」為單位思考,因此我們在撰寫軟體的過程中很容易沒有考慮到「系統」層級的問題,而寫出「堪用」但有問題的程式。
當我們開始製作一些自己的小專案時,我們一開始會是一些破碎的功能構成,開始發展的時候就會逐漸發現這些功能很難「結合」在一起,這個時候就會開始關注如何讓每一個功能更好的整合在一起,就會逐漸構成「系統設計」的思考。
練習延續專案
如果有看過我的 GitHub 頁面,會發現上面有 200 多個 Repoistory 並且持續增加,然而在這十年之間我有持續更新的專案可能只有裡面的 5% 左右,這裡面最大的挑戰就是如何延續專案。
在上面約十年的累積中,從剛開始我只有持續維護數個月的專案到這幾年我開始能持續更新一個專案半年、一年之久,之所以能夠持續的增加維護的時間,正是因為在這個過程中逐漸對「系統設計」的熟練,因此我們能夠「有系統」的規劃我們的軟體。
從專案到產品
當我們能夠持續的維護一個專案較長的時間後,我們的專案也逐漸的網產品發展,畢竟要作為一個產品長期維護是一個不能避免的目標。
其實,我們不一定需要非常完美的系統設計才能做好一個產品。然而,如果我們有一個良好的系統設計、完善的開發體系,那麼會更容易擴充、調整產品進而增加產品的存活機率,我們也就更容易比別人更容易在競爭中存活下來。
我認為,系統設計難以學習的原因是需要累積大量的經驗。透過單純的工作並不容易快速累積,因此增加處理「系統」的經驗會更有用,這大概也是為什麼許多高手經常會有不少自己的小專案或者小實驗的原因,除了累積經驗外也能增加對系統設計這類技能的熟練度。
封面圖片使用 Unsplash 上 Hanna Morris 的作品,有想聽的主題可以透過匿名問卷告訴我,想了解專業的技術主題可以到弦而時習之找找靈感。





















