l

2009年7月1日 星期三

Architect-Builder

七、八年前當 Teddy 還在念碩士班的時候,在一次專題演講的課程中系上邀請了國內某著名的物件導向大師前來開演,在此稱為 K大師。事隔多年演講的細節早已遺忘,難忘的是,Teddy 從此不需再費心閱讀K大師所出版的雜誌,因為 Teddy 無法認同 K大師的想法。

在演講中,K大師一再強調軟體開發要學習建築業,如此方可做大。在建築業中,大致可分為兩種人,一種是建築師(architect),另一種是承包商(contractor,也可以直接叫做工人)。建築師只負責規劃,不管施工的細節。如此,建築師在畫完設計圖之後就沒他的事了,可以閃人繼續接下一個案子;至於如何將藍圖變成實際的建築物,是所謂的「施工細節」,可以找一堆廉價的工人來施工即可(到哪裡找?中國大陸是當時很熱門的地點)。如果房子蓋不好是工人的問題,絕對不是建築師的問題,而高高在上的建築師也不應該插手這種屬於黑手工作的施工細節,否則將陷於施工細節而無法脫身接其他案子。

這種「按圖施工,保證成功」的想法與做法,還真的有一堆人相信(甚至到現在都還是主流想法)。Teddy 則是奉行敏捷方法(agile methods),多年之後,敏捷方法在 Teddy 心目中已成為一種信仰。不談理論,舉幾個情境說明為何「按圖施工,保證成功」在大多數的情況是行不通的。

(1) 身為一個程式設計師,曾經依據 architect 交給你的設計文件(use cases 或其他輔助的 UML diagrams)不加修改就可以直接做出系統的請舉手?
(2) 身為一個 architect,有能力寫出不需修改便可直接做出系統的設計文件(use cases或其他輔助的 UML diagrams)的請舉手?

Christopher Alexander 認為,要建造一個美麗、有生氣的建築,必須要揚棄傳統的建築流程。Alexander 建議 architects 與 contractors 應該要「金剛合體」,成為一種新的角色稱之為 architect-builder(註一)。這種精神,嗯…看過「全能住宅王」這個日本節目嗎?很像節目中 architects 扮演的角色。在「全能住宅王」中,建築師會事先到委託人的家裡去了解他們的生活背景以及對於住宅的需求,量身打造屬於這個家庭專屬的住宅。在這個過程中,建築師不是畫完設計圖就閃人,而是不時到工地視察,並且經常需要依據現場狀況動態的修改或增加設計。此外,幾乎所有「全能住宅王」的建築師都會自己下海動手設計一、兩件作品,而委託人也會因為建築師貼心的專屬設計而滿懷感謝之意。

Teddy常常聽到有人說 architects 不需要寫程式,甚至有的公司怕 architects 把手弄髒了,還貼心的明文禁止 architects 寫程式。看看 Kent Beck 怎麼說:「If you stop coding, you stop learning. 」

註一:The Production of Houses, chapter 1.

11 則留言:

  1. 哈哈哈,真想知道那位K大師是誰,難怪國內這麼多機關團體及廠商喜歡搞軟體outsourcing,然後一個個outsourcing的project通通爛尾 XD

    回覆刪除
    回覆
    1. 在經過「戶政系統事件」之後,看到這段留言,感觸更多啊。

      刪除
    2. 有機會可以去玩看看, 就會有一股蛋蛋的哀愁...

      刪除
  2. To David:

    K 大師的真實身份就請容許 Teddy 保密,以免惹上官司...XD。不過有一點更扯的事情,演講結束的 Q&A 時間, Teddy 問 K 大師:那把軟體外包之後,發生『軟體維護』的問題該怎麼辦?K 大師淡淡的回答一句:『這是管理的問題』.......無言的結局。也許真的是 Teddy 智商太低,無法體會箇中真義。

    回覆刪除
  3. 哇哈哈~ "這是管理的問題",經典經典,看誰被記過或把爛尾的案子搓掉,的確都是管理的問題,最後倒楣的都是軟體工程師跟使用者...(默) 不過我實在很想說,國內這些搞軟體管理的顧問公司是不是都去死一死比較好呢? 好好的CMMI可以給你們搞成這個樣子...

    回覆刪除
  4. To David:

    想必 David 也受到 CMMI 的荼毒...說真的 Teddy 有點懷疑這些所謂 CMMI 顧問公司真的有開發過軟體的經驗嗎?這就是台灣人厲害的地方,什麼東西傳到台灣都可以被我們搞到爛掉(記得以前流行過的蛋塔和甜甜圈嗎)。

    最近 Teddy 發現居然有搞 PMP 的公司要在台灣開 Certified Scrum Master 的課程,依稀聞到蛋塔的味道。

    回覆刪除
  5. 我認識某甲某化工五專畢業,然後去美國念個野雞CS Master鍍金後,進工研院後因為一點戰力也沒有,所以就被發配去管理維護CMMI文件,也沒作過Project,現在國內知名某會計事務所下面擔任CMMI 顧問,輔導過認證。

    回覆刪除
    回覆
    1. 我是聽說有人是中文系畢業,結果也成為CMMI主任評鑑員。不過,話說回來,這種「跨領域」的精神應該要鼓勵一下....XD。

      刪除
  6. 推薦這個video (http://confreaks.com/videos/282-lsrc2010-real-software-engineering). 裡面講到所謂的waterfall根本是個誤會. 然後工程領域的工程師不但要設計 還要去工地參與測試. K大師不知道有沒有真的寫過一個產品?

    回覆刪除
    回覆
    1. 剛剛看了這個 video,講的很棒,很有層次 XD。演講末提到 What is Software Design? 這篇論文我以前有讀過,很認同文中的講法:source code is the design。

      刪除