最近有不少读者通过微信问我:小白应该怎么学好 Java?
提问的人里有在校大学生、有刚参加工作的、有想转行做程序员的,还有一部分是最近找工作不顺的。
现在行情不好,很多人都焦虑,但是光跟着焦虑不解决问题。作为程序员,还不如静下心来,少受干扰,专心提高自己。
继续说回到学 Java 这个问题上来,网上 95% 以上的文章都是说介绍学习路线、Java书籍和视频的。
学习路线无非就是:
- Java:语法、面向对象、IO、集合、异常、多线程……
- Java WEB:Tomcat、servlet、Struts、Spring……
- 持久化相关:MySQL、Hibernate、MyBatis……
- …………
书籍、视频说的比较多的有:
- 《Head First Java》、《Java 编程思想》、《Effective Java》……
- 毕向东、刘意等老师的视频。
Java 家族成员太多,学个 Java 怎么要学这么多东西?
学习资料越收集越多,这要学到什么年头?很多人都是收藏从未停止,学习从未开始。
我今天就和大家说点不一样的,我学 Java 中对我帮助最大的三段经历。这三段经历都是发生在我刚工作的前 5 年中,我个人认为,程序员的前 5 年是技术突飞猛进的阶段,这个阶段非常重要。
经历一:遇到了志同道合的好基友
这段经历是从我工作之后第三个年头开始的,因为重要,所以先说。
那时候我跳槽去了一家新公司,在这家公司就干了不到一年,如果不是因为认识了两个程序员,这段经历几乎都快忘记了。
这两个程序员和我年龄相仿,都姓刘,为了省事,后面统称二刘吧。对我来说,如果用一个词来形容他俩,就是:良师益友。
认识二刘之前,我觉得自己水平还可以:会写 CRUD、JSP,会用 Struts,会扯几个设计模式。现在看来,就是一个能熟练写代码的程序员而已,动手能力还凑合,脑子里的知识不成体系。
从认识二刘的第一天起,就被全面碾压。学校、专业的碾压就不用说了,关键是从他们嘴中我听了很多之前都没听过的名词:敏捷开发、重构、结对编程、领域模型……
说实话,当初刚接触这些的时候,我是很排斥的。举几个例子:
- 看到二刘结对编程,心想一个人干活、一个人闲着,这不是偷懒吗?
- 重构代码:程序跑的好好的,我为啥要改我的代码?有重复代码怎么了?有重构的时间,还不如再实现俩新功能。
- 单元测试:代码还写不过来,哪有时间写单元测试,再说了,不是有专门的测试吗。
- 领域模型:别和我说什么贫血不贫血,我的 JavaBean 里就只有 getter、setter。
好在二刘足够有耐心,对我不抛弃不放弃,反复给我洗脑,终于让我这个思想落后青年,接受了他们的思想,后面经常和他俩一起学习、实践、交流。
学 Java 很辛苦,大部分人自制力差,一个人学容易偷懒。找几个好基友一起学,确实提高快。在这里要感谢一下当初二刘对我的帮助。
到现在我和二刘还是好朋友,跟他们一起学到的重构、DDD、TDD、架构模式这些思想,让我受益至今。相比于Struts、Hibernate那些技术来说,这些更像是程序员的内功,内功不会很快过时。
经历二:找到了组织——BJUG
如果说认识二刘是我上了一条贼船,那么加入 BJUG 就是上了一艘航母。加入 BJUG 还是通过二刘,你看好基友是多么重要。
旧文中提到过 BJUG 这个名字: Beijing Java User Group的简称就是 BJUG。从名字就能看出来,是一群在北京工作的 Java 程序员聚在一起的一个小团体。
BJUG 是一个非常活跃的技术社区,我们都有哪些活动呢?
最主要的活动是线下技术分享,分享基本都在周六下午,一下午能分享 2-4 个主题。
现在还能百度到当时的信息,给大家贴几张图。
从这几张图上,大家能看出了,我们当时分享的都是技术干货。在冰云的热心组织下,社区弄得还可以,成为 Top 50 的 Java User Group。
除了技术分享,我们还一起翻译资料、书籍。当然还少不了一起聚餐腐败。
BJUG 不仅仅是一个技术社区,还是一个有爱的社区。曾经一名核心会员得了重症需要换骨髓,面对伙伴的不幸,大家捐款相助,为伙伴的康复贡献了绵薄之力。
可惜的是,BJUG 后期人变多了,人多了之后交流的质量我感觉反而降低了,后面慢慢活动越来越少了。现在看来,人多不一定是好事,小圈子反而更有效率。
当时在 BJUG 里我好像没做过主题分享,因为不自信,都是充当听众,这也算一个遗憾吧。
不管怎么说,BJUG 里牛人非常多,我属于那里边最菜的了。能跟那些牛人学多少东西,你们可以自己想象一下。
总之,经历了二刘和 BJUG 的洗礼之后,后面几年我找工作面试的时候,没被技术面试卡住过。
经历三:撸几万行代码
终于可以把时间调回到我刚工作的头两年了。
我的大学一般般,非 985、211,我也不是计算机专业的,大四参加了一个 Java 培训班。参加培训班之前的计算机水平:QQ 熟练、红警精通。
培训半年之后的水平也不咋地,毕业之后能找到程序员的工作,主要因为赶上了好时候,那时候缺程序员啊,大学刚扩招,哪有现在这么多毕业生,而且大学还没教 Java。大部分培训机构还在教网页三剑客,能教 Java 的老师就很少。
有了培训班的基础,我工作之后也能凑合干,不过还有太多太多不会的知识,不会就学呗。
最开始我学习靠看书,看《Java 编程思想》,也不知道是书太难了,还是翻译的太晦涩了,看书真看不懂啊,书又厚,我看了几个月愣是一遍都没看完,经常是看了后面忘了前面。
后来我干脆就把书扔一边去了,直接撸代码!
起初是撸简单的,撸各种常用类、常用方法的例子,这样方便以后拿起来就用。另外,撸的多了,慢慢攒出了自己的一套工具类,包括String、数组、日期、类型转换等等这些的,在三方工具类没有普及之前,这套工具类陪了我很多年。估计很多老程序员,都有一套自己积累的工具类。
后来是撸项目代码,当时找的是著名的 PetStore 项目,虽然是个示例项目,项目很小,但是麻雀虽小五脏俱全。最开始是看一行写一行,照着抄代码。抄了 n 遍之后,感觉都会了,然后自己默写,磕磕绊绊默写出来之后,根本跑不起来,一堆 bug。解决完 bug,能跑起来了,下一步就是把自己写的代码和原始代码作比较,看看差异在哪,琢磨人家为什么要那么写。
撸了一定数量代码之后,我再回过头去看书,可能以前看不懂的,突然就明白了。
印象最深的一个事是,当初第一次抄完抽象类的代码,我压根就不知道还有抽象类这一说,我以为一度怀疑这个类没写完整,会编译不通过……
总的来说,撸代码对我度过小白阶段来说,非常非常重要。
我感觉学 Java,除了学知识,还离不开动手实践。上面写的我撸代码的方式,也不一定适合所有人,每个人情况不一样,大家参考就好。
其他补充
除了个人经历,再补充几点学习技巧:
补充1:看大厂的开发规范
例如阿里的《Java 开发手册》,是阿里巴巴集团技术团队的集体智慧结晶和经验总结。
看这目录:
分为编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录。另外,规约依次分为强制、推荐、参考三大类。在延伸信息中,“说明”对规约做了适当扩展和解释;“正例”提倡什么样的编码和实现方式;“反例”说明需要提防的雷区,以及真实的错误案例。
真的是大厂的智慧结晶和经验总结,新人看完可以少踩很多坑!
补充2:找到学习重点
Java 全家桶包括的东西太多,对小白来说一个难点就是:不知道学习重点。
学习重点就是那些在招聘需求、面试问题中高频出现的。
把主要精力放在学重点上,剩下的可以慢慢学,学习是一个长期的过程,别想着一口吃成胖子。
另外,对小白来说,太复杂、太高级的可以先知道个大概,不用奢望一下学得很透。就像我们和小朋友说“等你以后长大了,慢慢就懂了”一个道理。
还有,有些知识可以不用学了,例如Swing、JSP现在几乎没人用了,学这个就是浪费时间。就连Struts、Hibernate现在用的也少了,学习的优先级也往后放。
补充3:资料不用贪多
不要盲目收集资料,收集太多资料你也看不完,更多是自我安慰。
资料在精不在多,遇到好的资料,该花钱就花钱,对自己学习不要抠门。有的资料、课程也不贵,少下一次馆子、少买件衣服、少看一场电影就有了。花钱买了别人的经验,省了自己的时间。
但是,花钱也别盲目,现在滥竽充数的老师、培训太多。
总结
这篇文章写了很多个人经历,我觉得只有亲自经历的,自己验证有效的,才好意思推荐给你们。
经历里,我特意打乱时间顺序,按照学习效果来写的。
强烈建议你们找到身边的学习圈子。如果没有现成的,你是不是可以组建一个?大家一起学习、一起分享、一起写代码看代码。
圈子人数不用多,十个人以内就挺好的。
这个圈子,不是微信里面学习交流群(我加了不少群,大部分消息没啥价值,慢慢成了死群),最好都在一个城市的,能一起线下约活动。
有了圈子,除了技术提高,对你以后跳槽也有好处。
除了圈子,学 Java 要多敲代码,不要只是听和看。
写到这里,我突然想到了学习金字塔:
看完这个图,用什么方式去学 Java,你心里就有谱了吧。
就说这么多吧,希望你能转发、点在看,说不定和你日后一起学习的好基友会看到这篇文章。