軟體開發人員如何提升自己的架構設計能力?

qing_yun發表於2023-01-06

今天再談下軟體開發人員如何提升自己的架構設計能力。對於軟體開發來說,一般3年時間是一道坎,編碼3年基本可以逐步做出初步的設計,再做設計3年基本能夠具備架構設計的能力。架構設計雖然高屋建瓴,從頂朝下對問題域進行分解並最終解決,但是你會看到真正所有的能力卻是來源於你日常編碼,日常功能模組設計大量實踐的積累。

當然大部分軟體開發人員即使編碼多年也很難具備設計能力,這裡面還有一個設計思維意識的轉變。比如前面文章裡面談到的程式設計階段你要有自動化和複用思維,到了設計階段要有分層,分解,抽象,聚合等思維能力。

什麼是軟體開發裡面的設計能力?

對於軟體開發和編碼來說,我在前面文章已經談到過,簡單來說就是資料結構+演算法,那麼是否你對常用的資料結構和演算法都清楚了,就具備了設計能力?

顯然答案是否定的。

最基本的設計能力是當你面對問題域的時候,你知道採用什麼樣的資料結構或什麼樣的演算法去解決這個問題。這就是最基本的設計能力。

比如一個路徑搜尋問題,別人告訴你了採用二叉樹模型和演算法來解決,你去編碼實現出來,那麼具備編碼能力。但是你自己能夠對問題進行分析和建模,最後得出二叉樹演算法效率最高,並最終實現,那麼具備設計能力。

所以設計能力的難點就在於面對問題域的時候你能夠快速地分析,並找到最合適的資料結構和演算法來解決。這個能力就是設計能力。

那麼從設計能力到架構設計能力差別又在哪裡?

簡單來說,架構設計則站的層次更高,你面對的是一個完整的業務系統的構建。這個業務系統本身包括了底層技術平臺的搭建,開源元件的選擇,開發框架和分層設計這些非功能性的設計內容。同時又包括了整個業務需求過來,你如何進行分而治之。

即將整體的需求應該分解為幾個子系統或模組,這些模組本身內聚哪些功能,暴露哪些介面,模組間如何協同才能夠完成完整的業務。你如何分解才能夠確保分解處理的元件高內聚,松耦合,高度自治又能夠透過介面整合,最終完成整體業務。

分解完成的內容又能夠分配給不同的設計或開發人員去做詳細設計和開發,同時你能夠拍著胸脯收你按著我的要求進行模組和介面設計,我能夠確保最終各個模組能夠組裝起來。

所以到了架構層面涉及到兩個方面關鍵。

其一是你可能從頭搭建一個完整的開發或技術框架,制定分層設計,介面設計原則,規劃共性的技術平臺和元件,制定整體的開發標準和開發流程等。

其二是你還需要懂全域性業務,清楚完整的業務你才能夠做好系統的分解,分解後的整合。分解,整合和抽象能力我認為始終是架構設計的一個關鍵能力。

當了解清楚以上內容後,再回頭來看下。

比如你可能認為你類似Redis,Kafka,SpingBoot等各種開源軟體或框架都很熟悉,這不代表你具備設計能力。但是如果你清楚面對某一個場景的時候,究竟應該是採用快取實現,還是採用訊息中介軟體事件機制實現,那麼就具備設計能力。

再比如你可能覺得常見的設計模式你詳細做了學習,都很熟悉,那也不代表你具備設計能力,而你知道遇到某一個場景的時候應該採用哪種設計模型來解決,這個才叫設計能力。

所以設計能力的培養實際兩個方式。

其一就是你做了大量的編碼,在整個過程中走了彎路,你發現需要抽象或複用,才能夠提升你的開發效率,也讓軟體具備擴充套件性,你只要懂得這個反思和覆盤,那麼一定是能夠提升自己的設計能力。如果你開發過程中做大量的貼上,複製動作,也沒有觸發你思考,那麼顯然很難培養你的設計能力。

設計能力往往就是從編碼和程式設計思維開始的。

首先是將重複的東西自動化掉,其次是將相似的東西透過引數抽象變成可複用的方法或函式,在抽象後來實現自動化。其次就是自動化後你會發現如何更好應對變化,為了應對變化你做了更多的抽象或介面設計,在這個過程中逐步積累設計能力。這一個步驟你會發現你的就是某種設計模式來解決的問題。

其二就是編碼積累到一定量後,你可以看軟體架構設計的書籍,先形成設計的完整思路和方法論,也可以看設計模式類的書籍,對設計模式有一個完整的瞭解,能夠將日常編碼實踐的內容和設計模式進行對比分析。這樣再遇到類似的問題,你可以少走自己探索的彎路等。

但是以上也僅僅解決了設計能力的問題。

沒有解決架構思維層面的問題,架構思維的核心是全域性能力,是高度的抽象和建模能力,是既要清楚業務,又要懂得技術的相互銜接能力。

當然大部分架構設計人員更加熱衷於開發框架,技術平臺,開源元件選擇等,而忽視瞭如何從一個業務需求的提出,你能夠透過系統分析,得出整個業務系統應該如何劃分模組,如何設計介面,如何設計整體資料模型和資料庫來支撐業務,同時你也能夠想清楚你需要遵循什麼樣的開發框架和模式,分層架構思路開完成某一個功能模組的開發。

這個事情實際相當有難度,大部分人員不具備這個能力。

但是為何很多人架構設計還是做得不錯,簡單來說整個資訊化和網際網路發展到今天,各種業務系統,電商平臺,網際網路應用你基本都可以找到類似的架構參考和原型,你只需要參考別人的做法去做即可。

比如你要做一個電商平臺,具體應該如何分解各個子系統,或者是否建立各個中臺能力中心,這些都有標準的做法,不需要你再去創新,你只需要參考別人實踐去做即可。

但是如果你面對一個全新業務,你要去規劃和構建整個業務系統的架構設計,模組劃分,我相信大部分架構設計人員都無法做好這件事情。這個能力已經不是簡單的你技術多牛,而是考察的全域性思維和系統觀,考察的是分解和整合,分類和抽象,問題分析和解決,模式匹配能力,這些能力統籌我經常談到的思維能力。

如果一個人真正具備這種獨立分析和解決問題的能力,具備系統思維的能力,你會發現他不僅架構設計做得好,其它很多事情都能夠很好的完成。就是這個道理。

所以要具備這方面的能力,你可以先熟悉相關的業務域知識,也可以看看完整的類似物件導向的軟體架構設計書籍,領域驅動建模書籍,傳統的類似RUP統一軟體過程方法論等。看看完整的業務需求如何透過流程分析,用例建模,物件建模,介面設計逐步落地。

注意在這個過程中類似UML等建模設計語言是很好的輔助,但是核心這些建模工具或語言也僅僅是幫助你抽象或形式化表達你的內容,整個建模的核心還是系統分析思路。這個從原始需求輸入開始,如何一步步的形成一個完整的架構設計方案思路,才是最關鍵內容。

來自 “ 人月聊IT ”, 原文作者:何明璐;原文連結:https://mp.weixin.qq.com/s/CZvSQtQ7Op9G4iro2cZKlQ,如有侵權,請聯絡管理員刪除。

相關文章