如何学习java

经常看到很多人捧着一本10天精通java,java开发宝典之类的图书学习java,当他们学会了用eclipse、idea等IDE工具写出“Hello World”之后,就感觉自己掌握、甚至精通了java;又或者找来一本类似于jsp动态网站编程之类的图书,学会使用jsp脚本编写一些页面之后,就自我感觉掌握了java开发!世界上最可怕的事情就是自己菜却不知道自己菜!

还有一些朋友、求职者听说J2EE、Spring或Spring boot很有“钱途”,于是立即跑到书店或者图书馆找来一本精通j2EE之类的图书,希望这样一本图书就可以打通自己的“任督二脉”,一跃成为J2EE开发高手!

也有些小盆友非常喜欢J2EE项目实战、项目大全之类的图书,他们想法很单纯:我按照书上介绍,按图索骥、依葫芦画瓢,应该很快就可学会J2EE,很快就能成为一个受人人羡慕的J2EE程序员了!

......

凡此种种,不一而足,他们中的大多数最后的结果都是失败,因为这种学习没有积累、没有根基,学习过程中困难重重,每天都被一些相同、类似的问题所困扰,起初热情十足,经常上论坛,贴吧、QQ群询问,按别人的说法解决问题之后很高兴,既不知道为什么错?也不知道为什么对?只是盲目地抄袭别人的说法。最后的结果有两种:

1、久而久之,热情丧失,最后放弃学习。

2、大部分常见问题都问遍了,最后也可以从事一些重复性的开发工作,但一遇到新问题,又将束手无策。

第一种我就不想多说了,每个人都有自己的选择,他们应该去干他们更擅长的事情,毕竟不管你做什么都能给国家做贡献!对于这第二种情况我可以说在普通程序员中占了极大的比例,笔者多次听到、看到(在网络上)有些程序员抱怨:我做了2年多java程序员了,工资还是5000多点。偶尔笔者也会与他们聊聊工作相关内容,他们会告诉笔者:我也用Spring了啊,我也用Spring boot了

啊......他们感到非常不平衡,为什么我的工资这么低?其实笔者很想告诉他们:你们太浮躁了!你们确实是用了Spring、Mybatis又或是Spring boot,但你们想过为什么要用这些技术吗?用这些技术有什么好处吗?如果不用这些技术行不行?

很多时候,我们的程序员把java当成一种脚本,而不是一门面向对象的语言。他们习惯了在JSP脚本中使用Java,但从不去想JSP如何运行,Web服务器里的网络通信、多线程机制,为何一个JSP页面能同时向多个请求者提供服务?更不会想如何开发Web服务器;他们像代码机器一样编写Spring Bean代码,但却从来不去理解Spring容器的作用,更不会想如何开发Spring容器。

有时候,很多同学在编写五子棋,聊天程序遇到困难的时候,会向他们的大学学长,朋友求救,这些程序员告诉他们:不用写了,网上直接有下载!听到这种回答,我只想对这位学长说:你过来,我保证不会打死你。。。,网上还有Windows下载呢!网上下载和自己编写是两码事。偶尔,笔者会怀恋以前黑色屏幕、绿莹莹字符时代,那时候程序员很单纯:当他们想偷懒时,习惯思维是写一个小工具;现在的程序员很聪明:当他们想偷懒时,习惯是从网上下一个小工具。但是,谁更幸福呢?

当很多同学把他们完成的小作业放在互联网之后,然后就有很多人称他们为“高手”!这个称呼让他们万分惭愧;惭愧至于,他们也感到万分欣喜,非常有成就感,这就是编程的快乐。编程的过程,与寻宝的过程完全一样:历经千辛万苦,终于找到心中的梦想,这是何等的快乐!

如果真的打算将编程当成职业,那就不应该如此浮躁,而是应该扎扎实实先学好java语言,然后按java本身的学习规律,踏踏实实一步一个脚印地学习,把基本功练扎实了才可获得更大的成功。

实际情况是,有多少程序员真正掌握了java 的面向对象?真正掌握了java的多线程、网络通信、反射内容?有多少java程序员真正理解了类初始化时内存运行过程?又有多少程序员理解java对象从创建到消失的全部细节?有几个程序员真正独立地编写过五子棋、坦克大战、聊天程序这种小游戏?又有几个java程序员敢说:我可以开发Spring?我可以开发Tomcat?很多人又会说:这些都是很多人一起开发出来的!实际情况是:很多开源框架的核心最初完全是由一个人开发的。现在这些优秀程序员已经出来了!你,是否深入研究过它们,是否深入掌握了它们?

如果要真正掌握java,包括后期的javaEE相关技术(例如Spring、Hibernate、Mybatis、Spring boot等),一定要记住笔者的话:绝不要从IDE(如Eclipse和Idea)工具开始学习!IDE工具的功能很强大,初学者学起来也很容易上手,但也非常危险:因为IDE工具已经为我们做了很多事情,而软件开发者应该了解软件开发的全部步骤。

最后推荐一个笔者在学习java过程中对我帮助非常大的网站,相信你会爱上它!

how2j实例驱动java全栈学习 

你可能感兴趣的:(java学习方法)