我自己在毕业的前 2 年,其实都是做的后端业务开发,后来才转到了数据库内核开发,结合我自己的实际经历,跟大家聊一聊这两种不同类型的岗位都有什么区别。我会分别从编程语言、难易程度、工作流程、市场就业、薪资情况、稳定性方面进行全方位对比,最后也会对两种方向的选择给出自己的建议。
编程语言
我们常说的后端开发,主要是实现服务端的业务流程,并且对前端的增删改查请求进行正确的响应,当然也需要保证后端服务的高可用、高并发等特性。
后端开发也比较注重开发效率,因为产品经理的需求有可能是快速变化的,需要后端开发人员进行快速响应,协助快速上线产品,不断试错迭代。
后端开发常用的语言一般都是带 GC 的自动内存管理的语言,这类语言将程序员从繁琐的内存管理中释放出来,让其更加专注于实现业务逻辑,常用的有 PHP、Java、Go、Python、Ruby 等等。
当然这些语言其实也有对应的框架,帮助快速去构建业务流程,比如 Java 的 Spring 系列、PHP 的 Laravel、Python 的 Django 等等。
数据库内核开发,注重的是性能、数据安全、分布式、可扩展等等,数据库性能问题是一个经久不衰的话题,有各种各样的性能评测榜单,比如 TPCH、TPCC、TPCDS、ClickBench 等等。
所以在编程语言的选择上,以不带 GC 的编程语言居多,C、C++ 占了大多数,因为这类编程语言性能高,没有自动垃圾回收带来的性能抖动。目前国内的数据库内核,基本上分为了两个系列,一个是魔改 Mysql,Mysql 是 C++ 写的,另一个是魔改 Postgres,而 pg 则是 C 语言写的。
当然近些年来 Rust 的发展非常迅猛,在系统级编程领域也有了很多的应用,很多新兴的数据库都陆续采用了 Rust。
难易程度
后端开发的难度,一是主要体现在对业务逻辑本身的理解上,因为有的业务流程冗长,繁琐,理解起来其实并不是特别的容易;二是体现在对系统本身的高可用、高并发等方面,需要有一定的系统设计能力。
数据库内核开发的难度,主要体现在对数据库内核本身的学习和理解之上,因为数据库是一个非常复杂的系统,涉及到非常多的组件,比如解析器、执行器、事务、存储引擎、缓存、分布式等等。
比如常见的 Postgres,发展了接近 30 年,是成百上千位世界上最顶级的程序员精心维护的项目,目前的代码量在 100w 行左右,注释都有 30w 行,所以不太可能在短时间内完全理解,有时候甚至花个两三年的时间,也只是刚刚入门。
想要学习一个现有的数据库系统就已经非常复杂了,如果还要在其之上去做一些功能开发、性能优化,则难度会继续提升。
所以后端开发和数据库内核开发各有各的难度,总体来说的话应该是数据库内核开发更难一点,学习上手的周期也会更长。
工作流程
后端开发的工作流程,基本上是产品经理提出需求,然后后端开发人员进行开发之前的需求对齐、调研、接口设计,然后是编码、文档撰写、和前端联调对接,然后是到测试环节,有专门的测试人员对需求进行功能性测试,如果发现 bug 则需要修复,然后是需求完成并上线。
后端开发的流程有时候会比较繁琐,因为涉及到的上下游比较多,比如产品经理、测试、其他业务部门、甚至运营等等,可能会花费很多的时间在开会上,特别是在大厂这种情况更为突出。
而数据库内核开发,虽然上下游的需求方并没有那么多,但是开发的流程可能会非常长,如果一个需求比较大的话,则更是由一个团队来持续推进开发。数据库内核的需求一般来自使用者、业务场景、或者是老板的想法等等,产品经理在其中起到的作用比较小,像一些初创公司,甚至没有专门的产品经理。
内核开发其实是花了更多的时间聚焦在功能开发本身,并且开发完成后,测试的工作也会非常漫长,往往需要自己编写单元测试,通过回归测试,混沌测试等一系列流程,最终才能够上线。
市场就业
在工作机会方面,应该是后端开发要多于数据库内核开发岗位的,这其实比较明显,目前国内搞数据库的公司大大小小有两三百家,但有招聘需求的估计并不是很多,当然一些大厂有内部的自研数据库服务,所有也会有一些相关的招聘需求 ,比如字节、阿里、华为、腾讯等等。
后端开发的岗位相对来说是更多的,但是人也更多,因为其门槛更低,竞争也比较激烈。目前的就业环境总体来说也比不上前几年,僧多粥少,面试的难度较大,找不到工作的人还是挺多的。
薪资情况
薪资情况其实并不太好说,受各方面的影响因素其实是比较大的,这里只能给出一个预估给大家参考。
我们就以校招的薪资来作为一个基准,对于后端开发来说,大厂的薪资应该是比较有代表性了,目前大厂后端开发,校招的薪资区间大概在 20k-25k 左右,可能会受到学历、实习经历、具体部门等诸多因素的影响,但大致是这个区间。
数据库内核开发,在 2023 年,本科毕业的薪资大概是 25k-30k 左右,如果是硕士学历,则有可能更高。
稳定性
两种类型的岗位其实都有各自的不稳定因素。
后端开发可能是需要面临如何应对年轻人的冲击,如何应对大家常说的 35 岁危机,并且面临日益严峻的就业环境,其实压力是非常大的,一方面不得不学习新的技术,拼了命去卷算法、八股文,但是在日常工作中可能又根本用不上,陷入面试造火箭工作拧螺丝的窘境。
数据库内核开发,主要是就业面很窄,能够选择的跳槽的机会是有限的,学习的周期又很长,非常容易中途被一些其他的因素打断,导致半途而废。但是只要在数据库内核方面积累了足够的经验,那么你的技术护城河其实就打造出来了,不那么容易被替代,像我们公司,30 多岁不仅不会担心被裁员,甚至是团队不可或缺的中坚力量。
并且,从数据库内核想要转到其他的方向,比如分布式存储,甚至后端开发,应该比后端开发转到数据库内核要容易得多。
如何选择
结合前面我说的一些对比,其实大家对于如何选择应该也有自己的打算了,我觉得还是需要结合自己的兴趣,以及技术能力等情况做出自己的选择。
对技术有一定追求的,并且想要一直在技术这个领域深耕的,我觉得数据库内核开发是一个不错的方向。如果想要求稳,只是为了能够有一份工作,然后持续的在互联网行业赚点钱糊口,那么可以选择后端开发。
还有的同学是目前是后端开发,但是想要转入到数据库内核的,这种其实也没有什么问题,多尝试自己感兴趣的方向总是好的。不至于温水煮青蛙,一直待在自己的舒适圈里,不寻求任何变化,可能就不会有什么进步。