Posted on 2007-12-10 23:57
canonical 閱讀(1308)
評論(1) 編輯 收藏 所屬分類:
設(shè)計理論
設(shè)計考慮的是最終需要什么,最終我們要提供的調(diào)用接口是什么,我們所直接需要的某個有價值的,直接存在的,直接可以接觸的結(jié)構(gòu)是什么,而不是它所依據(jù)的原理是什么,不是它的具體構(gòu)造過程或者構(gòu)造方法是什么。比如說我們在程序中完全不需要內(nèi)置Map這一結(jié)構(gòu),因為它可以通過列表等結(jié)構(gòu)組合構(gòu)建出來,但是很顯然,Map這一概念的直接存在對我們來說是方便的,是經(jīng)濟的,是有效的。我們在思考的時候并不需要考慮它是采用List實現(xiàn)還是采用Set實現(xiàn),或者任何它本身的構(gòu)造結(jié)構(gòu)。這一概念在我們的思想中成為某種原子化的東西。
那么,我們到底需要構(gòu)建哪些概念,才能夠最方便的基于這些概念應(yīng)對萬千應(yīng)用系統(tǒng)的開發(fā)呢。 這是我們需要在結(jié)構(gòu)空間作出探索的。 這里的思維方向不是把系統(tǒng)推向某種純粹化,某種極致的簡單化,而是讓它更加物理化,揭示出更多的層次,更加關(guān)切在物理約束情況下如何實現(xiàn)靈活性的最大化。一種概念在物理上如果被證明能夠在很多場景下成為不變的基元,則它便是有價值的,是可以進(jìn)行物理詮釋的。
很多人習(xí)慣于接受語言存在的現(xiàn)實,接受設(shè)計后的結(jié)果,但是作為程序語言設(shè)計者,他們又是如何工作的?他們是否真的是從純粹的數(shù)學(xué)關(guān)系推演得到所有的語法特征,還是他們預(yù)先已經(jīng)在心中設(shè)定了應(yīng)該出現(xiàn)的語法特征,然后去尋找它的數(shù)學(xué)表達(dá),只是借此清除思維中潛在存在的矛盾性呢?
語言中存在的所有特征是經(jīng)過全局考慮的,是清除了所有概念的矛盾沖突的。但是在現(xiàn)實中,我們偶然構(gòu)造的結(jié)構(gòu)卻可能是局限于當(dāng)下的信息構(gòu)造的,因此它們相會的時候,可能會出現(xiàn)不協(xié)調(diào),可能會出現(xiàn)結(jié)構(gòu)障礙。例如同樣是關(guān)閉操作,有些人命名為close, 另一些人命名為destroy. 可能一個具有額外參數(shù),另外一個沒有。這里可能需要一種adaptor接口的封裝,也可能使用ruby那種method-missing的動態(tài)判斷。對于更加錯綜復(fù)雜的結(jié)構(gòu)問題,其解決方案就不是那么顯然的了,但這并不意味著我們無辦法可想。究竟設(shè)計何種結(jié)構(gòu)邊界才能最小化結(jié)構(gòu)融合時所要付出的代價呢?結(jié)構(gòu)被識別并表征出來以后,是否允許它在一定范圍內(nèi)有所變形?在變形中我們需要保持的拓?fù)洳蛔兞渴鞘裁矗拷Y(jié)構(gòu)動態(tài)調(diào)整的時候,我們是否需要定義調(diào)整的物理代價,是否能夠定義某種動力學(xué)?
我所闡述的只是在計算機理論中從數(shù)學(xué)視角向物理視角的轉(zhuǎn)換,它不是必然給你提供某種超越當(dāng)下的能力,而是提供一種不同的眼光看待所有的一切。視角變換后,我們發(fā)現(xiàn)了一些新的命題,而在原先的視角下在我們的話語體系中原本是無法表達(dá)這些命題的。串行程序假設(shè)了只有1顆CPU, 而函數(shù)式語言假設(shè)了可以有無限多個CPU, 你不覺得1至無窮之間缺點什么嗎。我們可以創(chuàng)造一些東西把1至無窮之間的空白補齊,概念空間是連續(xù)的。