一個成熟的軟件是一個復雜的系統(tǒng)繁扎,當我是一個新手的時候,我以為它像一座建筑,按照既定的圖紙開發(fā)出來∈崦担現(xiàn)在我更深的體會是爹梁,它更像一棵樹,是逐漸成長起來的提澎。事實上姚垃,世界上最復雜的軟件,它的復雜度都遠遠不如一棵樹盼忌。
- 層次結(jié)構(gòu)(分離關(guān)注)
從宏觀意義上來說积糯,一棵樹有花朵、葉子谦纱、樹干看成、樹根等結(jié)構(gòu),而具體到花朵又有花冠跨嘉、花萼川慌、花蕾等結(jié)構(gòu),更微觀上祠乃,每個植物細胞都有細胞壁梦重、細胞核、細胞液亮瓷、葉綠體等結(jié)構(gòu)琴拧。任何復雜的系統(tǒng)都有可分解的層次結(jié)構(gòu),我們要考察這個系統(tǒng)的某個特性的時候嘱支,要在合適的層次上進行研究——這也就是“分離關(guān)注”蚓胸。例如我們要解釋植物是如何合成植物蛋白的,可以這樣解釋:
樹根從土壤中吸取水分和微量元素斗塘,經(jīng)過樹干輸送到樹冠的葉子赢织,葉子吸收二氧化碳,通過光合作用合成植物蛋白馍盟。
接著如果要考察葉子如何進行光合作用于置,就要從葉子的植物細胞的葉綠體,細胞液贞岭,細胞核等不同組成部分的功能和相互之間的交互來解釋八毯。
同樣的從宏觀上考察軟件作為一個系統(tǒng),完成某個功能的時候瞄桨,可以從不同層次(樹根话速、樹干、葉子)之間不同形式的數(shù)據(jù)(水芯侥、微量元素泊交、二氧化碳)是如何傳遞轉(zhuǎn)化的來解釋乳讥。之后就要深入到了解某一個層次的組件是如何完成交互來完成某一子功能。
- 自律性個體
僅僅拿一個植物細胞來考察廓俭,就會發(fā)現(xiàn)你很難不把它認為是一個自律性的生命個體云石。作為細胞群中的一員,它和其他細胞不斷的交換物質(zhì)研乒,同時它有自己的化學趨向(趨水汹忠、趨光)。根部向水生長雹熬,樹冠朝向陽處生長宽菜,這些宏觀的行為,并不是給每一個細胞發(fā)送指令竿报,而是它們自發(fā)性行為的整體表現(xiàn)铅乡。而所謂的自律性,首先要定義個體對哪些刺激敏感而會有哪些產(chǎn)物烈菌,例如葉綠體在光線刺激下會通過光合作用合成相應(yīng)的化學物質(zhì)隆判,而這種化學物質(zhì)又作為植物細胞的刺激輸入而有新的化學物質(zhì)產(chǎn)生。這些簡單的規(guī)則定義之后僧界,就會在整體上表現(xiàn)出統(tǒng)一的規(guī)律。這也是軟件開發(fā)從面向過程到面向?qū)ο筠D(zhuǎn)變的本質(zhì)臭挽,也就是消息驅(qū)動的設(shè)計模式捂襟。
- 共同模式
在植物結(jié)構(gòu)層次的各個部分之中,有著大量相同的特點欢峰。樹根或者樹葉葬荷,基本的組成單元是細胞,它們的結(jié)構(gòu)是類似的纽帖,雖然存在是否含有葉綠體這個顯著區(qū)別宠漩,而且其細胞液的化學成分不同。這是因為細胞的基礎(chǔ)結(jié)構(gòu)提供了一系列基礎(chǔ)功能懊直,例如細胞壁提供了支撐和保護功能扒吁,細胞液提供了物質(zhì)交互的場所,諸如此類室囊,大自然遵守著軟件開發(fā)的“DRY”原則雕崩,用組合(加一個葉綠體提供光合作用)或者繼承(細胞壁有不透水的也有半透膜)的方式,做了一個復雜系統(tǒng)的經(jīng)濟表述融撞。
理論物理學家認為盼铁,宇宙只存在四種基本的作用力:重力、電磁力尝偎、強相互作用力和弱相互作用力饶火。宇宙通過這四種基本力又組成了恒星鹏控、行星、衛(wèi)星等在宏觀層次上大量復用的共同模式肤寝。在面向?qū)ο蟮能浖到y(tǒng)中当辐,對象與對象只存在三種基本的關(guān)系:組合、繼承和相關(guān)醒陆。通過這三種基本關(guān)系瀑构,又可以識別出多種設(shè)計模式。
- 穩(wěn)定的中間形式
復雜系統(tǒng)毫無例外都是從能工作的簡單系統(tǒng)演變而來的......從頭設(shè)計的復雜系統(tǒng)根本不能工作刨摩,也不能通過打補丁的方式使其工作寺晌,必須從頭開始,從能工作的簡單系統(tǒng)開始澡刹。
一顆種子成長為一棵樹呻征,要經(jīng)過幾個穩(wěn)定的中間形式。種子的胚胎已經(jīng)簡單卻分明的層次罢浇,其中有一些會發(fā)育成熟為其他的姿態(tài)陆赋,有一些會完成歷史使命而消失,還有一些模塊嚷闭,例如花朵攒岛,是舊系統(tǒng)上全新產(chǎn)生的,但也是依賴于現(xiàn)有的穩(wěn)定的層次胞锰。生長環(huán)境會影響樹木發(fā)育的最終形態(tài)灾锯,這就像一個軟件系統(tǒng)開始成熟起來,而開發(fā)人員對其真實行為了解的越來越多嗅榕。