前幾天方室網志寫了一篇文章這越來越臃腫的軟件,我看完后才懂有這么一個叫做“安迪比爾”的定律,它描述了軟件商跟硬件商的關系。
定律內容簡單說,就是軟件與硬件是互相促進的關系。
硬件的性能越來越強,軟件的胃口也越來越大。
實話說,當今智能手機的性能早已經超越了七八十年代的老電腦了,可那時候的計算機能夠支撐載人登月的任務,而如今的掌機只能用來玩玩小游戲運行小軟件,是什么造成了這種奇怪的局面?
不是硬件真的不強,而是軟件體積的確太大,這樣解釋下來真的很符合人們的直覺!
我在文后評論說這“安迪比爾定律”不對,現在仔細想想其實它是說對了一半,軟件的確是越來越臃腫,但相應的功能也越來越多,雖然很多功能可能用不著,但作為一個要符合七八億人胃口的東西,到如今水平也的確不易,但這功能什么的都是次要的,我了解到一些觀點,認為背后的真相應該是:當今很多軟件充滿了垃圾的代碼,這并非有意為之,只是一種無奈的現象。
首先,大家猜猜一個完整獨立的博客程序代碼可以做多么???wordpress3.8版本解壓后占用空間是17.2M。
而我了解到的王志勇的博客采用的是他自己開發的,以精簡高效為主要目標的Arsue Blog,主程序在20K以內,核心程序在5K以內,Blog首頁的主程序在1K左右。
注意,兩者體積單位是不同的,一個M級,一個是K級,相差一千倍!使用Arsue Blog搭建的博客即便用的是價格低廉的虛擬主機,也能達到運行如飛一樣的速度。
以下就是從果殼網上摘來的行業人士的觀點
再牛逼的軟件,里面也必然有新手/畢業生/實習生貢獻的代碼,并且是極爛,極不穩定的代碼。包括你現在用的微軟操作系統,蘋果播放器,谷歌瀏覽器……有人說谷歌對于合入代碼控制極為嚴格,沒錯,但是仍然有新手合入的爛代碼,谷歌曾經吐槽過這樣一件事:C語言的創始人曾經被谷歌招聘成為員工,但在入職三個月后仍然沒有合入代碼的權限,真實原因其實是因為各種流程沒有走完,但被外界吐槽的是這樣的牛人都不讓寫代碼,同時谷歌還是混入了大量的低質量代碼。
Java的創始人SUN公司曾經有一次組織了大量人力物力對所有Java代碼使用靜態工具檢查并消除所有lint告警和錯誤,這被他們當作一件極其大的成就來宣傳。
通常大公司里對于代碼的態度是這樣的:只要這段代碼通過了所有測試并且已經入庫,那么,除非有一個能說服所有人,包括項目經理,架構師,測試部,市場部等等的理由,那么就不允許再被修改。
而這個理由通常是沒有的。
而且越是大公司越對這條規定執行的嚴格,微軟的一個前高級官員曾經還特地挑出來一段爛代碼自曝家丑。
另一方面,越是編程高手越喜歡蔑視編程規則,寫出一些炫技的代碼,這也造成了一些低質量代碼混入
以前微軟的源代碼曾經泄漏過,里面的注釋里,滿滿的都是程序員面對爛代碼的吐槽啊。
有一段時間我還在想恐怕Linux是唯一的神話了,后來我發現在某種意義上是的,Linux會在爛代碼之前注釋說:這段代碼很爛,不要學。
之所以Linux會容忍爛代碼混入版本,是因為他們懶得寫,然后一些大公司就乘虛而入了。
我知道可能很多人會覺得這沒什么,可是對于一個將蘋果谷歌Linux奉為心目中的圣地的程序員來說這簡直就是精神支柱的幻滅啊!??!
然后,我也了解過一些老鳥對菜鳥的忠告,其中一條是
避開重寫一切的誘惑
盡可能多的重用代碼是最好的選擇,無論代碼是多么的丑陋,畢竟它已經被測試過了,也被審查過了
拋棄舊代碼——尤其是存在于產品中的代碼——也意味著拋棄了經年累月測試并實戰過的代碼,以及你還未知曉的周邊代碼和bug補丁。
這會浪費大量的時間、精力和多年積累下來的知識
最后我明白了為何近些年很多大公司的軟件更新版本越來越快,其實都是小修小補,鮮見有什么脫胎換骨的徹底變革。
原因恐怕就如上所說,沒有什么人敢動那些身經百戰的老代碼,即便效率它們再怎么低下,邏輯有再多的問題,只要硬件能跟上,在當今時代的高性能機子能跑得順,那就不會有人考慮給它精簡了。