關於語言與結構的一些說明

每當我在文字中對函數式語言有些不敬之意時,便好像動了某些人的奶酪,以至我的言辭總在被曲解後遭到排斥。我想這就是因爲視角差異過大所造成的. 但是謙虛謹慎是傳統的美德, 不能容納他人的觀點只會妨礙自己在某些方向的探索。

首先請不要輕易懷疑我的知識水平。當然如果總無法聚集起足夠的注意力來理解別人話語中的細節,我也無話可說。

容納他人的觀點就意味着不要總在自己的話語體系中試圖找到反例. 一個人總是受限於他的知識範圍,因此他也經常在自己的知識範圍內篡改曲解別人的意見。我從未說過 "一個具體的問題是現有的通用語言無法描述的". 我說的是"現實開發中所需要處理的結構問題並不是在語言層面得到充分[b]解決[/b]的", "[b]現在[/b]的通用語言也是無法[b]有效[/b]承載Domain Specific Structure的". 請注意我對定語和動詞的選擇。其實我已經舉了大量的例子來進行說明,但可能因爲大多數人不是物理背景,對相關的內容不熟悉,所以直接無視了。這也很對,符合物理學的精神。

可能大多數人都知道函數式語言和命令式語言都是和圖靈機等價的,因此它具有某種終極能力,懷疑它無異於懷疑我們世界存在的基礎。但是請注意,這種等價性是數學性的。它潛在的要求是無限的能量和時間消耗。如果在限定的物理約束下,我們會發現我們的選擇範圍會大大縮小。所以我說"函數式語言和命令式語言的計算能力相同,但是在具體的情形下它們的描述能力是不同的". 比如說我現在有無窮多種方式從北京跑到上海,但是如果限定只允許用1升汽油,那麼我們的選擇就近乎於0。飛機和汽車的運輸能力是相同的嗎。物理學的一個基本精神在於一種物理性的約束是始終存在的。而事實上,我們在實際工作中也總是在各種有限的物理條件下工作。

也許有些人認爲這種區分是無關緊要的,我們只關心某種終極的東西。但是物理學中有着太多的例證,說明在有限約束下,整個系統呈現出完全不同的性質。在通信領域我們都知道Shannon定理,它的物理詮釋是在有噪聲的信道上可以[b]有效[/b]的進行[b]準確[/b]的信息傳遞。但是這一詮釋只能在有限的數學精度(遠大於我們實際需求的精度)上成立, 在絕對準確的數學意義上,這是不可能的事情。

你覺得現在的通用語言做起領域相關的東西來很方便嗎,這就是我所謂無法有效承載的含義。在這裏我也沒有否認"未來的牛語言可以輕鬆搞定目前難題"的可能性。

因爲所有的軟件設計最終都要落實到某種代碼實現上,所以怎麼會有什麼神祕的軟件結構是現有的語言無法描述的呢。但是ErLang中那種高併發,支持錯誤恢復的程序結構是在其他語言中能夠輕鬆實現的嗎。很多人不是在潛意識中認爲ErLang的成功是函數式語言排他性的成功嗎,不是認爲命令式語言無論如何實現不了ErLang的程序結構的嗎。很顯然,在命令式語言中是無法直接實現ErLang中的程序結構的,否則它就變成了函數式語言,但是所有發生在ErLang世界中的事實都一樣可以發生在命令式語言的世界中。ErLang語言的編譯器可以是使用命令式語言實現的,在終極的意義上,語言之間能有什麼區別呢?

我說"實際上現在的通用語言也是無法有效承載Domain Specific Structure的", 這還有另一層含義。通用語言設計總是要考慮到內置結構的某種通用性,設計時能夠憑依的信息較少,因此不可能直接製造某種複雜的領域相關的結構。而目前已知的通用語言中提供的結構抽象的手段也不夠強大(實際上我認爲任何語言都不會強大到內置所有結構,也無法提供所有的結構抽象手段), 相當於是把領域結構問題推給程序員解決。這就如同C語言把內存管理推給程序員解決一樣。現在ruby比較流行不就是因爲它能夠動態處理很多結構問題嗎,但是它現在所作的一切就是足夠的了嗎。難道二十年之後再來看這個語言,不能夠發現它存在着巨大的改進空間嗎。我們目前在Witrix中通過tpl模板語言,bizflow extends等機制,結合整體框架設計實現了一些與ruby不同的結構構造方法。這些手段都極大的增強了我們面對領域問題時的信心,也確保了我們的領域知識是技術層面上可積累的。但是即使這樣,我對程序發展的現狀就是滿意的嗎?難道不存在更加豐富的結構知識等待我們去發現嗎?一般人總是習慣接受已經存在的現實,在有限的職業生涯中把它們當作不變的真理,卻沒有耐心的去思考如何去改變。

我認爲很多結構問題不是需要在語言層面得到解決的,而是應該在獨立的結構層(平臺,框架)進行解決。這意味着沒有必要在語言層面直接內置某種特定的結構,內置某種特定的結構抽象手段。這基本類似於說不要把集合論擴大到包含所有的數學關係,請在別的學科分支中進行研究。需要注意的是,我所謂的領域知識不是特定的業務知識,而是從業務知識中可以分析得到的某種更加通用的普適的結構知識,甚至是可以使用數學進行精確描述的。

現代軟件發展的時間還很短,與數學和物理學這樣深刻的學科相比,它無疑是相對幼稚的,是待成長的,是更加的不完美的。在程序構建的基本問題上並沒有抽象出什麼可以實際操作的精確規律。這是所謂Pattern在軟件業流行的部分原因:我們希望用這種半形式化的方式捕獲某種思考的結果。但是軟件真的除了基於抽象數學的全局的全稱性的證明之外,不能夠在局部進行某種更加複雜,更加嚴謹的分析嗎。

我們說結構問題是獨立的,這也意味着它和具體的實現語言具有某種意義上的分離性。通過一種語言書寫的結構可以在另一種語言中得到表達。我們可以建立語言中立的技術結構。一種所謂的結構在概念上具有某種確定的形態,我們可以脫離具體的語言來理解它。例如我說"面向對象的繼承關係從結構觀點上看是兩個一維集合之間的覆蓋關係". 在java中我們可以直接使用語言提供的繼承機制,而在C語言中我們就需要建立某種結構體,手動維持所有的指針關聯。而在Witrix平臺中,我們從繼承的結構詮釋出發,定義了更加複雜的extends算子,這就需要利用java語言編制特定的parser來實現了。但是顯然,在思考的時候我們所有的思維指向是結構本身,而不是任何通用語言的語法。

在物理學中,通過攝動分析我們可以清楚地意識到:同樣一個物理現象對應的數學模型可以是衆多的,但是在特定的參數區我們會選擇某種特定的數學表述,並確定其中的待定參數。

delta函數是物理學家狄拉克引入的,在Schwatz引入分佈概念建立廣義函數論之前,物理學家們已經使用這一函數工作了很多年。後來Abraham Robinsen利用數理邏輯方法,建立了非標準分析,通過模型論的方法精確定義了無窮小的概念,從更加直接的角度論證了delta的合理性。但是在物理學家看來,這些數學又有什麼區別呢?物理學只是按照物理的詮釋進行工作,具體的數學只是它可選的工具而已。

物理的真理並不是蘊含在數學中的,它需要我們獨立的探索,從與數學不同的觀點進行思考,檢驗,最終我們才能做出真正的發現。廣義相對論可以採用Riemman幾何進行描述,但是它的物理詮釋卻是Einstein提出的. 沒有人說Riemann或者Hilbert發現了廣義相對論。另外一方面,因爲Einstein的工作觸發了對於微分幾何的更加深入的研究,靠着物理直覺的導引,我們將這一數學分支推進到了難以想象的深度。"數學是無法涵蓋物理學的". 這不是說最終物理學無法採用數學語言進行描述,而是說在這一發展過程中,所有思想的推動來源於物理學的經驗,來源於我們在這個物質世界上所進行的反覆驗證。不是在一個封閉的小屋中,整天擺弄各種數學符號,我們就能夠發明所有的物理公式所對應的數學。實際上,現在學術界普遍承認,沒有物理學的推進,很多數學的進展是不可能發生的。

物理系每天都在演算着Feynman路徑積分, 但是所有人都知道這是沒有什麼嚴格的數學依據的.目前並無法定義路徑積分的收斂性,但是所有人對此避而不談. 只要形式演算合法,物理預測符合實驗, 合理性的證明只是數學家們的事情. 在量子場論中所採用的重整化(Renormalization)方法不過是迴避無窮大問題的一種形式手段.我們仍然無法在數學層面對所有的演算都給予合理化解釋. 在更多的物理分支中工作,你就會發現物理學家的膽子不是一般的大。也許在未來我們能夠發現這些物理過程背後數學機制的精確定義, 但也許最終我們也無法找到合適的定義方式. 但這對物理學家來說, 並不是很大的打擊.因爲指引我們的是物理直覺,是獨立於數學的物質世界的意象。

我所想討論的不是某種終極意義上的可能性,不是絕對概念之間的衝突,而是在物理現實的約束下,我們如何纔能有效工作的問題。我已經反覆表述了自己的觀點: "結構是可抽象的,是具有獨立意義的。這就是Witrix所提出的面向結構的設計視角。不是強調對象的所謂業務含義,不是強調某種通用語言(例如ruby)的靈活的語法結構。在這之間存在着厚重的具有物理意義的可以進行結構分析的技術層". 也許有人覺得我說的這是廢話, 但是當系統化的執行一種思想的時候,就會揭示出未預料到的可能性. 整個Witrix平臺簡單的說起來就是"面向結構的級列分析", 但是如何找到合適的技術形式來體現這一思想,卻絕對不是一件平凡的事情. "在Witrix中我們實現的代碼重用程度和程序整體結構控制能力是超越了目前所有已知的公開技術的。這不是什麼哲學,而是我們在殘酷的商業競爭中得以生存的資本".http://canonical.iteye.com/blog/126467

在我看來,計算機領域充斥着純數學的深沉遐想和從工程實踐而來的輕佻常識,還沒有注意到物理學所能帶來的不同的同樣深刻的視角。我常說,好好學習物理是必要的,因爲這個世界遠比你想象的要複雜的多。
發佈了1 篇原創文章 · 獲贊 2 · 訪問量 6073
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章