学习java的5种境界

属于原创,转载请注明出处,谢谢!
在这里,我仅作抛砖引玉,打算给正准备学习java或还在抉择是否学习java的同志们指明一个学习渐进方式和方向。 
 感言:清代文学家王国维提出的读书三种境界:“古今之成大事业、大学问者,必经过三种之境界:‘昨夜西风凋碧树。独上高楼,望尽天涯路’。此第一境也。‘衣带渐宽终不悔

,为伊消得人憔悴。’此第二境也。“众里寻她千百度”,蓦然回首,那人却在灯火阑珊处’。此第三境也。”如今在回想我学java的坎坷之路,颇有相似之处,如今我把我学习的历程和我

对java体系的5种认知(也称为5种境界吧)分享给大家,同时也为自学者指明学习的方向,少走弯路。
 从我大学第一天接触计算机语言开始,我坚持学习微软的vfp长达8年。我曾幻想微软的vfp能给我们带来强大的编程体系,能够解决软件领域的众多问题,比如跨平台性、源码公开、

分布式部署、分层架构、丰富多彩的客户端体验……,但是在我还在幻想的时候,微软突然说终止vfp的开发了。
 随着工作和认知原因,我决定重新选择一门语言,彻底放弃vfp,摆在我面前的有ASP.NET、PHP、DEPHI、JAVA、C、C++、ASP……;我要选择的是一门跨平台的WEB编程语言,我排除了

C、C++、DEFPI、ASP.NET、ASP。摆在我面前的是java和php;在比较这两种语言后,我最终选择了java,至于java为什么比php更优秀,网上很多达人给出了经典解释,我这里不再赘述。曾有一

个狐友说,你学java能够达到你在vfp方面的高度吗?我当时真不清楚,我甚至不知道我还能不能坚持把java学下去。
 我学java的动机就是它的优秀的MVC框架和跨平台的能力,那么我一开始是如何学习这么神奇的语言呢?
 java对我来讲,这是一门很陌生的语言,它的语法风格跟我所学的VFP完全不一样,这意味着我必须从头学起,这是一个很痛苦的过程。
 java语言的IDE(这里是myEclipse)和VFP(VisualFoxpro9.0),ASP.NET(VS2008)几乎完全不一样,这也难怪,java(swing是后面的事情了,这里先不表)和asp.net是服务器语言,

VFP是客户端语言(多线程DLL例外),于是我硬着头皮开始了java的基本知识的学习,再这里我要特别感谢传智播客的毕向东老师的精彩视频课程(我没有正式上过他的课程),也正是这门

课程让我不再阅读枯燥的java入门书籍,也是这门课程让我窥探到了java 的强大。单从java基础这们课里我才发现vfp是多么的幼稚(这仅仅是我的个人见解,如果得罪狐友,请见谅,也请

狐友们捍卫我说话的权利),我在此仅仅说几个例子,这几个例子对我后来一些项目当中是多么的重要。第一点要说的是IO,Java对字节流和字符流的操作,在这里java提供了丰富的jar包,

这个是vfp望尘莫及的;第二点要说的是多线程,java 利用锁机制可以控制并发线程,而vfp除了对项目编译的时候能够选择多线程外(即便如此也是一个黑盒子,因为你不知道这里的运行原

理);第三点要说的是集合框架,这些数据类型为很多框架、跨平台数据交互提供了强有力的支持,而vfp再这方面除了一个数组外,就苍白的很了。当然,还有很多例子,可以这么说,VFP

的任何一个功能,在java面前都显得如此微不足道,即便是VFP引以为豪的ODBC技术。当我学完了毕向东老师的课程后,我对我学好java充满了信心,我也庆幸我放弃vfp选择java是一件多么

美好的事情,当然我依然的感谢vfp语言,是它让我有了程序设计的理念和思想,是它让我苦苦思索而又无法解决某些问题,我带着这么多问题来学java,所以我带着极大的兴趣来学习java的

。所以我用了3个月时间,我把java基础翻了个底朝天,这是痛苦的,也是快乐的,所以我看任何的java代码不再困惑,只要有jdk帮助在手,我就能够啃下来。
 言归正传,java仅仅如此吗?不!随着我对java的认识的深入,痛苦才刚刚开始!为了让java有具体的友好的操作,我不得不花时间学习html标签,css/div布局,javascript,

jquery,servlet,jsp,jdbc;这个过程是琐碎的,浏览器是如何和java服务器语言进行交互,这个十分抽象的技术对于初学者来说确实是一件很困难的事情,我建议大家学此之前一定要了解

request,response,session等概念,你理解的越深刻,你学习servlet,jsp,jquery,javascript越轻松。

第一重境界:经典MVC
 当我学完上面的课程后,我长长的舒了口气,我终于可以架设分层体系,我不仅可以部署华丽的表现层,还可以部署复杂的业务逻辑层,还可以跨域数据库做我想做的事情,当我把浏

览器的AJAX请求给到servlet,然后调用相应的servers方法,取得bean对象(获取数据库数据),我认为这一切都很美好。回想当年为了让vfp有漂亮的客户端,我花费了大量的时间做平面设

计(加载图片超慢)。现在有了CSS/DIV,jquery,一切都变的如此简单。动画,导航(包括tree),表格等等,一切都可以自定义,随心所欲。VFP当年的连接句柄也是一直困扰我多年的技术

瓶颈,每次的连接都是漫长的,可是有了jquery,(数据库用了另外一个java框架),连接也变得美好,异步交互,让我们不刷新页面的情况下,继续浏览其它部分。JNI技术更是让java如虎添

翼,一些需要高性能运算的技术,直接交给C++好了,我只需要根据API传入参数即可。
 但是问题来了,我发现我要进行下一个项目编写时,我很多东西仍然需要重写,很多地方仍然需要copy,这背弃了我们面向对象的思想。权限访问控制得不到有效保障,配置过于复杂

,不利于维护,公司的一个资深程序员离职后,面对html标签和混杂的javascript代码,需要太多精力去阅读,去维护,经常会因为需求的微小改动,整个应用都需要重写。这的确让人头疼

,怎么解决这些问题呢?
第二重境界:主流MVC框架SSH2
 带着解决问题的想法,开始了全新的学习,SSH2框架(Struts2,spring,hibernate),这三个框架堪称目前最经典的JAVA体系的MVC框架,其实些框架最重要的是要理解一些很抽象的

概念,比如,struts2的控制,spring 的依赖注入,面向切面编程,hibernate的orm技术,等这几个框架学起来不难,前提是你有java相当的基础,如果你不懂集合框架,不懂面向接口编程

,不懂一些经典设计模式(比如工厂模式,装饰设计模式,单例模式等)理解这些是一件很困难的。我学这三个框架总共大学花费了3个月时间,虽然不精通(在java面前我永远不敢说精通)

,但我已经能够开发一些应用了,SSH2三大框架是基于java的开源框架,它的出现解决了访问控制,业务逻辑分层,大大降低程序耦合性,代码质量也得到了极大的提高。
 问题又来了,Strus2虽然有丰富的标签库,细腻的访问控制,可是面对一个细腻的复杂的客户端需求,struts2做起来是多么的吃力,代码复用的机会大打折扣,我又开始了不停的拷

贝调试粘贴页面端代码。噩耗又开始了,如何解决呢?
第三重境界:struts2整合
 整合struts2的目的是为了让客户端的每个模块都能够独立,复用,且要课业务逻辑层解耦。OGNL表达式,SietMesh,freemarker和struts2的结合彻底解决了页面端代码的重用性问题

,也彻底解决了view和dao,control层的耦合。但是问题又来了,在整合的过程中,底层代码没有很好地封装,开发人员可以随意修改框架性代码;项目开发过程中,开发人员随意添加jar包

,往往会导致jar包冲突,系统无法启动,却又很难排查出现问题的原因;有时候一个很小的项目却又上百个jar包,体积臃肿,等等,怎么解决呢?
第四重境界:团队开发
 进了第四重境界,恭喜您,您可以组织团队进行开发了,那么是什么技术可以如此神奇呢?这就是maven、nexus、jetty,Maven是一个项目管理工具,它负责管理项目开发过程中的几

乎所有的东西,它可以让团队共享维护一个系统,每个人都可以完成自己的独立模块,即使模块与模块之间有着依赖关系。nexus就是桥梁仓库,jetty是一个高效的调试工具。
第五重境界:
 请恕我荒诞,因为我也没有接触过,但我想有这么一个境界,是一个大师(在中国,我们这里的大师仅仅指应用开发,底层开发的人在中国很难找到,这就是为什么优秀的框架无法

在中国诞生的原因,我们仅仅是会用别人的框架)级别的java工程师必备的技能,那就是分布式技术,试看现在互联网的大佬,新浪、淘宝等这些运维网络,哪一个又不是分布式的呢?如果

您想到第五种境界,请学习EJB3.0+和它配套的jboss,weblogic等相关服务器技术,这个也是我的下一个目标。

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值