不是广告--如何学Java,我说点不太一样的学习方式

2020-05-06 20:31:17 浏览数 (1)

最近有不少读者通过微信问我:小白应该怎么学好 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,会扯几个设计模式。现在看来,就是一个能熟练写代码的程序员而已,动手能力还凑合,脑子里的知识不成体系。

从认识二刘的第一天起,就被全面碾压。学校、专业的碾压就不用说了,关键是从他们嘴中我听了很多之前都没听过的名词:敏捷开发、重构、结对编程、领域模型……

说实话,当初刚接触这些的时候,我是很排斥的。举几个例子:

  1. 看到二刘结对编程,心想一个人干活、一个人闲着,这不是偷懒吗?
  2. 重构代码:程序跑的好好的,我为啥要改我的代码?有重复代码怎么了?有重构的时间,还不如再实现俩新功能。
  3. 单元测试:代码还写不过来,哪有时间写单元测试,再说了,不是有专门的测试吗。
  4. 领域模型:别和我说什么贫血不贫血,我的 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,你心里就有谱了吧。

就说这么多吧,希望你能转发、点在看,说不定和你日后一起学习的好基友会看到这篇文章。

0 人点赞