codefollower / My-Blog

我的博客

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

想通过自学成为一个有良好计算机专业素养的Java程序员要读哪些书?

codefollower opened this issue · comments

  1. 前提条件:
    需要有高中毕业的水准
    (或者同等学历的也行,比如中专,我本人就是读中专然后再读自考大专的)。

  2. 学习方式:
    完全可以自学,最好自己有电脑。

  3. 偏重方向:
    偏重软件,而不是计算机硬件。

  4. 英语要求:
    掌握3000个左右的常用单词,能读就差不多了,
    如果不想看英文可以找中文翻译版的,我个人偏向看中文,对于非常好的书我通常中英文都买来看。

    以下列出的书是按照循序渐进的方式介绍的,
    都是我自学过程中学过的并且觉得不错的书,
    计算机基础类的书籍与Java相关书籍的比例是5:2,所以非常强调基础,
    核心书籍将近35本,预计需要花两年半时间左右,
    别觉得书很少,能平均一个月完成一本算挺不错了,说明你在计算机方面有一些天赋。:)

    另外,扩展阅读也有35本,这些可以选读。

    (注:这是我12年来的自学生涯中特意挑选出来的书,如果当初就有人告诉我该这么自学我肯定会少走无数的弯路)

目录

  1. 计算机基础类的书籍
  2. Java相关书籍
  3. 扩展你的眼界

1. 计算机基础类的书籍

1.1 与计算机相关的数学

主要有: 微积分、线性代数、概率论与数理统计、离散数学

1-1-1
1-1-2
1-1-3
1-1-4
相对来说离散数学最有用,其他三门在从事数值计算、计算机图形学、算法复杂度分析等领域会用得多一些,
国内的大学很多都是使用高等教育出版社同济大学写的书,我也读过,
不过,我还是推荐顺便读一读国外出的这4本,学这4门课对自己的要求不必像数学系的学生那么苛刻,能达到70分的水准就够用了。

1.2 计算机科学导论

1-2-1

顾名思义,这是计算机专业的学生第一本要读的专业书,
这本书对整个计算机科学的各个领域做了一个概述,点到为止,
包括最基本的十进制、二进制、十六进制;数据的存储、运算;
计算机组成、网络、操作系统、算法与数据结构、程序设计语言、数据库、人工智能等等。

读完这本书,就知道整个计算机学科都有哪些东西了,这本书适合泛读,若碰到不理解的,可以直接跳过。

1.3 C程序设计语言

1-3-1
程序设计的入门课,"Hello,World"就出自这里,虽然只有160多页,却是永恒的经典。
此书要精读,并且需要在电脑上跑通书上的代码例子,习题也要做一做。
1-3-2
另外,推荐再读『程序设计抽象**-C语言描述』,这本书即是C语言的应用实践课,又是进一步学习数据结构和算法的入门读物,
书里用了大量的例子介绍了递归、堆栈、链表、树、图等等非常常用的知识,并且还引申到Java的一些基本概念。

1.4 理解计算机系统

1-4-1
这本书主要是介绍计算机整体的软、硬件系统的,包括处理器、存储器层次结构、虚拟存储器、链接、IO、网络等等,
读完它你大概知道你所写的程序是怎么通过计算机的硬件和底层软件系统运行的,
里面时不时提到C语言,所以先学C语言再学这本书比较合理(或者穿插着学也可以)。
1-1-4
另外,可选的,推荐再读『计算要组成及汇编语言原理』,书不厚,240多页,最主要是以Java虚拟机为例来讲的。
我在读自考大专时是用这本: IBM-PC宏汇编语言程序设计

1.5 算法导论

1-5-1
学算法的都知道这本书吧,非常有名,老实说这书有点难度,需要自己慢慢啃,
去大公司面试时特别用得着,快速排序、二叉树、红黑树、动态规划、最短路径这类算法会常拿出来问的。

1.6 操作系统

1-6-1
1-6-2
进程、线程、CPU调度、同步、死锁、内存管理、虚拟内存、文件系统、I/O系统这些最基本的概念和原理必须掌握和理解透,
对于以后的工作是相当有用的。

1.7 计算机网络

http://book.douban.com/subject/1179807/
这本书一时没找到,我就不拍照片了,只要大概了解一下即可,除非打算将来做网络管理员之类的工作。

1.8 程序语言理论与编译原理

1-8-1
1-8-2
1-8-3
1-8-4
1-8-5
1-8-6
1-8-7
1-8-8
这是我目前工作和研究的领域。

这类书比较偏理论,会有点难读,不过我还是强烈建议你硬着头皮认真读一读,
只要你能理解透书中的内容,以后你再学习新的程序语言都是件轻而易举的事,
并且也是从事数据库SQL引擎研究的前提。

先读『自动机理论、语言和计算导论』,
里面告诉你什么是自动机、什么是正则语言、什么是上下文无关语言,还有图灵机。
清华大学的『形式语言与自动机理论』也可以同时看。

接着就可以看『编译原理』了,此书也叫“龙书”,当你想从事编译器开发时这本书是必看的,
『编译原理』出了两个版本了,如果有钱的话我还是建议你两个版本都买,
『编译原理』和『自动机理论、语言和计算导论』的内容有一些重叠,
有些人一上来就直接看『编译原理』而不看自动机和形式语言,这会有点难,
『自动机理论、语言和计算导论』算是『编译原理』的前导课程。

最后可以再读读『程序设计语言原理』和『程序设计语言实践之路』
这两本书其实不偏重理论的,有了前面的基础反而更简单,算是各类程序语言的综述,
各种泛式的语言都有涉及,包括: 过程式语言、面向对象、函数式语言,甚至基于逻辑的程序语言都讲了(比如Prolog)。

1.9 数据库

1-9-1
1-9-2
1-9-3
1-9-4

这也是我现在的工作和研究领域。

要说数据库和程序语言是整个计算机学科应用最广泛的领域应该没有人会反对,
关系数据库管理系统(RDBMS)在过去的几十年直到现在都占着绝对的**地位,
随着互联网、社交网络的发展以及数据量的增长,图数据库、NoSQL都在蓬勃发展,
所以可以预计未来5年内数据库会是一个非常活跃的领域。

数据库的理论书籍不需要读得太多,
只要读完上面的『数据库系统基础教程』『数据库系统实现』基本上够用了,
当然,你需要慢慢的品尝、要精读,至少要读两遍以上。

『事务处理』这本书如果你将来不从事数据库事务领域的研究不需要读,
前面两本书中也会有好几个章节讲事务相关的知识。

至此,如果能学完、学好上面9小节中列出的书籍和相关知识,
那么恭喜你,你的计算机基础已经打得非常牢固了。

2. Java相关书籍

2.1 入门

2-1-1
2-1-2
我用的版本比较老, 『Java核心技术』最新已出到第9版了,只有经得起时间考验的书才值得一版再版,
每一个Java程序员都应该持有一本 『Java核心技术』 。
无需多说,除了AWT、Swing、Applet、RMI、CORBA、XML、JNI用得相对较少或过时的技术章节之外,
其他的你应该而且必须好好细读并且一边读一边在电脑上面操作练习。

另外,有关线程、IO、JDBC、网络、安全相关的章节在下面都会有更专业的书来介绍,
这类书归入进阶类。

2.2 Java 线程

2-2-1
这本书讲了有关线程的各种API,还有一些基本概念:死锁、竞态条件、锁、条件变量、屏障等等,
如果你想从事一些类似Tomcat这种Server的开发,理解线程相关的东西是非常必要的。

2.3 Java IO/NIO

http://book.douban.com/subject/1433583/
我是在原来的公司内部看的英文电子版,跟『Java线程』 的风格类似,完整的介绍相关API和基本概念。
NIO的知识对于实现像Netty这样的高性能网络框架必不可少,同样像Tomcat、Jetty也太量运用了NIO。

2.4 Java 网络编程

2-4-1
又是一本经典好书,如果你想写出好的网络程序,必须读读这本书,
InetAddress、Socket要是你连这些都还不懂,赶紧买这本书来看。

2.5 Java 安全

2-5-1
一本常被“无视”的好书,在国内没多少人听说过...此书作者跟『Java 线程』 的作者是同一个人,
书里介绍了Java的整个安全模型,沙箱、安全管理器、密匙、证书、消息摘要、数字签名、SSL等等,
这本书并不讲高深的理论,非常实用,
在Tomcat、Jetty、Netty、Cassandra、H2这类开源项目需要涉及安全的地方都会用到这书里提到的一些技术。

2.6 Java JDBC

http://book.douban.com/subject/1886537/

我也是看的电子版,不过没读完,因为之前看过JDBC规范了,所以就没什么必要再细读它,
虽然类似Hibernate和iBatis这类ORM和SQLMapping框架用得比较多,
不过我还是推荐你先把JDBC掌握了,这样不管以后你去看MySQL的JDBC驱动还是iBatis的源代码都会非常有帮助。

2.7 Effective Java

2-7-1
2002年度Jolt大奖,慢慢品味吧,我就不啰嗦了。

2.8 Java与模式

我的书没找到,只给个链接吧,

http://book.douban.com/subject/1214074/

这本书其实不合我的口味,太厚太啰嗦,我并不喜欢里面的故事,比如击鼓传花什么的,
如果把此书浓缩到300页左右会更理想。

2.9 Servlet与JSP

2-9-1
如果你要做Java web开发,了解Servlet与JSP的基础知识是必须的,如果你要研究Tomcat,也必须精通Servlet与JSP的相关规范。

2.10 J2EE核心模式

2-10-1
J2EE已变成了JavaEE,Spring把J2EE的水搅混了,以致于Java企业级开发包括国内某大型互联网公司的内部都是Spring的天下,
不过,J2EE的一些设计模式你还是可以了解一下的。

2.11 Java虚拟机

2-11-1
2-11-2
国内有关Java虚拟机的书非常少,
『深入理解Java虚拟机』 是国产的,算是国产书里面相对还可以的技术书籍,内容能跟上时代,
注重实用性,当然,还不够深度,更侧重概念的理解而不是如何实现,
另一本『深入Java虚拟机』 是国外的,可能很难买得到了,内容有点陈旧,
不过,如果你能买得到我还是推荐你读一读,还是有实用价值的,
比如我在2007年研究Java语言编译器(javac)时就从这书上学到了非常多的有用知识,
特别是从第5章开始以后的章节都写得不错。

2.12 Java并发编程

2-12-1
把这本书放到最后,主要还是因为这本书还是有点难度的,并发问题都是高级主题,
比如书中举了一些Servlet的例子,要是你没学过Servlet你就会不太明白例子的用意是什么,
当然还有线程的东西你也需要知道,还有前面Java虚拟机的书里也会提到Java内存模型,
这对于你理解Java多线程并发运行时会有哪些问题也是很有帮助的。

2.13 XXX in Action

有大量以"XXX in Action"命名的书,比如Struts in Action,多是介绍具体框架的,
这类书实战性比较强,因为框架更新换代也很快,过时也比较快,所以你可以从图书馆里借阅,
或者让公司出钱买也行,这样你能省点费用。

2.14 直接去研究Java开源项目的代码吧

看书只是为了打基础,并且是件相对容易的事,想要与他人不同,
你应该去研究你感兴趣的Java开源项目的代码,
看源代码是件需要时间和考验耐性的事,如何看?这是门学问,是另一个重大的话题,我就不在这里多谈了。:)
顺便卖个广告,你可以关注我的GitHub主页 里面有大量开源项目的研究。

至此,有关Java你需要掌握的最核心的东西都列在上面了,行动起来吧,不能只看书,实践也很重要。

3. 扩展你的眼界

虽然上面谈到的计算机基础类的书籍与Java相关书籍已够用了,
不过,我想你不会满足于此吧,多读点书没坏处,技多不压身,
最不济的情况下学点别的至少也能吹吹牛不是。:)

以下是我觉得可以读一读的书,至少已被我过滤了一回,你不用担心它们是垃圾书籍(我确实买了很多垃圾书籍),
当然不需要每本都看,比如像TCP/IP这种,如果你不做OS、不做网络层的开发不读也可以,比如TCP/IP三卷本我多半是买来收藏的。
这些书我就不一一介绍了,全列在这了。
3-1-1
3-1-1

mark

赞!

不错,不过我觉得我在本科阶段是读不完这么多书了!

顶 还有很长路

commented

赞,最近打算看看《自动机理论、语言和计算导论》

Servlet那本书太老了都绝版了,建议换成这本, concise and up-to-date http://product.china-pub.com/3800306

需要慎重说明一下:这里列的书和学习方式非常不适合项目管理类的,你想管大项目管几百号人,Martin Fowler那一卦的更适合你,同时,你或是只想做遍地是CRUD的简单业务系统这里的东西对你没什么用,这里的学习方式更适合想在计算机学科这个大领域走得更远的人。

mark

重构不推荐?

mark

mark, nice.

碉 👍

很好的指南。

zhh2009,哈哈,iteye上就经常看你的博客。前段时间是离职了吧,最近又换领域了?

想走的更远!mark

表示读完并掌握就成神了

给跪 这么多书

关键是都看完过么?或者说,都看过一遍么。。。

膜拜

路漫漫而修远兮,吾将上下而求索。

这些书你是都看完了,还是挑着有兴趣的翻来看。

大牛,膜拜

mark

Thanks for sharing

赞 啊 大哥

commented

MARK

这些书也不是太难,如果谁能自己把MIT的EECS课程全部走一遍(under-graduate and graduated courses)。我觉得计算机科学方面就有相当的实力了(最好把每个大类的延伸性知识过一遍,比如操作系统 operating system engineering课程如果学完了可以同时学加大伯克利相应的高级课程).

要不说不要辜负了这个时代,自己需要一辈子去学习和实践。我就想把计算机科学学的深入后然后开始学习耶鲁大学关于人文方面的开放课程

Mark

mark

mark

厉害。看来努力也是天赋的一种。

这么多书...要读到啥时候...?

晕。。。。。

哇塞,good~

这成了计算机专业课了
能看完的, 绝对专家~

小型计算机图书馆啊。。

mark

mark

不错 赞一个

commented

mark

commented

mark

mark

commented

偶像级人物

commented

list中JAVA系列的基本都看过。算法操作系统没看过。。。看来要补补了

厉害,目测很实用

mark

mark!!!

commented

大神,还在桂林吗?在桂林哪家公司,可以借几本书看看吗?我QQ:273579540 求加

我一直都不在桂林。我在深圳!!!!
借书???你还不如自己买书呢???
你加我QQ:122448894

2015-08-19

chenssy995812509

发件人:hubs notifications@github.com
发送时间:2015-08-19 15:49
主题:Re: [My-Blog] 想通过自学成为一个有良好计算机专业素养的Java程序员要读哪些书? (#1)
收件人:"codefollower/My-Blog"My-Blog@noreply.github.com
抄送:"chenssy89"chenssy995812509@163.com

大神,还在桂林吗?在桂林哪家公司,可以借几本书看看吗?我QQ:273579540 求加

Reply to this email directly or view it on GitHub.

@chenssy89 哈哈哈,哥们,人家是问楼主 @codefollower ,不是问你。哈哈哈

围观回应借书的

向前辈学习

我也有研究源码的癖好 可惜道行还差太远

nice, mark了,任重而道远啊!!! 🐎

mark

mark

mark

我买了不少书。。就是读完的少了点。。

感谢前辈的分享!

挑自己感兴趣的看

感觉先挑自己工作的领域看,其次挑挑自己感兴趣的领域看

mark

感叹一下...

Mark 自己26跑向27了 生物方面国外读研第二年,通过上edX的课自学了Python2个月了,想在半年后至少找到一个junior/trianee/Intern or Thesis work! 来看大神,学习!

惭愧

在这个浮躁的**社会,很佩服

谢谢分享!

commented

同性交友平台,OpenJDK吸引过来的,没想到中文还是有大神肯分享,为大神点赞

commented

感谢分享

mark

膜拜一下

慢慢看咯

要看完得花不少时间和精力啊,先膜拜一下!

楼主在微博上发表了不少的比较不错的技术短评,当时还关注了一段时间,不过后来突然微博都清空了,不知道什么原因。

这些书全部得多少钱啊 /笑哭

路漫漫而修远兮,吾将上下而求索。

向大佬低头

commented

mark,谢谢大佬~

牛逼

commented

基本都买全了,慢慢看吧

从Lealone项目过来过来考古。

commented

微博过来的,明年大学毕业,突然感觉大学书读少了,白读了

666 逮到一只老前辈,膜拜!

mark

commented

留名,每次看感觉都不一样。
走的更远😄

专业出身,自愧不如

图挂了😂