級(jí)列理論是分析學(xué)中常見的一個(gè)思維框架,我只是把它從我最熟悉的物理學(xué)中借用到軟件設(shè)計(jì)領(lǐng)域而已,
它本身并不是我所創(chuàng)造的一種概念(創(chuàng)造是艱難的)。在某些領(lǐng)域,這一分析框架可以表現(xiàn)出完美的數(shù)學(xué)特性,如時(shí)頻分析領(lǐng)域的小波分析(wavelet),
統(tǒng)計(jì)學(xué)習(xí)理論中的支持向量機(jī)(Support Vector Machine),
分子動(dòng)力學(xué)中的BBGKY級(jí)列等等。在其他一些領(lǐng)域它的精確性可能要弱很多,但其思想內(nèi)核是一致的.
級(jí)列理論的基本內(nèi)容如下:
http://canonical.blogdriver.com/canonical/562888.html
首先, 級(jí)列理論需要定義一個(gè)最一般的普遍模型, 但這并不意味著對(duì)系統(tǒng)的一種過分的限制. 實(shí)際上,
我們所討論的任何問題都有一個(gè)總體的框架限制, 它的作用只在于揭示出我們所研究的問題的基本要素并勾勒出一幅全景式的圖像.
最一般的情況與我們的求解能力的距離可以是非常遙遠(yuǎn)的,例如真正實(shí)作的時(shí)候在物理中往往我們只是研究一階或者二階情況。而在計(jì)算機(jī)領(lǐng)域也是存在著最一般的
模型的, 那就是Turing Machine. 在一般情況下, 我們是能夠建立一個(gè)足夠普遍的模型以囊括絕大多數(shù)變化可能的,
雖然我們極有可能沒有能力去求解這個(gè)模型.
對(duì)于系統(tǒng)的完備性, 物理學(xué)與數(shù)學(xué)的態(tài)度是有著深刻區(qū)別的.
在物理學(xué)中我們只需要在研究問題的范疇內(nèi)維持概念的穩(wěn)定性即可, 這往往意味很多簡(jiǎn)化與隱含條件,并不是一種終極的完備性. 而在另一方面,
數(shù)學(xué)的完備性并不能保證它描述現(xiàn)實(shí)世界的完備性. 最明顯的, 從經(jīng)典力學(xué)到狹義相對(duì)論, 再到廣義相對(duì)論,
在每一個(gè)層次上都是存在著非常完美的數(shù)學(xué)描述的, 其數(shù)學(xué)空間都是完備的, 但是很顯然, 即使是廣義相對(duì)論, 它也不是對(duì)于物理世界的完備描述.
目前物理學(xué)界仍然在量子引力的黑暗中摸索. 所有這一切都不影響我們?cè)诮ㄖこ讨幸宰銐蚋叩木葢?yīng)用力學(xué)原理.
級(jí)列理論所描述的絕不是一種從一般到特殊的思想的應(yīng)用, 而是同時(shí)包含著從一般到特殊和從特殊到一般兩個(gè)方向. 在級(jí)列理論中,
我們首先研究的一般是最特殊的情況, 即最簡(jiǎn)單, 對(duì)稱性最高的情況. 此時(shí)模型中特征元素個(gè)數(shù)很少, 而且界限分明, 很少交互或者發(fā)生關(guān)聯(lián).
我們得到簡(jiǎn)單模型的解之后, 就可以將其作為初始解去求解更高階的模型. 這是從特殊到一般的一種進(jìn)展. 而在另一方面,
我們可能以創(chuàng)造性的方式得到某個(gè)更高階模型的解, 此時(shí)我們需要研究高階模型與較低階模型之間的關(guān)聯(lián), 考察當(dāng)更高階的模型退化到低階模型的時(shí)候,
它們的解是如何自然的實(shí)現(xiàn)退化的. 雖然迭代這個(gè)名詞在當(dāng)前軟件工程領(lǐng)域如日中天,
但我想很多開發(fā)人員卻從未花上一刻時(shí)間去真正的體味這個(gè)概念本身的內(nèi)涵, 而陷入了人云亦云的窘境. 從數(shù)學(xué)上說, 迭代過程的基本問題是收斂問題,
而且往往收斂過程中的控制策略要遠(yuǎn)比迭代初始值的選擇更重要. 那么什么樣的控制策略才是保持探索性但又傾向于收斂的呢? 連續(xù)性是最基本的要求.
參見 反問題的級(jí)列求解
http://canonical.blogdriver.com/canonical/974280.html.
級(jí)列理論最關(guān)鍵的部分其實(shí)是兩個(gè)存在性: 一是復(fù)雜性級(jí)列的客觀存在, 二是級(jí)列之間連續(xù)性的客觀存在.
注意到級(jí)列理論所描述的只是存在性,在一般情況下,
我們并不能直接得到從低階解推導(dǎo)出高階解的構(gòu)造方法。而復(fù)雜性的級(jí)列的存在意味著總存在超越我們當(dāng)前認(rèn)知范圍的信息,
從低復(fù)雜性層次上升到高復(fù)雜性層次可能是需要非凡的創(chuàng)造力的,
決不是顯然的。此時(shí)我們唯一的選擇只能是從后驗(yàn)的角度去檢驗(yàn)這種存在性。模型的可退化性正是連續(xù)性的一種自然推論。這在物理學(xué)中是一件不言而喻的事情也是
一種強(qiáng)制性的要求:狹義相對(duì)論可以在低速情況下退化為Newton力學(xué),而廣義相對(duì)論可以在引力均勻的情況下退化為狹義相對(duì)論。在軟件領(lǐng)域,
似乎只是到了近幾年,
可退化性才得到了一些重視,至今很多人對(duì)它的思想實(shí)質(zhì)仍然沒有充分的了解。退化是否是指系統(tǒng)中不同職責(zé)部分的合并但是這些職責(zé)依然存在? NO,
NO, NO. 精簡(jiǎn)機(jī)構(gòu)的原因難道是為了裁減人手,增大人均工作量嗎? 精簡(jiǎn)的原因首先在于人浮于事, 本身就沒有那么多的職責(zé),
卻要生造出那么多的處理步驟來.
我們或者合并部門,或者干脆撤銷部門,一些專門因?yàn)閮?nèi)部協(xié)調(diào)而生的部分更是要被毫不留情的裁減掉。在常見的軟件開發(fā)中,
明明是非常簡(jiǎn)單的數(shù)據(jù)庫訪問操作, 偏偏要在service層, data object層, dao層都把同樣的接口代碼重復(fù)一遍,
美其名曰多層體系架構(gòu), 可以保持系統(tǒng)的靈活性. 可是誰需要這種靈活性, 它到底是設(shè)計(jì)的靈活性還是設(shè)計(jì)的脆弱性? 在簡(jiǎn)單的情況下, 選擇meta
driven的方案,從描述文件直接驅(qū)動(dòng)多個(gè)層次的運(yùn)作往往能夠極大的提高系統(tǒng)的穩(wěn)定性和靈活性.
假設(shè)現(xiàn)在有一個(gè)網(wǎng)絡(luò)應(yīng)用,
我們首先考慮最簡(jiǎn)單的情況, 例如我們假設(shè)只存在一種通信協(xié)議:打電話. 我們可以通過電話通知另一方的接線員,
讓他把信息記錄下來再錄入系統(tǒng)當(dāng)中,以此維持系統(tǒng)的運(yùn)轉(zhuǎn). 如果永遠(yuǎn)都只有一個(gè)固定的接線員X通過唯一的一部電話M來完成通信過程,
則系統(tǒng)中的多個(gè)概念就會(huì)發(fā)生簡(jiǎn)并: 通信將等價(jià)于打電話,等價(jià)于打電話給X, 等價(jià)于使用電話機(jī)M打電話給接線員X. 隨著系統(tǒng)的復(fù)雜性逐漸增大,
系統(tǒng)的對(duì)稱性出現(xiàn)破缺, 原本被認(rèn)為同一的概念出現(xiàn)了微妙的不同, 并可能演變成差異巨大的兩個(gè)分支. 假設(shè)現(xiàn)在多了另外一種通信協(xié)議:硬盤交換.
我們可以把數(shù)據(jù)拷貝到一塊硬盤上, 然后攜帶到遠(yuǎn)處的機(jī)房, 在那里把數(shù)據(jù)導(dǎo)入系統(tǒng), 以維持系統(tǒng)的運(yùn)轉(zhuǎn).
如果我們的系統(tǒng)演化到了這個(gè)階段是否意味著我們?cè)鹊能浖P鸵呀?jīng)徹底崩潰了? 并不是如此的, 在一個(gè)宏觀的粒度上,
我們的系統(tǒng)所需要的可能只是一種端到端的通信手段, 只是現(xiàn)在通信這一更高層的抽象概念不再等同于更加細(xì)節(jié)化的具體通信手段(打電話)了.
如果原先系統(tǒng)設(shè)計(jì)中的各個(gè)主要模塊之間只存在高層抽象之間的依賴, 則只需要增加一些數(shù)據(jù)導(dǎo)入導(dǎo)出模塊,
我們的系統(tǒng)就可以平滑(連續(xù))的接納一種新的通信協(xié)議. 一種宏觀的高層視圖如果直接映射到某種實(shí)現(xiàn), 則它所對(duì)應(yīng)的就是一種最簡(jiǎn)單的系統(tǒng)模型.
系統(tǒng)的不斷發(fā)展相當(dāng)于是給這個(gè)最簡(jiǎn)單的模型不斷補(bǔ)充細(xì)節(jié), 使它不斷的復(fù)雜化. 這種變化是有脈絡(luò)可尋的, 很多時(shí)候是局部的, 輕微的. 當(dāng)然,
持續(xù)累積下去, 也許有一天我們會(huì)突然發(fā)現(xiàn)系統(tǒng)已經(jīng)面目全非了, 甚至原先的高層視圖(簡(jiǎn)單模型)也無法維持了. 但是即使這樣,
是否意味著我們?cè)鹊脑O(shè)計(jì)失敗了呢? 答案仍然是否定的. 軟件系統(tǒng)如同其他系統(tǒng)一樣, 處在不斷的演化狀態(tài)當(dāng)中, 但是什么叫做系統(tǒng)的演化?
很多人有一種錯(cuò)覺, 以為軟件結(jié)構(gòu)完全不變, 完全不需要源代碼級(jí)別的修改, 只需要通過外部配置導(dǎo)入擴(kuò)展對(duì)象的設(shè)計(jì)才是好設(shè)計(jì),
才是成功的可擴(kuò)展設(shè)計(jì). 這是以一種靜態(tài)的僵化態(tài)度來看待程序的演化, 沒有理解演化的實(shí)質(zhì).
演化(evolution)首先是一種變化(variation). 按照級(jí)列設(shè)計(jì)理論, 當(dāng)系統(tǒng)沿著復(fù)雜性的級(jí)列發(fā)生演化的時(shí)候,
因?yàn)椴煌瑥?fù)雜性層次之間存在著本質(zhì)性差異, 我們不能奢望現(xiàn)在的簡(jiǎn)單設(shè)計(jì)能夠一直包容越來越復(fù)雜的模型,
更加現(xiàn)實(shí)的態(tài)度是能否在未來的復(fù)雜的模型中為現(xiàn)在的簡(jiǎn)單設(shè)計(jì)找到位置. 我們不預(yù)言未來, 也無法保證我們現(xiàn)在的行為能夠容納將來的選擇.
在適度重構(gòu)的意義下實(shí)現(xiàn)部分重用已經(jīng)是我們能夠做到的最好程度了. 我們需要理解世界本身是在變遷的, 即使現(xiàn)在我們能夠預(yù)測(cè)到未來,
現(xiàn)在就為其作準(zhǔn)備也未必是適當(dāng)?shù)? 因?yàn)楝F(xiàn)在的最優(yōu)不等價(jià)于將來的最優(yōu), 同樣將來的最優(yōu)也不等價(jià)于現(xiàn)在的最優(yōu).
在上文中的網(wǎng)絡(luò)應(yīng)用的例子中, 也許系統(tǒng)最終發(fā)展成為一個(gè)非常龐大的系統(tǒng), 而我們最初設(shè)計(jì)的功能成為了該系統(tǒng)的一個(gè)子模塊,
這不是完美的可擴(kuò)展性嗎?
http://canonical.blogdriver.com/canonical/1002861.html
級(jí)列理論的思想是非常通俗的, 并沒有絲毫神秘的地方.
復(fù)雜性的級(jí)列可以在空間中呈現(xiàn)出一種復(fù)雜性遞增的形態(tài),也可以沿著時(shí)間軸展開,構(gòu)成發(fā)展的形態(tài)。在傳統(tǒng)設(shè)計(jì)理論中也在頻繁的處理著這些問題,
因而可以看到很多相近的思想, 但是我們也需要注意到一些細(xì)節(jié)性的不同.
傳統(tǒng)的設(shè)計(jì)中也講層次,但是多半說的是stratify而不是hierachical,是同一時(shí)刻可以看到的一種層次堆壘關(guān)系,而不是在不同復(fù)雜性層次上
才揭示出的級(jí)列關(guān)系. 傳統(tǒng)設(shè)計(jì)中也講高級(jí)抽象與低級(jí)抽象之間的關(guān)系,但沒有提供級(jí)列理論中完整的視圖, 也很少強(qiáng)調(diào)每個(gè)層次上元素之間的連續(xù)性。
關(guān)于級(jí)列設(shè)計(jì)理論在軟件設(shè)計(jì)中的適用性, 我只想提一下witrix平臺(tái)中的jsplet開發(fā)框架, 參見
從級(jí)列理論看MVC架構(gòu)
http://canonical.blogdriver.com/canonical/579747.html
jsplet:對(duì)Model 2模式的批判
http://canonical.blogdriver.com/canonical/591479.html
在2002年左右, 我是先得到級(jí)列設(shè)計(jì)理論, 然后才根據(jù)其思想設(shè)計(jì)的jsplet框架. 在整個(gè)witrix平臺(tái)的設(shè)計(jì)中,
級(jí)列設(shè)計(jì)理論也是重要的指導(dǎo)思想. 不過, 以我的經(jīng)驗(yàn)來看, 一般人是很難理解他人的思想的, 即使是對(duì)別人的想法有些興趣,
實(shí)際思考的東西與作者的原意往往也有著很大的差異.
http://canonical.blogdriver.com/canonical/1014773.html
最后我還是強(qiáng)調(diào)一下一件最最基本的事情, 一件每個(gè)人都應(yīng)該時(shí)刻牢記的事情: 不要孤立的看待問題, 而是尋求一種概念之間的連續(xù)性.
http://canonical.blogdriver.com/canonical/1016684.html