最近我因为参加IBM的websphere应用设计大赛,而与j2ee有了第一次的亲密接触。经过一段时间的学习和程序的开发,我对j2ee有了一些认识,因此我想把我感受到的java,我所理解到的j2ee告诉各位网友。我希望能同大家进行交流。
我不想具体的介绍java或者说明什么是j2ee,大家只要买本书就知道啦。我只想说说我在实际中的一些感受。java是一种语言,或者更准确的说是一种平台。很多人只把java当成一种语言,其实这是非常片面的理解。在这次开发之前,我对java的理解,也是认为java是一种语言,而且是一种简单的语言,速度很慢的语言,甚至认为这是没多大用处的语言。现在我理解的是java是平台,而且java也确实是平台,j2se、j2ee、j2me这些哪个不是平台?看看它们的名字吧,全是平台。如果你连j2se、j2ee、j2me的英文全称都不知道,建议到sun的主页上去看看。sun已经非常肯定的把java定位为平台啦。还记得c++之父的一句话吗?java is not a platform independent, it is a platform。(java不是平台无关的,java是一个平台)如果说以前java宣称的是一种跨平台的语言,那么现在java已经发展成了平台,而且不是一种平台。而且通过这一段时间的了解,未来java一定会发展成为更多的平台。
平台与语言有什么区别吗?windows就是一种平台(操作系统平台),windows上的c++是在windows上的一种语言。区别就是这样,如果java是平台,那么它就可以成为windows,事实上在嵌入式领域,如手机,java确实已经成为手机的windows啦。因此我不觉得网上有人拿C#和java比较有什么意义。任何语言只有运行在相应的平台上才有威力。可是java的恐怖之处就在于它本身就是平台。极端一点,如果给个人pc嵌入一块带jvm的芯片,在你的个人电脑上就可以向运行汇编语言一样,运行java语言。这也许就是系统结构中所说的支持高级语言的计算机吧,实际上C++也可以,其他高级语言也可以,但是现在只有java是唯一为此做好准备的。(也许这种计算机已经有啦,只是我不知道而已,知道的告诉我一声^_^)这就是平台的威力,更是java定位的改变,其实这种改变已经有好几年啦,这一点恕我浅薄,我也是这段时间才体会到的。因此把java与任何一种语言比较都是不恰当的。如果非要比较,java也只适合与平台进行比较。遗憾的是与java一样的平台好像只有它一个,java不可能和操作系统比较的,虽然在jvm中可以看到许多操作系统的影子,但是java太轻量级啦。.net也许算得上是平台但是它叫framework不是platform,如果微软都只把它叫framework,我们没有理由把它叫做platform的。据说sun曾经就java几个平台的名字咨询过语言学家,如果是这样,更从一个侧面证明啦java现在的发展重心,从跨平台到成为平台的转变。记得有人曾经嘲笑“java一次编写,到处调试”,我也确实发现很多地方是无法跨平台的。比如windows下的回车换行是两个字符,linux是一个字符。可是人家是平台,平台是兼容的,不兼容的只是平台与操作系统之间,如果你设计出了无法通用的java程序只能说明你水平有限。举个例子,你在windows下用java写了操作注册表的操作,你难道想把它移植到linux吗?这种平台与操作系统的不兼容是一直存在的,解决的方法是好的设计和认真的调试。
Java成为平台之后自然有些与众不同的东西啦。我觉得最大的发展还是j2ee。J2ee是一个相当庞大的技术体系,也是一个相当庞大的平台。J2ee建立在一系列的java平台技术之上,具体的我就不说啦,大家在网上随便查查资料就知道啦。其中给我体会最深的,也是这次我们开发使用的EJB技术啦。虽然很多人说它是从微软那里抄袭的。不过确实是好东西。简单,比微软的COM、DCOM、MTS和COM+这套东西简单多啦。光从这点来说,就很有吸引力啦。不要对我说你编程喜欢复杂的,如果是这样我只能说你要不是技术狂人,就是有自虐倾向。计算机技术的发展从来就是为了简单,为了生活更简单,为了工作更简单,为了编程更简单。当然EJB的体系结构也很好,EJB的出现使得组件程序的开发更完善啦,开发人员分为很多角色,每种角色负责相应的工作,这样分工更细啦,每个领域的人的熟练程度也提高啦,各个领域更容易产生“专家”啦。举个例子,应用服务器厂商开发应用服务器(container provider和server provider),另一家公司在该应用服务器上开发bean(bean provider),然后这家厂商把bean卖给另一家开发应用程序的公司(application assembler),这就公司用bean开发程序,然后卖给另一家负责发表j2ee程序的公司(deployer),这家公司在目标机器上部署应用程序,最后的维护工作却是另一家公司(system administrator)。想想这个过程像什么?像不像组装波音747飞机,许多公司生产零件,波音公司组装,然后卖给机场,机场有专业技术人员来维护飞机。这就是我体会的EJB,也许现实的应用并不是这样,很多时候一家公司就把这些角色做完啦。但是它体现出来的思想却和现代工业是一致的。当然广大程序员也许并不喜欢这样,因为一旦真的如此,程序员也就彻底成了软件工人。但是别忘啦,资本社会就需要工人的,程序设计的发展也只能是产生越来越多的工人。
按照j2ee的想法,一个应用都是一个大型的应用类似于生产一架波音飞机,如果如此大型的工程,只由一家公司来完成,显然是不可能的。因此需要一些技术让更多的公司来参与开发。如果市场上有现成的EJB卖,直接买来岂不快哉。如果自己开发,未必经济,程序也不一定成功。当然如果自己以前开发的组件能够复用就更好啦,当然这取决于项目开发者的才智和经验啦。有人说微软的技术也可以做到这些。不错,尤其是现在有了.net这点更是没有疑问的啦。微软和反微软阵营从来都是竞争关系,如果二者的产品没有相似之处,或者说市场有冲突之处,根本不构成竞争关系。生产汽车的只和生产汽车的竞争是简单的道理。如果竞争者的产品之间有明显的差距,比如中国汽车和国外名牌汽车,也是构成不了竞争关系的。因此从竞争这个意义来说,两种产品j2ee和.net一定,而且可以肯定的是:首先二者的市场是有重叠的,其次二者技术上互有优劣没有明显的差距,最后短期内谁也无法战胜对手。如果最后两者竞争一方获胜,通常不是产品本身的原因,而是场外的因素,比如企业决策的失误。因此我觉得争论谁好谁坏没有意义,市场是最好的裁判。从现在来看,企业级的应用j2ee似乎略占优势。但是.net在企业级应用中提供了另外的一种选择,看今后市场竞争的情况吧,现在很难说,也没有必要一定要知道结果,结果对你真的很重要吗?别忘啦,无论他们竞争成什么样子,我们的生活仍然要继续。可以肯定的是任何一方失败,都不会造成程序员的失业的。要么你早就跳槽,要么你早就转行啦。
J2ee其实还有许多技术,严格来讲j2ee是许多企业级技术的大融合,更是一种工业标准。因为j2ee是由除了微软之外的软件大公司共同制定的规范,请注意是规范,而不是具体实现。我个人认为这是j2ee的优势,因为只有规范,各个应用厂商就可以依据规范,进行自己的实现。当然由于各个厂商的实现不同会造成一些兼容性上的问题,可是这同时可以带来旺盛的生命力。比如sun倒闭啦,但是只要规范在,技术也就仍然存在,更重要的是生产j2ee产品的其他公司是仍然存在的。因此我不像有的人一样对j2ee的前途担心,我认为不可能制定j2ee规范的公司一次性全部死完吧。况且已经有的应用也会长期存在。
J2ee还有很多技术,太多啦,每一样都可以让你学上很长时间。我对j2ee的感受是原来世界和我想的不一样。看看国外吧,搞j2ee的确实不少,这也从一个侧面说明了它的优点很明显。
有优点也有缺点,但是我认为这点缺点并不致命,但是确实让人很郁闷。首先国内搞java的人实在是少,搞得好的人更是少。看看csdn上java类的论坛吧,上面人好少啊。Websphere组的人更是惨,一个帖子有一两个回复的就好啦。如此的环境,也难怪学java的人少啦。很多初学j2ee的同志,连应用服务器的配置都要花上好很长时间。我自己最开始配置was和wsad的时候就郁闷了好久,因为确实没有技术支持,一切的一切都是自己动手,自己看英文。因此我建议搞j2ee开发的同志都留下qq或者email以方便交流。其实技术支持少也是正常的,从我的观察来看,有的应用服务器厂商也只是在中国才起步,处于市场推广阶段。我现在参加的比赛也是IBM市场推广的一部分。一旦市场成熟啦,也许技术支持也就多啦。一句话,真正搞这个的人多啦,学习的门槛也会降低的。但是我很担心一点,我们国内的程序员好像对java不是很感冒,大家似乎不想用,也许是我的错觉吧。如果真的如此,看来微软会在中国轻松取胜。现在微软在中国的市场推广还是很成功的,看看.net组里面的帖子数量就知道啦。我想毕竟许多程序员都是用微软的起家的,用起来亲切啊。但是还是希望大家多关注一下java,因为确实是是好东西,不想有些人想的那样。
其次,j2ee和其他java平台的开发环境太恶劣。以websphere为例,它对机器的要求相当高,512MB内存也仅仅是推荐,实践上我估计大型开发需要1G都不一定。速度和内存消耗一直是java的问题。有人也是由于这个原因讨厌java的,我以前也是。但是现在我觉得速度和内存都不是什么问题。真正做j2ee开发的公司会配置不起这种环境?这点钱都没有,还号称做什么企业级应用?通常一个企业级应用怎么说也是几十万的项目啊。如果是一般的应用好像影响不大,但是一般的应用java似乎也不太在行啦,只有用到它的平台特性的应用才是最佳的。至于开发出来的应用的速度,我想也是没有问题的。很多人把java和.net开发的应用进行比较,这是没有意义的,虽然厂商宣传的时候喜欢比较,但是真实的情况是二者确实差不多(我没进行过测试,只是一些理性分析,如果有人进行过测试,那么请解释一下,为什么不同机构对两者的测试结果不同呢?)因此速度和内存不是问题,到是开发工具是大问题。我用的是wsad4.0,但是我怎么看怎么觉得这是一个alpha版的东西,用我们小组的人的话来说,这种东西也敢拿出来卖(我们用的可是正版哦),was问题要少些,毕竟是个服务器,做差啦影响不好。好像IBM做开发工具不是很在行,真正做好开发工具的还是微软。易用性和帮助也是他做得最好。总体来说java的开发工具至少差微软的两个档次,工具界面不友好,帮助差,错误百出,有些问题让人莫名奇妙,有的问题让人啼笑皆非。这点也是很多程序员不喜欢用java的原因,用java的集成环境总有一种用记事本的感觉。但是这点也不能说明java差,充其量说明微软工具做得好。好的程序员应该无论用什么工具都可以做出好程序的,如果你不能只能说明你不合格啦。但是开发环境的问题,确实需要改进改进。比较大家是做程序不是来帮IBM这些公司找BUG的。
最后,java在中国的应用还面临一些实际问题。比如许多中国企业、政府机构出于利益的考虑希望项目能够在短期内见效。说句实话.net和j2ee比开发周期都差不多。但是由于国内java程序员少,开发过程中在诸如工具等方面受影响,反而j2ee开发时间长啦。同时j2ee的硬件费用通常很贵,许多企业很可能不原因花这笔钱的。还有j2ee结构的设计如果设计得好,后期维护就比较容易,但是好像这方面做得并不好,优势无法体现。许多软件小企业用不起如此昂贵的解决方案。另外盗版也是影响因素,如果是国外,因为大家都是用正版,所以使用开源项目会大量节省资金。可是国内呢?优秀的盗版也就4块钱吧。
不写啦,因为我还是在边学习边做的过程中,我现在写这些感受也是想把自己这段时间的感受写出来,我怕自己以后回忘啦,想写也没感觉啦。等项目完啦之后,我会整理一下思路,写一篇清楚一点的文章。感谢大家看在下的挫文,不正确之处请指正,我一定改正错误,谢谢。
QQ:7965122(请使用websphere和j2ee的朋友加我,大家多联系)
Email:[email protected]
如果剑法的最高境界是无招胜有招,那么编程的最高境界也应是如此。
本文地址:http://com.8s8s.com/it/it17986.htm