- 軟件研發行業創新實戰案例解析
- 茹炳晟主編
- 964字
- 2023-11-17 17:09:56
1.4 軟件研發的復雜度從何而來
軟件系統很難一開始就做出完美的設計,只能通過功能模塊的衍生迭代讓軟件系統逐步成型,然后隨著需求的增加再讓功能模塊進行衍生迭代,因此本質上軟件是一點點生長出來的,其間就伴隨著復雜度的不斷累積。
是的,你沒有聽錯,軟件是生長出來的,而不是設計出來的,如圖1-3所示。

圖1-3 軟件生長示意圖
無論看起來多么復雜的軟件系統,都要從第一行代碼開始,都要從幾個核心模塊開始,這時的架構只是一個少量程序員就可以維護的簡單組成。
那么,你可能要問:軟件架構師是做什么的?難道他們不是軟件的設計者嗎?其實,軟件架構師只能搭建軟件的骨架,至于最終的軟件會長成什么樣子,他們也很難知道。
軟件架構師和建筑架構師有著巨大的差異。
只要建筑圖紙設計好了,材料、人力、工期和進度基本就能確定,而且設計變更往往只發生在設計圖紙階段。也就是說,建筑架構的設計和生產活動是可以分開的。
軟件的特殊性在于,“設計活動”與“制造活動”彼此交融,你中有我,我中有你,無法分開,軟件架構只能在實現過程中不斷迭代,因此復雜度一直在不斷積累。
另外,建筑架構師不會輕易給一個蓋好的高樓增加陽臺,但是軟件架構師卻經常在做類似這樣的事,并且總有人會對你說,“這個需求很簡單,往外擴建一些就行了”。這確實不復雜,但我們面臨的真實場景往往是:沒人知道擴建陽臺后原來的樓會不會開裂,甚至倒塌。
《從工業化到城市化》這本書中提出了一個很有洞見的觀點:“工業是無機體,可以批量復制,而城市是有機體,只能慢慢生長”。
“工業化可以被看作一個‘復制’的過程。可以想象一下復印店里的復印機,只要有機器、有原件、有紙和墨,就能開始一張張地復印,速度是非常快的。工業化也是類似的,有了技術、資金、勞動力這幾個條件,就可以進行大規模的工業生產。但是城市化就不是一個能快速‘復制’的過程,而是一個需要‘生長發育’的過程。城市不僅是鋼筋水泥、道路橋梁,更是一套復雜的網絡,城市中的生活設施、消費習慣、風土人情等,這些都需要一定的生長時間。”
筆者認為建筑架構更像是工業化的無機體,可以非常規整,而軟件架構更像是發展中的城市,需要時間的洗禮,其復雜度和不確定性特別高。因此,維護大型軟件的關鍵是控制復雜度。
注意,我們能做的只是延緩復雜度的聚集速度,無法完全杜絕復雜度的提升。為此,我們要深刻理解軟件的復雜度。