手记

零基础入门转行学习java,如何才能成为Java软件工程师!

Java在工作中用来干嘛?如何学习Java?Java学习起来复杂吗?英语不好数学不好能学好Java吗?首先本人只是一个普通的软件工程师,上班还要码代码,下班还要带娃,私信不能一一回复,请见谅,但是又不想拒绝大家的问题,所以开这篇文章说一下,如何成为Java软件工程师?

首先,学习Java能用来做什么?Java目前有哪些就业方向?我们先看一下下图


上图给出了两个最重要的方向Java Web和Ardroid方向,其实我们经常说的Java软件工程师,我觉得应该叫Java Web软件工程师或Java后端(服务端)工程师比较贴切一些。Java Web能做的事情非常多,我们在使用淘宝去查找商品时,打开浏览器输入网址,输入商品名称,点击搜索,这时候前端页面(浏览器)通过HTTP协议把商品名称传递到Java服务端,Java服务端利用JDBC技术从数据库里检索数据并返回,再组装成网页内容返回给浏览器,继而展现在用户面前。Java Web要学的东西很多,网络请求协议(HTTP等),Web前端技术,Java服务端技术,JDBC、数据库等都要学习。

Android要学的东西稍微少一点,Android一般是客户端软件,基本上不涉及到服务端,理论上来说可以不关注服务端技术(灰色框里的内容)和后台数据库,但我觉得要做一个合格的Android工程师,这些东西还是有必要去花时间了解的。同样的,Android工程师也需要学网络请求协议(HTTP等),毕竟也是要通过Web服务器去数据库里拿数据回来展示到APP上。目前混合开发(原生+HTML5)的APP越来越多了,因此还需要学习一些前端知识。

注意,Android方向图里的Web服务器可以用Java来写,也可以用其它语言来写,比如C#等,但安卓程序员不需要关心。

不管学Java Web还是Ardroid,Java基础(J2SE)都是必需要学的,后面会详细说这两条路要学习的内容。其它的还有一些桌面程序(Swing/awt),嵌入式开发(J2ME),JavaFX开发,基本上已淘汰,不好找工作,不推荐大家学习了。以下是某大型招聘网站搜索出来的各岗位在北京招聘的数据,供大家参考






除此之外,Java还有一个大数据(Hadoop)方向,但新人不推荐选这个方向,等有一定的工作经验后再介入。

很多人私信问我,Java就业环境怎么样?Java难学吗?数学不好英语不好能学好Java吗?

是时候亮出这张图了:

                      

上图是2017年8月份编程语言排行榜,虽然相较2016年有所下降,但可以看出来,前几名都整体下滑了,下滑的原因是多种新兴语言的崛起导致的,虽然下滑,Java依然牢牢占据着排行榜首位,所以说Java就业市场前景相较于其它语言还是比较有优势的。

另外,Java简单易学,Java是类C语言,语法和C/C++没多大的区别,相信大家上学时多多少少都学过一点C或C++语言,所以很多容易上手,Java还抛弃了C++ 中那些很少使用的、很难理解的、令人迷惑的特性,如操作符重载、多继承、自动的强制类型转换等,和C/C++不同的是Java是运行在JVM(Java虚拟机)上的,如下图:

我做开发十多年的时间,如果大家对于学习java的学习方法,学习路线以及你不知道自己应该是自学还是培训的疑问,都可以随时来问我,大家可以加我的java交流学习qun:  六一五,七四一,六三六。qun内有学习教程以及开发工具。


JVM屏蔽了底层操作系统的细节,为开发者做了很多事情,比如内存的分配和回收等,因此,Java开发人员不需要在写程序时候考虑对内存进行分配和回收,也无须考虑内存碎片的问题,这部分工作已经由JVM来完成了。这也是Java语言能跨平台的原因(一次编译,到处运行)。也就是说,只要能安装JVM的机器,理论上都可以运行Java写的程序。有人说C#也很简单呀,同样不需要分配和回收内存,而且语言设计得比Java更优秀,为什么不选择C#呢?是的,这个问题我不否认,我们看一下某大型网站的招聘数据:



地点北京,搜索关键字Java,提供24564个职位,搜索C#,提供6177个职位。Java提供的就业机会还是多得多,这个也是和排行榜相符的。

综上所述,对于新手入门和找工作来说,我推荐Java,其实,大家也不用纠结到底选择哪一门语言来进行入门,比如Java和C#这两门语言,在思想上基本上是一致的,Java会了,C#熟悉一下语法和环境马上就能上手写了,反之也一样。

Java对数学要求不高,常用的数据结构和算法,都已经封装好了。Java主要是用来做企业级应用,大型网站等,主要是处理业务逻辑,而不是科学计算,所以数学不好的朋友也不要担心。对于写Java代码来说对英语的要求也不高,一共几十个关键字,大多都是一眼就知道什么意思的,如if,else,while,for,public,private等,不要看到老鸟的屏幕全是英文就吓到了,其实那些英文只是变量名而已,都是自己起的名字,虽然英语不好对编写Java程序没多大影响,但是阅读英文的API帮助文档就比较吃力了,很多一手的资料都只有英文文档,JDK源码也是英文注释,但是也无需过度但心,大部分API都能找到中文版本,但始终看原版还是放心一些,所以,大家请尽量学好英语,英语好的话,找一份国外的工作也说不一定(工资高)。

下面我们看一下学习Java Web和Android究竟要学些什么技能,首先在招聘网站上搜索Java Web软件工程师,随便点开几个职位:

Java基础就不说了,肯定要重点学习,其它的如:JavaScript,JQuery,Ajax,JSP,HTML5,oracle,DB2,框架,模板、Servlet,Spring,SpringMVC,Struts,Mybatis/ibatis,数据库,MySql等等,看得真是眼花缭乱,吓得有些朋友都要打退堂鼓了,其中Spring,SpringMVC,Struts,Mybatis/ibatis、MySQL出现的次数最多,有些词很多初学者可能都没听过。不要害怕,上面说到的这些术语,大部分是框架,框架的产生最主要的目的是提高生产力,规范大家的开发,也就是说,别人写好的,项目中拿来用就行,什么是框架?刚开始学习项目的时候先不要用框架,这样更助于理解底层,我们回到本文开始的第一张图:


前文已经说过了,不管是安卓还是Java Web方向,JavaSE(Java基础)是重点,一定要打好基础,其中Swing/awt相关知识可以选择跳过,上图中的客户端,服务端,数据库的知识都要涉猎到,主要要学的东西如下,这么一看清爽了很多。

Web客户端(Web前端):JavaScript,HTML,CSS

Java服务端:JDBC,Servlet/JSP等

数据库:MySQL

以上这些其中Java服务端最重要,数据库MySQL也需要好好学习一下,Web前端也需要了解一下,工作中Web前端的代码一般是由前端工程师写好的,但我们要看得懂,并能往里加上一些脚本标签等,我的建议是学完Java基础后马上学习MySQL和JDBC,然后在网上找王勇老师的DRP项目来学习,这个项目里不但讲了前端基础,也对Java服务端需要掌握的内容作了详细讲解。认真学习完DRP项目,其实已经具备了软件开发的能力了,但是进入企业还不够,因为实际工作中企业一般都用到了框架,框架有很多,我建议先学习SpringMVC,Spring,Mybatis,也就是俗称的SSM,这些视频在网上很容易下载到,下载完后一个一个的学习,再一个个融入到DRP项目中去,做熟了以后大家就可以考虑准备简历了,有了以上SSM框架的学习经验,再学习其它框架就快了。

再回过头来看看Android,点开招聘网站的Andriod工程师岗位看一下:

Android的要求都差不多,除了强调Java,就是Android了,大家可自行在网上搜索视频学习就行了。

至于选择Java Web或Android,就看大家喜欢了,有精力的可以都学习一下。

学习难度:Java Web > Android

找工作:Java Web > Android

长远发展:Java Web > Android

Java Web的路线看起来是复杂一些,其实也不难,只是涉及到的东西很多,很多人学了一半就坚持不下去了,败给了坚持,而不是难度。

还有人私信问我,学习中记不住代码怎么办?首先我们学习过程中一定要搞清楚,我们学习Java是为了找一份工作,而不是应付考试,把学校里的那些作风都忘了吧,不要去背代码,勾重点,关键是要动手,软件工程是一门实践学科,在学习过程中,光看会听会是不行的,学到每个知识点一定要去理解,动手敲代码,敲完了,继续下一个知识点。雷军有篇文章:给程序员的五点建议,其中有一点是必须写够十万行代码,这个观点我认同,不动手,跟本就不会进步,写代码是一个熟能生巧的技术活,没有足够的代码量,是成不了高手的,因此,一定要多敲代码,多敲代码,多敲代码。

学习中,要抓住主线学习,至少能先独立做一个小Web项目,再去考虑深入学习别的东西。有些人在学Java基础的过程中,学到多线程,非要把理论搞清楚了再说,去找一些专门讲多线程的书来看,还有些人看到某些文章说Java在new一个对象的时候在堆内存里开辟了一块空间,就要去研究堆内存,继而去研究JVM去了,这样的学习方法是不可取的,初学阶段要学会先抓住重点,以理解、实践、找工作为主,要学会先放弃一些东西,等有了多余的时间再去深入研究自己想知道的东西。还有一点,学习过程中千万不要钻牛角尖,我有个发小,学到多线程死锁这一块,死活理解不了,就放弃了,还有一个更可怜,在培训班学到匿名内部类,一直在想这东西是干啥用的,为什么要有匿名内部类,老师课都上到后面去了,还在想,甚至每一个词都要理解透了才肯继续下去,Java基础还没学完,就掉队了,想退学,培训机构不退,两万多打了水漂。学习中一但遇到暂时理解不了的,先休息休息,出门运动运动,适当放松一下大脑,静下心来想想,再看一遍也许就会了。还是理解不了,就先跳过吧,往后面学,没准看到后面,突然一下就明白前面为什么这么做了。

还有一些朋友,调试代码过程中,只要出了一点错误,就大惊小怪,也不仔细看看错误,直接手机拍个一堆堆栈Exception的照片发私信给我,让我帮忙看代码,一看,一般都是空指针异常,数组下标越界啥的,我估计他们自己看都没看,就直接发给我了。学习中,出现了问题不要怕,每一个人都是这样的,也包括曾经的我,一定要仔细看错误日志,看哪一行代码报错,分析出现问题的原因,然后再去排查,在解决问题的过程中,就是不知不觉的进步的过程。在自己动手写项目的过程中,web前端,Java服务端,数据库每一个环节都可能出现问题,要一步一步的排查,首先看web前端的值有没有传到Java服务端,Java服务端有没有调到数据库,数据库里有没有数据等,细心一点,就会发现问题的所在了,还是解决不了,就百度吧,百度不出来,找学长学姐、身边的高手问一下,还在解决不了?那就走值乎或加入我的饭团问我吧,嘿嘿。

还有人问我,自学好还是去培训机构系统的培训一下比较好?

如果你现在还是大二大三,还有大把大把的时间,我建议还是自己学习吧,培训机构动不动就一两万的培训费,不是一般人能够承担的,现在网络资源那么发达,要什么样的资料基本上都能找到,只不过自学时间稍微长了一点,容易走些弯路。大学里开的课程,语言类的如C语言、C++、Java、C#,数据结构和算法、汇编、软件工程等一切和软件有关的东西,尽量花时间好好学习,能学多少就学多少,都有用。

如果你现在已经工作,想转行学习Java,我建议可以适当考虑一下培训机构去系统的学习一下,培训机构在知乎的评价似乎都不怎么好,其实嘛,还是有那么几家是好好做教育的,我去培训机构招过人,基本上还是能用,刚学出来也不敢要太多工资,算是物美价廉吧,培训机构还有一个好处是省时间,一般四到五个月就能出炉,学得好,找一份工作还是没问题的。

说了这么多,都感觉快成培训机构的托了,给大家强调一点,学习Java毕竟还是很辛苦的,不管是自学还是培训机构,请大家都先做个自我评估,看自己适不适合学习Java。

最后,如果决定要学习Java了,请暂时放下你手中的王者荣耀、LOL、梦幻西游,先全身心的投入到学习中吧,不要到时候学没学好,玩也没玩好,培训班钱也花掉了,依然还没有入门,那就尴尬了,玩游戏嘛,就要安心的玩,毕竟我在王者荣耀里曾经也是王者。

4人推荐
随时随地看视频
慕课网APP