之前Python教程的反响不错,推荐点学习Java的资料

Tips:点击图片进入下一页



如何自学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虚拟机)上面的其他语言,比如Clojure,Scala和Kotlin。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代码能被很多有经验的开发人员认同,从而在面试中无往不利。买了这本书之后,每隔半年可以把自己的实践经历和这本书的内容对照,对这本书才能有更好的理解。

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

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


    视频资源

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

    IDE

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



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



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

    如何刷题

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

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

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

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

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

    最后给出两个在线编程练习的网站http://leetcode.com/
    http://www.careercup.com/

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

    语言之外

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

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

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

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

      数据库操作系统Android开发


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



      网友评论:
      半路出家的从业者表示来补习下基础
      mark
      马克笔

      ----发送自 App for Android.
      大多时候都是求零基础的
      再看java从入门到XX系列
      赞美LZ
      不是工作需要的还是别学java了,写java丧失不少编程的乐趣

      — from LGE Nexus 5X, Android 7.1.1
      马克!不想再写C了
      马克
      现在不是写c/cpp就是python,有的时候写点bash,以后可能要搞scala。。感觉现在java离我越来越远了

      — from Huawei Nexus 6P, Android 7.1.1
      jvm语言不该落了groovy,实际上groovy也是除java外使用范围最广的了。最近用groovy写了些脚本表示确实非常适合运维
      话说我推荐一下优达学城,很多课是英文的,耐着性子学完看文档轻松很多,全课免费,代码review和1对1收费,如果有人要付费记得输入我的邀请码哦
      我分享了300元学费红包给你,快来学Google、亚马逊、Facebook官方的机器学习、数据分析、前端开发课程。在这领取: http://cn.udacity.com/referral- ... oupon_code=4836CD4D
      之前的python对生物狗来说帮助很大,等有空来学java

      scala 不就在java上么?

      现在做生物不用R了么?好伤心
      java有一个很蛋痛的地方是学了java之后看j2ee发现还是什么都不懂

      用啊,但是我这种低端搅农还只会用matlab或者python来处理数据,写个小脚本什么的"
      露珠有没有Unix的学习资料推荐的?
      总结的不错,马克
      马克一下

      我个人觉得如果做严格统计分析的话还是用r比较好,model更新快,而且用起来比较省力。当然如果你是走machine learning 路子的话python妥妥的
      马克一下
      我也推荐个视频吧
      http://www.verycd.com/topics/2926527/
      这人讲的很细 就是有点啰嗦
      还有框架部分有点老了
      不过用着都差不多
      马克
      好贴!
      有没有下载?下了个韩顺平的,94课,不知道怎么样
      本人零基础,由于工作需要转型JAVA
      先码着,以后要学Java了回来翻。

      非科班出身,上手学的Python,看过点Java觉得写起来好累就先搁着了。2017年计划啃完SICP学学Scheme,希望学了能够知道为啥函数式编程语言会有那么深远的意义……
      mark一下有空看
      java是我见过最臃肿最无趣的语言了,每次用都让道心受到极大伤害。。。
      MARK
      0基础转型mark一下
      mark

      道心是什么梗

      —— 来自 Xiaomi Redmi Note 3, Android 6.0.1上的

      是。。但是写scala跟写java完全是两种感觉啊。。
      java想学,零基础,赞美楼主
      楼主能推荐个比较好用的java cms吗
      mark

      ----发送自 App for Android.
      求之前的Python 教程的贴,最近正好在学
      做了两年的java web了,感觉楼主说的都是老成持重之言,java入门简单,想要精通还是需要学习各个方面的知识
      直接学 Kotlin 即可
      cpp python 工作只用到这了
      工作用C++比较多,自己额外用C#
      谢大发片

      高级Unix编程?是要做运维还是做开发?

      书籍的话我推荐借书/看打折的时候买,我感觉看书还是看纸质书比较好。视频教程我给了链接了,学习Java我感觉用哪一本都不会太差

      SICP相对有点深。。学FP的话推荐从Clojure开始学= =

      嘛。。相对来说Java是很适合工业界的语言,好找人,性能高。比如像Scala这种自己写很爽,但是要招人的时候就比较蛋疼。

      一般用编程语言主要是追求两个大道:
      1、压榨机器的极限性能,所谓性能大道,能满足你的只有C;
      2、能最大限度的提供足够的灵活度和活性,能让你快速优雅的实现所要求的功能,所谓灵活大道,各种动态语言或者说胶水语言能满足你。
      而java不能实现上面任何一个大道,每次使用它都不断提醒你自己就是个枷锁重重的码农码畜而已。
      现在推荐年轻人或外行学一门编程语言,如果是想找工作的(无非就是冲着码农去的),看你是想往哪方面的,直接上招聘网站看看想去的公司或者职位,看看他们都要什么语言的码农就好,直接找本什么30天速成之类的教材,最好带光盘示例和视频教程的,然后就跟着学吧,往往学完就可以去应聘了,机会还不小呢。
      能赚钱就好。
      要用着用着用出兴趣了,感觉自己什么地方开了窍,不满足与现有东西了,有了这种求道的欲望,再去看看一些深入的教程。

      多谢提醒。之前看过Head First Java,不用Clojure而从Scheme主要实在是对Java没有好感,因为已经习惯了Python的简洁。

      Python大概写过6-7w行,试试SICP,打算实在看不下去就算了,毕竟FP不是吃饭的家伙。
      继python之后的java
      http://people.eecs.berkeley.edu/~jrs/61b/
      楼主简直神了,指路明灯
      Intellij 有快速视屏教程吗?
      学习下

      —— 来自 OnePlus A0001, Android 6.0.1
      群主之后整理下其他一些常用的语言就完美了

      谢大大回复。平时手机登录没有提示。现在假期过完啦。

      主要是做运维服务。最近工作接触的项目都对这方面有要求。自己依据工作学的非常零散,所以想要有个系统的梳理的方法。


      谢大大放在心上了

      搞工程,一个人能搞?写的时候麻烦就是为了工地缺人有人能上手顶上,为何有些公司创业时候各种新奇语言技术用得飞起,人多搞大了发现搞不下去了都java重写
      牛逼的艺术家比如米开朗基罗,是肯定不需要java的,他连助手涂颜色都不满意,亲自搞定一切
      接手别人的代码,我还是会庆幸是java写的,毕竟让我看别的艺术家的大作,我特么还是自己重画吧
      mark一下

      键位设置成eclipse,直接开搞就行了

      — from LGE Nexus 5X, Android 7.1.1
      不错
      垃圾java,根本比不上我们C#,你们能用Unity嘛?
      ls,如何学c#,只会vb的看着头晕,连逐行读取txt都没搞懂

      ----发送自 HUAWEI NEM-TL00,Android 6.0
      那个MIT的课程链接好像失效了
      非常感谢

        -
      咦?一年前的帖?emmmmmmmm
      作为一个scala吹我鼓励朋友们在有一定基础的情况下直接进scala一行java都别管

      特别是大数据/MPP相关的朋友们!

      —— 来自 Sony G8142, Android 8.0.0上的 v1.3.2.1-fix-play
      该学C#。JAVA的话一个配置错误说不定都能把你搞到两点,比如说这个。。

      如果已经入坑,劝一句,不要用spring boot+DDD思想来编程,非常之坑。
      用JAVA工作越久,就越想念C#。

      c#现在还是用的少,互联网公司很多服务器是jawa的,本身我也不是很喜欢spring,所以没有推荐

      — from samsung SM-G950U1, Android 7.0 of Next Goose v1.3.2.1-fix-play
      赞美楼主
      马克吐温
      马克,顺便想请教一下有没有matlab的推荐。。

        -
      Mark