作者 | 刘燕
最近几年,数据库技术十分火热,数据库开发也成为大家关注的热门方向。如何成为一名优秀的数据库工程师?2023 年,数据库工程师需要提升哪些技能,做好哪些准备? InfoQ《极客有约》特别策划的《2022 年年度技术展望》系列直播,邀请到了涛思数据联合创始人,开源云原生时序数据库 TDengine 主要作者关胜亮,一起展望数据库工程师的 2023。 视频回放地址:https://www.infoq.cn/video/KM4KfAtfgcQbKoqZV58M
以下内容节选自当天的分享,InfoQ 做了不改变原意的编辑:
1 与编程结缘
InfoQ:请您分享一下自己的开发经历,您最初是怎么走上数据库开发这个方向的?
关胜亮: 我本科就读于中国科学技术大学,研究生就读于中科院计算所,学的都是计算机相关的专业。我参加工作之后就一直在做时序数据库方面的工作,只不过那个时候还没有时序数据库,叫实时数据库,只能存储当前时间的数据,历史数据都是存在其他系统里面。这样一直做了很多年。
后来,包括像 Memcache、Redis 这样的开源软件出现之后,我开始觉得做实时数据库没有什么前景了。后来,得知我的科大校友,涛思数据的创始人陶建辉要开始做一个实时、历史统一的时序数据库。我仔细了解之后发现,自己在时序数据,包括分布式方面的一些知识储备,在大数据领域的一些业务储备,正好跟这样一个产品是匹配的。而且,陶总过往的创业经历和工作激情也让我相信,他能够带领大家开发出一个行业领先的数据库产品。就这样,我就开始了 TDengine 的研发,我十几年的知识积累,也就能够发挥出更大的作用。
2 我还在写代码,写代码使我快乐
InfoQ:您已经做到联合创始人这个位置,您现在还写代码吗?
关胜亮: 对,还在写。2017 年,我加入了涛思数据,是 TDengine 的主要开发者之一。我主导了 1.0、 2.0 到 3.0 这三个版本的所有迭代。今年我们做了新的版本,我写了很多很多代码,写代码使我快乐。
相比于管理者,我更加喜欢开发者这样一个角色。每年,我都会在 GitHub 上面深度参与代码开发。今年因为我们发布 3.0,所以我写的代码尤其多。从今年 1024 程序员节公布的数据中可以看到,我的开源贡献全球排名前 50,国内排名第七。
InfoQ:请您从自身经历出发聊一聊,作为一个数据库工程师,日常每天的工作大概是怎么样的?有没有一些工作是比较程式化的,每天都要做的,有没有一些工作是非常有挑战的,比如说需要专门拿出一天之中精神最饱满的一个时间来做?
关胜亮: 每天上班第一件事肯定就是看看自己有没有新的问题,尤其是一些 Bug 或者是线上的问题。任何时候,Bug 处理肯定都是第一位的。我们可以因为 Bug,把任何其他低优先级的工作都推迟。
第二就是要定期跟用户进行交流,去修正产品的发展方向。最好就在日历里面记录下来,大概什么时间约了一些什么样的人,跟大家一起交流产品该往哪个方向走,也包括在一些合适的场合,宣传产品的设计理念和应用场景。
第三个也是工作量比较大的,就是新功能开发。其实开发一个全新的功能难度是挺大的,也是非常有挑战性的。很多人都能够维护代码,包括一些大厂的员工,他们可能维护代码的能力都很强,但真正的从 0 到 1 去做一个产品的时候,就不一定行了。很有可能刚开始要的是 a,最后做成 b。我们的策略一直是以终为始,也就是现在提到的倒推工作法。我们都会先起草新功能的宣传稿,这还不是用户手册,主要内容是怎么跟其他的部门、可能的用户去宣传它。之后就可以认识到,这个产品做起来是有价值的,再开始去起草用户手册,然后再去进行原型开发。最后才是常规的设计开发和测试流程。这种流程可能看起来会浪费时间,但实际上,这种做法能最大限度的做到不返工。并且,能把问题责任局限在一个很小的范围之内。
因此,总结来看,我每天大部分的工作可能都是在新功能的开发上面,少部分的工作在 Bug 处理和用户交流上面。但如果你要是一个领导者的话,你可能还有很多的会议、评审工作。
3 如何从初级数据库开发者进阶到高级数据库开发者
硬实力和软实力同样重要
InfoQ:经过这么多年,您已经进阶到一个比较高级的开发者角色。相信很多开发者都有这样一个疑问,就是在自己工作了几年之后,能不能够顺利地从一个初级开发者进阶成为一个高级开发者?在这个过程中,您是怎么做到的?您中间做了哪些努力?
关胜亮: 我是 2009 年 7 月份参加的工作,当时到当年的春节我就成为一个小组长了,也算是从这个问题里面的普通工程师变成了资深工程师了。很显然,技术水平确实是非常关键的一环。但是,竞争者的技术水平也都差不太多,尤其技术这个东西,没有说谁就一定强过谁。这个时候,觉得比较重要的就是一些软实力了。
在我看来,当时比较强的软实力有几个部分。第一是责任心,也就是交代的工作都能够按照一定的工期、一定的质量来完成。尤其值得一提的一点是,能承担一些边界比较模糊的工作或者说脏活累活。第二是业务能力,也就是我们要能够理解客户的需求,或者是说,如果做的不是项目的话,要能够理解产品的主要应用场景。我记得,我开始也只是负责开发一个模块,但是,会尽可能利用任何可能的机会去掌握整个产品的脉络。有机会的时候,立刻就能够补充空缺。最后是文档能力,很多开发人员对此不是特别重视。但是,不管是晋升评级的文档或者日常总结的文档,或者产品相关的文档,都要用心对待,因为文档体现了一个人的逻辑、思路和他对待工作的态度。我觉得大家要做的就是,要么不写,要写就一定好好写。所以我觉得,大家从这三个非技术能力的方面去严格要求自己,自然而然就会变成一名资深工程师。
InfoQ:您刚才提到脏活累活要愿意去干,在开发工作中,哪些算是脏活累活?
关胜亮: 其实比较简单,例如开发的时候,可能客户会遇到一些 Bug。刚开始的时候,大家都不知道这个 Bug 到底应该由谁来处理,甚至可能都不知道它属于哪个模块。这个时候,很显然,问题抛出来了,却没有任何归属。如果你能够主动去做这样的一些事情,你就会成为这个组里面或者这个产品里面比较重要的角色。当所有人都依赖于你的时候,你的地位,你的经验,就能够更好的发挥出来,大家就更信任你。
优秀数据库工程师必备技能
InfoQ:现在,很多人都希望自己变得更优秀,也有很多程序员在工作之外想学习各种技能、工具、课程等提升自己。但现在知识特别多,可能让人有点眼花缭乱,您能不能给大家分享一下自己的经验?要成为一个优秀的数据库开发者需要掌握哪些技能,哪些是最核心的,重点学习哪些技术和工具就可以了?
关胜亮: 这要看开发人员的水平,如果是半路出家,也不是计算机专业的,要学很多东西。如果只是培训机构出来的,那么可能要学的东西就更多。这个时候,想成为一个数据库开发工程师基本是不可能的,你要积累很多的经验和经历才行。
一个正常水平的开发工程师,需要学哪些东西?我觉得开发语言并不是最重要的,因为用各种语言都能够开发数据库,像 C/C 、Go、Rust 等。我觉得主要是要掌握各种数据结构。第一要掌握各种数据结构的使用,最好能够自己去编写一些简单的,基础的库。像哈希、树、图、链表等,也建议你自己去写,而不光是去用。当你写完这些东西之后,自己的水平会得到很大的提高。另外,比较困难的一些数据结构,像红黑树、B 树、LSM 树等等,一定要很清楚概念,并且至少写一个简单的算法,这时,你的基本能力就基本上够用了,编码能力基本上也够用了。
然后要掌握一些网络通信和多线程编程的使用方式。现在,各种语言都比较强调异步调用和异步 I/O。这方面的理念必须要掌握清楚,尤其是要知道各种不同的异步调用之间到底有哪些共享的数据,如何去处理共享数据之间的锁的问题,这个特别考验水平,也只能在工作中才能够摸索的到。
第三,我觉得需要掌握一定的分布式知识,因为单机软件现在越来越少,大多数软件都需要多台机器协同,像 Raft、Paxos 这样常规的分布式算法,需要了解。也可以看一看 ZooKeeper、etcd 的实现原理,掌握一些基本的概念。
第四,如果有时间,最好是看一些开源软件的代码,简单的像 Nginx、Redis,功能复杂一点的,像 SQLite。掌握这些,我觉得基本能力就够了。
之后,可以试着给一些数据库做 Demo 插件,比如说像 MySQL、Postgre 都支持插件。这些插件不一定要得到多么大的应用,能够做出来就可以了。
最后,可以回过头去看一些数据库书籍,掌握一些理论知识。再然后,就应该想办法在实际的工作中去应用它,你不用它最后你掌握的东西都忘了。可以写一些独立的数据存储的组件,因为不管做什么样的工作,都可能会涉及到一些简单的临时文件,临时数据存储等,可以写一下这些东西。能写这些东西就差不多了,就可以找一些国内的数据库公司去试一试,看看面试能不能通过。
我觉得大体应该是这样的一个过程。
如何让自己不可替代
InfoQ:开发者之间的竞争压力挺大的。关于怎么构建自己的技术壁垒,在技术能力上让你在这个公司不可替代。在这方面,您觉得应该怎么样去努力?
关胜亮: 对于一个公司,它可能会有一些跟其他公司不同的地方,对于个人当然也会有。公司间的壁垒,或者产品间的壁垒,很容易从定位或者是产品架构上来实现。
对于个人来讲,其实很难说我有哪些东西,而别人没有。因为这么多的竞争者,没有哪些技术是只有你会别人不会的。所以,如果想在工作上更有区分度,或者在公司中有更加重要的一个位置,还是从技术和业务两个方面去着手。
这里说的技术不是通用技术,也不是说写几篇技术博客就可以了。这里的技术主要是算法跟具体业务的结合。然后在业务上,要掌握整个产品的应用场景。这些东西,就像打球一样。比如说,我喜欢看 NBA,有很多好的球星看起来天赋很高,但其实背后都是一遍一遍地苦练。在公司也是一样,你做的东西多了,接触的客户多了之后,自然而然的就能够达到一个相对重要的地位。事实上,要想通过走捷径去获得这样的一个位置,几乎是不可能的。没有人可以说我什么都不干,然后还可以位置无忧。
4 数据库工程师如何做职业规划?
职业发展路径
InfoQ:很多开发者都对职业规划有不少疑问。数据工程师应该怎么去做好自己的职业规划?一个比较好的职业路径应该是什么样子的?
关胜亮: 我觉得,首先,数据库工程师的入门难度比较大。所以,当你成为一名资深的工程师之后,上面提到的竞争力基本就形成了。
之后,我觉得可以从四个方面去考虑职业发展的规划。第一个就是继续做技术,成为技术专家。但是,成为技术专家不光要有深度,还要有广度,要扩大自己的知识面,尤其要抽时间去看竞品,看市场上主流技术的发展。其实这方面难度比较大。但如果你是一个比较宅的人,这比较适合你。
第二就是想办法首先提升为组长,然后争取成为部门主管。这样的话,可以走一个技术管理的岗位。
除了技术相关的,也可以向解决方案架构师转变。凭借你早期积累的对于产品的理解,还有技术能力,就可以更好地为客户提供技术咨询。因为现在,技术咨询这个领域对人员水平的要求越来越高了。以前,都是一些技术比较差的人去做,现在,做这种解决方案的咨询,都需要很资深的员工。
也可以向销售去转变。最近五年,也包括疫情这段时间,技术销售越来越吃香了,之前吃饭喝酒这种方式已经 out 了。大家觉得,你技术比较牛,那我就能相信你。
关于职业发展,我觉得可以从这四个方向去做。当然,如果你能力更出众,做成高管,那就是另外的路径了。
要不要转管理?
InfoQ:您提到了好几种转型路径。下一个问题就重点谈谈管理吧。如果你一开始做技术,后来做管理,这个跨度还是挺大的,很多人就想知道,我到底啥时候转,我自己适不适合转,我转过去之后万一不适应,发现我不适合做管理怎么办?您有没有一些时间点建议,以及怎么判断自己适不适合转?
关胜亮: 管理能力和技术能力其实是完全不同的能力,也是不同的职业规划。我刚参加工作的时候,还比较年轻,大家说 35 岁就不能写程序了。后来等我到 35 岁的时候,大家又说 45 岁不能写程序了。我觉得,这些说法都不是很准确,因为实际上,走管理和走技术这两种路径,从收入来看的话,差别也不是很大。
大家都说到了一定年龄之后就无法做技术,似乎就必须得转型管理,转型可以,但并不一定要转管理,也可以转型到很多其他的岗位。而且现在的技术岗,如果你做的是一些底层技术的话,年龄越大可能会越受到重视。而如果说你做的是 UI 类的软件,那你挣这个钱主要是靠时间来积累。当你年龄大了之后,你没有那么多时间的时候,你就必须要转型。如果你技术挖得比较深,你的竞争力是你的技术能力,而不是工作时间,不是靠加班来拼的时候,那么你只会做的越来越好。
其实到了一定年龄之后,如果你在自己的岗位上不是特别资深,特别有竞争力的话,那其实管理岗也好,研发岗也好,都会被淘汰,而且管理岗的缺口可能更少。像我们公司,其实就有很多大龄的程序员,很多之前做过管理,都至少带过十几二十人的团队,还有更多的。后来,他们觉得还是回归研发比较好。所以说,不是说你自己适不适合去做研发,不是说做不好研发,就去做管理,肯定不是这样的。其实,大多数不想在技术方面深入的人,大多不是转到管理岗,而可能转到像售前、交付、运维、市场这样的一些非研发岗位。
所以我觉得,判断自己适不适合做技术管理,就是问问自己有没有这样的意愿、能力,或者某一天能够去一个创业公司,能够独立带队完成一个新产品从 0 到 1 的开发。如果是你判断自己在未来某一时间段内能够有这个能力,那么我觉得你可能还适合做技术管理,如果不能的话,就要考虑自己真正的发展方向在哪里,做好自己的职业规划。技术管理的难度很大,大家不要觉得它是一个很容易的事。
InfoQ:管理能力的提升有哪些快速通道?
关胜亮: 首先是你到底适不适合管理岗。如果你目前不在这样的岗位上,那么首先,你先制造一个这样的机会,比如说我想要做一个什么样的新特性。而这样一个新特性又不是自己一个人能够完成的。显然,开发人员分前端、后端以及存储,很多不同的分工。做这样一个小特性时,需要很多人一起配合。这时,你就可以尝试在很小的一个范围之内,让大家围绕你把这件事做好。这就是你自己练手的一个好机会。做不好也没关系,接着回去做独立的模块就是了。做的好的话,就说明你具备了组织大家一起去完成一件事的能力。
然后,如果有机会,就参与一些比较重要的功能的开发。如果你还能够组织一些人把这个事情完成,那么恭喜你,基本上你就能够得到领导或公司的信任了。再有机会的时候,你可能就能够提升为管理人员了。
如果说你已经是管理岗,想提升自己的管理能力,我觉得主要就是从工期和质量两个方面去思考。如何能够更好的评估一件事情,什么时间能够完成。如何能够按照一定的标准去完成。这两个方面是管理里面非常重要的核心指标。当然,这个指标只是一种非客观的评价。
提升管理能力,一方面就是实战,一方面就是多看看书,多听听一些演讲,或者是参与一些培训班。我记得,我刚开始参加一个培训班的时候,我听到那个培训老师讲的,就跟被洗脑一样,我突然觉得,哇,管理还可以这么去搞。过了两天,我回来之后发现,哎,这个老师说的怎么感觉完全实现不了呀。我就对这个老师讲的东西产生了一些疑问。后来,随着经验越来越丰富,我发现,老师讲的是一些理论,他找了一个很好的例子,来证明他的理论能够执行。而如果你把这个理论,原封不动的放到自己的公司里去,可能就会执行不下去。这个其实就是理论和实际相结合,但你要是一点理论都没有,确实也没有办法做好管理。
如何平衡管理和一线技术工作
InfoQ:作为一个技术 leader 的话,您自己在管理工作和一线技术工作这两个方面,是怎么平衡的?
关胜亮: 技术管理和一般管理不同。在我看来,技术管理的难度比较大。不像我们砌一堵墙,今天你砌 1 米,明天我砌 2 米,然后拼在一起。技术管理的本质是要把一项任务拆分为多个子任务,然后把这些子任务安排到合适的人,并在规定的时间内完成交付,进行有效的检查。这里面比较难的是任务拆分,估算工期也很难,质量检查也很难。这些都需要 leader 具有很强的技术能力。
大家会看到,没有人会跨技术领域去做管理。本来做后端,现在去管手机 APP,这个确实难度比较大。所以,要想具备较强的技术能力,就需要不断参与一线的技术工作。
作为 leader,我通常会参与一些需要新技术的功能模块的开发,在完成原型开发或者第一版交付之后,再转给其他同事。通过这种方式,我们就可以在新员工中得到一定的威信。另外,自己也熟悉了新技术。还能避免新技术引入对整个研发工作造成太大的风险。所以作为一个技术 leader,一定要找到一些可能性,让自己去学习新技术。这样才能够不断提升自己的能力。
数据工程师有“钱途”吗?
InfoQ:做数据工程师有钱途吗?前几天,我看到有家机构发了一份程序员收入报告。您能不能分享下,数据库工程师的收入到底有多大竞争力呢?
关胜亮: 数据库工程师的收入其实还是挺高的,因为数据库也是属于后端研发的一种。任何做后端研发的人,都有可能转化为数据库工程师。数据库开发不一定非得去做 SQL 相关的,它里面也需要很多像分布式、网络、存储这样一些底层的知识。
我们招人,也不是只招数据库这个领域的,也会招一些其他的后端工程师。我们看到,现在去一些招聘网站会发现,后端工程师收入普遍比前端工程师高。而数据库工程师又往往会比普通的后端工程师技术能力更强,所以他的收入更高。不同的公司可能给的钱不一样,但基本上都属于这个公司里面排在前列的岗位。
InfoQ:您在招人的时候,会比较看重哪些方面的能力?比如说有一位求职者,他哪些方面比较强,对于您来说或者对于涛思数据来说是加分项。
关胜亮: 我们招人的时候,技术能力当然很重要,因为技术能力是技术型公司所必须的。但是,就我个人来讲,技术方面的能力,由各个用人小组就负责了。比如说哪个小组需要用什么人,他们自然而然就会评估这个人的水平,所以我的考察一般都是基于个人素质方面。一般都是考察一个人在某一件事情上面,曾经到达过那种高度。
我曾经跟 HR 说,给我面试的应届生,我只要 985 的毕业生,其他的不要推给我,就是认为他们既然在学习这种事情上面能够达到前 1/100 的高度和水平,那还是比较厉害的。但如果他不是 985 毕业的,那么我们要招他的时候,他多半已经参加工作好几年了,这时我就会考察他具体参与过哪些项目,或者在哪项技术上面做的比较好,到底好在什么地方。
我为什么要考察这两点?我希望他是有一些成功经验的。对于有成功经验的人,我需要做的事情就很明确了,就是要让这些员工把自己成功的经验复制出来。通过各种方式激励他,让他投入更多的精力,让他把成功的经验发挥出来,因为你成功过。只要你成功过,无论如何,你总会有一些不同的地方,比如你非常聪明,或者工作非常努力,总会有一些成绩,一些东西是和别人不一样的。所以我一般都会关注求职者的成功经历。
InfoQ:在找工作的时候,是去大厂还是去小厂,您是怎么看的?
关胜亮: 去大厂还是小厂,也要看自己做哪些事情。去大厂有个好处,你可能会觉得虽然你没有做到核心开发,这很正常,因为刚开始一两年不太容易做到,但你有很多学习的机会,很多代码仓库,你都有权限去看。这时,你就能够学习很多知识,但这其实是针对大概五年前、十年前而言,因为那个时候开源软件还比较少。你要想学习这些东西,只能去大厂。
现在,这种开源软件越来越多,我们可以通过各种不同的渠道去学习知识,这时,如果你进大厂,还没有比较核心的岗位,可能就不一定好了。如果你真是技术能力比较强,那我建议去一些相对比较小的公司,因为比较小的公司里,你的竞争对手也会相对弱一些。这时,你就很容易出类拔萃。如果你喜欢做管理岗,或者喜欢做核心技术攻关,可能都能够轮得到你,你的成长就会非常快,因为成长还是一定要通过实战来完成。去了大厂你能够学到东西,但不一定有机会去做。
5 数据库行业发展现状与展望
开源数据库不会冲击商业数据库市场
InfoQ:现在开源数据库越来越多了,会不会冲击商业数据库的市场呢?
关胜亮: 这倒不会。开源和商业并不矛盾,完全可以把它们合二为一,我们公司主推的就是开源商业模式。但开源不是免费,开源也是有偿的服务,你可以用我们的软件,但是当需要我们提供服务的时候,我们还是能够获取一定的报酬的。
简单来讲,当你的公司具备一定的技术能力,并愿意在这方面投入自己的维护成本,那你用开源软件就可以了,出了问题你自己可以解决它。那么还有一些公司,尤其是像一些并不以技术特长为主的,比如一些传统企业,还有一些小一点的技术公司,他们虽然技术能力比较强,但他们希望把技术放在真正的业务上面,不希望在基础软件领域投入太多,这时候,他们就会购买开源软件的服务。我们公司的盈利模式也是这样。我们给一些真正有需要的公司提供服务,给一些技术能力比较强的公司提供更多的选择,让他们自己免费使用。同时,这也可让越来越多的用户使用我们的软件。
我们知道,数据库不是设计出来的,而是用出来的。你没有那么多的场景,就没有办法发现那么多的问题。当时有很多人质疑我们说,TDengine 为什么迭代速度这么快,我们两周甚至一周就发一个版本。当时我就说,那是因为有很多用户,他们提出了很多问题,所以我们才能有这么快的迭代速度,才能有这么多的新功能。如果真的都没有人用的话,那么你的软件永远都是稳定的,一个不运行的软件它怎么可能有 Bug。
TDengine 既有开源的部分,也有商业的部分。如果是一个纯粹商业数据库,它就没有免费版本,它们的生存空间已经越来越小了。尤其是一些新型的数据库,它们没有办法竞争过 Oracle、Postgre、MySQL 这样一些成名的数据库。它们也没有办法去跟一些开源数据库竞争,因此,它们的生存空间会越来越小。
这也是最近几年,开源数据软件蓬勃发展的一个主要原因。像时序数据库、图数据库、内存数据库这样的数据库,现在蓬勃发展起来了。像工业制造业的发展过程一样,大数据架构也会细分为越来越多的零部件,这个领域里也产生了盈利能力很强的公司。但是进一步去看就会发现,这样一些盈利能力很强的公司,他们最核心的技术都是开源的。所以我们说,纯商业收费库是没有发展前景的,我们一边开源,一边做商业,这样的公司是符合技术发展潮流的。
InfoQ:数据库上云对数据库行业的冲击大不大?
关胜亮: 其实不是很大。MySQL 这个公司很知名,大家买云上的 MySQL 也花了不少钱,但是实际上,这个钱都被云厂商挣走了,MySQL 公司本身并没有挣到太多的钱。
随着这种方式的发展,大家发现,如果我们做开源,最后自己都没有拿到更多的收益,这肯定不合适,所以现在大家提供了一些新的开源协议,包括我们公司,这并不是为了阻止大家免费使用,而是我们不希望自己的产品被公有云软件公司拿去部署,而我们只是给人做嫁衣。有了这样一些协议的保护之后,上不上云已经对我们本身的发展,影响就不是太大了。
上云的理念在这些年,尤其是近几年也确实是一个蓬勃发展的状态。一般来讲,很多应用方都会主动把大数据平台上云,有的是公有云,有的是私有云或者混合云。而且,越来越多的数据库公司,像国外的比较厉害的 Snowflake、Databricks,我们发现,上云使他们的产品得到了更好的推广,因为很早以前,软件部署非常困难,需要耗费很多人力。通过上云,就可以扩大这些数据产品的应用范围,甚至创造出新的价值。
所以我的结论应该是影响不大,可能还有很多好处,因为我们公司的产品现在也在上云。我们也跟一些云厂商进行合作,比如华为,在他们的云市场上就可以购买到我们的产品。上云,如果我们把握好这个机遇,对于数据库有非常好的促进作用。
2023 年,数据库最值得关注的技术趋势
InfoQ:新的一年开始了,这几年数据库也挺火的。您能否展望一下今年或者说未来三到五年,数据库的哪些技术点值得大家关注,或者说有比较大的发展潜力?
关胜亮: 我觉得潜力还是在一些比较专业的数据库领域。现在来看,通用技术方案越来越难以解决一些专门的技术问题。我们要从技术的角度去寻找自己的赛道。
我们看到,顶级的开源产品,像国外的 Kafka、Mongo,国内的像 TiDB,包括我们的 TDengine,有很多拥有上万 Star、上百贡献者的软件,都把精力放在了自己比较擅长的领域,然后让其他厂商去做数据集成。因此,我觉得,一定要说哪一个技术方向一定会火,这不好判断。但是,这种技术型的公司,尤其是一些有硬核技术的公司,它永远都会活下去。可能你这一家公司活不下去,但是另外一家公司也会活下去。
我们始终相信,硬核技术永远都不会过时,而且只有技术能带来新的元素。因此我也希望,大家如果要找工作,还是要找一些有硬核技术的公司。基本上,这些公司,因为各种原因,可能不会 100% 全部都活下来。但是,对于个人发展来讲,它是一种很好的技术沉淀。
InfoQ:您谈到,很多技术方向都有很大的发展潜力。对于这个行业的从业者,对于数据库工程师来说,他们应该怎样去抓住这些机会?有没有可能,他们可以根据这些技术趋势去提升自己的技能,然后做好准备?
关胜亮: 我觉得,很多年轻人都有一种顾虑,就是觉得自己怀才不遇。他们会一边工作,还一边去做一些跟工作本身没有关系的其他准备工作。比如我现在正在开发其他软件,然后去想,什么时候能成为一名数据库工程师。我觉得,大可不必这样做。
我一直都认为,真正的能力都是实战中锻炼出来的。回顾自己成长最快的时候,都是加班最多的时候。我们会发现,积累的并不是技术能力,而是做事情的方法。我觉得,最重要的是,在实际工作中看一些技术书籍、管理书籍,然后去思考怎么样把一件事情做好,掌握把事情做好的方法,并在实践中不断验证和修正。把事情做好的方法才是真正的工作经验。我不建议大家去学习某一些新的方向,除非你现在没有工作,处于待业阶段。
国产数据库如何加速?
InfoQ:这两年,因为一些原因,我们国家在科技方面,尤其是在基础软件方面,国产化的呼声特别高。就数据库来说,在走向全球、走向一流方面,国内似乎没有国外做得那么好?关于这个问题,您觉得应该怎么样解决?
关胜亮: 其实我们现在做的也不见得比国外差很多,像现在国内比较流行的一些软件做的都不错。我也会参与一些开源软件活动,他们之所以没有在国外打出名气,主要是因为国外很多时候也和我们一样。我们都喜欢用本土化的,像之前去 IOE,我们不喜欢用国外的软件。这给类似我们这样的数据库软件提供了很多土壤。国外也是这样,他们一看这个软件不是他们国内本土开发的,也有这样的效果。
我记得,前几年互联网比较火的时候,大家都做互联网,做的差不多了之后,大家就开始希望用互联网的思维去改造传统的工业领域。但是这种改造,说白了,并没有一些硬核技术,都还是用同一种互联网思维去改造工业,并没有产生新的价值和新的业务场景,重写一遍业务系统的意义并不是很大。这时基本上就宣告了,用这种互联网的思路解决不了问题。
所以,经过这两三年的沉淀,我们会发现,越来越多的企业、创业团队,包括一些资本,把资金投入到了小而精的专业数据库上。这些小而精的专业数据库发展的非常好。因为我们国内是一个非常大的市场,什么样的场景都有。
我觉得,再经过三年左右,国内还会涌现出更多的类似这样的数据库软件。像我们 TDengine,可能也会在国外拥有一席之地。
InfoQ:您刚才提到在国外有一席之地,那咱们现在是不是有出海计划了?
关胜亮: 对,我们已经在美国组建了销售团队,也招了不少人。预计明年初就会在国外推广。但到底能不能成功,这个不好说。
我觉得,做基础软件一定要耐得住寂寞,不要盲目地扩大,也不能盲目地悲观。如果这次在国外没成功,那最重要的是复盘,看看我们到底还差在哪儿,去做一定的改造。出海不成不一定失败,重要的是得到很多经验教训。我们看到,去美国难度会比较大,但是去东南亚,包括台湾和日本,国内的很多软件竞争力都非常强。所以从这个角度来讲,我们如果能够真正知道美国到底要什么,我们的基础软件肯定会越来越好。
InfoQ:涛思对数据库未来发展的战略,既有本土化战略,也有出海规划。从这个角度看,是不是说国内数据库的发展,未来必须要走出海这个路径?
关胜亮: 目前来看,绝大多数做的不错的技术团队,都不是由一些大公司孵化的。因为我们知道,孵化这样一个团队,收益相对会比较低,尤其是刚开始的创始团队,收入会比较低,获得的股份会比较少。每个人,做自己的事情和做公司的事情,投入肯定是不一样的,战斗力也不一样。所以我们看到,这样的公司恰好都是独立但有资本支持的一些公司。有资本支持的公司又希望投入收益能最大化,那么怎么才能够收益最大化?如果仅仅在国内,虽然国内市场也挺大,但在国内市场,资源很重要。谁拥有了资源,谁就能够获得市场。
相反,对于技术型市场的开拓还不是特别多。虽然近些年来,在国内,我们也凭借技术获得了很多客户。但是,也有很多客户,尤其是一些比较大的客户,他们并不关注你的技术怎么样,他们关心的是你的资源网怎么样。我们要想提升知名度,获得更多的社会认可,包括更高的估值,我们必然就希望到国外去做一些工作。
在国外成功占据一席之地之后,在国内也就更好推动。比如说,我们去做一个数据库软件的投标。在业务选型里面写上 Oracle 和 MySQL,大家都不会有任何问题,因为这都是大家公认的业界标准。但是如果你写上了一个不知名的小数据库,那么大家就会怀疑,这里面是不是有什么套路啊?也就是说,如果能够成为事实标准,就能够给公司的发展带来一个非常好的直接的推动作用。我们希望先从国内走出去,再从国外走回来。通过这种迂回的方式,能够把一个公司真正做大做强,并且能够有更多的业务场景,使产品的稳定性、易用性都变得更好。
InfoQ:国产数据库要想取得突破,一个关键的问题是不是就在于人才?
关胜亮: 我觉得,一个软件的成功失败不在于个人能力,最主要的是组织能力。刚开始三五个人的时候,就可以做一个东西出来。但是,如果你投入的只是这样一个团队,做出来的东西,势必就不会有那么大的价值。换句话说,它的功能不会特别全。我们就必不可少的要扩展研发规模,包括其他团队的规模。这时,组织能力就凸显出来了。
我觉得,国内软件行业跟国外软件行业最大的区别还是组织能力。我们看到,我们的员工跟国外的一些顶级研发人员比起来,个人能力差别并不大。那么为什么国外的知名公司,他做出来的东西总是很好,很稳定呢,他有什么秘诀呢?其实就是他的管理能力比较好。
我现在比较喜欢把这个管理能力称为组织能力,就是组织一些人完成一件事的能力,我们比较欠缺这样的能力,而并不在于说我们有什么样的人才。如果一定要说人才的话,就是具有组织能力的人才。
当然,事实上,对于组织能力,并不是单单一个人到了某一个公司之后,就一定能够改变整个公司的气氛。甚至说,当你所推动的制度跟其他人的理念不一样时,你可能就待不了太久了。所以,我觉得,从组织上面、从管理制度上面去学习国外,可能还真是一个比较好的前进方法。我们公司现在也是慢慢向这个方面去转型,去了解国外的一些成功的经验是什么样的。
InfoQ:您刚才谈到了很多关于数据库发展的问题,比如资源,可能大厂在这方面比较有优势。那您觉得,在国产数据库发展方面,创业公司要想获得好的发展,他自己需要在哪些方面做出努力?在整个形势也不是特别热的情况下,这些创业公司还是要专注于做技术吗?
关胜亮: 对,越是到寒冬,大家更是要步子迈的小一点,因为实际上现在有一些对赌等等,把一些本来有很多好思路的公司都搞得最后走向了一个不好的状态。如果你没有一个创业者在前面做领头,虽说资本把公司拿去了,但它最后也发展不了。为了保住公司,让它更好的度过寒冬,如果公司剩了不到半年的钱了,你该怎么办呢?
我觉得还是要在技术上去做,而不是去做太多市场方面的东西。关于市场,我们从两方面去理解。一方面是做一些市场活动,比如到很多地方去做广告、做宣传。这势必会有一些投入,这种投入要降低。
还有一种是为了能够打开市场,获得越来越多的客户,我们需要有很多的销售团队。但是,扩大销售团队如果不能获得高收益的话,投入可能就会损失掉。而且,即便你真正拿到很多合同,但是,那很有可能跟你这个公司本来的定位是不一样的。为了完成这样的合同,你可能会把公司里面比较核心的开发能力,投向了容易拿到市场合同的技术方向上。最后,从一个技术型的公司变成一个项目型的公司,处于一种只是勉强活着的状态。当寒冬过去之后,你就会发现,自己所赖以生存的技术已经被其他公司远远抛在后面了。这时,等待你的最终也还是同样的结局,只不过就是死的晚了一点而已。
所以我觉得,不管怎么样,还是要把握住自己做事的初心。希望做成什么样的产品,希望做成什么样的盈利模式,要秉持住这样的想法,不要被外界的诱惑所吸引。
6 同侪寄语:穿越寒冬
InfoQ:2023 年刚开始,新的一年,您能为数据库工程师这个群体送上一句祝福的话吗?
关胜亮: 我希望大家都能够熬过这个寒冬,在疫情过去的时候,在 2023 年,都能够得到一份满意的工作,获得一份满意的收入。
InfoQ:很多人都在做自我提升,尤其是在寒冬的时候,大家觉得,修炼好自己的内功,才能够让自己具备穿越周期的能力。自我提升很重要的一个渠道就是看书,您能不能给大家推荐三本数据库开发相关的书籍?
关胜亮: 我也就看了十来本。我觉得,比较好的一本是《数据库系统概念》,这是一个比较经典的数据库系统教科书。刚入门的话,可以看一看这本。然后可以看一看《Redis 的设计和实现》。它比较全面的描述了 Redis 内部的运行机制。如果你的经验还不算丰富,则可以通过这本书了解目前业界是怎么解决这方面的问题的。第三本是稍微进阶一点的,就是《数据库系统内幕》。它主要介绍了存储引擎并发控制的一些核心技术。这本书讲的稍微乱一点。它最后面的两三章里面讲到了 B 树和 LSM,这一块可能会对你产生一些启发作用。现在所有的关系库,包括 NoSQL 的库,包括 TDengine,可能都用到了这些技术。这应该是必备的一种技术要求,大家可以看一看。
点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!
今日好文推荐
数百程序员专门教AI写代码、40个bug能修复31个,“取代程序员”这次要成真了?
Cloud IDE 是不是一个伪命题
阿里辟谣海外建全球总部;科技巨头加速裁员,商学教授直呼企业管理层愚蠢;谷歌Fuchsia OS部门遭遇重大打击 | Q资讯
副业搞得好、赚钱没烦恼:新春程序员寻找“副业”灵感指南