压箱底 | Java 编程学习必读的十本书
小伙伴们大家好呀!
今天给大家唠一唠 Java 学习,经常有小伙伴留言问我:『Java怎么学习啊?我好迷茫啊,快救救我!』
其实这个话题有点大了,每个人现阶段水平不一样,比如说对Java 虚拟机的理解:
初级程序员可能一脸懵:『我学这个干什么?这不都封装好了吗?』
中级程序员内心窃喜:『这不就是 java 面试八股文经常考察的东西吗?我门儿清』
高级程序员轻蔑一笑:『我之前动手实现过虚拟机』
这说明同样一种技术不同的人认知水平是不一样
。
对于 Java 学习也是一样的,有些人喜欢看视频学习,觉得视频有趣,跟着老师一步一步敲代码;
但有些人就会觉得看视频学习没意思,老师讲的太繁琐了,太拖沓了,还是自己看书更带劲。
我在这里讲讲自己的看法,对于入门初级程序员,看视频跟着老师的思维一步步走,确实能培养编程兴趣。记得几年前我初学 Java 时在网上看了很多马士兵老师的视频,当时觉得这个老师不光技术好,人也超级幽默,编程的兴趣一下子提了上来,直到今天还在 IT 行业混,哈哈!
但是视频看多了你会发现:听着都懂,关掉视频自己写啥也不会啊。这最大的原因其实就是因为自己没有独立思考。
所以建议大家入门了之后还是不要过于依赖视频,要学会独立思考,看书是个不错的方法。
关于 IT 行业到底要不要看书,这个我之前可是踩过坑的,一些「大佬」跟我说:IT 行业日新月异,一本书的出版一般都是要耗费几年时间,等书出出来了,技术都过时了。我当时觉得:我屮艸芔茻,有道理啊。正是因为这种思想,为我日后不爱学习埋下了祸根。
其实现在回过头来看,这个说法不完全正确,对于一些垃圾书确实是这样的,但是对于那些经典之作,时间的流逝也不能掩盖住它的经典。比如说《深入理解 java 虚拟机》这本书最早是在 2011年出版,快 10 年有人说它过时了吗?现在应届生找工作前是不是都得背一背。看书还是得看经典之作啊。
好了,开始我们今天的主题,今天是想给学习 Java 的程序员推荐一些经典书籍,这些书籍覆盖了初级、中级、高级程序员,总有一些适合你。另外需要说明的是,本次推荐的书单仅仅只覆盖 Java SE 部分,像 Java Web, 服务端开发,Spring框架全家桶,分布式微服务,中间件,数据库这些本次都不包括,留着后面慢慢推荐。
基础学习
Java 语言基础这块要学的东西很多,像:
面向过程 VS 面向对象
面向对象基本特征:封装、继承、多态
访问控制符:private、default、protected、public
数据类型:基本类型、引用类型
控制流程:for、while、switch 等
序列化
异常处理
泛型
……
下面十本书看完保证你的 Java 技术能上一个档次:
《Java 核心技术卷I:基础知识》
这本书建议作为Java 之旅的第一本书,涵盖的内容非常全,比起那些30天学会 Java 之类的书,这边书更加务实。
随着技术的演讲,书中有些技术已经被时代抛弃,这部分的章节其实不用看。
像第十、十一、十二章:图形程序设计,主要讲解 Swing GUI,用 Java 写桌面端应用已经过时了。有人会说安卓,这是另外一套东西,不是 Swing。
第十三章主要讲 Java 程序的部署,这里面的 applet 技术已经淘汰了,再学就是浪费时间。
大家要把有限的时间和精力花在更有价值的事情上。
《Java 核心技术卷II:高级特性》
卷II是卷I的加强版,针对 Java 的一些高级特性如:java8、网络、数据库、安全等进行了详细讲解。
关于网络那一章节大家可以简单看一下即可,因为在企业网络编程开发中多数会用到 netty 框架,这是一款性能好到炸的框架,建议大家后面好好学习下。
数据库编程那一章节也可以简单看看,JDBC 操作数据库实在是太麻烦了,编写程序有一堆样板代码,繁琐程度令人发指,为了解决这个问题出现了一系列有优秀的 ORM 框架如:Hibernate、MyBatis 等。
最后与卷I一样,Swing 这一章节也可以直接跳过了,具体原因上面已经讲过了,不啰嗦了。
《Java 实战(Java8 实战)》
2021 年 9 月 14 号 Oracle 正式发布了 Java17,有些小伙伴不禁要问了,17 都出来了,现在还学 Java8 是不是太多时了,不不不,据小帅了解现在很多公司都还停留在 Java8。
为什么大家都当钉子户呢?
这一方面说明 Java8确实是很牛逼啊,Java8 是继 Java5 之后改动很大的一个版本,增加了 Stream 流等很多好用的特性;
另一方面,切换一个 Java 版本费时费力,收益也不明显,公司肯定不愿意动了。
ok,我们再说回这本书,《Java 实战》是《Java8 实战》的新版本,不光有 Java8 的新特性还有 Java9、Java10 等,如果你的公司目前只会用到 Java8,那么你直接看《Java8 实战》也未尝不可。
《Java8实战》不会讲解一些基础的 Java语言,这本书的重点是讲解 Java8 新特性和语法糖,让你的 Java 代码写起来更爽、更优雅。
《Java编程思想(thinking in java)》
这是一本非常非常经典的书,你要问搞 Java 的人如果没听过这本书那算是白学了,哈哈。
其实说实话这本书我试图看过几次,最终都没有看完,一个原因是它太厚了,另外我觉得讲得太啰嗦了,可能是因为翻译的不太好,所以我现在拿来垫桌子,高度合适挺好的。
所以呢,建议新人不要一开始看这边书,不然你会怀疑人生,还没入门就放弃了,就把它当做编程字典,等你后面遇到问题了拿起来再翻翻吧。
进阶学习
《深入理解Java虚拟机》
终于到这本书了,先允许我说三声牛逼:牛逼!牛逼!牛逼
!
《深入理解Java虚拟机》这本书其实 2011 年就出版了,出版后其实是不温不火的,那为什么后面就火了呢?
除了书写的好之外,最重要的一个原因还是国内 IT 行业太卷了,太卷了,太卷了!
卷到什么程度呢?我以面试题为例:
前几年Java 程序员面试,面试官喜欢问:「HashMap 和 HashTable 哪个是线程安全的?」候选者能答出来并能说几个原因就已经足够了。
后来不行了啊,兄弟们,大家都背熟了,面试官只能升级了:「你看过HashMap的源码吗?是线程安全的吗?」
候选者:「我看过源码,HashMap 的方法上都没有加 Synchronized 关键字,HashMap 1.8 版本还加入了红黑树」
再过几年,程序员又进化了,面试官只能加码了:「HashMap 看过源码吗?请在纸上写一下红黑树的实现」
候选者顿时懵逼了,一口老血结束了本次面试……
Java 虚拟机也是一样的,前些年研究这个的是一小撮人,后来由于行业太卷,为了更好地区分面试者,就慢慢开始问虚拟机相关的知识了。
以前你要说你懂点 java 虚拟机可能加分项,时至今日这个只能算基本能力了。
好了,我们说回这本书,周志明大神写的,非常非常经典,已经更新到第三版了。周志明大神写书用词非常严谨,专业术语非常多,第一次读的小伙伴可能有点懵,但是不要紧,多看几遍,我自己也是看了很多遍,每次看完都有新的收获,墙裂建议大家看完。
《Java并发编程的艺术》
在写代码的时候大家伙有没有碰到这样的场景:我在本地测试好好的,怎么线上就出问题了呢?
排除本地环境和生成环境不一致的问题,其实最大的可能就是并发问题了。
本地是你一个人在测试,但是到了生产环境,大量的用户点击,大量的请求涌进来,你的程序在并发访问的时候会不会出问题呢?
并发问题一般都比较难定位,写好并发编程尤为关键。
我们说回《Java并发编程的艺术》这本书,这是一本专门讲解Java并发的书,涉及到各种锁、常见安全的集合类,基本就是将 JUC(java.util.concurrent包的简称)里所有的内容覆盖了一遍,看完你一定有收获。强烈推荐!
JUC 是 Java 大神 Doug Lea 开发的一套类库,大神开发这套代码就是为了帮助大家简化并发编程,现在国内有一大批人在研究他的代码,他老人家应该高兴呢还是悲哀,哎~
写「好代码」
学习Java,最终还是要付出实践的,作为码农我们的成果就是一行行代码。
相信大家都有接手过前辈们写的代码,看到那些代码,不禁冒出一句:这尼玛哪个沙比写的,whats up!
这些代码被称之为「屎山」,我相信它们原本是好的,只是随着需求变更和新增,一步步腐烂了而已。
如果你不想给后人留下「屎山」,那么从现在开始你就要学会写「好代码了」,以免被同事打,哈哈~
下面推荐几本有助于你写「好代码」的书籍。
《阿里巴巴Java开发手册》
这本书是大厂阿里巴巴出品的,它的愿景是码出高效,码出质量。作者将自己多年的开发经验和架构历程浓缩成为立体的编程规范和最佳实践。
书的主要内容是将 Java 编码规范,编码习惯非常重要,从一开始就要养好。
如果你现在在一个小厂,你们组内没有任何编程规范,那么我建议你向你们的技术经理推荐这本书,说不定能获得升职加薪的机会,试试呗,后面如果真有人这么干了,记得回头在公屏上打出来。
组内保持一致的编码风格,有助于大家快速理解代码,减少撕逼~
《Effective Java中文版》
网上流传程序员分为两种,一种是读过《Effective Java》的,一种是没读过的,可见大家对这本书的评价非常高。
Effective 系列非常经典,覆盖了很多语言:Effective Java、 Effective C、Effective C# 等,Effective Java 只是一个小小的分支。
这本书的知识密度很大,作者根据自己多年的编程经验总结了很多条 best practice,每一条都是前人踩过的坑、流过的泪。
建议等你写了一定量代码之后再看,不然你没感觉。
《代码整洁之道(Clean Code)》
代码整洁之道,这本书的英文名是 clean code。
阅读这本书有两种原因:
第一,你是个程序员;
第二,你想成为更好的程序员。
如果你对代码有追求,这本书可以教会你写干净的代码。
《重构 改善既有代码的设计》
重构这个词大家应该不陌生,但是我们静下心来想一下,我们为什么要重构?哪些需要重构?怎么重构?
这是人生终极三问啊!
一个项目开始重构肯定是因为之前的代码写的太烂了,之前的架构不满足现阶段发展了,大家都在说代码烂、架构烂?但好像又说不清具体哪里烂,不妨读读这本《重构 改善既有代码的设计》。
这本书定义了24 种代码坏味道,大家可以结合自己的项目逐个对照找出病因对症下药。
再补充一句:重构不是一锤子买卖,重构是贯穿项目整个生命周期的!
总结
看完这些书我不能保证你能成为Java 大神,但最起码你可以很自信地说:我懂 Java,请给我加薪吧,这是不是够了!