l

2011年7月15日 星期五

給我裝快一點

July 15 22:14~23:33

一個月前 Teddy 打算買人生第一部汽車,因為 Teddy 對車子完全不懂,所以花了許多時間在網路上爬文。由於 Teddy 口袋不深,所準備的預算大概只能買國產車。在這之前,Teddy 對於國產車的印象,一直停留在『裕隆』所生產的『飛羚101』的那個年代(新新人類內心獨白:這是什麼碗糕?),但是為什麼網路上把 Toyota, Nissan, Mitsubishi 等日系品牌的小車也都歸類在『國產車』這個分類?後來 Teddy 才搞懂,原來這些外國品牌的車,為了成本考量(省一點關稅),和國內的汽車廠商合作,將由國外設計的車輛,在台灣『組裝』,這樣就變成了國產車了。

原來如此,難怪 Teddy 有時候在網路上看到有鄉民們抱怨說買到 Toyota 的新車卻發現很多問題。奇怪了,由於 Teddy 之前讀了好幾本關於 Toyota Production System (TPS) 的書,印此留下了『Toyota 出品,觀眾有信心』的印象,為什麼會有鄉民們抱怨 Toyota 的新車組裝不好。原來是......應該說....原來『可能是』台灣的組裝水準沒有日本那麼好(路人甲:這句應該用肯定句吧。)。後來 Teddy 又陸陸續續發現有不少的鄉民們都在抱怨這些外國品牌的車輛『國產化』之後,品質變差了。

這件事給 Teddy 一個啟示,那就是『組裝很重要』。就算是整車的零件全部都是 Made in Japan(迷之音:壓縮機,日本生產的非常非常稀少...XD),但是只要組裝出問題,最後顧客拿到的還是一輛爛車。

***

那麼軟體呢?還記得 Teddy 之前介紹過的 "What is Software Design?" 這篇文章的作者Reeves 提到,code (程式碼) 本身才是『軟體設計』的產出物, 至於 compile, link 這些活動才是軟體生產(組裝)活動,成本趨近於零 (IDE 上面按個按鈕就 OK)。當然,如果軟體稍具規模的話,光靠 IDE 來產出軟體產品是不太夠的,因此軟體生產活動的責任就落到 CI (continuous integration) 或是 build systems 身上。想一想也挺有道理的,不管軟體個別模組或是元件品質有多好,要是『組裝』沒有搞好,最後拿到的還是一個爛東西。Teddy 10 幾年前就有切身之痛,軟體裝在客戶端,才發現包到一個舊版本的 dll 檔案,導致某個功能不能用。這跟拿到一台雨刷不會動,或是引擎蓋無法密合的『新車』,有什麼不同?

照理講,有規模的軟體開發公司,都有專門人員來負責組裝軟體。但 Teddy 相信絕大多數的鄉民們,應該跟 Teddy 一樣,只能 DIY。DIY 就 DIY 吧,誰叫咱們是窮苦人家的小孩呢...XD

組裝軟體跟組裝車輛一樣,有三個重點:
  • 要裝得快:人別一小時可以組裝 10 輛車,你只能裝 1 輛,那就遜掉了。
  • 要裝得好(品質要好):別人裝的車連續開 10 萬公里都沒問題,你裝的車開一開方向盤還會掉下來(Teddy 內心獨白:好一個卡通人生啊,車子開到方向盤掉下來才會有王子現身,這樣講也對啦...XD),遜掉中的遜掉。
  • 要裝得省(費用要省):人家裝一台車的工錢成本只要 5 千塊,你要花 5 萬,那就...太貴了。
上面三點聽起來好像是廢話,沒錯,但是這是有用的廢話。別小看這三句廢話,要全部做到還真是不簡單。 Teddy 之前提過的 『土炮跨平台自動化功能測試環境 』就是用來自動驗證軟體是否有『裝得好』同時考量到『裝得省』的一種作法。而『Ten-Minute Build 』則是探討如何『裝得快』。沒想到類似的觀念在幾天前 Teddy 介紹的 Software Build Systems: Principles and Experience 這本書裡面也有提到,難怪 Teddy 讀了這本書之後,有一種相見恨晚之感慨。算一算 Teddy 研究  CI 也有超過六年的時間了,papers 都寫了好幾篇,CI 系統也開發了好幾代,但就是沒辦法像『阿斗仔』寫出這麼好的書。不過要是存心想騙錢的話,還是可以寫出好幾本書。書名 Teddy 都想好了:
  • 寫給程式設計師看的 CI。
  • 寫給架構師看的 CI。
  • 寫給專案經理看的 CI。 
  • 寫給老闆看的 CI。 
  • 寫給客戶看的 CI。
  • ... 
  • 寫給總統看的 CI。 
  • 寫給死老百姓看的 CI。
  • 寫給你媽媽看的 CI...XD。
(內行人內心獨白:在台灣寫書是賺不到什麼錢滴,但是用騙的就不一定啦...哇..哈哈哈哈....)。

嗯嗯....言歸正傳,今天 Teddy 稍微介紹一下 Software Build Systems: Principles and Experience 這本書第 19 章, p. 515 提到的加快 build 速度所需注意的四點:
  • Measuring build system performance
  • Eliminating unnecessary rebuilds
  • Parallelism
  • Reducing disk usage
這四點不用解釋光看標題就知道是什麼意思了,其實只要鄉民們有在花腦筋做 CI 都可以推導出來(路人甲:這樣根本不算有介紹到吧!)。

講完收工。

***

友藏內心獨白:關於組裝,還有一件不能說的秘密...嘿嘿嘿...。

沒有留言:

張貼留言