軟體規模與自重

yzhuang發表於2009-06-17
每天上下班都需要坐班車,車載的人以50人,每人平均150斤計算,其載重量不過3.5噸。但是班車的配重(自重)有近10噸,所以客車的有效載荷為30/130,大概23%左右,並且只在較短的時間(上下班時)有效。按照這個觀察的角度,是不是感到資源浪費了呢? 這種現象,使我對軟體的有意資源浪費,這個一直以來的的疑惑找到了答案。 我們知道,Java的執行,是非常耗費計算機系統資源的事情,但是卻有那麼多的企業級的應用都使用Java開發。僅僅為了安全和可靠嗎。 對了,就是為了安全和可靠,因為這是工業級應用的要求,有點不計成本的瘋狂。 現在的軟體越來越耗費系統資源,尤其微軟出產的軟體,能毫不客氣的吸收你在硬體資源上的所有盈餘。如果你為此感到奇怪的話,那應該回顧一下這些年來我們對軟體都做了些什麼樣的苛刻要求。 穩定、安全、易用、簡單、美觀…… 我們已經有輛自行車了,為什麼還要耗費資源(Money)購置轎車呢? 也許是出於同樣的目的,讓我們的軟體從一輛自行車變成了一輛轎車!伴隨著規模的迅速擴大,有效載荷(核心邏輯)的越來越低。大量的程式碼都成了配重,為了支撐那為數不多的有效部分穩定執行。 曾經做過一個又C語言編制的佇列管理程式,改造為流行的Java語言程式。C的程式碼共有3000行,在程式碼級別的對等的改為Java程式後,發現只有1500行左右。這能體現出一點高階計算機語言在變成效率方面的優勢。但是,別樂觀的太早。這1500是按照C語言編碼風格編寫的,既然現在使用Java,這麼做可不合時宜。怎麼辦?按照Java的規定的編碼規約做吧。 接下來的事情有些出乎所料。 新增C語言程式設計中沒有的東西:修改函式名稱、新增註釋、入口引數檢查、例外處理、錯誤Log輸出、緩衝區的封裝……,大概解決緩衝區用了10000行程式碼,畢竟Java中可不能向C語言那樣,開一個Buffer,然後什麼東西都往哪裡仍,現在得吧什麼東西都要封裝並標註好了才能放到緩衝區去。為次設計了一大堆的類來封裝原來雜七雜八的資料。另外新增的例外處理大概也用了10000行的程式碼。其他的部分增加有8000多行。 看看,不得了,從1500到三萬,規模增加了20倍。其中的28500都是為了保證那1500行可靠的執行。所謂的工業化就是這樣:安全第一。 這樣的事情也會令我們迷惑,為什麼要花99%的努力,去防範那1%可能出現的錯誤呢? 還是那句話,工業化使然。因為我們做的是工業化的軟體。 就像生產一輛汽車,有人會說這車一定不會發生車禍而取消所有安全防範措施?! 現在的人們對越來越脆弱,喜歡遷怒於人,樂於給別人找事。即便有這樣一輛汽車,有人敢開但廠家敢給他開嗎?誰也不想引火燒身。 所以,做軟體,也就是生產汽車,不管會不會發生車禍(1%的可能),安全氣囊等的措施(99%的努力)是不可少的。

相關文章