明月發現很多小白站長們對WordPress的認知都是“人云亦云”式的,作為一個六年的WordPress老站長,我是對WordPress情有獨鐘一直深愛著,今天分享一篇專業PHP程序員僅從WordPress代碼質量上分析一下WordPress,看完就能理解為什么WordPress可以占據全世界互聯網26%的份額獲得“老大”地位了。
我是WordPress多年的老用戶了,從WordPress1.5開始使用,到WordPress2.3開始出現重大改革,后來逐步的WordPress3.x,4.x,我依然堅持著使用WordPress,而且,也因為從2.0時代開始,深度研究WordPress的代碼,我成為了一名PHP程序員。
現如今,我已經是一個工作5年的PHP程序員了,我覺得問到這種問題,我理應出來回答一下。
代碼質量,這四個字,我們先討論下它們的內涵和外延吧,如果概念不清的話,我想大家也是無法評價的。不如看到這里的同學來告訴我,談到代碼質量,你們想到的都是些什么?
高內聚
低耦合
可讀性
可維護性
可測試性
分層
抽象
DRY
面向對象
設計模式
不知道我說全了沒有?反正無法說全的吧,還有很多很多咯……如果這么去評價這個項目的話,我只能說,WordPress的代碼還是挺爛的啦~
但是,如果我們來看看WordPress的故事,相信你有不同的看法。首先,我們來看看WordPress出現的年代,WordPress眾所周知的作者Matt,是1984年生人,他在2003年1月的時候,開始寫WordPress,那時候,因為他使用一個叫b2/cafelog的程序,覺得不爽,希望讓它能夠支持現代的Web標準,才發起這個項目,是在cafelog的代碼基礎上開始改寫的。所以,WordPress不是從0開始構建的,本身是站在巨人肩膀上的,但是這個巨人,基本上垂垂老矣了(連Web標準的概念都沒有)。
再來看看那個年代吧,首先那時候的Matt,是休斯頓大學政治科學系大一學生,然后他是薩克斯樂手,喜歡音樂、攝影和旅游,所以,他在編程方面是個菜鳥……他當時只有19歲。所以說,他就算搞不定這事情也毫不奇怪,而結果WordPress成了世界上最著名的博客程序,可見,他還是非常天才的,他搞定了,而且,看看他搞這個的目的,他需要一個滿足自己要求和符合Web標準的博客程序,僅此而已,而他做到了!
當時的外部環境呢?說到WordPress,就無法不提到PHP,PHP那時候,正式取得巨大成功的時候,但是不好意思的告訴你們,PHP取得巨大成功,是從PHP4.x開始的,而PHP作為一個飽受詬病的語言,從開始就根本沒有面向對象的概念,只是為了解決Web開發而設計的一個語言而已,那時候估計還沒想過用PHP做多偉大的軟件,只是想做個HomePage而已。支持面向對象的PHP5.x,是2004年7月才首次Release的,而且那時候,PHP4.x已經是非常巨大的成功,而且已經成功了好多年,以至于很多軟件都來不及遷移到5.x。
所以,大家想想吧,用最爛的PHP語言(不支持面向對象),用面向過程的編程范式,寫了一個能run的blog,而且功能完善齊備,部署簡單,安裝順利,bug很少,你們說說代碼質量怎么樣?。縿e問我啊,我不知道啊。
我直到2.x之后,能力才逐漸能夠潛心下來看代碼,WordPress里面的很多思想還是非常牛逼閃閃的。比如,它的Action和Hook機制。這個玩意兒,說有多神秘,一點也不啊。這不就是一個Observer設計模式嘛,就那么自然而然地在里面,用來解決問題了啊,而且是用面向過程實現的Observer哦!插件機制,不就是依賴注入嘛。還有優先級隊列?。√幚鞢ategory那里,遞歸,樹的構造,算法也杠杠的啊。再看到了2.3的時候,引入的tag,信息檢索的思維也是杠杠的啊,tag的思想比起樹狀的分類目錄,已經直達現代了啊。
WordPress另一個厲害的地方是演化,從PHP4.x走來,進化到PHP5.x,然后它長時間都是同時支持PHP4.x和PHP5.x的語法的,我想說的是,PHP4發展到晚期,出現了面向對象了,但是很簡陋,連訪問控制都沒有啊,可是WordPress一直在同時支持兩代語言的語法??!一直考慮了很多個人博主使用虛擬主機,不易隨便升級系統的困擾,盡可能讓他們用上更好的版本啊。等到歷史的車輪駛入PHP5.x后,里面一個又一個的模塊,在一個個迭代里面,逐步的面向對象化。Widget的Class版出現,首先結束了寫個Widget用一坨面向過程方法。后面,漸漸的越來越多內部模塊都逐漸面向對象化了。在實施這個過程的時候,所有用老的版本開發的插件,都持續地能用,WordPress的向下兼容,不但跨越各種Minor版本號,也跨越Major版本號好不好。我在2.x寫的某些插件,現在還能繼續使用呢!
抒發感慨都抒發得我累了。
WordPress從代碼審美來看,依然不是什么漂亮的作品。里面代碼臟、亂,各種trick,表現和邏輯混雜,耦合等等問題,不勝枚舉。
但是從用戶至上的角度來看代碼質量的話,WordPress毫無疑問可以排進世界上最好的軟件名錄里面。
部署簡便,依賴少,基本不依賴各種擴展;
向下兼容,兼容機器(*nix、win),兼容解釋器(PHP4.x、5.x),兼容數據庫(MySQL,PostgreSQL),兼容社區(插件、皮膚的老版本)
界面時尚,設計潮流,緊跟時代腳步功能簡單易用,bug很少
安全性基本符合中小網站要求
性能基本符合中小網站要求
所以,WordPress是一個質量很好的項目,而且一直秉承著用戶至上的精神,它的用戶不光是寫博客的博主,更是成千上萬依賴WordPress賺取收入的自由職業程序員,WordPress沒有粗暴的要求他們不斷升級插件、皮膚的版本去追隨版本(比如萬惡的蘋果),也沒有粗暴的禁止老版本的使用,而是極盡所能的兼容一切。
所以,直到今日,WordPress依然是非常流行的博客系統,而且已經逐步升級為一個小型的CMS系統,而且其開放的架構,Hook思想,可以讓人把它改成各種東西,有人做了網店,也有人做了社區,無所不能啊。
如果沉下心來,仔細研究代碼,不光是審美,還要考慮歷史因素,現實因素,不光研究一個版本,還要研究新版,研究代碼演化,相信還是能學到很多很多東西的,或許學這個,無法成為偉大的程序員,但是,你可能會成為一個優秀的產品經理,學會怎么去尊重用戶,怎么去一切以用戶價值為依歸,也可以成為一個優秀的工程師,學會怎么讓一坨看起來丑陋不堪的代碼,不斷往更好的方向發展,跟上時代潮流和腳本,而不是放任它腐爛發臭。