道法歸一――BeijingOpenParty November:Attraction From Autumn Wind(秋風引)紀要

         雖然我們親愛的cleverpig把這次活動命名爲“秋風引”,但老天爺似乎已經把冬天帶到了北方。不過可喜的是,大家的熱情絲毫沒有受天冷的影響,活動反而更加的火熱――竟然有人公開拉單身的GG MM們去相親大會,嗯,據去過的哥們說,不是一般的熱

這次的主持人同樣是我們的美女瓔珞天色(很奇怪,爲什麼只有這個我纔會想起介紹主持人來呢?…tin兄勿躁勿躁)和tin。由於人比較多,站立會議改成了搶麥會議,雖然比起之前的一分鐘介紹,大家介紹自己的機會少了很多,但比較寬裕的時間竟然給我們帶來了很多驚喜,包括上面提到的相親大會,還有更接近於哲學的參禪論道(當然是真的咯),嗯,感覺這次Party有了更多的開放元素,我想這是個好現象。

每次的Topic貢獻環節基本都是大同小異,但這次卻出現了一個小小的超越――話題太多了,以致於個別得票少的排到了下一次;話題的方向也開始豐富起來,當然,站在椅子上翹首倚望的小刀兄的脖子也會更累一些

並行的好處是給大家提供了更多的選擇,而它的弊端則是我無法同時聽到在時間上衝突的兩個session,所以我儘量選擇討論自由度更高的話題(一些具體的話題可以私下與貢獻者溝通,而討論在這個時候無法重現)。

Groovy,嗯,一個很具體的技術,而我卻是從另一個角度去參與了這個session。我非常喜歡那張倒三角的邏輯分層圖(是我自己取的名字,不貼切還望指正),看到它的第一眼,我突然想到了上次準備貢獻Topic而又因爲太過抽象而放棄的DSL通用模型,雖然在這張圖裏,DSL是處於最上層,但相對於一個具體的座標系,卻是通用模型的一種具化――它是狹義的。

既然偶然(或者是必然)的相遇讓我找到了問題的實質,那麼是時候把那個冷落在角落太久的想法再次拾起了。

已經記不得是什麼時候開始聽到的一句話了,“道生一,一生二,二生三,三生萬物”,或許是對我即將要說的最好的鋪墊――道於無形,而一旦賦予它一個前提,道便會具有一個實實在在的形態,而兩個相互矛盾的對立面則構成了最基本的系統,加之這個相對穩定的系統,我們得到了三個有着原子關係的基本單位(原子關係即橫向的制約和縱向的歸屬),直至整個世界。

當然,你會認爲我是不是因爲那個參禪論道的話題而走火入魔,但事實卻是如此的簡單,我把它放在程序界來解釋它的話(或許提起程序這兩個字你會感到距離不是那麼的遠,嗯,本來就是這樣的)或許更加通俗。

問題分解應該是我們設計中的家常便飯,是的,無論大小,一個問題最終會被我們歸爲一個領域的一對矛盾體:時間和空間、進度和質量、成本和風險各種領域的矛盾體構成了我們收入的淵源。而如果我們想保住飯碗,解決問題的方法也最終會被分解爲熟悉的面孔:前提和規則,更具體些,我們需要一段代碼(規則)和一個執行環境(前提)來完成目標。

到這裏,你或許絲毫感覺不到有關DSL的靈壓(該死這幾天《死神》看多了),但不要着急,它就在眼前――規則即DSL,而前提則是我們熟悉的“領域”。前面提到的那句話實際是一個遞歸(難道早在N千年前,我們的老祖宗就已經學會了編程?殘念),那麼學過程序設計的你就非常明瞭了,遞歸的內部代碼是規則,而調用關係則是前提。或許下面的圖能夠更加直觀的解釋上面的話:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

規則

前提

 

前提

規則

 

前提

規則

前提

 

規則

 

 

 

如果這個圖還是無法讓你把抽象和現實聯繫起來,你只需要把上面的“規則”改爲DSL,“前提”改爲VM即可(VM即運行環境):

DSL

VM

 

VM

DSL

 

VM

DSL

VM

 

DSL

 

 

 

怎麼解釋呢?其實相當簡單,所謂DSL其實是一個相對的概念,是運行在某個特定環境(VM)上的領域規則(領域即規則的作用域,由VM提供),它可以成爲更上層(遞歸調用)的特定環境,以支持更高層次的規則。這是廣義上的DSL定義,似乎很多人認爲廣義就是虛無縹緲的空談,但就如認識水是讓你更好的把它放到自己特定的容器裏一樣,有廣義纔會有狹義。我們完全可以把系統分解爲不同層次的DSL定義,當然有很多都已經被人定義好的,比如前面提到的分層圖,它是複合系統設計領域的DSL分解圖(分層圖中的DSL是具體化的DSL)。

既然我們定義了這個萬法歸一的遞歸系統,就可以用它來解釋我們手中的代碼:機器碼之於計算機體系、源碼之於編譯器、動態語言之於執行器、配置文件之於程序引擎這些都是DSL在各自領域創造的具體規則。

那麼我們明白了這些放之四海皆可用的東西(被人稱爲廢話)有什麼用呢?(如果沒用真就成了廢話了)其實很簡單,我們設計人員只需明白一個原則即可:專注於一個特定領域並用合適的規則去描述它。這樣,那些經常被人掛在嘴邊上的“領域驅動語言”、“面向XX設計”在我們這都是理所當然的事情了。

寫了這麼多,自己都擔心起來,進而是慶幸,如果把上面這大篇文字作爲Topic來忽悠大家,恐怕連個全屍都難保,看來留到今天並順梯子溜掉是個不至憋壞身體又免遭追殺的權宜之計,但願我不會因爲對DSL這個炙手可熱的概念胡亂解釋而遭到通緝,但願

當然這次Party還是有些遺憾,沒有聽到TW那位仁兄的“攝影用光”的Topic,還有我們親愛的tin準備的CSS,不過只要OpenParty在,只要我們的熱情在,一切都會有的,這個冬天我們並不冷。

PS:這次的PP我同樣是用的cleverpig的相機拍的,所以這裏沒有貼出來,靜等cleverpig兄放出來吧...

發佈了201 篇原創文章 · 獲贊 2 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章