最近又有一个读者“在你的世界各地”向我提了上面这个问题。但说实话,这个问题并不太好问答。因为 Java 是一门“历史悠久”的编程语言,它的学习资料多到令人眼花缭乱。
但不能为自己找借口啊,毕竟读者就是上帝。于是我花了一个月的时间,精心为你准备了一份万字长文,史上最佳的 Java 自学指南,保证你能找到一份满意的工作。
先来梳理一下读者强调的关键词,有 3 个,分别是“零基础”、“自学”、“找到工作”。
1)“零基础”意味着我提供的学习路线不能太难,或者说应该是循序渐进的。
2)“自学”意味着我提供的学习素材不能太枯燥,或者说应该是幽默风趣的。
3)“找到工作”意味着学习周期要尽可能的短,但还要学有所成。
01、为什么要学 Java
因为 Java 是世界第一的编程语言啊!谁给的底气?大概是 TIOBE 这个编程语言排行榜吧。
TIOBE 是编程语言流行趋势的一个指标,每月更新,基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(Google、Bing、Wikipedia)进行计算。
上面这幅图是几个热门编程语言(Java、C、Python、JavaScript 等等)近些年来的增长趋势。可以看得出,Java 霸占这份榜单很多年,并且还会持续更久。
1)简单易学,老少咸宜。Java 继承了 C++ 语言面向对象的核心技术,舍弃了容易引起错误的指针,移除了运算符重载和多重继承等难以理解的概念,增加了垃圾回收机制,这些大大简化了程序员的开发成本。
2)跨平台。任何平台只要安装了 JVM(Java 虚拟机),就能运行 Java 程序。真正实现了“Write once, run anywhere”。
3)丰富的类库。全球约有 900 万名 Java 开发人员,创造了一个充满活力和积极进取的 Java 社区,开源类库非常丰富。借助这些类库可以让开发者避免重复造轮子,不用去关注 Java 底层的开发,只关注业务的实现。
4)广泛使用。据估计,全球范围内有超过 30 亿部设备运行 Java,超过其他任何一种语言。Java 被用于众多全球知名的网站中,包括 eBay.com、Linkedin.com、Amazon.com 和 Facebook.com。这一点应该是 Java 屹立不倒的深层次原因吧,大家都在用,才是真的强啊。
5)薪资可观。很多企业都需要 Java 方面的人才,这是一个非常现实的原因,为了生计着想,学习 Java 这个方向不会有错!
02、哪些 Java 知识不需要再学了
张无忌在学太极拳的时候,他爹的师父张三丰告诫他一定要把之前所学习的武功全部忘掉,忘得越多就会学得越快。
同样的,自学 Java 的时候一定要先知道哪些 Java 知识不需要再学了,毕竟技术的更新迭代就好像火箭一样快,Java 的一些知识点早已经过时了。如果不懂得断舍离,那学起来就不免太痛苦了。
1)AWT 和 Swing
真不知道为什么,有些书籍还在介绍 AWT 和 Swing,这就好像不知道大清朝早已经亡了几百年一样。已经 9102 了,谁还会用 AWT 和 Swing 去开发桌面应用呢?
就我所知,C++ 程序员会用 MFC,C# 程序员会用 Winform 和 WPF。甚至还可以用一种更时髦的技术(比如 Electron)把 Web 网页裹一层华丽的外衣,变成可执行文件。
2)Applet
作为网页插件技术,Applet 压根就没流行起来,就连曾经的热门 Flash 也要淘汰了。
3)XML
XML 还没有被淘汰,应用的地方还有不少。但是作为一种数据传输格式,它正在被 JSON 替代。
4)JDBC
我个人不建议再学习偏底层的 JDBC 了,尤其是对于时间宝贵的自学程序员来说。与其花这点时间,不如把精力投入到 MyBatis 的学习上。
5)Struts
Struts 是早年一个优秀的 MVC 框架,单从技术的角度来看,还是蛮不错的。但是自从有了 SpringMVC 后,Struts 就被拍死在沙滩上了。
6)Hibernate
在我刚参加工作那会(2010 年的时候),持久层框架用的正是 Hibernate。但时过境迁,Hibernate 太重量级了,学习成本太高,取而代之的是轻量级的 MyBatis(支持定制化 SQL、存储过程以及高级映射)。
7)JSP
说起来惭愧,我现在维护的一个项目,视图层用的依然是 JSP。但如今流行的是“前后端分离”,JSP 就显得不合时宜了。
03、学习 Java 需要安装的软件
工欲善其事必先利其器,战斗之前我们要先配备好武器。
1)JDK
JDK 是 Java Development ToolKit 的简称,也就是 Java 开发工具包。JDK 是整个 Java 的核心,包括 Java 运行环境(Java Runtime Envirnment,简称 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基础类库(比如 rt.jar)。
2)IDE
集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。
在我初学 Java 的时候,老师竟然告诫我们不要使用 IDE(当时是 MyEclipse 风靡的年代),而要使用文本编辑工具,比如说 Editplus、Nodepad++。
老师说的有一定的道理,比如说,在没有代码提醒的帮助下,我们能够通过不停的手敲记住一些 Java 的常见名词。但在我看来也就仅此而已。
没有 IDE 的帮助,让初学者对编程望而生畏,因为那些名词实在是太多了。我们班当时很多同学就是因为觉得太痛苦了,就放弃编程了。
我到现在也不太会敲 extends、implements(在 Eclipse 中复制出来的),不会敲又怎样呢?有好的工具,我们就应该利用,不应该受苦。
下面是最为受欢迎的 IDE 的榜单。
对于我来说,一直喜欢的是 Eclipse,这可能是一种情怀吧。
据说,喜欢 IntelliJ IDEA 的 Java 程序员越来越多了。
3)JAD
将源代码转换成二进制执行代码的过程叫做“编译”,一般指的是将 Wanger.java 编译成 Wanger.class 字节码文件;而将字节码文件转换成源代码的过程叫做“反编译”,比如将 Wanger.class 转成 Wanger.java。
JAD 是一款老牌的、经典的 Java 反编译工具。更重要的是,JAD 能够让我们深入的了解 Java 代码的工作机制。
比如说有这样一段代码:
String chenmo = "沉默";
String wanger = "王二";
System.out.println(chenmo + wanger);
它的“庐山真面目”是下面这样子的。
String chenmo = "\u6C89\u9ED8"; // 沉默
String wanger = "\u738B\u4E8C"; // 王二
System.out.println((new StringBuilder(String.valueOf(chenmo))).append(wanger).toString());
4)Maven
Maven 是一个项目管理和自动化构建工具,基于项目对象模型(POM)的概念,可以管理项目的构建、报告以及文档。作为 Apache 组织中的一个颇为成功的开源项目,Maven 主要服务于基于 Java 的项目构建、依赖管理和项目信息管理。