星期三, 10月 18, 2006

程式效率

qing昨天給予指教,指出動態語言的 instance在casting 時所消耗的非常小。我寫了兩個程式做實驗,一個是Java,另一個是C++;兩種語言的結果沒有太大的差異,呼叫幾十萬次只差幾十毫秒。因此設計時應遵守ISP,盡量使用抽象。

我之所以會有錯誤觀念,是因為十年前看到一篇文章寫BC++大量使用繼承所以比VC慢,仔細想想,這篇文章應該是錯的。程式改善效率應該從瓶頸下手,通常改變演算法與設計是最有效的方式。

這篇我有提到愈來愈少Programmer想要optimize,尤其在微軟的政策下,都以簡單開發為原則,相信市場上高手會愈來愈難找。

程式的效率應該做profile分析,在動態網站的缺點中突顯出一般設計者的迷思。XOOPS在我所認定的標準,算是很慢。什麼叫快呢?嗯,我想想... 你如果知道Yahoo首頁的request/second,大概就知道什麼叫做快。

Coding的本質在Code我指出.Net程式員把SQL Server搞掛,為什麼呢?原來在.Net 2.0裏預設是啟動connection pool,必須自己加上pooling=false,否則會搞出一堆的connection,而且必須等到timeout才關得掉。當然.Net 2.0有ClearAllPools和ClearPool,但Visual Studio使用者那裏會知道那麼多呢?一般企業內MIS只知道連SQLServer,拖拉之後就做完,連測試都不完整,那還管得到效能。也因此,一般企業程式的分析,都變成資料庫分析,而不是物件分析,頂多做到功能分析。(此時又想起7年前做銀行系統,都是以幾支交易為功能單位。)

十年前的電腦硬體效能可能只有現在的百分之一,但一樣可以做出優秀的軟體。現在硬體不斷的進步,軟體的複雜度提昇,而人員的素質卻沒有跟著成長。

好的軟體必須從系統架構開始,再來是設計,最後才是程式語言實作。其中涉及的知識很廣,發生問題時通常都不是Visual Studio拖拉就能解決。

牢騷吐完了,我認為企業的IT主管必須有認知,軟體開發不是請個便宜的人力就能應付,現有的人力很可能無法跟上時代潮流。導入軟體工程以正規的方式開發才是王道,我做的那些東西,充其量不過是玩具。

沒有留言: