读书 | 后端程序员读书路线分享

前言

欢迎大家来到我的频道,这里是Ashlee,今天跟大家聊一聊关于看书顺序。

如果你是想要系统性地学习某一个知识点,那么看书是一个非常不错的选择。

好的书籍他的文章知识点是循序渐进的,他的章节知识点可能是从简单到困难。

又或者是首先抛出一个问题,从发现这个问题,挖掘这个问题的本质,再到解决这个问题,然后扩展一些优秀的解决方案。

书的内容是最关键、最重要的,但是我这里还想提出一个观点:

就是书的阅读顺序,同样是重要的

为什么书的阅读顺序很重要

不同阶段的你,所积累的知识不同,那么你阅读过程中,收获的知识点也就不同。

这里可能就跟你的知识发散能力串联知识能力有关。

什么是知识发散能力?

当你看到一个知识点,你看到的是这个知识点的一个设计思想,透过现象看本质从本质再推出根据这个思想设计的其他知识点

比如:在看 《数据密集型应用程序设计》 的时候(后面简称DDIA),看到《进程暂停》这个章节,简单来说就是在一个场景中:

当你拿到一把带有超时时间的锁的时候,由于你执行了一些比较耗时的任务,导致这把锁在你手上过期了。

一旦过期了,其他节点就能进行获取锁,那么就出错了,现在的情况有两把锁!

当我聊到这里的时候,你可能已经想到了 RedLock

之前就有一个分布式的研究专家吐槽 RedissonRedLock,他是并不安全。

甚至 你还会联想到 fencing token,没错,这就是知识发散能力,知识串联能力

又或者是DDIA里面《数据复制》章节,你很快就能联想到Redis的主从同步和Mysql的主从同步之间的相同点和区别。

好的设计思想是可以被沿用

你看到一个新知识点,你可能就会看到你之前学习过的知识

如果你有一定知识积累,你能很快地进行知识点的串联,所以阅读顺序非常重要,接下来我分享我自己个人的阅读顺序。

读书顺序是一个偏个人向的东西

别人是很难知道你的学习情况,包括你的知识掌握得程度如何。

你技术的深度、广度,其实你自己是最清楚的。

如果你不清楚,那我的评价是,那可能就是你还没入门,你的视野看不到这个技术的天花板和所需要继续学习的知识点。

所以这就是我写这篇文章的目的,希望能帮你入门或者是其一点点帮助作用。

等到你入门了之后,其实你完全自己知道 你该学哪方面的东西,你所在的阶段,学什么,对你来说是最有收益的

这时候你就可以自己再安排了。

我这边给出我自己的入门学习路线,给你做个参照,大致路线为:

开发语言类->数据库->消息中间件->zookeeper->编码规范->框架类->分布式类->查漏补缺。

开发语言类

为什么是开发语言最先呢

开发语言是你的编程工具,无论是你写算法,还是做项目,都要用到。

并且这里是面试的重灾区,所以我排在了最前面。

这里每个人可能不同,我只对Java进行推荐。

《深入理解Java虚拟机》

第一本推荐的是:《深入理解Java虚拟机》,周志明老师的书。

相信学Java的大家对这本书已经是非常熟悉了,在许多推荐书单也能看到他的影子,应该也不需要我再多吹了。属于是必看系列了。

第二本推荐的是关于并发编程的,这里推荐2本书,《Java并发编程实战》《Java并发编程的艺术》

《Java并发编程实战》or 《Java并发编程的艺术》

两本都很经典,也是必读系列。

第一本更偏硬核一点,我推荐是先看第二本之后再看第一本。

数据库

数据库分很多种数据库:关系型数据库、非关系型、文档型、可能分得更细还有分布式数据库。

这里我就关系型和非关系型进行推荐。

《高性能Mysql 第三版》

我推荐的是:《高性能Mysql 第三版》,注意注意是第三版!

他去年出了第四版,四版只有400多页,第三版是1400多页。 他删减了很多内容,我认为第四版属于是 你之前看过第三版之后,再去读第四版会有一个不错的阅读体验。

但是第三版才是经典。

《Redis深度历险》

非关系数据库代表就是Redis,我推荐的是钱文平老师的 《Redis深度历险》

我记得这本书是我开始我的读书学习,头几本的书,对于新手来说非常友好。

而且里面也不缺乏深度,我感觉非常的不错。

消息中间件

消息中间件我看的是:rabbitMq、RocketMq、Kafka.

前两本看的是分别是:《RabbitMq实战》《RocketMq技术内幕》

感觉都挺一般的,但是也没有找到太好的书籍。

这里就不做推荐,只做参考

《Kafka权威指南》

Kafka有一本很经典的书:《Kafka权威指南》

这本是非常推荐的。如果你要学习Kafka,那么这本书一定是你的首选!

zookeeper

这里比较特别单独把这一个中间件拎出来呢,是因为这个中间件也是很特别的存在,学习zookeeper不单只是学习这个中间件,其实我们是要去学习他背后一个非常庞大的知识体系------分布式一致性、共识问题

他不像其他中间件那样提供一种功能,他更多的是充当一个辅助角色,通常跟别的中间件搭配使用。比如:kafka + zookeeper 、dubbo + zookeeper ....

所以说我们称zookeeper为什么------分布式应用程序协调服务,"协调",这两个字非常地有意思,等你后面学到一致性、共识算法的时候,就能很好的理解,协调这2个字。

《从Paxos到Zookeeper分布式一致性原理与实践》

这里我推荐的是 《从Paxos到Zookeeper分布式一致性原理与实践》

这本书,不单单是介绍zookeeper这个中间件,更深层次地是在讲分布式一致性、共识的问题。

他是先从架构的层面,从集中式的单体架构再到分布式架构,从而引出分布式一致性问题。

里面的两将军故事和拜占庭故事也是非常有意思。

同时也不缺2PC3PCTCC非常重要的知识点讲解。

这绝对是你打开分布式架构大门的一本非常不错的书籍。

编码规范

到这个阶段,你已经对常见的中间件有所了解了,接下来是时候提高一下编码规范了。

我个人是非常喜欢读这类编码规范的书,因为编码规范你基本你时时刻刻都在用,它所带来的提升是最明显的。

这类书籍非常多,我推荐几本我看过觉得不错的,还有我非常想看但是还没有看的。

《java开发手册》

第一本:《java开发手册》

你也不想你将来的同事,连变量要不要加下划线、大小写、类的命名、注释的规范都不会吧。

在我开始看这本书的时候一直有一个误解,我原本以为这是一本属于java新手才需要去看的书

但其实并不是的,他里面的内容还是非常值得学习的。

我是因为在别的地方看到了其中一条:

线程池不允许使用Executors 去创建,而是通过ThreadPoolExecutor的方式。

然后被吸引去看完整本书。

这里就不作解释,如果不知道这个答案的小朋友,欸!,这是不是就是驱动你去看这本书的动力了呢。

然后就是设计模式

《深入设计模式》

我是从一个网址上找到它的。refactoringguru.cn/design-patt...

推荐他的原因是,很大程度上是因为它里面的插画画的得特别不错,比起文字,图像更容易让人留下印象。

设计模式还有一本 《设计模式之禅》 也是比较推荐的。

《设计模式之禅》

不过这本我还没有看,但是很多地方都有推他,他的书评还是很不错的,这里小小地推荐一手。

进阶一点的编码规范

《重构:改善既有代码的艺术》

这本书我觉得也是属于必读的书籍。

印象最深刻就是:一片尿布、两顶帽子、三次法则。

  • 一片尿布是:作者描述写得不好得代码,就跟奶奶的尿布发臭了一样。如何衡量一段代码是否需要 进行重构,这件事情非常困难。 但是作者提出了一个观念就是:一个不好的代码,它就跟尿布一样,散发着坏代码的味道。 然后他就讲了一下他认为代码的坏味道例子。
  • 两顶帽子重构和开发的关系,是交替进行的,并不是说重构是在开发完了之后进行,而是在开发中进行重构。
  • 三次法则讲的是何时重构,第一次你去做这件事没关系,第二次又做这件事可能会觉得优点不适,第三次,嗯,是时候想想该如何去重构了。

这本书的精华在前半段章节,后面就是具体的怎么去改了。

接下来就是我很想去看,但是还没看的,因为有点多所以就不详细讲了。

《代码大全2》

《Effective Java》

《架构整洁之道》

《代码整洁之道》

《领域驱动设计》

专业性没那么强的书籍

《软技能:代码以外的生存指南》

这本书对于编程专业知识可能并不强,但是里面的东西非常重要,属于是那种终身受用。

里面有一章讲的是《成为专业人士》

何为专业人士

里面举例说明了2类人,专业人士外行

而且专业人士有自己的底线,这个底线的定义可能因人不同,我的理解就是不含糊,对得起自己写的代码,可以做到问心无愧。

你写的代码可能不一定是最合适的,但是在当时,你已经是经过了深思熟虑,而不是知道更好的解决方法,但是你偷懒,没有去改

可能我现在已经记不起书中具体提到的专业人士所有的品质。但就我个人的定义,专业人士就是我所向往的人,我想要成为的人

里面有2句话我受用一辈子

你做的每一件,事情就是你所做的一切。

我的理解就是,如果你在地方降低了标准,那么你最终会不经意地越来越降低标准

所以每当我觉得很麻烦的时候,我可能心里就会想,"哎呀好烦,算了"。

但是很快就会想到这句话,就会抱怨完了之后,继续认认真真地改。

你做的每一件事情,就是你所做的一切

学会拥抱失败

第二本书 《淘宝技术这十年》

《淘宝技术这十年》

这是一本讲了点技术,又讲了点淘宝发展史的书。

他有技术部分也有故事叙述部分,但我更多觉得是一本故事书,我感觉是的。

里面是以淘宝技术架构的发展为主线,讲了他们在选型和过程中发生的事情。

他这本书吸引我的地方是,你可以在里面看到有许多优秀的人。

我最记得里面有一个故事是讲:那时候公司搞活动,很多人在旁边一个地方打乒乓球,多隆就在电脑旁边默默地写代码。

就给我一个搞技术的人,一个很纯粹的感觉

还有一句很深刻的话

好的架构是进化来的,不是设计来的

下一本是 《程序员修炼之道》

《程序员修炼之道2:通向务实的最高境界》

这本书我也看过,但是给我的惊艳程度没有 《软技能》 高,但是也是值得看的一本书。

框架类

框架类的,我是放在编码规范之后的,因为看框架你避免不了去看源码,光看书不看源码对于学习框架来说是不太好的,尤其是像Spring这种,偏应用的,书籍 + 源码是必不可少的。

对于这里开源框架的源码,为了代码的健壮性,里面用到了很多设计模式,所以我希望你在看框架类之前,已经是具备了这方面的知识,因此把框架类的放到了设计模式后面。

《Spring技术内幕》

第一本:首先是我们用得最多得Spring框架,我看的是Spring技术内幕,也说不上是特别推荐,但是从阅读体验来说还不错。

这里我看的是 《Spring技术内幕》

第二本:是关于网络IO的 《Netty权威指南》

《Netty权威指南》

这一本除了讲Netty,他还讲了Java IO的发展,从BIO到伪NIO,再到真正的NIO,最后是AIO

然后还讲到了经典的Reactor线程模型,其实在学习Redis,你可能也已经接触到Reactor线程模型、selector、poll、epoll这些了。

分布式架构类

分布式架构类的,其实我之前看了还挺多本,但是没有特别惊艳到的。

除了一本书 《DDIA:数据密集型应用系统设计》

直到我读到了DDIA这本书,这本书目前是我认为我所看的书里面,写得最好的一本书,没有之一,写得非常透彻,非常全面。

《DDIA:数据密集型应用系统设计》

好象这种 O'Reilly 出版的也就是封面是个动物的书,大多数都是非常不错的。

这本书是分成三部分。

第一部分其实也是很一般,是一些知识的铺垫。

第二部分才是这本书的精华所在。

光看这些标题,就已经非常吸引人。

真正的全程无尿点,全部都是高能

他是那种:

  1. 列出一个场景,举例说明遇到了什么问题。
  2. 然后我们有什么办法去解决,每一种方法的解决所带来的区别是什么。
  3. 当我们目前所有办法都无法解决当前的难题的时候,就要用另外一种新的技术来解决(技术创新)。

我最喜欢的是里面:事务、分布式系统的挑战、一致性与共识这几章。

非常的不错。这本是我心中目前读到的No.1

分布式类其实还有非常多,但是我都没看过,所以我这里就不推荐了。推荐看那种一步一步告诉你每个阶段遇到了什么问题,用了什么技术来解决的。

这类一般逻辑性、条理性比较强,而且也是个不错的叙述方式。

第二本关于服务治理的。

《微服务架构设计模式》

这本书我并没有看过,但是感觉他的目录非常吸引我,绝对是一本非常不错的书,看过的同学可以留言评论一下。

总结

这就是我的读书书单,最后再多啰嗦总结一下。

读书是偏个人向的东西,我的书单只能参考,不一定完全适合你。

当你入门了之后,你是最了解,你自身知识的掌握程度,所以你最清楚自己该去看哪些方面的书。

来都来了,点个赞再走吧彦祖👍,这对我来说非常重要!

相关推荐
w_3123454几秒前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安3 分钟前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA6 分钟前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_192849990613 分钟前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟31 分钟前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S42 分钟前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos1 小时前
C++----------函数的调用机制
java·c++·算法
是小崔啊1 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
黄公子学安全1 小时前
Java的基础概念(一)
java·开发语言·python
liwulin05061 小时前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr