大多数人选择java可能只是因为听说java前景好、java比较好找工作、java语言在tiobe排行榜上一直位于前三等等之类的原因,但是java具体好在哪里,心里却是没有什么概念的。
其实我选择java也是出于以上的原因,但是现在确实真正地爱上了java。
我们为什么选择java
那么现在我们来分析下java的好处究竟在哪里。
简单易学
首先java是一个面向对象的编程语言,容易理解。而且略去了多重加载、指针等难以理解的概念。并且实现了自动垃圾回收,大大简化了程序设计。
其次java学习资料较多,网上很多在线学习平台就可以找到很多java学习视频,另外也有一些培训机构提供的有免费的java视频课程。有这些学习资料,入门足矣。
跨平台
跨平台是java最大的优势。java运行在jvm(java虚拟机)上,在任何平台只要安装了jvm。java就可以运行。它架构在操作系统之上,屏蔽了底层的差异。真正实现了“write once,run anywhere”。
安全
java中没有指针,这样就没有办法直接访问内存了。另外java也不容易出现内存泄露。
多线程
java内置对多线程的支持,可以方便地在程序中实现多线程的功能。不像其他不支持多线程的语言,需要调用操作系统的多线程功能才能完成多线程的实现。
有丰富的类库
java从出道至今已有20多年的历史,经过20多年的积累和沉淀,出现了很多优秀的开源社区,如apache和spring。这些优秀的社区提供了很多非常好的框架,借助这些框架可以使我们不用去关注java底层的开发,而只需关注业务的实现。
使用广泛
不得不承认上面有一点是对的,java确实有很多企业在用,而且都是用在大项目上。这就意味着java方面的工作比较好找,另一点是在做java开发时如果遇到问题,可以很容易从网上找到解决办法。
职业篇
java初级程序员是最底层的,只需要掌握java的基础知识就能够成为一名初级程序员。
java程序员可以有三个进阶方向,分别是android移动端开发(以下简称android)、web开发(以下简称web)和通讯开发。这时目前主流的三大方向。其中最多的是android和web。下面分别介绍这三个方向。以下三个方向都需要有扎实的java基础。
android开发,主攻移动端应用的开发。移动端包括搭载android系统的手机、平板、电视盒子等设备。
web开发方向,主要有html5开发、b/s应用开发、微信开发。这里的html5开发是指移动端的html5开发。
通讯方向,主要是通讯服务器的开发,如游戏服务器、腾讯的qq服务器等。
由于我从事web开发方向,仅仅对其他方向略有了解,所以这里主要介绍web方向。要进行web开发需要达到中级程序员的水平,能够熟练使用ssh等框架。
而java高级程序员则需要了解更多的框架和一些常用的应用服务器,如工作流、搜索引擎、缓存、jta、jboss、weblogic等。
达到高级程序员水平后,很多人在这个阶段选择了不同的方向。有的人厌倦了编码和设计而转向了需求分析和产品经理,而有的人继续执着于技术这条路,成为了系统架构师。
工具篇
子曰“工欲善其事,必先利其器”,有一把顺手的“兵器”,能让我们的学习和工作达到事半功倍的效果,那么下面我们来看看有哪些好用的工具可以助我们开发。
文本编辑器(适合初学者)
这里我们只说windows平台下的文本编辑器。
有人可能说windows下的记事本不就可以用吗,我们为什么还要用其他的文本编辑器呢?原因吗,首先记事本确实不好用,修改代码极为不便,而且有些换行标识不识别;其次效率低,使用记事本打开一个几k的文件可能没有什么感受,但是打开一个超过10m的文件的时候就能明显的感觉到卡了,比如我们的日志文件;最后容易出现问题,用记事本编辑过utf-8格式的文件后,会给文件加上bom头,这有时导致程序出现莫名的错误,所以作为程序员,最好不要使用记事本。
比较好用的文本编辑器有editplus、ultraedit、notepad。其中notepad是开源免费的,其他两个都是收费的。
ide(适合入门后和项目研发)
ide是集成开发环境的简称,使用ide的目的是为了能让我们更快地构建项目、更方便地写代码,同时屏蔽了代码编译的动作。ide都有代码高亮、代码提示以及错误提示等功能,同时我们可以借助ide的插件实现代码管理、代码审查和其他一些好用的功能。
常用的ide有eclipse、netbeans和intellij idea。前两者都是免费的,后者提供有社区版本,也是免费的,但是企业版是收费的。其中eclipse是用的最多的ide。
在eclipse上扩展的有两款优秀的ide,spring tool suite(sts)和大名鼎鼎的myeclipse。前者免费后者收费,后者集成了前者的所有功能。这里我建议大家使用sts,因为sts添加了很多对spring的相关支持,如果项目中用到了spring,使用起来会非常方便。也可以在eclipse上安装sts插件,能够达到同样的效果,springk8凯发旗舰官网上有插件的安装方法,这里不再赘述。
技术图谱
以上图谱详细描绘了每个级别都需要掌握哪些知识,此图仅供参考。在实际工作期间,一般是根据公司需要或项目需要来学习不同的技术。但还是建议多去学习些知识,我觉得有句话说的很对,“很多东西不是你觉得有用才去学,而是学了才知道它有用”,我一直信奉这句话,因为我就是这句话真正的受益者。
入门篇
俗话说“师傅领进门,修行靠个人”,所以说只要入门了,后面学习起来是很快的,而且比较容易。那么学习java应该如何入门呢?
首先要理解面向对象的概念,这个很重要。但也不是说必须完全理解概念才能去学java。而是先接触java的基础知识,如类、属性、方法等。然后在学习的过程中理解面向对象的概念。
在大概理解了面向对象的概念后,这时你应该学会了一些java的语法和一些api的使用。这时需要继续深入地去学习这些。同时要养成自己良好的编码习惯,java有自己对包名、类名、方法名等的命名规范。这个时候要尝试按照规范写代码,同时甩掉以前写代码时养成的不良习惯。
在熟悉了常用的api及语法后要去学习i/o和流(stream)以及多线程编程和网络编程。i/o和输入输出流,要熟练掌握。而在这个阶段暂时不需要深入了解多线程编程和网络编程。
在系列基础完成之后就需要去接触下数据库和jdbc,对于数据库不需要深入了解,能够创建表、查询表数据即可。然后尝试使用jdbc连接数据库,并对数据库中的数据做curd操作。
在学习java初期,我建议大家使用文本编辑器来写代码,一是有助于记忆java中的一些关键字和常用类及方法,二是可以熟悉java的常用命令。在使用了一段时间的文本编辑器后就可以使用ide来开发了,使用ide将使你写代码写得更快,也不容易出错。
基础是很重要的,虽然简单,但是也马虎不得。这里推荐几本书《thinking in java》、《java 8编程参考官方教程》等图书。
中级篇
入门后就可以选择主攻方向了,几个方向在职业篇中已有介绍。通讯开发方向其实在这个时候就可以转了,但是还是建议学习下java中级的内容,这些内容也有助于你今后在通讯开发的路上走得更容易。因为我是主攻web方向,所以这里我们只讨论web方向。
在这个阶段你接触的知识面将更广,在学习web开发之前首先需要学习html和css,然后再学习js以及jquery。在有一定基础之后就可以开始学习jsp和servlet了,重点学习下jsp的内置对象及el表达式,并试着去做一些页面。然后学习下ajax,要能够熟练的使用json和xml来做数据交互。
以上内容学习完之后java的基础部分就算是基本掌握了,下面就该学习一些框架了。建议先从spring学起,spring将成为你今后开发项目的核心框架。spring也是现在项目中最常用的框架。可以深入的学习,试着去理解spring的一些实现原理,这将有助于你更好的使用spring。
学完spring之后可以学习下orm框架,比如hibernate和mybatis,这些相对于spring来说要简单的多。主要学习与spring的整合和spring中的事务管理。一定要深入的了解数据库事务,这将对你今后的项目开发非常有帮助。
最后我们来说控制层的学习,这里我建议大家重点学习springmvc。因为springmvc是目前使用最为广泛的控制层,而且简单易学,已经有了要替代struts的趋势了。但是struts还是要学习下,毕竟还有一些公司在用,这将为你找工作加大一点筹码。
在学习这些内容的过程中一定要学习下代码管理工具svn和git,目前svn在企业中用的较多,而开源社区一般都是用的git。
有了jsp基础和掌握了框架的使用后就可以出去找工作了,在工作过程中这些知识你将掌握的更加牢固。也可能在工作过程中会遇到你没有学过的技术,不要怕,有了之前的基础你将很快掌握这些新的技术,加入工作的第一年将是你进步最快的一年。
而加入工作之后你可能也不会有太多的时间来学习,这时候要约束好自己。不要忘了学习,学习是最好的进步方式。
高级篇
当我们参加了工作之后,开始接触更多的技术。如果有机会就多学习些技术,不求精通,但求会用,并且知道这项技术能够解决什么问题。开始在项目中参与设计文档的编写。能够为自己的项目选择合适的框架,并且能用自己学到的技术去解决项目中遇到的难题。
这时候根据项目和公司的差异用的技术也不尽相同,但是日志框架、项目构建、单元测试、缓存、集群、负载均衡、soap等是一定要掌握的。这些是在大型项目中比较常用的技术。然后可以根据自己的兴趣及业余时间去学习自己感兴趣的技术。
架构师之路
成为一名架构师一直是我的目标。一名优秀的架构师首先一定是一名卓越的程序员,架构设计不应仅仅是理论,它应当是在实践中产生的经验和结果。架构师也要有灵敏的嗅觉,能够看清未来技术的发展方向,应当避免在项目中使用已过时的技术或没有社区支持的技术。
作为一名架构师要掌握以下技能:
soa:在微服务横行的年代,这项本领是必不可少的。
设计模式:这将有助于你设计出更加优雅的程序。