TiKV-Committer-的最快养成方法

—— TiKV 优秀 committer 迟先生(Alex Chi)专访

本文首发于 PingCAP 微信公众号,原文地址是:https://mp.weixin.qq.com/s/-GFlsipDZKNXViwM5yNOMw ,欢迎大家关注哇!

一月末,一位大三的少年登上了知乎热榜,有数百万人浏览了迟先生的“凡尔赛”语录:“即使一周实习3天,我依然拿到了上海交通大学计算机学院第一的绩点。”迟先生是上海交通大学的计算机系学生,同时,他也有着另外一个身份:CNCF TiKV 项目有史以来最快晋升为 committer 的开发者。在一个风和日丽的下午,他接受了我们的专访。

编程学习之路

如果你不爱一件事,你不可能把它做得真正优秀。

Paul Graham《黑客与画家》

从小学三年级开始写代码,迟先生在初三的时候拿了全国青少年信息学奥林匹克联赛提高组的一等奖。
升上高中后的迟先生开始了工程上的实践,学习了前端、后端的大量知识,用 Python、JavaScript 等写了很多好玩的小程序。当被问到,为什么高中不继续打计算机竞赛的时候,他笑着说:“因为我觉得算法比赛没有什么意思,我想做一些更有意思的事情”,就这样他在高中边写代码边升入了上海交通大学的计算机系。
到了大学以后,迟先生就开始学习系统编程。在一年半内学完了MIT 6.828, 6.824, CMU 15-445等硬核课程,并且数据结构、操作系统、计算机系统结构、计算机组成、计算机网络等核心专业课上拿到 A+ 的成绩。
随后,他在大二下学期加入 CNCF 的 TiKV 社区进行开源贡献,在大三加入 PingCAP 实习。

结缘开源世界

冲在开源软件最前沿的人,正是凭借自己的眼光和才华发起项目,然后通过有效的社区合作,将其发扬光大。

Eric Raymond《集市与大教堂》

迟先生在大二下学期参与了 CNCF 基金会主办的 Community Bridge 活动( Community Bridge 是一个为有兴趣参与开源项目的开发者提供带薪实习和指导的活动)。然后在这个活动里他结识了 PingCAP 的导师 breeswish,并且在导师和社区成员的指导下参与到 TiKV 项目的开发中。迟先生进行了 coprocessor 模块的开发,这个模块主要负责的是 TiDB 的下推计算,它通过将 TiDB 的部分算子下推到 TiDB 分布式存储层来做,可以有效提高数据库运行的效率。
这个模块涉及到对TiDB整个的计算框架进行修改,是一项被打上“hard”标签的任务。但是迟先生凭借他扎实的计算机功底和不俗的代码实力,成功地完成了既定目标,同时创下了 TiKV 有史以来最快成为 committer 的记录。TiKV 的官方网站上至今还保存着他结业时写的总结博客

在项目结束后,迟先生顺利地通过了 PingCAP 的面试,成为 TiKV 项目组的实习生。

闪耀的实习经历

创造,不论是肉体方面的或精神方面的,总是脱离躯壳的樊笼,卷入生命的旋风,与神明同寿。

Romain Rolland《约翰·克里斯朵夫》

迟先生在实习的时候选择了更加接近计算机底层原理的存储引擎进行研究,他参考了BadgerDB ,使用 Rust 实现了著名论文 WiscKey 的构想 ,开发了一个高性能的存储引擎 AgateDB。现在 AgateDB 正做为TiKV的实验性引擎处于持续的开发阶段,全面开源(项目地址是 https://github.com/tikv/agatedb ,欢迎感兴趣的同学来参与贡献!)。
迟先生说:“我对来 PingCAP 整段实习的经历都是比较满意的。首先我接触到了国内为数不多的做开源软件的公司,并且能够参与到工业界产品开发的一些流程,这让我对 TiKV 的认识更加深入,并且也激发了我之后在存储、数据库这方面的继续深入研究的兴趣。”当问到迟先生来 PingCAP 实习时印象最深刻当事情是什么的时候,他毫不犹豫的回答:“上海 office 曾经组织我们一起去迪士尼乐园团建,这让我觉得非常的快乐。
这个回答出乎了我们的意料,我们都笑了出来。

不平静的大学生活

如果自己就是潮水的一部分,怎么能看见潮流的方向呢?

Paul Graham《黑客与画家》

迟先生在上海交通大学计算机系几乎每年都拿到了满绩的成绩(GPA 4.3 / 4.3 ),我们向他询问了他是如何一边实习一边拿到这么好的成绩的。迟先生笑着说:“我对最后考试拿了多少分,其实兴趣并不是很大,更重要的是我在这个过程中学到了什么事情。

迟先生向我们讲述了他如何对课程进行分类:课程可以分为实践课和理论课。实践课基本上是根据课后项目的完成度来给分数的,而他因为有着丰富的工程经验,所以可以快速的上手,所以这些实践课的分数基本上都比较高(小编补充:满分)。另外一些课程是理论课,比如说计算理论、人工智能这样的课。这些课的分数组成大部分都是考试。对于这些课,迟先生说,他觉得自己课下研究的效率比上课听讲高很多,所以他每周会稍微抽一点时间看书的,然后期末再做几套卷子,基本上成绩也不会太差(小编补充:也是满分)。
当我们问到他对于时间的安排时,迟先生回答道:“我去年的课是我每周是可以空出两天完全没有课的,所以我那两天是在 office 实习。还有一天那门课是听和不听没什么区别的,所以那天我就在学校 remote 。”“所以我的观点一直是分数还是比较难反映一个人真实的水平,”他说,“就像我虽然在很多课上分数是比较高的,但论我到底学到了多少东西,这个东西都是比较难界定的。”
而当谈到周末的安排时,迟先生的回答倒是让我们觉得十分的亲切:“我周末会打游戏、看电影,然后还会去商场吃饭。然后还有因为周末大段时间比较多,我可能会用来去做一些课程的项目,因为这种项目一般都需要周期很长,我一般会拿这个比较整段的时间去做,这样效率会比较高。”
原来天才少年的休闲生活和正常人也没有什么不同,这让我们感到有所放松。

内卷与逃离内卷

数量,即是正义。

Gustave Le Bon《乌合之众》

内卷,本意是指人类社会在一个发展阶段达到某种确定的形式后,停滞不前或无法转化为另一种高级模式的现象。 当社会资源无法满足所有人的需求时,人们通过竞争来获取更多资源。
迟先生提到了一些他生活中见到的的内卷现象,比如有的同学发邮件给老师,想把别人的分数扣掉,希望用这种降低别人分数的方法来提高自己的排名。
“还有一种,”迟先生说,“我们专业的人工智能课的最后一个项目是做 presentation ,有些人通过调整参数,将模型炼到了99.9%的准确率。这些行为的共同点就是:你虽然达到了很高的分数,或者说得到了老师的认可,但是实际上对于自身的水平是没有任何提高的,它纯粹是一种同学之间的内耗。”
我们问到:“那你是如何对待这种行为的?”
迟先生回答:“我完全不参与这类事情。”
他提到,去年有一门课,有的同学写了三四十页的实验报告,而他第一次交了两页,第二次交了五页,最后老师还是给了他满分;包括在 AI 模型训练上,他的小组建立了只需要处理少量数据就能得出很好结果的新模型。他觉得更应该注重的是提高工作的质量,而不是做一些很表面的功夫。
这让我们感到非常的有意思:在内卷环境里胜出的那个人,却是旗帜鲜明反对内卷的人。

挂在嘴边的失败

被别人揭下面具是一种失败,自己揭下面具却是一种胜利。

Victor Hugo《海上劳工》

迟先生在 PingCAP 的 导师 Jay 对迟先生的评论是:“他的产出呈现出一种与年龄不符的成熟度,让人非常震惊。和口头“失败”完全不符的成功表现,有一种反差萌。”
是的,迟先生为人所熟知的,还有他日复一日的卖菜。

当被问及为什么经常说自己很失败时,迟先生是这样解释的,衡量成功有很多维度,而他在很多维度上都是彻底失败的。
他提到,上海交通大学有很多同学,大一就进实验室,之后顺利的发了很多顶会的paper,可是自己在学术上并没有什么建树。同时,有另外一些同学,他们参加了很多学生活动,成为了学生会的主席;还有些人做了许多的公益,登上了电视台……他也很羡慕这样的同学。
我们反问道:“可是你也获得了很多人梦寐以求的东西,比如奖学金、社区的 reputation 等等。”
而迟先生回答道:“我只是在学习方面自认为学习能力还是ok的,并且在像数据库像存储这些领域,找到了一些自己比较喜欢的点。对我来讲,像奖学金、像各种荣誉之类的东西,我自己认为它们并不是很重要,最重要的还是我的能力在什么水平上,然后我能做什么样的事情,或者说我做过什么样的事情,这些是我比较看重的地方。”
我们又问:“你觉得有些事情对你来说并不是很重要,但是恰恰这些事情对他人来说可能是比较重要的,你这样说会不会伤害到他们?”
迟先生是这样回答的:“我觉得这个是不可避免的事情。我高中的语文成绩就永远都在及格线边缘,然后我每天都在背文言文实词、做很多题,但是我的语文成绩就一直上不去。但是我的一些同学,他们不用像我这么努力,就可以拿一个很高的语文分数。那么在这种情况下面,他们确实对我造成了一些影响,让我觉得我特别的失败,我不管怎么努力都没有办法达到他们的水平。
但是等我到了大学后,我感觉当初想法都比较幼稚,就没有必要在这种这种方面上纠结,因为高考过了这个阶段以后,之前的分数都没有什么用了,对吧?感觉其他人有很高的成就或者怎么样,如果你很在意这些事情,确实会对自己造成一定的打击,但是随着时间的流逝,这些感觉就不会特别的深刻,因为它们并不是生命中最重要的东西。”
成功没有单一的批判标准,我们每个人都要找准自己的赛道。

传火开源

开源软件是计算机工业最宝贵的财富。

Tim O'Reilly

迟先生觉得,在开源社区做贡献,最重要的是 motivation 。
他举了自己的例子,他最初去做的 TiKV 的 motivation 是因为他觉得这个开源项目很好玩,然后在参与建设的过程中同时学到了很多知识,结交了许多朋友,因此就一直走了下来。
他觉得,要参与开源社区,首先要做的是找到自己感兴趣的方向,然后选定一个自己稍微努力一点就可以够得着的那种水平的开源社区。选定了这么一个社区之后,我们就可以参与进去。
参与进去的时候,和社区里面的人沟通是非常重要的一件事,比如说社区里面有些什么idea,或者说其他的开发者是怎么想的。这样可以慢慢的找到具体在什么地方可以努力,就可以去做一些比较大的feature,或者做一些比较大的改进,然后这样一来就可以提升自己的能力。
迟先生认为 TiKV 的 coprocessor 可能是整个社区里面最容易参与的一个组,因为这个项目基本上不需要很多的前置的知识,只需要知道 SQL函数是干啥的就可以来实现一些 coprocessor 里面的函数。所以他建议初学者或许可以考虑一下从这个角度来参与TiDB的相关开源活动。
同时,我们也推荐 TiDB 官方出的十分钟成为 Contributor 系列博客,想和迟先生一样成为知名开源项目的 contributor 吗?从发出第一个 pr 开始吧!

梦想是什么

梦想一旦被付诸行动,就会变得神圣。

阿·安·普罗克特

当聊到迟先生的人生梦想时,迟先生讲到,他希望以后可以成为一个出色的工程师,能解决复杂系统里面的一些问题。
我们问到,如果有一天财富自由了,他会想做些什么。他毫不犹豫的回答,他想写一些自己真正想写的一些代码。
“对我自己来讲,我想解决一些其他人没有解决过的问题,”他说,“有些问题感觉就算是学术界也比较难解决,它真的要有经验丰富的工程师才可以去找出那么一种真正可以适用于某一个 workload 的系统的解决方法。我想去写这种优雅、又可以解决痛点的程序,这会让我感到非常的开心。”
我们问迟先生在 PingCAP 的导师 Jay Lee ,有没有什么想告诉他学生的话,他沉默了许久,后打出了这么一句话:

愿他能保持好奇和冲劲,对开源和技术永远热爱

是的,祝愿我们都有光明的未来。

最后在关麦之前,我们请迟先生给我们的读者们推荐一些东西。迟先生想了想,说:“我推荐一个游戏——《塞尔达传说》,我觉得这个游戏非常的好玩,你可以用它来消磨时间,也可以提神醒脑。希望大家在感到无聊或者说觉得人生遇到瓶颈的时候都可以玩一玩游戏,从游戏中获得一些快乐。”
话筒准备递给下一位嘉宾了!至于下一位嘉宾是谁,熟悉社区的小伙伴肯定都知道啦,先卖个关子,敬请期待~