本文原文出处是:Spring中Rod Johnson与“轮子理论”.,值得我们学习与反思。文中的一句话:多去研究别人发明的轮子,而不是依赖于某几个轮子,会用几个轮子就自以为是、沾沾自喜。不但要去探索、研究轮子的发明技术,原理,还要大胆地、不断地尝试发明更好,更合适自己的轮子。失败不用怕,怕的是我们连失败的机会都没有,有机会也因为世俗一些观念影响而不敢去争取及尝试。不要过分的依赖于现有的这些进口轮子,去大胆的发明轮子吧。我也要谨记,上升点层面,这是我们所有程序猿应该为止奋斗的事情。

Rod JohnsonSpring Framework的创建者,也是Java和J2EE领域中的知名专家。Rod是Interface21公司的CEO,该公司是一家致力于提供专业级J2EE和Spring Framework服务的顾问公司。

image

谈到Rod Johnson,除了Spring框架本身以外,他所著作的《Expert One-on-One J2EE Development without EJB》一书,其影响力比Spring框架本身还更加震撼。这里插播一段广告:《Expert One-on-One J2EE Development without EJB》这本书的中文版去年就已经出了,有兴趣的朋友可以去买来一看。

Rod Johnson对J2EE乃至整个Java的贡献我这里就不再多说了,下面直接引用一些从网上摘下来的原话,我想大家也能看出他的厉害。

image

我们曾经在无数的书籍和文章中看到,EJB是J2EE的核心技术之一;而Rod Johnson竟然宣称,绝大多数的J2EE应用根本不需要EJB。-摘自“J2EE without EJB”书评

官方说法,EJB就是企业级javaBean,是基于java语言的服务器框架技术,通过EJB我们可以轻松的构建企业级,分布式的构建应用。也就是说EJB提供了一个框架来开发和实施分布式商务逻辑。

EJB可以帮助我们解决企业级开发分布式,分布式事务等这些问题,让程序员从复杂的关系中抽离出来,专心开发企业业务逻辑。

但是为什么现在好像不怎么用它了呢?

以上我们知道,EJB规范的关键目标之一就是简化应用代码,让编写应用变得更容易,开发人员不必了解低级事务,状态管理,多线程,连接池等,理论上通过把所有低级问题都推向EJB容器,开发人员能够把精力都投入业务逻辑,但其实EJB在消除复杂性的情况下,给应用增加的复杂性也一样大:

  • ejb是比较重量级,学习成本高,复杂性高,潜在问题多。
  • ejb难以调试:看到ejb的调用流程,虽然看上去ejb让用户不用了解远程调用细节,使用简单,但是由于里面的调用过程复杂,一旦有一个环节错了,用户都难以调试,排错,开发过程中出现问题不可避免,而解决ejb的问题,解决周期要比较久。出错的时候,错误信息也千奇百怪。
  • ejb的性能问题:ejb的调用涉及太多类的序列化和反序列化,本来通过网络传输已经很慢了,还要传递对象,数据量又更大了,还要涉及了对象的序列化和反序列化,这中间有太多的开销了。
  • ejb的替换开源产品太多了:现在业务逻辑,在java上要用框架的有spring,远程调用,有webservice(apache cxf已经做得很好了,而且webservice又是通用标准),mina(一个apache的NIO框架),netty(现在性能最快的NIO框架,来自jboss).而且这些产品都是可移植,社区交流多,出了问题,google就找到了。

EJB 是分布式应用和复杂事务管理问题的一个上佳解决方案。但是,许多应用没有遇到这些问题,EJB在这样的应用中增加了不必要的复杂性。一个EJB解决方案可以比喻为一辆卡车,而一个WEB应用服务可以比喻为一辆小轿车。当我们需要执行一些像搬运大型对象之类的任务时,一辆卡车会被一辆小轿车高效得多。但是,当一辆卡车和小轿车做相同工作时,小轿车的灵活性、更容易操作!

Rod Johnson将会引领一种影响深远的潮流。但这潮流不是Spring和Hibernate,也不是IoC和AOP,甚至不是“轻量级架构”,而是一切实事求是的“循证架构”的工作方式。惟有掌握这种工作方式,你才能够真正自信满满地挺起胸膛说:“我选择的架构是适合应用需求的架构。”―摘自“Java视野”网友讨论

Rod Johnson认为,应该是基于实践的证据、来自历史项目或亲自试验的经验,而不是任何形式的偶像崇拜或者门户之见。Rod Johnson给我传授了“循证”的工作方式——那原本就应该是程序员的工作方式。-摘自“J2EE without EJB”书评

Spring 提供这些价值也离不开其它开源框架的支持(Spring 的理念:不去重新发明轮子),但是Spring 是所有这些开源框架的集大成者,为集成各种开源的成果提供了一个非常理想的平台。所以Rod Johnson对于J2EE的贡献在我看来要比其他人高一些的。-摘自网友评论

总之一句话,在技术的领域,他是伟人、他是我们心目中的英雄!(呵呵,“英雄”这尊称叫起来有点肉麻,笔者以后就把Rod Johnson称为大叔,这样听起来大家都舒服。)

当然,谈到Rod Johnson大叔,就一定得谈谈“轮子理论”

image

“轮子理论”,也即“不要重复发明轮子”,这是西方国家的一句谚语,原话是:Don't Reinvent the Wheel。当然由于国内IT从业人员接受的都是西方先进技术(谁让中国没有先进技术给大家学呢?),因此看见大家经常引用这一句话。“不要重复发明轮子”,意思是企业中任何一项工作实际上都有人做过,我们所需要做的就是找到做过这件事情的人。拿到软件领域中就是指有的项目或功能,别人已经做过,我们需要用的时候,直接拿来用即可,而不要重新制造。

“轮子理论”既然只是一句谚语,怎么又跟Rod Johnson大叔联系在一起了呢?因为Rod Johnson大叔告诉我们,Spring就是在“不重复发明轮子”的理念及指导原则上做起来。于是一夜之间,随着Spring在全世界的风风火火,特别是吹到我们祖国的时候,也许是爱屋及乌(或鸟)的原因吧,“轮子理论”也被众多的Spring粉丝当成做人做事做程序的信条及原则。

这样有问题吗?当然有严重的问题。“轮子理论”这一理论本身没有错,错的是轮子理论的滥用,错的是大家被Rod Johnson大叔忽悠了一把而不知或不承认。熟悉Spring的朋友都知道,Spring除了IOC、AOP及与其它各种框架的整合集成接口以外,也一样有自己的WEB MVC、有自己的持久层数据库访问,当然,IOC、AOP就更加不是他的首创了。你能说这些东西难免不带有“发明轮子”的嫌疑吗?笔者由于资历乃至阅历皆浅薄,无法证明Spring“发明了轮子”,这里只是抛出一个疑命题,还请高人来求证。如果Spring的MVC等能证明他本身也是发明轮子的话,我们再去想想Rod Johnson大叔说这话的动机,难免会让人往其他不友好的方面想。

这里没有其它的恶意,只是就是论事。Rod Johnson大叔在他的书中开篇不是就教育我们:要敢于去怀疑、猜想吗?。要是没有Rod Johnson大叔对传统J2EE模式特别是EJB的怀疑及猜想,又哪来的Spring呢?

西方人口口声声说“不发明轮子”,但实际情况呢?大家自己睁开眼睛看看,然后闭上眼睛摸着脑门想想,如果真“不发明轮子”的话,有了JDO,怎么还会搞出iBatis来,有了?iBatis怎么又搞了一个Hibernate呢?同样的道理,有了一个令大家都称道的struts、后来又冒出个Tapestry,之后的Webwork、JSF,然后到现在的Spring MVC。这“轮子”一个又一个冒出来,一个比一个漂亮、好用,有点让我们这些整天被压得喘不过气来的国内程序员乃至开发商应接不暇,傻眼了吧?

为什么会这样呢?本来我也想不通,直到昨天发生一件事情,才让我有所领悟,事情大致是这样的:

我昨天在大街上看到一个被扔在马路边上全新的宝马轮子,记得乡下的小学同学曾托我帮他找一个拉肥料用三轮车的轮子,于是我就急忙给小学同学打电话,问他要不要。结果我被他一顿臭骂,原话大意是这样,他说我读大学、搞高科技、变傻了,宝马轮子那是山里人玩得起的吗?在山村里要轮子坏了怎么办,还要花几百块坐汽车、火车抱到城里修啊,我这三轮车全卖了也只值几百块呢?他大字不识几个,而那宝马轮子使用说明书,质量鉴定书一大堆,而且他又不放心,还得花时间考察考察,农忙季节刚好来了,哪有时间考察?最后还狠狠地冒了一句:你想让我这个季度喝西北风啊。

小学同学说话很直接,虽然土了一点,但确实很有道理。于是,我回来把老同学教训我的内容认真归纳整理了一下,得到如下几个简单结论:

1、宝马是高档车,因此轮子也得配名贵的轮子,其所有的设计都是为宝马这一名车量身打造的,所以在大小、宽度等多方面指标都不适合咱村里拉肥料的破三轮车。

2、宝马轮子因为名贵,质量好,但也会出问题的时候,出了问题一般人不能也不敢修,还必须得拿回大城市的专修店修理,维护成本太高了。

3、虽然三轮车已经有了轮子,但乡里的同学仍然要我帮他注意有没有好的轮子,意思是对现在的轮子不管从功率、效率乃至外表、款式等都不太满意,仍然需要改进。

4、我去年过春节回家时给他带的两个自行车轮子,他瞧不起,而且三轮车也用不上。

因此,我想上面提到的WebworkTapestry以及Spring MVC等,也是遇到类似的轮子不合适或者不完美的问题,才会不断寻求改进的方法,才能不断的更新换代,也才导致一个又一个的新的、漂亮的轮子被重复发明出来。结论就是,轮子不在于有没有,不在于是否属于“重复发明”,其关键在于“合不合适”。子曾经也曰过:存在即合理嘛!

#p#

而我们中国人呢,连发明轮子的技术都不会,只能膜拜,干瞪眼,等着学他们一个又一个的轮子使用方法。轮子越来越大,说明书越来越多,翻译的工作量越来越多,引进一个轮子的周期越来越长,越来越无法控制,实在不行了就只能骂两句解解气,然后一袋烟的功夫又硬着头皮回来乖乖继续学。我就有点呐闷,全国那么多的天才、大牛,咋就不发明一个我们自己的轮子玩玩,让老外也尝试一下把中文轮子说明书翻译成英文那种痛苦滋味。(晕,又做白日梦了,不好意思!)

那么,从科学的态度分析,究竟该不该“发明轮子呢?”。这得用一句经典的废话来总结:实事求是,具体问题具体分析!

其实也不用那么复杂,我们只需要看看现在我们用的轮子,看看这些进口的轮子是否都很合适我们,不需要再改进,更不需要重新发明了呢?我看未必。中国有着5000年的文化底蕴,可谓博大精深。进口的东西,技术再好,切不可能完全融入得了中国的文化、思想。况且,现在扔给我们这些轮子,不但用起来仍然有着这样那样的问题,这些轮子之间还相互打起架来,搞得我们要做儿子不是,做孙子也不是,一不小心就犯上了选择恐惧怔。

因此,作为一个80后的人,我希望跟我一样的同行,能多去研究别人发明的轮子,而不是依赖于某几个轮子,会用几个轮子就自以为是、沾沾自喜。不但要去探索、研究轮子的发明技术,原理,还要大胆地、不断地尝试发明更好,更合适自己的轮子。失败不用怕,怕的是我们连失败的机会都没有,有机会也因为世俗一些观念影响而不敢去争取及尝试。不要过分的依赖于现有的这些进口轮子,去大胆的发明轮子吧。等到十年、二十年以后,看到我们的后代依靠我们这些轮子来造火箭、造飞船、闯荡太空的时候,一定别有一番滋味。

image

当然,“发明轮子”也要学学Spring,讲究艺术及方法。不能搞闭门造车,当全世界人民都在研究火箭轮子的时候你还停留在研究脚踏三轮车轮子的技术水平,那就难免闹笑话了。要多学习别人的轮子制造方法,把别人的好的思想、理念、精华借鉴过来,再加入我们民族文化特色的东西及元素,最后为我所用。更要认认真真,想方设法的从国内同行及前辈们的身上学习、取经,因为他们的一个小小的建议或提示会让我们少走很多的弯路。最重要的就是要懂得团队协作的?重要性,学会与更多优秀的人一起共事,现在已经不再是个人英雄主义的年代,任何事情都需要讲究团队的合作,群策群力,才有可能取得成功。

最后,引一句张靓颖同学在Tcl广告歌中所唱的吧:“拥有梦想,就有可能!”,鼓励自己的同时,也鼓励所有拥有梦想的朋友。

image