l

2013年6月20日 星期四

軟體架構也可逐步成長(5):Piecemeal Growth

June 19 10:57~12:26

 image

 

Piecemeal Growth(逐步成長)這句話身為本系列文章的標題,已經出現過好幾次了(廢話挑眉質疑)。Piecemeal Growth的精神基本上和iterative and incremental development (迭代與增量開發)相符合,簡而言之,一個系統一次做一點、一次做一點,經過若干的回合之後,系統就做好了。

但是具體而言,到底Piecemeal Growth的內涵是什麼?要如何在「一次做一點、一次做一點」的過程中,不會把樓給蓋歪了?Teddy在《軟體架構也可逐步成長(4):長的正的特質》介紹了一個「長的正」的系統所具備的四個特色。在《如何套用pattern來設計軟體架構》中,Teddy介紹了《Applying Patterns》這篇文章。這篇文章真的寫得很棒,有志做好軟體系統或成為架構師的鄉民們,不可不讀。

不知道鄉民們有沒有發現,在《Applying Patterns》中所提出的A Pattern Language for Applying Patterns(如下圖所示),其中第一個pattern就是Piecemeal Growth。不過這不是重點,重點是,在Piecemeal Growth的下方,有三個支持它的pattern ,分別是:

image

 

  • Architectural Vision
  • Set-wise Refinement
  • Repair Instead Large Lump Design

換句話說,從《Applying Patterns》這篇文章的角度來看,要達到Piecemeal Growth,首先要相信採用演進式設計與重構來發展軟體架構,而非做太多big up-front design(Repair Instead Large Lump Design)。其次以逐步細緻化,用展開的方式來確定軟體架構的細節(Set-wise Refinement)。最後還要幫你的系統建立一個軟體架構願景(Architectural Vision)。這三者合起來,便可得到一個逐步成長且不會長歪掉的軟體架構(理論上...挑眉質疑)。

***

以上內容算是在複習之前所提過的觀念,接下來要介紹Alexander在《A New Theory of Urban Design》書中所提到對於Piecemeal Growth的解釋。Alexander幫Piecemeal Growth這個規則列出了三條子規則:

  • 任何單一的建築增長計畫規模不可太大:單一計畫不可超過5百萬美元(大約是1987年代的1.6億新台幣),或是100,000平方英尺(2,800坪)。
  • 混合合理大小的建築增長計畫:聽到Piecemeal Growth很容易給人一種「所有的行動或計畫都是很小規模」的印象,而這條規則告訴我們,計畫有大、有中、有小,要自己找出一個合適的比例。書中提到兩個極端的情況:
    • 用金額來分配:如果你的預算有3千萬,拿出1千萬來做一個大案子,另外1千萬來做10個中型案子,最後的1千萬來做100個小型案子。
    • 用數量來分配:大型、中型、小型計畫的數量約略相等。

比較合理的情況可能是,15%的案子建地大小介於280~2,800坪(大型案子),35%的案子建地大小介於28~280坪(中型案子),50%的案子建地小於28坪。

螢幕快照 2013-06-19 下午12.03.16

翻拍自《A New Theory of Urban Design》。

  • 建築功能的分配要合理:住宅、購物中心、餐廳、旅館、辦公室、工廠、停車場等不同功能的建築物,在每個開發階段中,要有合理的配置比例。這個概念Teddy覺得有點「end-to-end story」的味道(請參考《End-to-end stories:鄉民要求篇》)。

螢幕快照 2013-06-19 下午12.15.37

翻拍自《A New Theory of Urban Design》。

***

以上就是Alexander在《A New Theory of Urban Design》書中對於Piecemeal Growth的解釋,請鄉民們先思考一下,Piecemeal Growth的三個子規則,與軟體開發活動有沒有對應關係?如果有,這些對應關係是什麼?這三條子規則對於平常的軟體開發與架構發展有沒有幫助?

***

友藏內心獨白:寫完這篇之後對於Piecemeal Growth又有不同的體會啊微笑

2 則留言:

  1. debug time:不過這部是重點 辛苦了 每天都要擠一篇(還要埋點bug看聽眾認不認真?XD)

    回覆刪除