虽然很遗憾最后因为一些原因我们没能成功组成宿舍,但是开学之后我们还是会常常讨论一些学术问题。我俩的背景颇有些不同:我本科是毕业于航天专业的,所以计算机基础很是缺乏,因此我当时更倾向于好好补一些基础;而他本科则是正统科班出身,基础很是扎实,而且他有强烈的做research的意愿,因此会大量地去看paper、提idea与我讨论、并做实验尝试。在与他的讨论中,我常常被他深不见底的数据库、系统的知识储备所震惊。现在回顾起来,当时初入科研门槛的我们其实提出了不少有意思的想法。比如我们在2017年的时候就预见到了机器学习会在数据库/系统领域有广泛的应用,甚至我们在课堂演讲的时候还说了这么一句话“任何需要决策的地方、调整参数的地方,也许都可以使用机器学习”(when there is a decision needed, there is potentially ML needed)。我们也尝试了一些机器学习应用在系统上的想法 ,不过很遗憾的是,那时候我们并没有比较好的实验条件与机器,这些想法最终都没能变成完整的工作。如果仅仅是这样的话,那信静在我心中只是一位基础扎实、动机强烈(highly self-motivated)、刻苦勤奋的很强的朋友罢了。真正让我震惊的是无意中得知的信静之前的故事。有次我们在讨论算法题,信静随意说了一句自己之前有一些ACM经历。我闲着无聊,想搜搜看他之前的ACM成绩。这一搜不得了,无意中搜到了这样一条推送:不忘初心 笃行致远——记软件技术122班毕业生周信静 。我这才惊讶地得知原来信静不止是从杭电辛苦地考上浙大计算机的,他甚至之前还是专升本到的杭电!震惊之下,我把这条推送发给了信静,表示了自己的膜拜与佩服之心。谁想到信静转而说出了让我更震惊的事情。信静尴尬一笑,说自己小时候不懂事,也没啥人管,天天就知道乱玩。到了初三的时候,职高来他们初中宣传,一忽悠,信静就一冲动,放弃了中考而选择了去职高。结果在职高读到第三年,他突然醒悟,觉得自己不想就这样度过一生,于是开始奋发图强,努力学习。无奈积重难返,且偏科严重,后来仍然只有考上一所大专。信静并没有因此而绝望,而是进入大专之后,继续维持着之前努力的势头,积极学习高质量的公开课,最终完成了专升本和考研到浙大的逆袭。职高->大专->专升本->考研到浙大!我实在无法想象信静背后是付出了多少努力,才能走出这样的道路。附:这里有信静在大专二年级时写的一些项目:raft-core。大家一看代码就知道他当时的水平了。诚实地说,现在的我仍然距此仍有相当距离,很难想象当时的他付出了多少努力。
与信静的科研合作:永不放弃的坚定前行者
又过了一段时间,由于一些原因,我转出了原来的实验室。由于信静所在的数据库实验室已经基本没有同学做数据库(都去做机器学习了),故信静仍然常常来找我这个不做也不懂数据库的人来讨论想法(idea)、实验和写作方面的问题。某天晚上,信静突然非常激动地跑到我的寝室,和我说他新想出了一个想法。这个想法是针对一种新的存储硬件NVM的(Non-Volatile Memory,非易失存储)。这个想法的动机(motivation)是来源于NVM的一个特点:NVM的读很快,具有接近DRAM(Dynamic Random Access Memory,动态随机存取存储器,即我们平时所说的内存)的速度,但是写比DRAM慢很多。这样的特点使得NVM上的写在很多时候成为了一个瓶颈,因此这篇工作就希望能够降低NVM的写的频率。使用的方法启发于以前一篇数据库领域的论文。那篇论文设计了一种混合多阶段索引(hybrid multi-stage index)来减少写操作。启发于此,信静设计了一个双阶段(dual-stage)的索引来减少NVM上的写操作。(关于这篇论文详细的说明可以参考这篇文章)信静有些忐忑又有些期待地看向我:“你觉得这个想法怎么样?靠谱吗?做出来能中顶会吗?”我很肯定地告诉他:“我觉得非常靠谱,做出来的话应该能中。”信静欢欣雀跃地说:“我也这么认为!那我就去实现了!”在这项工作中,还有一些让我印象深刻的事情。在与以前的相关工作进行实验对比的时候,我们发现之前的工作基本都没有开放源代码(开源)。数据库、系统方面的论文实现是极其复杂且困难的,常常会耗费巨大量的力气,因此如果之前的工作有开源的话,那就会大大减少复现的代价;否则的话,则可能要花大量的精力在复现论文上。信静抱着试试看的想法给作者们写了邮件,想看看能不能要到源代码,这样就可以省下大量精力。遗憾的是,所有最新的相关论文的作者都表示无法提供源代码,但是有几位作者表示,如果信静复现论文的过程中碰到问题的话,他们愿意提供帮助。“这怎么办呢?要不就比较一些老一些的但是开源了的工作?”我问信静。“不行,这样的话,实验结果就缺乏说服力了。不提供代码就不提供代码吧,我自己来实现!”信静坚定地回复我。后来,信静就凭借自己惊人的工程能力,将所有需要对比的工作都复现了出来。这项工作在做了半年之后进行了第一次投递,投递在VLDB2020(VLDB是数据库领域最顶尖的两个会议之一)上。不幸的是,第一次审稿(review)结果出来,审稿人(reviewer)的意见都比较负面,主要的批评在于工作的实验是在NVM的模拟器上做的,审稿人觉得这不太具有说服力,希望能在真实硬件上做实验。审稿人写道(此为翻译):“如果是以前也就罢了,那时候Intel没有提供硬件给外界使用,那不得不用模拟器。现在Intel已经提供硬件了,那么没理由只是在模拟器上做实验。”“哼!提供个啥!明明只有和Intel有合作的企业才能拿到。”信静很委屈地和我吐槽。我当时和信静说,实在不行的话,就再投下一个会议吧,我想总有审稿人愿意接受模拟器上的实验结果的吧。信静不服气,觉得不能就这样放弃。后来他自己想办法联系到了阿里的一个数据库的组去实习,并与实习的组商量好,在实习期间把这篇工作的实验给做了。在真实硬件上重新做了实验之后,信静再次将这篇论文提交到VLDB。审稿人看到这样的改进之后都非常高兴,纷纷给了接收(accept),这篇工作就这样中了。信静想办法拿到真实NVM硬件做实验的这件事情让我意识到了自己和信静的一个巨大差距的地方:信静是能够打破限制(break the box)来解决问题的人(problem solver),碰到没有NVM硬件这样的限制,他会想办法打破限制;而我则是一个只敢在限制内行动的人。
在那之后,许是上天不忍心再捉弄信静了,他的运气终于好了起来。DPTree的论文被接受了。而之后,这篇论文的一位审稿人 Joy Arulraj (他是佐治亚理工的助理教授)因为信静的出色工作而主动联系他寻求合作。在得知了信静还没有攻读博士后,Joy还主动找了funding(资金支持)并邀请信静去佐治亚理工读博。到了秋招,我们都要找工作了。我和信静都非常希望能和彼此做同事。我先拿到了一家高频交易公司的offer,而后信静也非常希望能拿到这家公司的机会,我们一起当同事,但很遗憾这家公司秋招时候的系统开发岗位只有1个名额,不再继续面试信静。无奈之下,信静只能再去寻找其他大公司的数据库组的机会。后来我率先拿到了腾讯云数据库内核组的offer,之后介绍信静去面了这个组,信静也没有辜负大家的期望顺利地砍下了SSP。这本是我们成为同事的绝佳机会,然而我已经先答应了那家高频交易公司,而我向来是言出必行,故而也就未选择去腾讯与信静共事,现在想来还非常后悔和遗憾。信静毕业去了腾讯,在那个组做了许多很不错的工作。更厉害的是,信静还利用业余时间与Joy合作做科研。那时候,信静工作日的白天上班,晚上和周末挤时间做科研。我们同届的几位朋友基本上都因工作忙得焦头烂额,挣扎在厂子里日复一日的搬砖之中,而他却能在将工作任务完成得非常出色的同时,还做了一项顶级的科研工作,真是令人敬佩。他们的这项工作SpitFire最终发在SIGMOD2021上(SIGMOD是数据库领域最顶级的两个会议中的另外一个)。