l

2010年6月23日 星期三

軟體是長出來的

06/23 21:40~23:25

Teddy 在『老闆,軟體不是這樣開發滴』提到台灣的硬體代工製造太強,所以很自然的就會以硬體代工的模式來看待軟體開發。關於軟體開發本質的爭論相信鄉民們早已經聽到耳朵都長(消音)了,不管軟體開發到底是屬於『工程』,『藝術』,『技藝』還是其他亂七八糟的大雜燴,今天 Teddy 要談的觀念是『軟體是長出來的,不是組裝起來的』。

這幾天 Teddy 在讀 Practices for Scaling Lean & Agile Development: Large, Multisite, and Offshore Product Development with Large-Scale Scrum 這本書(PS:好長的書名啊,一口氣還念不完!)看到書中談論的一個觀點:

Growing Software vs Building Software

Building software 是大家普遍比較熟知的軟體開發模式,Teddy 把它稱之為『組裝軟體』。意思是說,軟體可以和硬體生產一樣,『規格確定之後尋找不同零件供應商,然後把這些零件全部兜起來組裝好,就變成產品了。這種製造模式,會造成目前常常在媒體上聽到的『iPad 概念股』或是『iPhone 概念股』。因為這些產品賣得好,所以台灣負責生產週邊零件的廠商也跟著『人家吃肉我喝湯』而賺了一筆。

代工代上癮的大,小老闆們,毛利 5 趴,3 趴 賺到都快要趴到地板上了,聽說軟體的『毛利』很高喔,很自然的想到把硬體代工這一套擴展到軟體代工,或是藉由軟體提高硬體的附加價值。但是,軟體規格偏偏比孫悟空的七十二變還要多變,又不像硬體有那麼成熟的協力廠商供應鍊,真的傻傻地想要『組裝軟體』,就算是請了 1000 個人來組成『軟體生產線』,到時候『生產』出來的東西組的起來還真是有鬼。

其實軟體開發就像『種菜』,『種花』,『種水果』一樣,軟體需要靠開發人員每日細心呵護,才能慢慢『成長茁壯(growing)』。翻土,插秧,施肥,灌溉,修剪,除草,抓蟲,防風,防曬,該做的功課不能少,才能種出好作物出來。今年如果颱風特別多,就要小心風害,如果有強烈寒流,就要小心作物凍傷。太陽太大要幫水果穿衣服,有時候缺水還要休耕改種耐旱作物。軟體開發就跟種田是一樣滴,無法靠『組裝』而產生產品。

看看前輩們如何說:
  • Andy Hunt 與 Dave Thomas 說:『Rather than construction, programming is more like gardening』;『All programming is maintenance programming』。
  • Christopher Alexander 認為設計是一種 『differentiating process』而非『synthesis, a process of putting together things, a process of combination』。所以,建造好的建築物是要靠『participation』(客戶的參與)以及『piecemeal growth』(逐步成長)。
  • Steve Freeman 與 Nat Pryce 寫了一本『Growing Object-Oriented Software, Guided by Tests』的書。注意,是 growing 不是 building 喔。
  • Agile methods 採用 iterative and incremental development。
  • Martin Fowler 說 『Evolutionary Design 和 Refactoring』。
以上都是強調軟體跟人一樣,是從小 baby 長成大人,應該沒辦法『蓋』或『組裝』一個真人出來吧...機器人倒是有可能啦。

***

Teddy 扯了這麼一堆,鄉民們可能早就知道了這個概念了。很遺憾的,你老闆應該是屬於『侏儸紀 waterfall 時代』的靈長類,每天還在想著如何靠組裝模式賺大錢。怎麼辦?Teddy 也沒辦法啊,不然幹麼沒事寫部落格來抒發情緒...XD。

***

友藏內心獨白:不寫部落格,就只能回去多喊幾聲『皇上聖明』...實在是喊不出口。

沒有留言:

張貼留言