
后端的主要职责是围绕着业务处理数据,也就是对数据进行 crud 操作。在业务处理的过程中,会产生数据,那么我们就需要对数据进行持久化存储,也会有对数据展示的需求,也就是数据的查询,随着业务的不断进行,也会有对数据的更新和删除操作。而后端的核心任务就是保证无论数据在什么量级下,我们都能保证查询的更快,持久化之后数据不丢,数据更新绝对的正确。
数据库
从后端的核心任务来看,我们关注的是数据的流转以及数据的存储,而目前存储数据用的最多的是数据库,尤其是关系型数据库,我们写的每一个后端程序没有哪一个没有数据存储需求的,也没有哪一个没用数据库的,所以我们要点亮的第一个能力就是加强对数据库的掌握程度,不仅仅是会进行库表的设计,还需要对数据库的原理有一定的掌握。对于数据存储理论的学习,推荐的资料是《DDIA》,对于具体某一个数据库产品原理的学习,推荐小孩子 4919 的《MySQL 是怎么运行的》。强烈建议你看完《DDIA》的前四章。
逻辑 编程语言
在前面我们提到过后端有两个任务,数据的存储和数据的流转,数据的存储这一任务非常的固定,只要保证数据不丢就可以了。但是数据的流转这个任务就比较灵活了,不同的后端系统,数据流转的过程也不同,这是因为不同的后端系统业务逻辑不同,而业务逻辑从后端系统的视角来看,其实就是数据的流转。
为了更好的用机器能看懂的方式来表达业务逻辑,我们需要精进自己手上的编程语言,而在国内,后端这个领域,Java 是当之无愧的主流,所以我们我们第二个要增强的能力就是对 Java 语言及其生态的掌握程度。
对于 Java 语言本身需要分为两个部分去增强,一个是巩固自己的 Java 核心基础,一个是学习 Java 的高级的特性和原理。巩固自己的 Java 核心基础,我推荐的资料有王争的《Java 编程之美》以及《On Java8》而 Java 的高级特性主要分为两个一个是 Java 的并发编程,一个是 JVM,对于并发编程,我推荐的资料有极客时间的《并发编程实战》以及《Java 并发编程实战》;对于 JVM 我推荐周志明老师的《深入理解 Java 虚拟机》。
针对 Java 的生态,我认为应该从你的工作入手,如果是做业务系统,那一定绕不过 Spring 全家桶,如果你在学习 Spring 全家桶的时候是看的 B 站视频,那么通读一遍官方文档,一定对你帮助很大。我推荐的文档阅读顺序是 Spring,SpringMVC,SpringBoot,当然你还可以在工作中遇到问题的时候,带着问题看文档。这比看市面上那些源码课程要合适得多。
总结一下,整体而言这部分的进阶应该是螺旋式进阶的,比如在 Java 核心基础巩固的差不多的时候,就可以看看框架的文档,在对框架有个整体把握的时候,就可以看看并发编程和 jvm。并不需要你讲一个方面弄透之后再进行下一部分。
内功
后端的内功主要分为两个部分,一个是编码能力,一个是对计算机的了解程度。这部分的内容对于开发出一个后端系统来说,并不是必须的,但是对于我们后端人来说,想走的更远,那这部分内容就属于长期价值的投资,特点就是短期内看不到效果,对你的影响是潜移默化的。
编码能力
我们先来聊聊编码能力,虽然说我们程序员不只有写代码,但是写代码至少是不可或缺的一环,所以编码能力就是我们的看家本领。而在编码这块主要有两大块的内容,一部分是数据结构与算法,一部分是软件设计。
数据结构与算法中核心基础的有这些:数组,链表,队列,栈,树(从最简单二叉树的到红黑树)递归,排序,二分。我认为对于像我这样的业务后端掌握这些内容就够了,至于更加高级的动态规划,图论就让他们躺在面试中吧。对于这部分内容的学习,我认为练习才是最重要的,我推荐的方式是找一本入门书(推荐 hello 算法)然后学习完一个知识点就把力扣上这部分的 easy 题刷一刷,我一般会刷 8 道左右。然后继续后面内容的学习。
软件设计不只有设计模式,恰恰相反,我认为设计原则远比设计模式重要。对于这部分的内容,我推荐的方式是看源码和有意识的关注,你最先要学习的是设计原则,并在你的日常工作中和学习中使用这些原则,比如看别人代码的时候有意识的看看对方哪些地方不符合设计原则,这部分我叫做有意识的关注,至于看源码,是当你在学习具体的设计模式时,比如学到了工厂模式,你就可以问 AI,在 jdk 中或者 spring 全家桶中,哪些地方使用了工厂模式,然后挑一个你熟悉的,去跟一跟源码,这远比你照着设计模式书中的例子敲一敲效果要好的多。对于设计模式的书,我暂时推荐《设计模式之美》,因为我的学习过程是借助 AI,先学习了 solid 设计原则,然后让 AI 给出具体的 23 种设计模式,然后让他按工作中最容易接触的排序,然后让他指出 jdk 和 spring 中哪些地方用到了,然后我去看源码。哦,对了在设计原则开始之前,你应该看看什么是面向对象?我强烈推荐《on Java8》的开篇。
总结一下,程序员的内功分为两个,一个是编码能力,一个是对计算机的掌握程度。今天我介绍了编码能力该如何进阶,下一篇介绍如何提高我们对计算机的掌握程度。
计算机系统
发展了这么多年的计算机系统,已经分支出很多学科,其中比较核心的有计算机组成原理,操作系统,计算机网络以及编译原理,对于我们这样的后端人来说,计算机组成原理没必要全学,编译原理也是可选项,我们需要重点关注的是操作系统和计算机网络,这是因为我们写的后端程序跑在操作系统之上,就好似你想玩好一款游戏,你就得熟悉这款游戏的规则,我们想写好后端程序就得了解操作系统。同样的道理,我们的后端程序没有不使用网络的,比如提供一个接口,发起一个远程调用,执行 sql,后面都有网络的影子。
在计算机领域有这样一本神书叫做 CSAPP(后续有一些博客文章推荐),完全覆盖了我们后端程序员要学习的计算机组成原理和操作系统的知识。如果你觉得阅读起来很困难,在 B 站 up 九曲阑干对其做了视频讲解,个人认为还是不错的。如果你时间不够,我建议先看存储的层次结构以及虚拟内存。对于计算机网络我们没必要全部都学,像我们这样的业务后端,我们接触最多的就是 http 这样的应用层协议,所以我建议的学习路线是,尽可能多的掌握 http 和 TCP 的内容,至于 IP 层,数据链路层的知识有时间再做了解。关于 http 的推荐《图解 http》或者《透视 http》关于 TCP 的推荐《图解 TCP》。
下一步
到现在,我基本梳理出一条后端进阶之路,希望能帮助那些像我一样工作之后不知道如何进阶,有力无处用的后端人,我再总结一下,这条路该怎么走,主要分为两部分,基础的夯实以及内功的修炼,基础的夯实主要包括对数据库底层原理的掌握,Java 语言及其生态的扩展(以理解核心模型和抓住本质为主)。内功的修炼是一次长期投资,它不会立刻见效,但是他会潜移默化的改变你的思想。
当这条路走到底的时候,相信你一定会收获很多,但是这就完了吗?并没有,还缺少一个大块的内容,那就是系统设计。这块内容后续会有一些简单的梳理。接下来,我会遵循这条进阶之路分享我的所见所思,也欢迎你加入进来!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于