January 22, 2017

Learn Java

如何自学Java

声明:我和这篇教程里面推荐的任何书籍与教程的作者和发行商都没有关系,只是网络上搜罗了一些有用的资源希望和大家分享。

之前写过一篇介绍如何学习Python的文章,收到了很不错的反响。但是Python只是我由于个人兴趣学习的语言,很多语言细节和学习不如很多在日常中使用python的人。我个人在工作中主要使用的是Java,对Java相对比较熟悉,希望这篇教程能够帮助很多希望学习编程的人。

引言

Java是一门历史悠久的语言,从1994年公布到现在,Java一直保持极高的使用频率。你可以在服务器开发中使用Java,可以在手机开发中使用Java,可以在嵌入式开发中使用Java。尽管这门语言被人诟病很多,但是Java仍是当前最流行的语言没有之一。

Java语言的好处在于,他巧妙的取得了语言功能和语言复杂度的平衡,任何一个有经验的程序员都可以在最短的时间内上手Java,写出符合质量的代码。Java不是最快的语言,它比C慢一倍,但是有着远超过其他基于VM语言(比如Python)的运行效率。Java语言上的功能不足由各种函数库补足,你能想到的几乎任何功能都能有相应的Java库帮你实现了,很多时候只需要根据你的业务调用这些库就行了。

学习完Java之后,如果你对Java这门语言不满意,可以学习JVM(Java虚拟机)上面的其他语言,比如ClojureScalaKotlin。Clojure这个是一个Lisp方言,学习Clojure能很好的学习函数式编程的思想。Scala是Java语言作者新开发的一门语言,包含了很多高端大气上档次的语言特性,但是就是相当难以学习。Kotlin是一门很适合移动开发的语言,Kotlin对Java进行了简化,让开发者更容易完成移动应用。但是学习这些语言的前提是,你足够熟悉Java。

书籍

我自己学习Java的时候,因为有过C++的编程经验,所以几乎没费什么力气就学会了这门语言。然而对于初学者来说,Java的面向对象思想是一个需要时间消化和理解的新事物,书籍可以帮助你理解这些晦涩难懂的概念。

Head First Java 是一本很不错的教学书,除了Head First Java之外,还有Head First设计模式,Head First Python等等书籍。Head First系列是由UCLA的一位教授编写的编程入门教材,深入浅出,易学易懂。这系列书籍的成书日期都很早,因此很多新的技术都跟不上年代了。比如在Head First Java中,使用的是Java1.5作为教学内容而不是最新的Java1.8,如果你之前对编程没有了解,我推荐使用这本书作为你的入门书。

Java核心技术是一本非常著名的教材,这本教材每当Java更新版本的时候都会推出,紧跟时代潮流。这本书的写作方式由浅入深,阐述了Java语言的方方面面。如果你想通过一本书了解Java的话,这本书就十分的切合你的要求。这本书有上下两卷,上卷叙述了Java语言的基本特性,下卷叙述了各种Java标准库的特性,比如文件IO,比如Sql读取和写入。这本书的上卷,可以作为入门使用,对于这本书的下卷,我推荐作为进阶学习使用。

疯狂Java讲义国人写的教材,没有读翻译教材的时候那种生硬的感觉,更加贴合国人的学习需求。不过这本书有人说讲的过于细致,就像一本字典而不是一本教程。有需要的同学可以试读之后在进行选择。

Effective Java历久弥新的神作,Bloch大神在Google多年经验的总结。在学习完Java语言之后就推荐看这本书,实践并思考这些条条框框之后的原因。学会Java之后,如果你能实践这本书里面的意见,那么你的Java代码能被很多有经验的开发人员认同,从而在面试中无往不利。买了这本书之后,每隔半年可以把自己的实践经历和这本书的内容对照,对这本书才能有更好的理解。

还有一些没有详细介绍的书籍:

  1. Think in Java 如果你有C语言编程基础,这本是很好的教学书。不过内容很深,不适合初学者。
  2. 深入理解Java虚拟机 这本书也算是进阶书籍,讲述的是Java是怎么运行起来的。

视频资源

相对于硬邦邦的书籍而言,通过视频学习能够极大的提高你的学习效率。对于视频教学,我推荐马士兵JAVA基础教程,我试着听了一下,老师讲的比较风趣,同时看课程安排也比较合理。很多人都通过这个视频教程学习Java。

IDE

在学习Java的时候,有一个趁手的IDE是十分必要的,Java这门语言如果不用IDE的话会非常的繁琐,IDE能够帮你减轻90%以上的工作,让你学习更加轻松愉快。

Intellij截图

Intellij 是目前Java最强的IDE,没有之一。自动补全功能强大的丧心病狂,而且他会根据你的代码自动的进行提示,保证你写出的代码符合Java的最佳实践。缺点是这个IDE吃资源有点多,如果家里电脑不是很强大的话,用这个IDE会比较卡。

Eclipse 也是一个强大的Java IDE,很多教程都是用Eclipse作为教学用的IDE,如果你使用的教程是用Eclipse的,那么用Eclipse作为你的开发IDE是比较好的选择。

如何刷题

很多人学习Java的目标就是找工作,对于国外的同学来说,刷题更是一项避不开的修行。当程序员在找工作的时候,很多时候都要在黑板或者电脑里面写面试题。通过用Java解决面试题目来展现自己的编程水平,获得你心仪的Offer。对于我自己来说,我也是有过刷题找工作这种经历的。程序员面试就是面试你的代码能力以及算法熟悉能力,代码能力是通过你的代码整洁程度,是否进行了异常检查等等方面显现出来的。你的算法熟悉能力是通过不断的刷题进行提高的。

对于算法的学习,可以从公开课开始,这里我推荐MIT的公开课。在学习的过程中,我推荐大家集中在基础算法,比如遍历,查找,排序,动态规划等,而对于复杂的算法比如平衡树等做了解就好。毕竟在面试的时候也不会让你手写一个平衡树的,这种面试问题不能体现出被面试者的水平。对于这些复杂的算法,Java语言都提供了相应的实现,你需要了解这些实现。

之后就是刷题过程了,刷题是一个锻炼面试者解决问题能力的过程。在用下面刷题网站的时候,最好不要参考答案,即使参考了答案也要整理出自己的思路。很多人遇到题目不会写之后就去找答案了,认为只要把这里的题目都背下来就能够拿到好成绩了。然而到面试的时候出一道其他的问题,这些背答案的人就傻眼了。刷题最重要的是,任何一道题目用自己理解的思路来写,而不是按照其他人的思路生搬硬套。

同时,刷题的时候还有一个小技巧,就是给自己设置一个时间。很多时候自己做编程题目的时候,都处于一个很闲散的状态,一点点的解决这个问题。然而在面试的时候,只有很少的时间给你了解问题,解决问题,这就要求你对面试题目要能够足够快的反应,足够快的给出思路。在平常练习的时候,就要给自己一个时间限制,在这个时间限制的时候,全力思考解决问题,这样才能达到良好的训练效果。

在你做完一遍题目之后,可以过一周再看一下自己写的代码,是否有能够改善的地方,是否用了过慢的算法等等。同时可以试着给自己写测试样例,在面试的时候如果能给出完整的测试,是有很多加分的。

最后给出两个在线编程练习的网站

  1. https://leetcode.com/
  2. https://www.careercup.com/

祝大家在刷题的过程中顺利!

语言之外

然而,学习语言仅仅是入门,这篇文章中还有很多很多的东西没有涉及。比如移动开发,比如网络后台开发,比如数据库等等,上面的教材可能已经有一些涉及了,但是还远远不够。

你想用Java开发数据库,首先要了解数据库的各种范式,了解不同数据库的性能差异,了解怎么调优,这样才能写出好的数据库代码。

想用Java开发桌面程序,需要了解点击是怎样在程序中被捕获的,如何才能让程序界面不停止同时进行复杂的运算,如何用多线程开发出稳定的GUI程序。这需要你对操作系统有足够的了解。

这些都不是一本书或者一个视频教程就能涵盖的,我在这里给大家列举一点入门的链接。

  1. 数据库
  2. 操作系统
  3. Android开发

希望这些内容对你们有帮助!有什么想法可以回帖或者私信或者发到smy20011 at gmail.com里!

© Emir Ribic 2017

Powered by Hugo & Kiss.