l

2010年2月7日 星期日

還少一本書: The Timeless Way of Building

02/06 23:33 ~ 02/07 02:19

幾天前在 Facebook 上的『Scrum Community in Taiwan』看到十分熱心的柯兄轉貼的一篇文章 Top 20 Best Agile Development Books, Ever,這20本書 Teddy 碰巧翻過 18 本 (請注意,翻過並不等於看完,更不等於看懂...只是... 翻過,沒什麼特別的意思...),這些書有空的話都應該要『翻』一下。不過,Teddy 對於原作者的排名,略有一點意見。引用一下原作者的資料,看一下前10名的排行榜:
  1. Agile Software Development: Principles, Patterns and Practices by Robert C. Martin
  2. Refactoring: Improving the Design of Existing Code by Martin Fowler
  3. Agile Estimating and Planning by Mike Cohn
  4. User Stories Applied: For Agile Software Development by Mike Cohn
  5. The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas
  6. Agile Software Development: The Cooperative Game (2nd Edition) by Alistair Cockburn
  7. Agile and Iterative Development: A Manager's Guide by Craig Larman
  8. Extreme Programming Explained: Embrace Change (2nd Edition) by Kent Beck
  9. Agile Project Management: Creating Innovative Products by Jim Highsmith
  10. Continuous Integration: Improving Software Quality and Reducing Risk by Paul M. Duvall, Steve Matyas, and Andrew Glover

再怎麼輪,榜首也不應該是 Agile Software Development 這一本啊。Teddy 認為這本書寫得最棒的是專門講設計原則的章節(第8到12章以及第20章,The Single-Responsibility Principle, The Open-Closed Principle, The Liskov Substitution Principle, The Dependency-Inversion Principle, The Interface-Segregation Principle, Principles of Package Design)... 自首無罪... 其實 Teddy 也只看了這幾章... 不過這不是重點,重點是,雖然學會並實用這幾個設計原則就可以騙吃騙喝 一輩子 一陣子,但是很多原則並不是作者原創性的作品 。例如,The Open-Closed Principle 和 The Liskov Substitution Principle 在更早之前 Bertrand Meyer  的名著 Object-Oriented Software Construction 這本書就有提到了(這本書很大一本,裡面還有一狗票的設計原則等待鄉民們去挖寶)。

從抽象到具體的順序來看,Teddy 覺得第一名應該是 Kent Beck 寫的 Extreme Programming Explained: Embrace Change (第一版和第二版都應該看一下),因為 Teddy 是讀了 Kent Beck 的書才接觸 agile methods 的,所以本書自然榮登 Teddy 心目中的第一名。

********************

依照往例,以上內容也不是本篇的重點,以下才是本篇的重點。

俗話說『女人的衣櫃總是少一件衣服,女人的鞋櫃總是少一雙鞋子,男人的車庫總是少一部車子,小朋友的卡通總是少看一個小時,宅男的電腦總是少一顆硬碟』。依此類推,『程式設計師的書櫃,應該 總是少一本書』。今天 Teddy 要補上這一本書,一本 agile people 應該要看的書:The Timeless Way of Building (建築的永恆之道)。

看過 Design Patterns 的鄉民們應該有聽過 The Timeless Way of Building 這本書。Teddy 當年因為要研究 patterns 在其他領域的應用才去看 The Timeless Way of Building。在看這本書的當下,只知道它是啟發 software patterns 理論與應用的始祖,並不覺的它和 agile methods 有什麼特別的關係。簡單的說,作者在這本書對於『如何建構有活力,有生氣的建築物』闡述自己的一套理論,這個理論就是 pattern languages 理論。以 Teddy 有限的智慧,無法三言兩語說明清楚(ㄟ,其實 Teddy 也懷疑是否真的了解... 鄉民甲:你是來鬧的嗎?),直接看一段書上的文字比較快:

It (i.e., the timeless way) is a process which brings order out of nothing but ourselves; it cannot be attained, but it will happen of its own accord, if we will only let it.

對應一下 agile 精神... agile 方法是一種流程(process, 也許有些人不喜歡把 agile methods 看作是 process,不過這裡把 process 看成做事情的步驟或方法就好,不用想成重量級的大部頭流程), 可以為開發團隊帶來某種『秩序』或『結構』。要變成一個 agile team 需要靠團隊自身的實踐,無法以強制規定或是工廠管理的方式來建立 agile teams。
 
The prople can shape buildings for themselves, and have done it for centuries, by using languages which I call pattern languages. A pattern language gives each person who uses it the power to create an infinite variety of new and unique buildings, just as his ordinary language gives him the power to create an infinite variety of sentences.

對應一下 agile 精神... agile methods 強調 no big upfront design, evolutionary design, simple design,除非開發團隊成員具有很強的 software patterns 基礎(當然還要有 testing 和 refactoring 等配套,等一下會提到),否則要滿足這些設計精神是很不容易達到的目標。

Once the building are conceived like this, they can be built, directly, from a few simple marks made in the ground---again within a common language, but directly, and without the use of drawings.

對應一下 agile 精神...XP 不是告訴我們,沒什麼事不要畫太多設計圖的啦 (source code is the design)。

Several acts of building, each one done to repair and magnify the product of the previous acts, will slowly generate a larger and more complex whole than any single act can generate.

對應一下 agile 精神... 有沒有聞到 refactoring,iterative and incremental 的味道。

Within the framework of a common language, millions of individual acts of building will together generate a town which is alive, and whole, and unpredictable, without control. This is the slow emergence of the quality without a name, as if from nothing.

對應一下 agile 精神...Scrum 本身是一個 framework,採用 empirical management model 而不是用傳統的 defined processes 來管理負責專案。

寫到這邊 Teddy 和周公的約會已經遲到兩個多小時了,加上這本書的內容實在過於豐富又有點抽象,在沒有準備的情況下 Teddy 也掰不下去了。總之,這本帶點哲學味道的書,對於想要獲得『華山論劍』資格的 agile 鄉民們,是屬於不可不搶的『九陰真經上卷』,練完之後如果沒有走火入魔保證內力大增。

友藏內心獨白:Teddy,你不要看到英文單字一樣就隨便連連看,小心被抓包。

3 則留言:

  1. 報告Teddy學長,我這本書買到現在,都還沒有翻過...Orz

    還虧之前還麻煩長學幫我從amazon買書QQ

    回覆刪除
  2. 告訴你一個秘密,其實這本書有中文版啦。如果想快速看完可以去買中文版來看。

    回覆刪除
  3. 中文版是大陸人翻的,叫「建築的永恆之道」,不知道翻譯的品質如何。不過我還是會以看原書為主了...XD

    回覆刪除