首先声明,这篇文章不是卖课程、介绍培训班的广告

最近有不少读者通过微信问我:小白应该怎么学好 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,你心里就有谱了吧。

就说这么多吧,希望对你有帮助。

不是广告--如何学Java,我说点不太一样的学习方式的更多相关文章

  1. 2018年如何快速学Java

    前言 只有光头才能变强 提前预警:本文适合Java新手阅读(老手可在评论区给下建议),希望大家看完能有所收获. 一.为什么我要写下这篇文章 1.1直接缘由: 在今天(2018年11月4日)有个同学给我 ...

  2. Java学习路线图(如何快速学Java)

    不知不觉从初学Java到现在已经8年了,今天在这里给刚入门和入门不久的小伙伴们一些建议.可能总结的不是很详细,但给出了一个大概的学习路线.希望对大家有帮助哈~ 如何快速学Java 这里我以Java E ...

  3. 学java得这样学,学习确实也得这样

    引言 软件开发之路是充满荆棘与挑战之路,也是充满希望之路.Java学习也是如此,没有捷径可走.梦想像<天龙八部>中虚竹一样被无崖子醍醐灌顶而轻松获得一甲子功力,是很不现实的.每天仰天大叫& ...

  4. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  5. 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)

    你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...

  6. 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)

    硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...

  7. 从零开始学 Java - 我放弃了 .NET ?

    这不是一篇引起战争的文章 毫无疑问,我之前是一名在微软温暖怀抱下干了近三年的 .NET 开发者,为什么要牛(sha)X一样去搞 Java 呢?因为我喜欢 iOS 阿!哈哈,开个玩笑.其实,开始学 Ja ...

  8. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  9. 从零开始学 Java - 利用 Nginx 负载均衡实现 Web 服务器更新不影响访问

    还记得那些美妙的夜晚吗 你洗洗打算看一个小电影就睡了,这个时候突然想起来今天晚上是服务器更新的日子,你要在凌晨时分去把最新的代码更新到服务器,以保证明天大家一觉醒来打开网站,发现昨天的 Bug 都不见 ...

随机推荐

  1. LeetCode47, 全排列进阶,如果有重复元素怎么办?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第28篇,依然是全排列的问题. 如果对全排列不熟悉或者是最近关注的同学可以看一下上一篇文章: LeetCode46 回 ...

  2. vue配置环境踩坑

    Vue 环境配置踩坑 目录 Vue 环境配置踩坑 windows下cnpm -v :无法将"cnpm"项识别为 cmdlet.函数.脚本文件或可运行程序的名称. windows下c ...

  3. 关于laravel5.4.12新增集合操作when方法详解

    从v5.4.12开始,Laravel Collections现在包括一个when方法,允许您对项目执行条件操作,而不会中断链. 像所有其他Laravel 集合方法,这一个可以有很多用例,选择其中一个例 ...

  4. 一篇让你明白什么是浏览器BOM方法的笔记

    BOM Browser Object Model 浏览器对象模型 虚拟机 ,任何语言编辑的程序都需要一个虚拟机来执行.如果脱离这个环境就无法运行. 浏览器就是一种虚拟机.用来解析html语言 同一款浏 ...

  5. Docker Swarm 资源管理

    Docker Swarm Docker Swarm是Docker官方项目之一,是使用SwarmKit构建的Docker引擎内置的集群管理和编排工具,提供Docker容器集群服务,是Docker官方对容 ...

  6. 使用Spring实例化Bean的方法以及Bean取别名

    一.通过构造方法实例化Bean bean中加构造方法 public class Bean1 { public Bean1() { System.out.println("Bean1构造方法. ...

  7. vs code 关闭保存自动格式化 formatonsave - [vscode] - [html]

    有时候Ctrl+s保存,html代码哥格式会紊乱. 造成这个原因一般是我们基本都在用的一个插件: ![](https://img2018.cnblogs.com/blog/1735896/201912 ...

  8. [ddt01篇]十年测试老鸟帮您解析:ddt数据驱动实现自动化测试入门基础应用

    一.什么是DDT数据驱动框架 ​ 全称:data driver test数据驱动测试框架,可以完美的应用于unittest框架实现数据驱动.ddt使用简介: 1.测试数据为多个字典的list类型 2. ...

  9. spring中BeanPostProcessor之二:CommonAnnotationBeanPostProcessor(01)

    在上篇博客中分享了InstantiationAwareBeanPostProcessor接口中的四个方法,分别对其进行了详细的介绍,在文末留下了一个问题,那就是postProcessPropertie ...

  10. 一分钟搞定Java高频面试题

    一分钟搞定Java高频面试题 一.变量赋值和计算 题目: public static void main(String[] args) { int i = 1; i = i++; int j = i+ ...