官术网_书友最值得收藏!

1.4 軟件研發的復雜度從何而來

軟件系統很難一開始就做出完美的設計,只能通過功能模塊的衍生迭代讓軟件系統逐步成型,然后隨著需求的增加再讓功能模塊進行衍生迭代,因此本質上軟件是一點點生長出來的,其間就伴隨著復雜度的不斷累積。

是的,你沒有聽錯,軟件是生長出來的,而不是設計出來的,如圖1-3所示。

圖1-3 軟件生長示意圖

無論看起來多么復雜的軟件系統,都要從第一行代碼開始,都要從幾個核心模塊開始,這時的架構只是一個少量程序員就可以維護的簡單組成。

那么,你可能要問:軟件架構師是做什么的?難道他們不是軟件的設計者嗎?其實,軟件架構師只能搭建軟件的骨架,至于最終的軟件會長成什么樣子,他們也很難知道。

軟件架構師和建筑架構師有著巨大的差異。

只要建筑圖紙設計好了,材料、人力、工期和進度基本就能確定,而且設計變更往往只發生在設計圖紙階段。也就是說,建筑架構的設計和生產活動是可以分開的。

軟件的特殊性在于,“設計活動”與“制造活動”彼此交融,你中有我,我中有你,無法分開,軟件架構只能在實現過程中不斷迭代,因此復雜度一直在不斷積累。

另外,建筑架構師不會輕易給一個蓋好的高樓增加陽臺,但是軟件架構師卻經常在做類似這樣的事,并且總有人會對你說,“這個需求很簡單,往外擴建一些就行了”。這確實不復雜,但我們面臨的真實場景往往是:沒人知道擴建陽臺后原來的樓會不會開裂,甚至倒塌。

《從工業化到城市化》這本書中提出了一個很有洞見的觀點:“工業是無機體,可以批量復制,而城市是有機體,只能慢慢生長”。

“工業化可以被看作一個‘復制’的過程。可以想象一下復印店里的復印機,只要有機器、有原件、有紙和墨,就能開始一張張地復印,速度是非常快的。工業化也是類似的,有了技術、資金、勞動力這幾個條件,就可以進行大規模的工業生產。但是城市化就不是一個能快速‘復制’的過程,而是一個需要‘生長發育’的過程。城市不僅是鋼筋水泥、道路橋梁,更是一套復雜的網絡,城市中的生活設施、消費習慣、風土人情等,這些都需要一定的生長時間。”

筆者認為建筑架構更像是工業化的無機體,可以非常規整,而軟件架構更像是發展中的城市,需要時間的洗禮,其復雜度和不確定性特別高。因此,維護大型軟件的關鍵是控制復雜度。

注意,我們能做的只是延緩復雜度的聚集速度,無法完全杜絕復雜度的提升。為此,我們要深刻理解軟件的復雜度。

主站蜘蛛池模板: 宁德市| 水富县| 深州市| 神木县| 云龙县| 龙岩市| 青川县| 武汉市| 平阳县| 平原县| 长乐市| 会昌县| 全州县| 盘山县| 浮梁县| 上高县| 吉水县| 霍城县| 宣化县| 剑阁县| 阿图什市| 浦江县| 甘孜县| 出国| 剑河县| 成武县| 和硕县| 阜宁县| 金堂县| 海兴县| 兴和县| 南雄市| 翼城县| 中方县| 永仁县| 博客| 黑水县| 贵阳市| 玛曲县| 肇源县| 翁牛特旗|