每當(dāng)我在文字中對(duì)函數(shù)式語(yǔ)言有些不敬之意時(shí),便好像動(dòng)了某些人的奶酪,以至我的言辭總在被曲解后遭到排斥。我想這就是因?yàn)橐暯遣町愡^(guò)大所造成的. 但是謙虛謹(jǐn)慎是傳統(tǒng)的美德, 不能容納他人的觀點(diǎn)只會(huì)妨礙自己在某些方向的探索。
首先請(qǐng)不要輕易懷疑我的知識(shí)水平。當(dāng)然如果總無(wú)法聚集起足夠的注意力來(lái)理解別人話語(yǔ)中的細(xì)節(jié),我也無(wú)話可說(shuō)。
容納他人的觀點(diǎn)就意味著不要總在自己的話語(yǔ)體系中試圖找到反例. 一個(gè)人總是受限于他的知識(shí)范圍,因此他也經(jīng)常在自己的知識(shí)范圍內(nèi)篡改曲解別人的意見(jiàn)。我從未說(shuō)過(guò) "一個(gè)具體的問(wèn)題是現(xiàn)有的通用語(yǔ)言無(wú)法描述的". 我說(shuō)的是"現(xiàn)實(shí)開(kāi)發(fā)中所需要處理的結(jié)構(gòu)問(wèn)題并不是在語(yǔ)言層面得到充分
解決的", "
現(xiàn)在的通用語(yǔ)言也是無(wú)法
有效承載Domain Specific Structure的". 請(qǐng)注意我對(duì)定語(yǔ)和動(dòng)詞的選擇。其實(shí)我已經(jīng)舉了大量的例子來(lái)進(jìn)行說(shuō)明,但可能因?yàn)榇蠖鄶?shù)人不是物理背景,對(duì)相關(guān)的內(nèi)容不熟悉,所以直接無(wú)視了。這也很對(duì),符合物理學(xué)的精神。
可能大多數(shù)人都知道函數(shù)式語(yǔ)言和命令式語(yǔ)言都是和圖靈機(jī)等價(jià)的,因此它具有某種終極能力,懷疑它無(wú)異于懷疑我們世界存在的基礎(chǔ)。但是請(qǐng)注意,這種等價(jià)性是數(shù)學(xué)性的。它潛在的要求是無(wú)限的能量和時(shí)間消耗。如果在限定的物理約束下,我們會(huì)發(fā)現(xiàn)我們的選擇范圍會(huì)大大縮小。所以我說(shuō)"函數(shù)式語(yǔ)言和命令式語(yǔ)言的計(jì)算能力相同,但是在具體的情形下它們的描述能力是不同的". 比如說(shuō)我現(xiàn)在有無(wú)窮多種方式從北京跑到上海,但是如果限定只允許用1升汽油,那么我們的選擇就近乎于0。飛機(jī)和汽車(chē)的運(yùn)輸能力是相同的嗎。物理學(xué)的一個(gè)基本精神在于一種物理性的約束是始終存在的。而事實(shí)上,我們?cè)趯?shí)際工作中也總是在各種有限的物理?xiàng)l件下工作。
也許有些人認(rèn)為這種區(qū)分是無(wú)關(guān)緊要的,我們只關(guān)心某種終極的東西。但是物理學(xué)中有著太多的例證,說(shuō)明在有限約束下,整個(gè)系統(tǒng)呈現(xiàn)出完全不同的性質(zhì)。在通信領(lǐng)域我們都知道Shannon定理,它的物理詮釋是在有噪聲的信道上可以
有效的進(jìn)行
準(zhǔn)確的信息傳遞。但是這一詮釋只能在有限的數(shù)學(xué)精度(遠(yuǎn)大于我們實(shí)際需求的精度)上成立, 在絕對(duì)準(zhǔn)確的數(shù)學(xué)意義上,這是不可能的事情。
你覺(jué)得現(xiàn)在的通用語(yǔ)言做起領(lǐng)域相關(guān)的東西來(lái)很方便嗎,這就是我所謂無(wú)法有效承載的含義。在這里我也沒(méi)有否認(rèn)"未來(lái)的牛語(yǔ)言可以輕松搞定目前難題"的可能性。
因?yàn)樗械能浖O(shè)計(jì)最終都要落實(shí)到某種代碼實(shí)現(xiàn)上,所以怎么會(huì)有什么神秘的軟件結(jié)構(gòu)是現(xiàn)有的語(yǔ)言無(wú)法描述的呢。但是ErLang中那種高并發(fā),支持錯(cuò)誤恢復(fù)的程序結(jié)構(gòu)是在其他語(yǔ)言中能夠輕松實(shí)現(xiàn)的嗎。很多人不是在潛意識(shí)中認(rèn)為ErLang的成功是函數(shù)式語(yǔ)言排他性的成功嗎,不是認(rèn)為命令式語(yǔ)言無(wú)論如何實(shí)現(xiàn)不了ErLang的程序結(jié)構(gòu)的嗎。很顯然,在命令式語(yǔ)言中是無(wú)法直接實(shí)現(xiàn)ErLang中的程序結(jié)構(gòu)的,否則它就變成了函數(shù)式語(yǔ)言,但是所有發(fā)生在ErLang世界中的事實(shí)都一樣可以發(fā)生在命令式語(yǔ)言的世界中。ErLang語(yǔ)言的編譯器可以是使用命令式語(yǔ)言實(shí)現(xiàn)的,在終極的意義上,語(yǔ)言之間能有什么區(qū)別呢?
我說(shuō)"實(shí)際上現(xiàn)在的通用語(yǔ)言也是無(wú)法有效承載Domain Specific Structure的", 這還有另一層含義。通用語(yǔ)言設(shè)計(jì)總是要考慮到內(nèi)置結(jié)構(gòu)的某種通用性,設(shè)計(jì)時(shí)能夠憑依的信息較少,因此不可能直接制造某種復(fù)雜的領(lǐng)域相關(guān)的結(jié)構(gòu)。而目前已知的通用語(yǔ)言中提供的結(jié)構(gòu)抽象的手段也不夠強(qiáng)大(實(shí)際上我認(rèn)為任何語(yǔ)言都不會(huì)強(qiáng)大到內(nèi)置所有結(jié)構(gòu),也無(wú)法提供所有的結(jié)構(gòu)抽象手段), 相當(dāng)于是把領(lǐng)域結(jié)構(gòu)問(wèn)題推給程序員解決。這就如同C語(yǔ)言把內(nèi)存管理推給程序員解決一樣。現(xiàn)在ruby比較流行不就是因?yàn)樗軌騽?dòng)態(tài)處理很多結(jié)構(gòu)問(wèn)題嗎,但是它現(xiàn)在所作的一切就是足夠的了嗎。難道二十年之后再來(lái)看這個(gè)語(yǔ)言,不能夠發(fā)現(xiàn)它存在著巨大的改進(jìn)空間嗎。我們目前在Witrix中通過(guò)tpl模板語(yǔ)言,bizflow extends等機(jī)制,結(jié)合整體框架設(shè)計(jì)實(shí)現(xiàn)了一些與ruby不同的結(jié)構(gòu)構(gòu)造方法。這些手段都極大的增強(qiáng)了我們面對(duì)領(lǐng)域問(wèn)題時(shí)的信心,也確保了我們的領(lǐng)域知識(shí)是技術(shù)層面上可積累的。但是即使這樣,我對(duì)程序發(fā)展的現(xiàn)狀就是滿意的嗎?難道不存在更加豐富的結(jié)構(gòu)知識(shí)等待我們?nèi)グl(fā)現(xiàn)嗎?一般人總是習(xí)慣接受已經(jīng)存在的現(xiàn)實(shí),在有限的職業(yè)生涯中把它們當(dāng)作不變的真理,卻沒(méi)有耐心的去思考如何去改變。
我認(rèn)為很多結(jié)構(gòu)問(wèn)題不是需要在語(yǔ)言層面得到解決的,而是應(yīng)該在獨(dú)立的結(jié)構(gòu)層(平臺(tái),框架)進(jìn)行解決。這意味著沒(méi)有必要在語(yǔ)言層面直接內(nèi)置某種特定的結(jié)構(gòu),內(nèi)置某種特定的結(jié)構(gòu)抽象手段。這基本類似于說(shuō)不要把集合論擴(kuò)大到包含所有的數(shù)學(xué)關(guān)系,請(qǐng)?jiān)趧e的學(xué)科分支中進(jìn)行研究。需要注意的是,我所謂的領(lǐng)域知識(shí)不是特定的業(yè)務(wù)知識(shí),而是從業(yè)務(wù)知識(shí)中可以分析得到的某種更加通用的普適的結(jié)構(gòu)知識(shí),甚至是可以使用數(shù)學(xué)進(jìn)行精確描述的。
現(xiàn)代軟件發(fā)展的時(shí)間還很短,與數(shù)學(xué)和物理學(xué)這樣深刻的學(xué)科相比,它無(wú)疑是相對(duì)幼稚的,是待成長(zhǎng)的,是更加的不完美的。在程序構(gòu)建的基本問(wèn)題上并沒(méi)有抽象出什么可以實(shí)際操作的精確規(guī)律。這是所謂Pattern在軟件業(yè)流行的部分原因:我們希望用這種半形式化的方式捕獲某種思考的結(jié)果。但是軟件真的除了基于抽象數(shù)學(xué)的全局的全稱性的證明之外,不能夠在局部進(jìn)行某種更加復(fù)雜,更加嚴(yán)謹(jǐn)?shù)姆治鰡帷?br />
我們說(shuō)結(jié)構(gòu)問(wèn)題是獨(dú)立的,這也意味著它和具體的實(shí)現(xiàn)語(yǔ)言具有某種意義上的分離性。通過(guò)一種語(yǔ)言書(shū)寫(xiě)的結(jié)構(gòu)可以在另一種語(yǔ)言中得到表達(dá)。我們可以建立語(yǔ)言中立的技術(shù)結(jié)構(gòu)。一種所謂的結(jié)構(gòu)在概念上具有某種確定的形態(tài),我們可以脫離具體的語(yǔ)言來(lái)理解它。例如我說(shuō)"面向?qū)ο蟮睦^承關(guān)系從結(jié)構(gòu)觀點(diǎn)上看是兩個(gè)一維集合之間的覆蓋關(guān)系". 在java中我們可以直接使用語(yǔ)言提供的繼承機(jī)制,而在C語(yǔ)言中我們就需要建立某種結(jié)構(gòu)體,手動(dòng)維持所有的指針關(guān)聯(lián)。而在Witrix平臺(tái)中,我們從繼承的結(jié)構(gòu)詮釋出發(fā),定義了更加復(fù)雜的extends算子,這就需要利用java語(yǔ)言編制特定的parser來(lái)實(shí)現(xiàn)了。但是顯然,在思考的時(shí)候我們所有的思維指向是結(jié)構(gòu)本身,而不是任何通用語(yǔ)言的語(yǔ)法。
在物理學(xué)中,通過(guò)攝動(dòng)分析我們可以清楚地意識(shí)到:同樣一個(gè)物理現(xiàn)象對(duì)應(yīng)的數(shù)學(xué)模型可以是眾多的,但是在特定的參數(shù)區(qū)我們會(huì)選擇某種特定的數(shù)學(xué)表述,并確定其中的待定參數(shù)。
delta函數(shù)是物理學(xué)家狄拉克引入的,在Schwatz引入分布概念建立廣義函數(shù)論之前,物理學(xué)家們已經(jīng)使用這一函數(shù)工作了很多年。后來(lái)Abraham Robinsen利用數(shù)理邏輯方法,建立了非標(biāo)準(zhǔn)分析,通過(guò)模型論的方法精確定義了無(wú)窮小的概念,從更加直接的角度論證了delta的合理性。但是在物理學(xué)家看來(lái),這些數(shù)學(xué)又有什么區(qū)別呢?物理學(xué)只是按照物理的詮釋進(jìn)行工作,具體的數(shù)學(xué)只是它可選的工具而已。
物理的真理并不是蘊(yùn)含在數(shù)學(xué)中的,它需要我們獨(dú)立的探索,從與數(shù)學(xué)不同的觀點(diǎn)進(jìn)行思考,檢驗(yàn),最終我們才能做出真正的發(fā)現(xiàn)。廣義相對(duì)論可以采用Riemman幾何進(jìn)行描述,但是它的物理詮釋卻是Einstein提出的. 沒(méi)有人說(shuō)Riemann或者Hilbert發(fā)現(xiàn)了廣義相對(duì)論。另外一方面,因?yàn)镋instein的工作觸發(fā)了對(duì)于微分幾何的更加深入的研究,靠著物理直覺(jué)的導(dǎo)引,我們將這一數(shù)學(xué)分支推進(jìn)到了難以想象的深度。"數(shù)學(xué)是無(wú)法涵蓋物理學(xué)的". 這不是說(shuō)最終物理學(xué)無(wú)法采用數(shù)學(xué)語(yǔ)言進(jìn)行描述,而是說(shuō)在這一發(fā)展過(guò)程中,所有思想的推動(dòng)來(lái)源于物理學(xué)的經(jīng)驗(yàn),來(lái)源于我們?cè)谶@個(gè)物質(zhì)世界上所進(jìn)行的反復(fù)驗(yàn)證。不是在一個(gè)封閉的小屋中,整天擺弄各種數(shù)學(xué)符號(hào),我們就能夠發(fā)明所有的物理公式所對(duì)應(yīng)的數(shù)學(xué)。實(shí)際上,現(xiàn)在學(xué)術(shù)界普遍承認(rèn),沒(méi)有物理學(xué)的推進(jìn),很多數(shù)學(xué)的進(jìn)展是不可能發(fā)生的。
物理系每天都在演算著Feynman路徑積分, 但是所有人都知道這是沒(méi)有什么嚴(yán)格的數(shù)學(xué)依據(jù)的.目前并無(wú)法定義路徑積分的收斂性,但是所有人對(duì)此避而不談. 只要形式演算合法,物理預(yù)測(cè)符合實(shí)驗(yàn), 合理性的證明只是數(shù)學(xué)家們的事情. 在量子場(chǎng)論中所采用的重整化(Renormalization)方法不過(guò)是回避無(wú)窮大問(wèn)題的一種形式手段.我們?nèi)匀粺o(wú)法在數(shù)學(xué)層面對(duì)所有的演算都給予合理化解釋. 在更多的物理分支中工作,你就會(huì)發(fā)現(xiàn)物理學(xué)家的膽子不是一般的大。也許在未來(lái)我們能夠發(fā)現(xiàn)這些物理過(guò)程背后數(shù)學(xué)機(jī)制的精確定義, 但也許最終我們也無(wú)法找到合適的定義方式. 但這對(duì)物理學(xué)家來(lái)說(shuō), 并不是很大的打擊.因?yàn)橹敢覀兊氖俏锢碇庇X(jué),是獨(dú)立于數(shù)學(xué)的物質(zhì)世界的意象。
我所想討論的不是某種終極意義上的可能性,不是絕對(duì)概念之間的沖突,而是在物理現(xiàn)實(shí)的約束下,我們?nèi)绾尾拍苡行Чぷ鞯膯?wèn)題。我已經(jīng)反復(fù)表述了自己的觀點(diǎn): "
結(jié)構(gòu)是可抽象的,是具有獨(dú)立意義的。這就是Witrix所提出的面向結(jié)構(gòu)的設(shè)計(jì)視角。不是強(qiáng)調(diào)對(duì)象的所謂業(yè)務(wù)含義,不是強(qiáng)調(diào)某種通用語(yǔ)言(例如ruby)的靈活的語(yǔ)法結(jié)構(gòu)。在這之間存在著厚重的具有物理意義的可以進(jìn)行結(jié)構(gòu)分析的技術(shù)層". 也許有人覺(jué)得我說(shuō)的這是廢話, 但是當(dāng)系統(tǒng)化的執(zhí)行一種思想的時(shí)候,就會(huì)揭示出未預(yù)料到的可能性. 整個(gè)Witrix平臺(tái)簡(jiǎn)單的說(shuō)起來(lái)就是"
面向結(jié)構(gòu)的級(jí)列分析", 但是如何找到合適的技術(shù)形式來(lái)體現(xiàn)這一思想,卻絕對(duì)不是一件平凡的事情. "在Witrix中我們實(shí)現(xiàn)的代碼重用程度和程序整體結(jié)構(gòu)控制能力是超越了目前所有已知的公開(kāi)技術(shù)的。這不是什么哲學(xué),而是我們?cè)跉埧岬纳虡I(yè)競(jìng)爭(zhēng)中得以生存的資本".
http://canonical.javaeye.com/blog/126467
在我看來(lái),計(jì)算機(jī)領(lǐng)域充斥著純數(shù)學(xué)的深沉遐想和從工程實(shí)踐而來(lái)的輕佻常識(shí),還沒(méi)有注意到物理學(xué)所能帶來(lái)的不同的同樣深刻的視角。我常說(shuō),好好學(xué)習(xí)物理是必要的,因?yàn)檫@個(gè)世界遠(yuǎn)比你想象的要復(fù)雜的多。