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