廢話不多說,寫完之後還要去睡回籠覺。今天來談一下另一個與 architecture 有關的『舊』。
一旦架構設計完畢之後,接下來就是 designers 與 programmers 他家的事,與 architect 無關。Architect 是很『昂貴』的資源,要趕快去接其他的案子賺幫公司賺錢。為了怕 architect 把手弄髒,一律禁止 architect 寫任何一行的程式碼。
以上觀念需要被修正。Teddy 曾經聽過好幾個人提到類似的說法,萬一涉世未深的鄉民們真傻傻照做,那可是陷入萬劫不復的地步。會有這種說法,大體是有人把『software architect』類比為設計建築物的『建築師』。想一想,是不是有些『建案』號稱從國外隨便找個『建築大師』來設計豪宅,一坪隨便就可以賣個一百多萬,真是噱暴了。這些『建築大師』同時間當然是有好幾案子在手邊,而且設計圖畫完之後剩下的就是『施工團隊』的事了,施工這種『小細節』哪敢煩勞『建築大師』操心,人家可是一秒鐘幾十萬上下滴。
依循此種思考邏輯,如果 software architect 也可以只負責『畫設計圖』不用管實做,那就可以同時幫老闆接很多案子,賺好多錢啊。蟹老闆,真是太棒了!所以,software architect 只負責『做設計』,設計完成之後程式寫不出來是 programmers 太遜,絕對不是 software architect 的設計有問題。Software architect 更是不能動手寫程式,因為 coding 這種『沒什麼學問』的事情,只會耽誤 software architect 接更多的案子,賺更多的錢。
***
鄉民甲:講這麼多,那 software architect 到底要幹麼?
首先套句『食神』的話:『只要有心,人人都可以是 architect』。Architect 與 programmer 只是一種角色的區分,誰說 programmer 就不能做架構設計,或是 architect 就不能或不該寫程式?在一個團隊中,當然會有某些比較有經驗的人,負責較多所謂『架構設計』,但不表示其他人就應該放棄所有『架構設計』的權利或機會,僅僅負責所謂『沒什麼學問的 coding 』工作。嚴格講起來,source code 本身才算是軟體設計(請參考 What is Software Design?... 這一篇文章很經典,比起 Teddy 胡扯的文章好太多了,而且可能會改變一個軟體從業人員的一生。在此 Teddy 再次推薦),至於那些畫得『漂漂亮亮的 UML diagrams』只能算是設計過程中的附屬品。想一下,很多建案是不是設計圖的畫得美美的,等到真的住進去才發現,哇靠...近一點看,怎麼主臥室這麼小,格局這麼差。
關於反駁『一旦架構設計完畢之後,接下來就是 designers 與 programmers 他家的事,與 architect 無關』的文章,可參考 Architect-Builder 。接下來談談 architect 該不該寫程式這件事。每次提到這個問題 Teddy 就想到牛頭牌沙茶醬,不對,是想到 Kent Beck 在 Smalltalk: Best Practice Patterns 這本書中所寫的幾句話:
To me, development consists of two processes that feed each other. First, you figure out what you want the computer to do, Then, you instruct the computer do do it. Trying to write those instructions inevitably changes what you want the computer to do, and so it goes. (接下來這一段是重點)
In this model, coding isn't the poor handmaiden of design or analysis. Coding is where your fuzzy, comfortable ideas awaken in the harsh dawn of reality. It is where you learn what your computer can do. If you stop coding, you stop learning.
有些所謂的『系統分析師』或是『軟體架構師』會認為,老子(老娘)好不容易熬到這的地位,當然是奉行『君子動口不動手』的最高指導原則,深怕萬一不小心『動手』就從高高在上的君子變成低低在下的小人。Software architect 也需要 coding 並不是說要跟 programmer 搶飯碗,把全部的需求都做完。但至少要能夠驗證所設計出來的所謂『軟體架構』是可行的。如何驗證?最好是實做一個 architecture prototype 出來。如何實做,阿就 coding 啊。
友藏內心獨白:類似的話題好像講了好幾遍了,真是越老越『雜念』。
沒有留言:
張貼留言