根據行政院衛生署的定義,BMI(身體質量指數)大於24是過重,大於27是肥胖,而大於35者稱為病態性肥胖。如果我們也為軟體定義出一套BMI標準,那麼放眼望去,軟體界幾乎全都是充滿五花肉的癡肥軟體,而「肥胖不等於健壯」這句話也同時適用於軟體。

看看幾個主要軟體開發平臺:.NET在父母親餵食生長激素、猛喝高蛋白飲品、施打類固醇的情況下,在短短幾年內很快地長成龐然大物,以6歲的稚齡擁有60歲的大肚腩,就連美人遲暮的高齡Java都比.NET輕巧許多。而即將粉墨登臺的Adobe AIR平臺,以Java和.NET為戒,正努力地要減肥到10MB以內,但是好像必須先砍掉下半身才能達到,如果不砍掉,估計會達到10~15MB,幾乎是當初宣稱的理想體重(5~9MB)的兩倍,一出生就這樣,以後還得了?

再看看幾個常用的軟體,鏞周刊的鏞青天評價是:PDF Reader胖胖,JBuilder胖胖胖,Visual Studio胖胖胖胖,MS Office System胖胖胖胖胖。不過話說回來,當周遭都是胖子的時候,就不會有人覺得自己胖,所以可能這些軟體都覺得自己「還OK呀」。

軟體肥胖(以下簡稱肥軟)是罹患代謝症候群的象徵,已經成為軟體十大死因之一,有相當多併發症,它會吃掉你的CPU計算能力、網路頻寬、記憶體、磁碟空間,而且容易潛藏臭蟲。當軟體胖到一個程度,在安裝、使用與維護上可能都會出問題。

總之,肥軟既吃垮你又拖累你,能擺脫它就盡量一腳把它踢開,而且也要小心不要讓自家生出的孩子是肥軟,成為別人一腳踢開的對象。

為何軟體會病態性地肥胖?把脈之後,從它的經絡脈像顯示,有以下主要原因。
(1)舊的生產力觀念
造成肥軟的首要原因,就是舊的生產力觀念。評估工程師的生產力,最簡單的方式就是「你今天寫了幾行程式」(Source Lines of Code,SLOC)。如果我是程式設計師,我每天的工作重點會是多寫出幾行程式碼,而不是想辦法做出精簡而且高效率的程式。如果一家大型軟體公司內,每個員工都有這種重量不重質的觀念,那麼,寫出來的軟體很快就會體積暴增,大而無當。在軟體公司能用其他更有效的方法評估員工生產力之前,這樣的「量化」思維依舊會存在。

更何況現在的軟體開發往往將「Time To Market」列為第一優先,其他問題(效率、體積、安全、穩定)都被拋諸腦後。(所以大家才普遍認為1.0版的軟體不能用?)老闆開會時只會問:哪些功能做出來了?卻不會問:現在體積多大了?因為忽視體積的大小,所以軟體爆肥是普遍的現象。

(2)使用龐大的框架
惡搞卡通《南方四賤客》(South Park),劇中的胖子Eric Cartman常說:「我不胖,我只是骨架大」(I am not fat, I am big boned)。這句話用來形容許多肥軟相當恰當。如果你的軟體使用龐大的框架(framework),而此框架並非標準地被預先建置在所有的平臺,那麼你的軟體就必須攜帶此框架,導致框架也成為軟體的一部分。有了龐大的骨架,就算沒多少肉,依然是體積可觀的巨人。

我們公司之前開發過一個工具軟體,因為C與Win32的工程師不容易招聘到,最後只好將就著用C#和.NET開發。因為不是所有電腦都安裝.NET框架,所以我們必須把.NET框架包進軟體中,並將框架中用不到的DLL移除,試圖讓軟體體積小一些,不過,最後包出來的軟體還是超過10MB,其中程式體積可能不到十分之一,其他空間都被.NET框架占用。我估計,同樣的程式用C和Win32改寫,只需要數百KB。

(3)為了彈性而疊床架屋
疊床架屋最明顯的例子是J2EE。為了跨越軟硬體平臺、應用伺服器、資料庫伺服器,達到美好的彈性,J2EE已經疊床架屋到令人匪夷所思的地步,一件小事情都可以搞到很浩大。如果你仔細讀過J2EE的手冊,你可能會和我有一樣的感想:「我只是想開發一個Web系統,有必要依循J2EE的方針嗎?」

我們似乎得認真思考:「疊床架屋」真的是賦予軟體「彈性」的唯一道路嗎?我們能在保有彈性的同時,摒除疊床架屋嗎?

J2EE不是特例,疊床架屋的現象在IT技術中到處可見。這麼做當然有好有壞,就看使用者對於優點的重視是否超過對於缺點的忍受。不過,這種為了追求彈性而導致肥大的技術,大概只有Fortune雜誌排名500大的公司才頂得住它的重量而不會被壓垮。

知道肥軟的病灶並不代表就有藥可醫,軟體一旦變胖,你就只能眼睜睜地看著肥軟一暝大一吋地腫起來而束手無策。就算有解藥,也不代表健保有給付,所以你可能吃不起。(未完待續)

作者簡介:
蔡學鏞-技術顧問
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。

熱門新聞

Advertisement