1.25.2011

The Design of Design˙DSLs in Action

image dsl

很高興的是,今年一開始就看到這兩本書;難過的是,這兩本書都很硬。

“The Design of Design”這本的原文看的是很辛苦,希望有中文版早點出來,不然可能要看到第二季,阿彌陀佛。

The Design of Design: Essays from a Computer Scientist《人月神話》作者Frederick P. Brooks,2010的新作,我竟然今年才知道。

這本書難讀的理由是:它是本哲學書啊~

雖然有從設計哲學講到設計實踐,從設計過程到設計靈感,既強調了設計思想的重要性,又對溝通的細節做了細緻的描述,以及因地制宜做出妥協的具體準則等。

但就是在講設計的本質,哲學的目的在於,探索事物之本質,所以說這本書很硬,但也因此讓我收益良多。

牛津辭典對Design作的定義:
To form a plan or scheme of, to arrange or conceive in the mind . . .for later execution.
(對...去形成一計畫或方案,運用智力去整理或考量...,以便於後續的執行)

重點會在plan, in the mind, and later execution。

依作家Dorothy Sayers的說法,創作的階段可分為:
1. The formulation of the conceptual constructs
2. Implementation in real media
3. Interactivity with users in real uses

良好的設計具有概念上的完整性:unity, economy,clarity.

但真實在團隊的溝通上,要達到概念的統一是一種目標,而且需要透過大量的對話才能達到。
這點必須不厭其煩地講解、上課、review,才有可能讓這設計的概念,在專案中逐漸的內化。

這讓我感到挫折,專案或公司裡的 Architect / SA / SD / QA,需要花多少的時間,才能讓成員的概念一致化?
(那麼,文件與對話的比例又要做多少的調整?)

接著講到工程師是如何進行思考的。
使用合理的模型這件事。

模型必須包含:
Goal / Desiderata / Utility Function / Constraints / Resource Allocations, Budgets, and Crucial Budgets / Design Trees。

這讓我重新思考了 Constraints/ Design Trees 在專案中的實作問題。

問題在於Constraints是有可能在專案中,隨著user自己在被訪談過程中,對系統的逐漸熟悉,因此對Constraints開始有了修改。
(但在requirement modeling過程中,我們很容易假設Constraints是不變的,而這假設會造成更多設計時的浪費。)

我們都是圍繞著Constraints來做設計的,這樣會影響到Design Trees的路徑。

也就是說,在實戰的過程中,我們必須認知到,Design Trees上的節點,實際上不是最後設計的決策,而只是設計的暫定方案

如此一來,就要牽扯到開發流程上的問題。

以winston Royce的7步模型:
SYSTEM REQUIREMENTS -> SOFTWARE REQUIREMENTS -> SYSTEM DESIGN -> PROGRAM DESIGN -> CODING,UNIT TEST -> INTEGRATION,SYSTEM TEST -> OPERATION , MAINTENANCE

這是理想的開發流程模型,但考慮到上述的兩點問題(Constraints/ Design Trees),加上Resource的配置,就會發現這樣的模型是不可行的。

這也是會什麼近年來會開始流行Agile的開發模型,這樣才能面對不斷的變化。

......邊讀邊思考,問題不斷地冒出,這本真的會要看很久。


接著來說DSLs in action這本。 (唔,也是有點硬!)

 

去年讀了"DSLs in Boo: Domain Specific Languages in .NET"與"Domain-Specific Development with Visual Studio DSL Tools"這兩本。

說真的,無論是實作還是設計上,困惑還是不少。

不過"DSLs in action"這本減輕了我的不少困惑。

從DSL 的實作,External DSLs / Internal DSLs的使用考量上思考,書中主要是使用 Groovy + Java 為主(Internal DSLs的使用),不過也參雜著 Ruby與Scala的範例。

dsl1Internal DSLs

dsl2External DSLs

這是本很好的實踐書,不過,前提是對 Groovy要很熟,還有mix上概念的要很懂,說實在,不是很好K。

image當然,也可以先去看看"Groovy for Domain-Specific Languages",這本簡單一些,可以兩本交雜著看;只是這本的 sample 是跟 twitter互通的,但是 sample跑不起來 (不知是不是twitter的基本認證模式有改?),光讀code還是有些許困難。

至於Marin Fowler大師寫的"Domain-Specific Languages",……,看來要再過幾個月了。


讀這些讀的吃力,是因為挑戰越來越高的緣故嗎?還是我太弱?

不論是哪種原因,都是一種痛苦的快樂;IT界就是因為有看不完的書,是我當初選擇進入IT的緣故啊。

沒有留言: