属于原创,转载请注明出处,谢谢!
在这里,我仅作抛砖引玉,打算给正准备学习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等相关服务器技术,这个也是我的下一个目标。

学习java的5种境界相关推荐

  1. 学习Python的三种境界,你现在是在什么境界?

    前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜西风凋碧树,独上高楼,望尽天涯路'.此第一境也.'衣带渐宽终不悔,为伊消得人 ...

  2. 学习Python的三种境界

    转:http://www.aikaiyuan.com/11035.html 前言 王国维在<人间词话>中将读书分为了三种境界:"古今之成大事业.大学问者,必经过三种之境界:'昨夜 ...

  3. 学习Oracle的三种境界

    我接触Oracle是在本科毕设,当时顺着研究生导师的方向,写的是专利信息互联网爬虫.从各个专利局采集的专利信息,就需要进行存储,以前只用过SQL Server,所以打算尝个鲜,用Oracle 9i. ...

  4. 尚学堂怎么样?在尚学堂学习java是一种怎样的体验?

    尚学堂怎么样?当你想让自己未来的努力更有价值的时候,一定要选择一个对的行业,现如今,互联网就是那个对的行业.当你要选择一个对的行业的时候,就要选择一个对的城市,因为只有在对的城市你才可以学到最高深的技 ...

  5. java \t怎么从头开始_通过这些简单的步骤从头开始学习Java

    java \t怎么从头开始 Java是用于软件开发的最受欢迎的编程语言之一. 无论您的最终目标或技能水平如何,学习和掌握Java都将为您作为开发人员打开大门. 今天,我们将讨论一些原因,我们认为您应该 ...

  6. 学习Java最好选择哪本书?

    学习Java有两种方法,你可以从任何著名的教程网站去学习基本语法,然后做研究和开发,在学习的同时试着去做一些项目. 以下是推荐书籍: 从头到尾去阅读Kathy 的<Head First Java ...

  7. 如何学习java,自学还是培训

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 我们都知道,学习Java可以选择两种方式:自学和培训,做为一个程序员 ...

  8. 学习Java其实应该上升到如何学习程序设计这种境界

    我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路. 学习Java其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想.每一种语言的程序设计思想大同小异,只是一些 ...

  9. 6种java垃圾回收算法_学习java垃圾回收

    垃圾回收(GC)一直是Java受欢迎背后的重要特性之一.垃圾回收是Java中用于释放未使用的内存的机制.本质上,它追踪所有仍在使用的对象,并将剩下的标记为垃圾.Java的垃圾回收被认为是一种自动内存管 ...

最新文章

  1. Webpack 核心开发者 Sean Larkin 盛赞 Vue
  2. 02NSString 转换 UTF8
  3. 深入理解JVM—性能调优
  4. 跨入安全的殿堂--读《Web入侵安全测试与对策》感悟
  5. 《恐怖小说在中国》之四:恐怖小说的流行与陷阱?
  6. JS学习记录(BOM部分)
  7. 2021年呼和浩特高考段考成绩查询,2019届呼和浩特市高三段考成绩排名分析
  8. 信息学奥赛一本通 提高篇 第5章 矩阵乘法
  9. mybatis 插入一条记录 参数为map的写法【用遍历Map的key和value的方式,可以实现只插入有效值】...
  10. http中url的长度限制
  11. html5 mp4文件查看,MP4Box 借用HTML5 file api 本地读取 mp4 头信息
  12. 解决thinkpad sl410 evc windows7硬盘安装ubuntu12.04以后,windows 无线出现断开网速慢等问题
  13. TSU-求最大最小数
  14. 如何自己制作简历模板?简历在线制作的方法介绍
  15. 第十二届蓝桥杯 2021年4月 省赛 第一场 C/C++ B组 题解
  16. 上饶临床实验室改造规划要点
  17. MemoryError: Unable to allocate array with shape (61721, 16000) and data typ
  18. java编写的生日礼物,感恩送书第1期:2019年快来了,感谢给位网友,送《Spring 5开发大全》...
  19. Jmeter分布式实践
  20. Linux之shell脚本编程

热门文章

  1. 说说C语言在生活中的应用
  2. 前端学习(初识HTML 上)——基础知识和基本标签
  3. 用最小二乘法OLS做回归,并解读结果
  4. iOSAndroid素材图片网址
  5. TrueSTUDIO设置文本编辑字体大小
  6. 男女友测试题软件,抖音2020男朋友测试题
  7. SQLServer数据类型(一)
  8. Linux设备驱动笔记一
  9. 什么是ECMP、五元组、负载均衡
  10. 十面埋伏? 程序世界里的不信任原则