今日再談談軟件開發人員如何提高架構設計能力。對軟件開發而言,一般3年是一道坎,3年的編碼基本上可以逐步做出初步的設計,3年的設計基本上可以具備架構設計的能力。盡管架構設計是高屋建瓴,從頂向下對問題區域進行分解,最終解決,但你會看到,真正的能力都來自于你的日常編碼,日常功能模塊設計的大量實踐積累。
當然,大多數軟件開發人員即使編碼多年,也很難有設計能力,這也是設計思維意識的轉變。例如,在前面文章中提到的編程階段,你應該有自動化和復用思維,在設計階段,你應該有分層、分解、抽象、聚合等思維能力。
軟件開發中的設計能力是什么?
就軟件開發和編碼而言,我在前面的文章中已經提到過,簡單來說就是數據結構+算法,那么你是否對常用的數據結構和算法都很清楚,有設計能力?
很明顯,答案是否定的。
最基本的設計能力是當你面對問題領域時,你知道用什么樣的數據結構或算法來解決這個問題。這是最基本的設計能力。
例如一條路徑搜索問題,別人告訴你用二叉樹模型和算法來解決,你去編碼實現了,那么就具備了編碼能力。但可以自己分析和建模問題,最終得出二叉樹算法效率最高,最終實現,然后具備設計能力。
因此,設計能力的難點在于,當你面對問題時,你可以快速分析,找到最合適的數據結構和算法來解決。這就是設計能力。
從設計能力到結構設計能力有什么區別?
簡言之,架構設計則站得更高,你面臨的是一個完整的業務系統建設。該業務系統本身包括底層技術平臺的構建、開源組件的選擇、開發框架和分層設計等非功能設計內容。與此同時,它也包括了整個業務需求的到來,你如何進行分而治之。
將整體需求分解為幾個子系統或模塊,這些模塊本身聚集了哪些功能,暴露了哪些接口,模塊之間如何協作才能完成完整的業務。如何分解才能保證分解后的組件高度聚集、松耦合、高度自主,最終通過界面集成完成整個業務。
分解后的內容可以分配給不同的設計或開發人員進行詳細的設計和開發。同時,你可以拍拍胸部,按照我的要求設計模塊和界面。我可以確保每個模塊最終都可以組裝。
因此,結構層面涉及兩個關鍵方面。
首先,你可以從零開始構建一個完整的開發或技術框架,制定分層設計,界面設計原則,規劃共同的技術平臺和組件,制定總體的開發標準和流程等等。
第二,你還需要了解體業務,了解完整的業務,才能做好系統分解和分解后的整合。我認為分解、整合和抽象總是架構設計的關鍵能力。
了解以上內容后,回頭看看
例如,您可能會認為您熟悉Redis、Kafka、SpingBoot等各種開源軟件或框架,這并不意味著您具備設計能力。但如果你清楚地知道在面對某個場景時,到底是應該使用緩存,還是應該使用消息中間件事件機制,那么你就具備了設計能力。
例如,你可能認為你已經詳細學習了常見的設計模式,并不意味著你有設計能力你遇到某個場景時,你知道應該使用什么樣的設計模型來解決它。這叫做設計能力。
因此,培養設計能力有兩種方法
首先,你做了大量的編碼,在整個過程中走了彎路,你發現需要抽象或復用,才能提高你的開發效率,也讓軟件具有可擴展性,你只要懂得這種反思和復盤,就一定能提高你的設計能力。假如您在開發過程中做了大量的粘貼、復制動作,而且沒有觸發您的思考,那么顯然很難培養您的設計能力。
設計能力往往始于編碼和編程思維
第一,自動去除重復的東西,第二,通過參數抽象把類似的東西變成可重復使用的方法或函數,在抽象之后實現自動化。第二,自動化之后,你會發現如何更好地應對變化,為了應對變化,你做了更多的抽象或界面設計,在這個過程中逐漸積累設計能力。這個步驟你會發現你的問題是某個設計模式來解決的。
二是編碼積累到一定數量后,可以閱讀軟件架構設計的書籍,首先形成設計的完整思路和方法論,也可以閱讀設計模式的書籍,對設計模式有一個完整的了解,可以比較分析日常編碼實踐的內容和設計模式。這樣遇到類似的問題,可以少走自己探索的彎路。
但以上也只解決了設計能力問題
沒有解決結構思維水平的問題,結構思維的核心是全球能力,是高抽象和建模能力,明確業務,理解技術的相互聯系能力。
當然,大多數架構設計師更熱衷于開發框架、技術平臺、開源組件選擇等。,而忽略了如何從一個業務需求中提出來。通過系統分析,你可以知道整個業務系統應該如何劃分模塊,如何設計界面,如何設計整個數據模型和數據庫來支持業務。同時,你也可以思考你需要遵循什么樣的開發框架和模式,分層架構思完成某個功能模塊的開發。
這件事實際上難,大多數人都沒有這種能力。
但為什么很多人的結構設計還是做得很好,簡單來說,整個信息化和因特網發展到今天,各種業務系統、電商平臺、因特網應用你基本上都能找到類似的結構參考和原型,你只需參考別人的做法就可以了。
例如,如果你想成為一個電子商務平臺,你應該如何分解每個子系統,或者你是否建立每個中間能力中心,這些都是標準的方法。你不需要創新。你只需要參考別人的實踐來做。
但如果你面對一項全新的業務,你就要去規劃和構建整個業務系統的結構設計,模塊劃分,我相信大多數結構設計師都不能做到這一點。這一能力已不再是簡單的你技術多牛,而是考察全局思維和系統觀,考察的是分解與集成、分類與抽象、問題分析與解決、模式匹配、這些能力,統籌我常說的思維能力。
如果一個人真的有能力獨立分析和解決問題,有系統思維,你會發現他不僅做好了結構設計,還做了很多其他的事情。就是這個道理。
因此,為了具備這方面的能力,您可以首先熟悉相關的業務領域知識,或者查看與目標相似的完整軟件架構設計書籍,領域驅動建模書籍,傳統的RUP統一軟件過程方法論等等。看一看完整的業務需求是如何通過流程分析、用例建模、對象建模、界面設計逐漸落地的。
請注意,在這一過程中,像UML這樣的建模設計語言是很好的輔助,但核心這些建模工具或語言也只是幫助你抽象或形式化地表達你的內容,整個建模的核心還是系統分析思路。這一點始于原始需求輸入,如何逐步形成一個完整的構架設計思路,才是關鍵。