(本故事除了部分點(diǎn)明道姓并具有故事詳細(xì)發(fā)生的具體時(shí)間點(diǎn)地等部分情節(jié)以外,其它內(nèi)容純屬虛構(gòu),若有雷同,純屬巧合。)
知道Spring卻不知道Rod Johnson的人,好比宇宙中知道社會(huì)中義新中國卻不知道毛澤東的人一樣可笑。
Rod Johnson 是Spring Framework的創(chuàng)建者,也是Java和J2EE領(lǐng)域中的知名專家。Rod是 Interface21公司的CEO,該公司是一家致力于提供專業(yè)級J2EE和Spring Framework服務(wù)的顧問公司。
談到Rod Johnson,除了Spring框架本身以外,他所著作的《Expert One-on-One J2EE Development without EJB》一書,其影響力比Spring框架本身還更加震撼。這里插播一段廣告:《Expert One-on-One J2EE Development without EJB》這本書的中文版去年就已經(jīng)出了,有興趣的朋友可以去買來一看。
Rod Johnson對J2EE乃至整個(gè)Java的貢獻(xiàn)我這里就不再多說了,下面直接引用一些從網(wǎng)上摘下來的原話,我想大家也能看出他的厲害。
我們曾經(jīng)在無數(shù)的書籍和文章中看到,EJB是J2EE的核心技術(shù)之一;而Rod Johnson竟然宣稱,絕大多數(shù)的J2EE應(yīng)用根本不需要EJB。-摘自“J2EE without EJB”書評
Rod Johnson將會(huì)引領(lǐng)一種影響深遠(yuǎn)的潮流。但這潮流不是Spring和Hibernate,也不是IoC和AOP,甚至不是“輕量級架構(gòu)”,而是一切實(shí)事求是的“循證架構(gòu)”的工作方式。惟有掌握這種工作方式,你才能夠真正自信滿滿地挺起胸膛說:“我選擇的架構(gòu)是適合應(yīng)用需求的架構(gòu)。”―摘自“Java視野”網(wǎng)友討論
Rod Johnson認(rèn)為,應(yīng)該是基于實(shí)踐的證據(jù)、來自歷史項(xiàng)目或親自試驗(yàn)的經(jīng)驗(yàn),而不是任何形式的偶像崇拜或者門戶之見。Rod Johnson給我傳授了“循證”的工作方式——那原本就應(yīng)該是程序員的工作方式。-摘自“J2EE without EJB”書評
Spring 提供這些價(jià)值也離不開其它開源框架的支持(Spring 的理念:不去重新發(fā)明輪子),但是 Spring 是所有這些開源框架的集大成者,為集成各種開源的成果提供了一個(gè)非常理想的平臺(tái)。所以 Rod Johnson 對于 J2EE 的貢獻(xiàn)在我看來要比其他人高一些的。-摘自網(wǎng)友評論
總之一句話,在技術(shù)的領(lǐng)域,他是偉人、他是我們心目中的英雄!(呵呵,“英雄”這尊稱叫起來有點(diǎn)肉麻,若是不搞java的朋友看見我隨便叫老外英雄,還一定會(huì)被罵我吃里爬外,崇洋媚外呢。于是,筆者以后就把Rod Johnson稱為大叔,這樣聽起來大家都舒服。)
當(dāng)然,談到Rod Johnson大叔,就一定得談?wù)?“輪子理論”。
“輪子理論”,也即“不要重復(fù)發(fā)明輪子”,這是西方國家的一句諺語,原話是:Don't Reinvent the Wheel。當(dāng)然由于國內(nèi)IT從業(yè)人員接受的都是西方先進(jìn)技術(shù)(誰讓中國沒有先進(jìn)技術(shù)給大家學(xué)呢?),因此看見大家經(jīng)常引用這一句話。“不要重復(fù)發(fā)明輪子”,意思是企業(yè)中任何一項(xiàng)工作實(shí)際上都有人做過,我們所需要做的就是找到做過這件事情的人。拿到軟件領(lǐng)域中就是指有的項(xiàng)目或功能,別人已經(jīng)做過,我們需要用的時(shí)候,直接拿來用即可,而不要重新制造。
“輪子理論”既然只是一句諺語,怎么又跟Rod Johnson大叔聯(lián)系在一起了呢?因?yàn)镽od Johnson大叔告訴我們,Spring就是在“不重復(fù)發(fā)明輪子”的理念及指導(dǎo)原則上做起來。于是一夜之間,隨著Spring在全世界的風(fēng)風(fēng)火火,特別是吹到我們祖國的時(shí)候,也許是愛屋及烏(或鳥)的原因吧,“輪子理論”也被眾多的Spring粉絲當(dāng)成做人做事做程序的信條及原則。
這樣有問題嗎?當(dāng)然有嚴(yán)重的問題。“輪子理論”這一理論本身沒有錯(cuò),錯(cuò)的是輪子理論的濫用,錯(cuò)的是大家被Rod Johnson大叔忽悠了一把而不知或不承認(rèn)。熟悉Spring的朋友都知道,Spring除了IOC、AOP及與其它各種框架的整合集成接口以外,也一樣有自己的WEB MVC、有自己的持久層數(shù)據(jù)庫訪問,當(dāng)然,IOC、AOP就更加不是他的首創(chuàng)了。你能說這些東西難免不帶有“發(fā)明輪子”的嫌疑嗎?筆者由于資歷乃至閱歷皆淺薄,無法證明Spring“發(fā)明了輪子”,這里只是拋出一個(gè)疑命題,還請高人來求證。如果Spring的MVC等能證明他本身也是發(fā)明輪子的話,我們再去想想Rod Johnson大叔說這話的動(dòng)機(jī),難免會(huì)讓人往其他不友好的方面想。
這里沒有其它的惡意,只是就是論事。Rod Johnson大叔在他的書中開篇不是就教育我們:要敢于去懷疑、猜想嗎?。要是沒有Rod Johnson大叔對傳統(tǒng)J2EE模式特別是EJB的懷疑及猜想,又哪來的Spring呢?
西方人口口聲聲說“不發(fā)明輪子”,但實(shí)際情況呢?大家自己睜開眼睛看看,然后閉上眼睛摸著腦門想想,如果真“不發(fā)明輪子”的話,有了JDO,怎么還會(huì)搞出iBatis來,有了iBatis怎么又搞了一個(gè)Hibernate呢?同樣的道理,有了一個(gè)令大家都稱道的struts、后來又冒出個(gè)Tapestry,之后的Webwork、JSF,然后到現(xiàn)在的Spring MVC。這“輪子”一個(gè)又一個(gè)冒出來,一個(gè)比一個(gè)漂亮、好用,有點(diǎn)讓我們這些整天被壓得喘不過氣來的國內(nèi)程序員乃至開發(fā)商應(yīng)接不暇,傻眼了吧?
為什么會(huì)這樣呢?本來我也想不通,直到昨天發(fā)生一件事情,才讓我有所領(lǐng)悟,事情大致是這樣的:
我昨天在大街上看到一個(gè)被扔在馬路邊上全新的寶馬輪子,記得鄉(xiāng)下的小學(xué)同學(xué)曾托我?guī)退乙粋€(gè)拉肥料用三輪車的輪子,于是我就急忙給小學(xué)同學(xué)打電話,問他要不要。結(jié)果我被他一頓臭罵,原話大意是這樣,他說我讀大學(xué)、搞高科技、變傻了,寶馬輪子那是山里人玩得起的嗎?在山村里要輪子壞了怎么辦,還要花幾百塊坐汽車、火車抱到城里修啊,我這三輪車全賣了也只值幾百塊呢?他大字不識(shí)幾個(gè),而那寶馬輪子使用說明書,質(zhì)量鑒定書一大堆,而且他又不放心,還得花時(shí)間考察考察,農(nóng)忙季節(jié)剛好來了,哪有時(shí)間考察?最后還狠狠地冒了一句:你想讓我這個(gè)季度喝西北風(fēng)啊。
小學(xué)同學(xué)說話很直接,雖然土了一點(diǎn),但確實(shí)很有道理。于是,我回來把老同學(xué)教訓(xùn)我的內(nèi)容認(rèn)真歸納整理了一下,得到如下幾個(gè)簡單結(jié)論:
1、?寶馬是高檔車,因此輪子也得配名貴的輪子,其所有的設(shè)計(jì)都是為寶馬這一名車量身打造的,所以在大小、寬度等多方面指標(biāo)都不適合咱村里拉肥料的破三輪車。
2、?寶馬輪子因?yàn)槊F,質(zhì)量好,但也會(huì)出問題的時(shí)候,出了問題一般人不能也不敢修,還必須得拿回大城市的專修店修理,維護(hù)成本太高了。
3、?雖然三輪車已經(jīng)有了輪子,但鄉(xiāng)里的同學(xué)仍然要我?guī)退⒁庥袥]有好的輪子,意思是對現(xiàn)在的輪子不管從功率、效率乃至外表、款式等都不太滿意,仍然需要改進(jìn)。
4、?我去年過春節(jié)回家時(shí)給他帶的兩個(gè)自行車輪子,他瞧不起,而且三輪車也用不上
因此,我想上面提到的Webwork、Tapestry以及Spring MVC等,也是遇到類似的輪子不合適或者不完美的問題,才會(huì)不斷尋求改進(jìn)的方法,才能不斷的更新?lián)Q代,也才導(dǎo)致一個(gè)又一個(gè)的新的、漂亮的輪子被重復(fù)發(fā)明出來。結(jié)論就是,輪子不在于有沒有,不在于是否屬于“重復(fù)發(fā)明”,其關(guān)鍵在于“合不合適”。子曾經(jīng)也曰過:存在即合理嘛!
而我們中國人呢,連發(fā)明輪子的技術(shù)都不會(huì),只能膜拜,干瞪眼,等著學(xué)他們一個(gè)又一個(gè)的輪子使用方法。輪子越來越大,說明書越來越多,翻譯的工作量越來越多,引進(jìn)一個(gè)輪子的周期越來越長,越來越無法控制,實(shí)在不行了就只能罵兩句解解氣,然后一袋煙的功夫又硬著頭皮回來乖乖繼續(xù)學(xué)。我就有點(diǎn)吶悶,全國那么多的天才、大牛,咋就不發(fā)明一個(gè)我們自己的輪子玩玩,讓老外也嘗試一下把中文輪子說明書翻譯成英文那種痛苦滋味。(暈,又做白日夢了,不好意思!)
那么,從科學(xué)的態(tài)度分析,究竟該不該“發(fā)明輪子呢?”。這得用一句經(jīng)典的廢話來總結(jié):實(shí)事求是,具體問題具體分析!
其實(shí)也不用那么復(fù)雜,我們只需要看看現(xiàn)在我們用的輪子,看看這些進(jìn)口的輪子是否都很合適我們,不需要再改進(jìn),更不需要重新發(fā)明了呢?我看未必。中國有著5000年的文化底蘊(yùn),可謂博大精深。進(jìn)口的東西,技術(shù)再好,切不可能完全融入得了中國的文化、思想。況且,現(xiàn)在扔給我們這些輪子,不但用起來仍然有著這樣那樣的問題,這些輪子之間還相互打起架來,搞得我們要做兒子不是,做孫子也不是,一不小心就犯上了選擇恐懼怔。
因此,作為一個(gè)80后的人,我希望跟我一樣的同行,能多去研究別人發(fā)明的輪子,而不是依賴于某幾個(gè)輪子,會(huì)用幾個(gè)輪子就自以為是、沾沾自喜。不但要去探索、研究輪子的發(fā)明技術(shù),原理,還要大膽地、不斷地嘗試發(fā)明更好,更合適自己的輪子。失敗不用怕,怕的是我們連失敗的機(jī)會(huì)都沒有,有機(jī)會(huì)也因?yàn)槭浪滓恍┯^念影響而不敢去爭取及嘗試。不要過分的依賴于現(xiàn)有的這些進(jìn)口輪子,去大膽的發(fā)明輪子吧。等到十年、二十年以后,看到我們的后代依靠我們這些輪子來造火箭、造飛船、闖蕩太空的時(shí)候,一定別有一番滋味。
當(dāng)然,“發(fā)明輪子”也要學(xué)學(xué)Spring,講究藝術(shù)及方法。不能搞閉門造車,當(dāng)全世界人民都在研究火箭輪子的時(shí)候你還停留在研究腳踏三輪車輪子的技術(shù)水平,那就難免鬧笑話了。要多學(xué)習(xí)別人的輪子制造方法,把別人的好的思想、理念、精華借鑒過來,再加入我們民族文化特色的東西及元素,最后為我所用。更要認(rèn)認(rèn)真真,想方設(shè)法的從國內(nèi)同行及前輩們的身上學(xué)習(xí)、取經(jīng),因?yàn)樗麄兊囊粋€(gè)小小的建議或提示會(huì)讓我們少走很多的彎路。最重要的就是要懂得團(tuán)隊(duì)協(xié)作的重要性,學(xué)會(huì)與更多優(yōu)秀的人一起共事,現(xiàn)在已經(jīng)不再是個(gè)人英雄主義的年代,任何事情都需要講究團(tuán)隊(duì)的合作,群策群力,才有可能取得成功。
最后,引一句張靚穎同學(xué)在Tcl廣告歌中所唱的吧:“擁有夢想,就有可能!”,鼓勵(lì)自己的同時(shí),也鼓勵(lì)所有擁有夢想的朋友。
審訊記:
問:大峽,你口口聲聲鼓動(dòng)大家發(fā)明輪子,那么你有發(fā)明輪子的技術(shù)及能耐嗎?
答:我現(xiàn)在仍不具備,仍在不斷學(xué)習(xí)及探索ing,相信以后一定能。補(bǔ)充一下,現(xiàn)在我跟EasyJF的朋友們已經(jīng)開始做著別人看來類似發(fā)明輪子的事情!
問:大峽,作為Spring的超級粉絲,我很負(fù)責(zé)任的告訴你,你是在鉆Spring的牛角尖,拿“輪子理論”來說事,這是無理取鬧,更是對Rod Johnson大叔的不敬。
答:從Rod Johnson大叔身上學(xué)習(xí)了很多東西,我敬重Rod Johnson大叔,也敬重科學(xué)技術(shù),我所說的只是實(shí)事求是,您覺得不對的地方請予指正,萬分感謝。
本文作者:EasyJF開源團(tuán)隊(duì)??大峽 版權(quán)歸EasyJF開源團(tuán)隊(duì)所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留作者版權(quán)聲明,謝謝!)
附
關(guān)于玩玩Spring系列,玩的過程及結(jié)果將會(huì)不定期在以下三個(gè)網(wǎng)站全球同步公布:
1.EasyJF開源團(tuán)隊(duì)官方網(wǎng)站,網(wǎng)址:http://www.easyjf.com
2.筆者的Blog,網(wǎng)址:http://m.tkk7.com/daxia/
3.Java研究組織(JR) ,網(wǎng)址:http://www.javaresearch.org
歡迎更多跟我一樣愛玩的哥哥姐姐弟弟妹妹一起來玩。