博客应该会伴随我的职业生涯,为什么会写博客?有两个原因:一是受到公司一位同事的启发;另一个是读《疯狂java讲义》作者李刚的一篇文章有感。将自己的学习过程和总结记录在博客中,会让自己学到的零碎知识构成体系,不仅是知新的动力,也是温故的好素材。在过去的那段时间里,杂乱无章的看过不少的知识点,但是生疏不用,时间久了之后又跟第一次遇到一样。记录在博客中,不仅会在当时加深自己对原理的认知,也可以供在后面的时间里翻阅查看并进行深入补充,形成一个良性循环。
李刚的《如何学习JAVA》这篇文章,对我的触动很大,也是在我那段迷茫时间里的一盏灯塔,现在我原文抄录下来,激励自己也激励看到这篇文章的读者,不忘初心!
经常看到有些学生、求职者捧着一本类似JBuilder入门、Eclipse指南之类的图书学习java,当他们学会了在这些工作中拖出窗体、安装按钮之后,就觉得自己掌握、甚至精通了java;又或是找来一本类似JSP动态网站编程之类的图书,学会使用JSP脚本编写一些页面后,就自我感觉掌握了java的开发。
还有一些学生、求职者听说J2EE、Spring或EJB很有前途,于是立即跑到书店或图书馆找来一本相关图书。希望立即学会它们,然后进入软件行业。大显身手。
还有一些学生、求职者非常希望找到一本既速成、又大而全的图书,比如突击J2EE开发、一本书精通J2EE之类的图书,希望这样一本图书就可以打通自己的“任督二脉”,一跃成为J2EE开发高手。
也有些学生、求职者非常喜欢J2EE项目实战,项目大全之类的图书,他们的想法很单纯:我按照书上介绍,按图索骥、依葫芦画瓢,应该很快就可学会J2EE,很快就能成为一个受人羡慕的J2EE程序员了。
凡此种种,不一而足。但最后的结果往往是失败,因为这种学习没有积累,没有根基,学习过程中困难重重,每天都被一些相同、类似的问题所困扰,起初热情十足,经常上论坛询问,按别人的说法解决问题之后很高兴,既不知道为什么错,也不知道为什么对,只是盲目地抄袭别人的说法。最后的结果又两种:
久而久之,热情丧失,最后放弃学习。
大部分常见问题都问遍了,最后也可以从事一些重复性的开发,但一旦遇到新问题,又将束手无策。
第二种情形在普通程序员中占了极大的比例,笔者多次听到、看到有些程序员抱怨:我做了2年多java程序员了,工资还是3000多点。偶尔笔者会与他们聊聊工作相关的内容,他们会告诉笔者:我也用Spring了啊,我也用EJB了啊~~~他们感到非常不平衡,为什么我的工资这么低?其实笔者很想告诉他们:你们太浮躁了!你们确实用了Spring、EJB或者Hibernate,但你们从未想过为什么要用这些技术?用这些技术有什么好处?如果不用这些技术行不行?
很多时候,我们的程序员把java当成一种脚本,而不是一门面向对象的语言,他们习惯了在JSP脚本中使用JAVA,但从不去想JSP如何运行,WEB服务器里的网络通信、多线程机制,为何一个JSP页面能同时向多个请求者提供服务?更不会想如何开发web服务器:他们像代码机器一样编写Spring bean代码,但从不去理解Spring容器的作用,更不会想如何开发Spring容器。
有时候,笔者的学生在编写五子棋、梭哈等作业感到困难时,会像他们的大师兄、朋友求教,这些程序员告诉他:不用写了,网上有下载的!听到这些回答,笔者不禁感到哑然:网上还有Windows下载呢!网上下载和自己编写是两码事。偶尔,笔者会怀念以前黑色屏幕、绿荧荧字符时代,那时候程序员很单纯:当我们想偷懒时,习惯思维是写一个小工具:现在程序员很聪明:当他们想偷懒时,习惯思维是从网上下载一个小工具。但是,谁更幸福呢?
当笔者的学生把他们完成的小作业放到互联网上之后,然后就有许多人称他们为“高手”!这个称呼却让他们万分惭愧:惭愧之余,他们也感到万分欣喜,非常有成就感,这就是编程的快乐。编程的过程,与寻宝的过程完全一样:历经辛苦,终于找到心中的梦想,这是何等的快乐。
如果真的打算将编程当成职业,那就不应该浮躁,而是应该扎扎实实先学好java语言,然后按java语言本身的学习规律,踏踏实实一步一个脚印地学习,把基本功练扎实才可获得更大的成功。
实际情况是:有多少程序员真正掌握了java的面向对象?真正掌握了java的多线程、网络通信、反射等内容?有多少java程序员真正理解了类初始化时内存的运行过程?又有多少程序员理解Java对象从创建到消失的全部细节?有几个程序员真正独立编写过五子棋、梭哈、桌面弹球这种小游戏?又有几个程序员敢说:我可以开发Struts、我可以开发Spring、我可以开发Tomcat?很多人会说:这些都是许多人开发出来的!实际情况是:许多开源框架的核心最初的完全是由一个人开发的。现在这些优秀程序已经出来了!你,是否深入研究过它们,是否深入掌握了它们?
如果要真正掌握java,包括后期的javaEE相关的技术,一定要记住笔者的话:绝不要从IDE工具开始学习。IDE工具的功能很强大,初学者学起来也很容易上手,但也非常危险:因为IDE工具已经为我们做了许多事情,而软件开发者要了解软件开发的全部步骤。