硕士毕业半年的茫茫社招路

整理自己关于工作、社招的思考与心得

原文发于 这里

前篇为 校招找工作总结

本文旨在分享自己硕士毕业一年以来在工作上、学习上、找工作上的经历与思考,希望能对一部分同学有一定的启发作用。同时需要强调,本文全文均仅代表个人观点,限于个人的水平与经历有限,许多观点不免片面甚至是错误,欢迎指正。

在写前一篇校招总结的文章的时候,我怎么也没想到,自己会在硕士毕业半年后就主动辞职。

这还要从第一份工作的经历开始讲起。

初入职场

初入职场:期待与现实之间的鸿沟

说实在的,在第一份工作开始之前,我是颇有些期待的。我第一份工作的行业是很有些“神秘色彩”的“高逼格”的高频交易行业。不得不承认,我在进入这个行业之前是不太了解这个行业的,所以对于这个行业是做什么的、工作内容是什么都不怎么了解,仅凭一些与业内人士简短的交流就略有些略草率地做出了决定。不过这倒也容易理解,当时的我仅仅对于自己想从事的工作内容有了初步的思考(算法还是开发),但对于自己想从事的行业仍没有清晰的思考。况且纵使当时开始了这方面的思考,我擅长的终究只有排除法,只有亲身尝试过,才知道自己适合不适合。

言归正传,我抱着期待入了职,开始了在这家公司的工作(当然,出于保密要求,我不会透露任何具体工作内容相关的信息)。但是,我的喜悦之情只维持了一小段时间,我很快发现这里的工作内容绝大多数时候是在实现一些(在我看来颇为无聊的)业务逻辑,而我其实更感兴趣的是底层的系统架构和性能优化。这还不是最致命的,最致命的是我并不觉得我每天所做的事情会对社会有什么贡献。说来惭愧,在工作之前,迫于生计,我一直忙活着从一个里程碑奔往另一个里程碑,高考、刷GPA、考研、读研、找工作……很难有时间静下心来好好思考自己内心所追寻的究竟是什么。而且即便偶尔放慢脚步认真思考,限于校园里的经历,仍然得不出什么靠谱的结论。社会是另外一所学校,它很快用我的亲身经历告诉我自己,我渴望做对社会有贡献的工作,但是在这里的工作内容却让我很难感受到自己在为社会做贡献。

使情况更糟糕的是,这里的工作并不容易,而我又是一个认真做事情的人,就算我不喜欢不认可这边的工作内容,我仍然会努力去把我的任务完成好,这就使得我更加痛苦,每天在自己内心的斗争中努力挣扎着工作。这种痛苦很是折磨了我很长一段时间。那换一份更感兴趣更认可的工作呢?我才毕业这么点时间就辞职参加社招,这会不会难度很大啊,我内心犯着嘀咕。就这样,我日复一日地挣扎着,直到半年过去。

保持学习与成长

很幸运的是,我深知自己在计算机基础知识上的薄弱与匮乏,因此在工作之后,我仍然保持着之前养成的学习习惯。在刚工作的半年里,我主要学习了以下几门课程/资源:MIT 6.NULL,MHRD游戏,Stanford CS144和MIT 6.S081。值得一提的是,我时常因学习这些课程而感到兴奋不已,以至于常常debug到很晚;这样的兴奋与白天工作的无聊形成鲜明对比,这更坚定了我对自己工作方向的选择。关于这些资源的学习经验和心得,我基本都写成了对应的文章,这里再简单总结一下。

MIT 6.NULL, 我的文章在此。这是一门非常好的课程,主要介绍了众多编程时常用、好用的工具。我尤其推荐刚入计算机领域不久的同学学习一下,也许能够大大提高自己的工作效率。对我来说帮助最大的应该是对dotfile的管理和自动化部署、以及zsh的一些好用的插件。

MHRD游戏, 我的文章在此。这是我的好朋友 @comzyh推荐我的游戏。这位好友在计算机系统、体系结构、计算机网络等众多方面都有非常深的造诣,是我认识的同龄人中工程能力最强的之一,尤其在广度方面堪称一骑绝尘。当时我俩是室友,有天我就请教他有没有计算机体系结构的学习心得可以分享给我。他告诉我说他也不知道自己怎么学的,“不过我觉得了解整个计算机体系结构的历史发展对于学习是有很大帮助的”,于是那天晚上搬了个小板凳在我房间讲了一晚上的计算机体系结构发展史Orz 第二天早上,他突然想起来说还有MHRD这款游戏,“我觉得这款游戏对于学习计算机硬件的原理有很大帮助,你去玩玩看吧”。于是我就人生头一次地下载了传说中的steam,并购买了游戏玩了起来。应该说这是一款非常优秀的游戏,真正做到了寓教于乐,不仅让我一定程度上地了解了计算机的硬件搭建的原理,更让我很大程度上克服了对硬件的恐惧。我现在还在期待着这款游戏传说中的续作。

Stanford CS144, 我的文章在此。计算机网络对我来说可以说是最难学的计算机基础课程了,我完全是因为我没找到一门特别完善的公开课程资源。美国的诸多名校似乎都没有开放该课程的课堂录像,而这对我的学习来说常常是很重要的。当时找来找去,只找到了CS144这门课程是有授课视频的。然而这些授课视频是当时Stanford提供的MOOC版本,我(以及很多同学)看了之后都觉得不太适应。好在这门课现在开放的课程作业(Lab)质量还是相当不错的,是让手写一个简易版的TCP。在学习这门课程之前,我对TCP的理解基本上停留在对中文教材上相关内容的背诵阶段,什么三次握手四次挥手之类的,说实在的与八股文无异;但在完成这门课的课程作业的过程中,我实实在在地较深入地理解了为什么TCP协议要这样设计、以及许多TCP协议中的细节。对TCP我已不再感到恐惧和头疼。

MIT 6.S081, 我的文章在此。这门课程对我来说是有一些特殊意义的,因为这是我和我的小伙伴们第一次尝试组队刷课。毫无疑问,6.S081的作业设计是我上过的课程最好的之一,它们让我具体而又切实地去了解了操作系统的实现原理。以进程、线程和上下文切换(context switch)为例,以前问我相关的问题,我虽然也能够侃侃而谈,但那更多的是停留在一些中文教材上的概念,或者是一些面经中的所谓“答案”;换言之,我能说出一些相关概念,但我从未真正地“理解”它们。而6.S081的其中一次作业则是让我们去结合已有的代码,实现简单的线程/协程切换。这次作业涉及到的代码不过100多行,却让我忍不住感叹“原来一个最简的线程/协程实现竟然可以这么简单,原来上下文切换是这么一回事”。在学这门课之前,我面试的时候还是略有些害怕操作系统相关的问题的,因为我知道一旦深挖了,就会暴露出我基础不扎实的事实;但是在学了6.S081之后,我甚至会颇有些期待面试官问相关的问题。这就是一门好的课程给我带来的改变,6.S081绝对是我毕业以来让我收获最多的一门课程。也为两位老教授一把年纪了还亲自操刀写lab的代码而感到敬仰,希望自己到60岁的时候也还能像他们一样。

《恰同学少年》, 我的文章在此。等一下,这不是介绍计算机学习的文章吗,怎么突然出现一部红色电视剧?这是因为我想把我各方面的成长的经历都分享出来,而这部电视剧,是我毕业以来成长的非常重要的一部分,它很大程度上影响了我对职业生涯的考虑与选择,也很大程度上影响了我的人生观与价值观,当之无愧的是我毕业以来对我影响最大的“学习资源”。这部电视剧从毛泽东同志决定考取湖南第一师范讲起,讲述了毛教员、蔡和森、杨开慧、向警予、陶斯咏等一批志同道合的优秀青年的学习生活故事。除了几位主角的学习生活,还讲述了当时在一师的一批优秀教师(如杨昌济、孔昭绶等)立志教育救国,“欲栽大木柱长天”的宏伟志向与相应行动。看着恰同学少年、风华正茂、书生意气、挥斥方遒的他们,看着志同道合不懈追求真理的他们,看着以改造社会为己任、立志救国的他们,我忍不住开始思考,自己想要过一个什么样的人生呢?现在的道路能让我过上这样的人生吗?继续这样走下去,未来回首往事的时候,我是否能够不因自己虚度年华而悔恨呢?我应该做些什么,才能过上我想要的人生呢?我又能为这个国家和社会做些什么呢?

决定辞职

乔布斯多年前在斯坦福的毕业典礼上有一场 很著名的演讲,那场演讲里几乎所有内容我都非常赞同,不过可惜的是我在两三个月前才偶然看到那场演讲:如果我能早看到一些,或许对我做人生选择会有更大的帮助。在那场演讲中,乔布斯说了这样一段话:

如果你把每一天都当作是生命的最后一天

If you live each day as if it was your last

总有一天,你会是对的

someday you’ll most certainly be right

每天早晨我都对着镜子问自己

I have looked in the mirror every morning and ask myself

“如果今天是我生命中的最后一天

“If today was the last day of my life

我还会做我今天要做的这些事吗?”

would I want to do what I am about to do today?”

如果连续很多天答案都是“不”

And whenever the answer has been “No” for too many days in a row

我就知道我需要改变了

I know I need to change something

我没有乔布斯那么夸张,但我也偶尔会想,如果我的寿命只剩下十年了,我还会继续做今天要做的这些事吗?

而自工作以来,连续很多很多天,我的答案都是不。

我知道我需要改变了。

我不能长时间一直做我觉得没意思也没意义的事情。

我很痛苦。

下决定的那天晚上,我一个人从公司里出来。饥饿迫使我去便利店买了份饭团,于是拿着它一边走着一边啃。虽然已是夜晚,陆家嘴仍然是灯火通明。我背着书包,左手拿着饭团,右手拿着水壶,看着这灯红酒绿的繁华都市,看着这人来人往的热闹街头,看着这些鳞次栉比的摩登大厦,明明它们近在咫尺,我却觉得离它们很远。

因为我知道,我不属于这里。

第二天下午,我找领导,提了离职。印象比较深的是有位领导问我说“才毕业半年就辞职,不担心之后找工作的难度吗?”我说,如果一个方向,我不想继续做它十年,那我就不想做了。挽留无果后,公司非常干净利落地给我办完了离职手续,当天晚上就送我离开了公司。

体验授课生活

离职之后,适逢当时有个去大学里授课的机会。熟悉我的人都知道,我是一直很想有讲课的机会的,所以我毫不犹豫地就抓住了这个授课的机会。关于这次经历的心得,我整理在了 这篇文章里,而连带着其他在教育方面的探索则整理成了 这篇文章。这次特殊又有趣的授课经历带给我的思考和收获是我之前想象不到的,除了让自己进一步地扎实了自己的机器学习基础(因为要给学生们讲懂),更是带给了自己许多技术与知识以外的思考。

在最后一堂课上,我非常“中二”地当堂背了一段《少年中国说》。我说:“各位同学,往小了说,机器学习、深度学习还有很多问题没有解决,我们不知道怎么解决,也许没人知道怎么解决;往大了说,我们这个国家、这个社会、甚至是这个世界,都还有很多问题没有解决,我们更加不知道怎么解决,现在谁都不知道该怎么解决,也许你们未来就有人会去解决其中的一部分。少年强则国强,去创造属于你们自己的未来吧。”

下课之后,我一个人在校园里静静地散着步,虽然那时候还是寒冬腊月,但那天的阳光十分温暖和煦,晒得人暖洋洋的。

虽然这次机会没给我带来多少金钱与物质方面的回报,但看到学生们求知的眼神、看到他们对我努力讲课的认可、看到他们在听了我的讲解之后由困惑到明晰的表情,我感到欣喜而又快乐。我更加明确了自己未来的道路,我知道,做(在我看来)对社会产生贡献的事业,这就是我想做的事情。

关于未来的思考

在找工作之前,我纠结着之后做什么行业,还是在国内读个博士。于是我联系了几位实验室毕业的优秀师兄聊了聊职业规划,这里也感谢各位师兄百忙之中抽出时间来回答我的问题。最触动我的是一位师兄说的话:“其实读博也好工作也罢,最重要的还是要做自己觉得有意思有意义的事情。”那段时间我也找了些国内读博的机会,不过最终还是选择了继续工作。

社招之路

终于讲到自己的社招经历了。到了课程快要讲完的时候,我就开始联系各家公司开始面试。去之前秋招不同,这次我几乎没怎么投递公司,而是从之前挖我的公司中挑出了自己有一定兴趣的公司来面试。最终我面的公司部门有:字节跳动抖音数据策略团队、Pony.AI小马智行、快手、DolphinDB智臾科技、还有几家量化公司(比较好奇他们在同样问题上的解决方案)。由于量化公司的保密性,这里就不再介绍了,而是主要讲讲其他四家公司的面试经验和心得。

字节跳动抖音

最早大概是2020年的11月,HR在领英上勾搭我,由于我一直忙着其他的事情,就没有开始他们的面试流程,直到2021年1月多的时候,才继续跟进他们的流程。我面试的团队是一个叫“数据策略”的团队,主要是利用机器学习、优化方法等方式来实现更高的用户增长。例如春节瓜分红包,这么多红包的金钱,该如何分配才能最大化有效的用户增长呢,这个项目就是他们部门所负责的事情。这个团队原先是全部在北京的,后来决定在上海也组建一个团队,故联系我面试。

其实面试也没有很多可以说的事情。几场面试都有按照流程地让我做了几道LeetCode题,题目也都是一些非常经典的题,没记错的话应该都是top 100 liked这个标签下的题目。面对这种难度的题,我自然都是很快地写出bug-free的代码。除此以外以外,还问了我之前做的一些项目,尤其是正式工作的项目。大家还比较喜欢问的就是所谓的“场景题”,即描述一个他们在真实场景下碰到的问题,问我的解决方案会是什么。比较有趣的是,有两场面试的面试官,我在最后的提问环节问他们那几个场景问题,他们实际在生产中是怎么解决的,他们说基本上和我描述的差不多XD 还有一件很有趣的事情是大家基本都没问我机器学习、深度学习的基础知识的问题,可能是看我有这方面的授课经历,就觉得没必要再多问了。印象比较深的是几位面试官都看上去有些疲惫,可能是因为春节降临,他们的活很多压力很大吧。

这个部门让我感觉最有诚意的地方是,HR和leader问我之后想做的方向,我说我开发和算法都想做一些,能不能都做,他们一开始说不行,只能选择一个方向做,这当然是很合理的;但是最后他们开会讨论并且给我发offer的时候,却告诉我说如果过去的话,算法与开发的工作我自己任选,二者的比例也自己调控,这个结果还是让我颇有些意外的。最后也给我开了一个相当高的薪水和评级。不过由于种种原因,我选择拒了offer。

Pony.AI小马智行

与抖音类似,小马也是在上海新建了一个office,团队在慢慢地扩招,HR也是很早在领英上联系的我,我拖到了1月多才回复。印象比较深的是HR一开始电话联系我的时候,问我:“你是不是以前打竞赛的啊?”我说:“不存在的,我从没参加过竞赛。”她说:“那你是不是刷了很多题啊?”我说:“也还好吧,没有特别多。”心里还想着她为啥会问这样的问题。结果她接着问:“那你之前是怎么进的Google啊?”我差点笑出了声,原来是因为这个原因才问我这几个问题。于是我回她:“因为我强啊。”(笑)

后来就安排我开始面试。这次面试的开发岗位,所以除了做题和项目以外,基本上全都是与系统开发相关的面试问题。后面还安排了一轮系统设计面。感谢自己学了MIT 6.S081,面试全程没碰到什么自己觉得有难度的问题。还有比较有趣的是给我的定级一涨再涨,可能是觉得我的面试表现还不错吧>_< 最后一轮面试是小马的CTO楼天城、也即传说中的楼教主来面我。我虽非竞赛选手,但也听说过不少楼教主的事迹。我原以为楼教主会是那种“恃才傲物”的天才形象,没想到他本人相当地接地气,剪了个平头戴着副黑框眼镜,面试刚开始的时候有一搭没一搭的和我聊一些生活上的事情。之后出了一道数学与编程结合的题目,然后是几道场景题。最后我们一起聊了聊对无人驾驶这个行业现状与未来的看法。没经过他本人同意,这些内容就不分享了。

不过由于种种原因,我选择拒了offer。

快手MMU

德兵师兄是我们实验室传说级的博士师兄,早在我还在校园的时候就听了不少他的传说,听说他现在在快手MMU担任多模态智能创作负责人,于是就联系了他投递了一波。面试流程与抖音相仿,基本就是算法题+项目+场景题,估计也是因为我的履历,没怎么问我机器学习基础的题。我同样表示了同时做算法与开发的想法,他们也很爽快地同意了。最后一轮面试是德兵师兄面我,除了技术以外,我们也聊了很多对未来行业发展和技术发展的看法。德兵师兄的确名副其实,做事情非常地扎实,是少见的对技术细节研究得非常透彻的团队负责人。最后快手开了一个非常有诚意的offer。不过我因为种种原因,还是选择了另外的offer。但是德兵师兄真的是一位非常靠谱的leader,如果是对CV/NLP/多模态/智能创作感兴趣的同学,可以联系他zhangdebing@kuaishou.com

DolphinDB智臾科技

要说自己为什么会投递甚至最后还选择了这么一家对很多人来说颇有些“名不见经传”的公司,还得从较早的故事开始讲起。

我很幸运地有一些好朋友,我们常常会交流讨论学习、技术、学术以及生活等方方面面的问题。其中有一位好友xj在腾讯做数据库,他和我的交流尤其得多。印象最深的一次是2020年6月的时候他在做mysql的并发写入优化。这个问题是说mysql现在在高性能服务器的存储设备下,常常没法跑满带宽,这很大一部分原因是软件跟不上,mysql里的锁太多了,xj当时就在做锁的一些优化。我记得他做了一两天后,在群里说:“啊好难啊,我搞定不了了,要炸了。”我们刚开始安慰他,发一些萌萌的安慰人的表情,这时候他又补了一句“但是好有意思啊”Orz 类似的学术和工程上的交流几乎每天都会发生。在这样的影响下,我渐渐也开始对数据库领域有了一些好奇与了解。

自离职之后,我就开始思考下一步要做什么方向。高频交易自然是不适合的;纯机器学习的算法岗也不合适,我还是更想做开发。但是究竟做哪一块的开发呢?我拿出一张纸,在上面开始写下自己期望的东西。我期望从工作中获得什么呢?我写下了以下几点:

  1. 从事的行业和工作内容要有意义,对社会有贡献。最好是那种能帮助国家突破卡脖子技术的领域。
  2. 从事的工作内容要有意思,我得喜欢,最好甚至是能够让我感到激动人心的(exciting)。这样的话我就希望其中的工程味道比较重。另一方面,我个人喜欢做自己能够解释的工作、能够知晓从里到外每一个细节的工作,也就是说,当一个系统表现效果好(work)的时候,我能很清楚其中的原因,并且能够清晰地做实验来验证;当一个系统表现效果不好(不work)的时候,我也能用实验和逻辑来解释清楚原因,找到问题所在,并且去解决问题,让系统性能提升。这样的话,深度学习相关的工作就不适合我了。
  3. 如果是一个我之前比较陌生的领域,最好是有熟识的靠谱的人能够带我。
  4. 我希望这份工作能给我带来持久的、我所期望的成长。而这个领域最好是我觉得自己能够再做至少十年的领域。
  5. 我希望是不要求加班的工作岗位,也即能够做到工作与生活的平衡(work-life balance)。因为对于公司老板来说,他们对你的期望几乎永远是为公司盈利,而你自己的期望可能是成长,这两者有些时候是矛盾的;当这二者矛盾的时候,我希望至少还能有自己的工作之外的时间来成长。我绝不希望自己停下成长的步伐。
  6. 收入较高,能够支持我赡养没有缴纳五险一金保障的父母。这点比较容易,只要我还是继续当程序员的话,是肯定可以满足这点要求的。

有点讽刺的是,这些需求,尤其是第5点,在国内的工作环境下是很难达到的。那如果一定要划掉一个,我会划掉哪个呢?我想了很久,觉得还是要具体情况具体分析。

那么有哪个领域可以满足我的这些需求呢?我突然想到我那位在腾讯工作的好友xj。于是我写下了数据库这三个字。的确,从事数据库方面的研发,是可以满足前四点和第六点的。于是我当时就给xj发了条消息,我说,要不你去哪儿工作,我就去哪儿工作吧,以后就跟着你混了。

当时他还在腾讯工作,我说那我就去你的组吧。虽然这需要我划掉上面六点中的第五点,但是有些时候只能做一些牺牲了。结果事情变化得很快,没多久他就收到了阿里云的邀请。这下我可就犯难了,这倒不是完全因为阿里的工作环境和氛围可能不适合我,还因为我知道我的简历去投阿里云数据库组的社招,很可能连表刷(简历筛选)都过不了。我找了在阿里的同学帮我问了一下,果然和我说他们leader觉得工作经验两年以下的社招不考虑。而且纵使过了,阿里的工作生活平衡是比腾讯还要再糟糕不少的,这让我心里不禁犯了嘀咕。我和他说,容我再考虑考虑。

好在世事时常柳暗花明又一村。xj在读研之前曾经在一家叫DolphinDB的时序数据库公司实习了相当长的一段时间。我们之前也聊起过多次他在那边实习时做的许多有意思的工作。2021年年初的时候,DolphinDB邀请xj回去工作,xj就和我说了这件事情。我当时就回他:“他们还招人吗?你去的话,我也去,认真的。”随即就把我的简历发给了xj。

于是DolphinDB很快就开始联系我。HR很好奇我的经历(我还没碰到过一个不好奇的),问了问我这么选择的理由,我解释清楚之后,他们很快就安排好了和我的面试流程,邀请我去office进行线下的面试。

虽然我因为xj的缘故,毫不犹豫地就想选择这家公司作为我职业生涯的下一站,但坦白说,此时我对这家公司还是不甚了解,无论是氛围文化也好、还是技术背景也罢、还是最重要之一的是领导的水平与风格,我都不清楚,所以这几轮面试,不仅是他们对我的考察,也是我对DolphinDB的考察。或者说,实际上,面试本身就是候选人与面试官的双向选择。对我来说,面试的体验是极大程度上影响我对于一家公司的观感的,技术好性格好的面试官会让我好感大增,反过来水平一般或是态度傲慢或是显得异常疲惫的面试官(或者是兼而有之Orz)则会让我打退堂鼓。有句话说“面试官是一家公司招人的门面”,这句话绝没有夸张的成分。所以很自然的,我会把在DolphinDB的面试看作是一个很好的提前了解潜在的未来同事的机会。

DolphinDB的面试官们也果然没有让我失望。首先是HR与我聊了聊过去的经历与未来的规划。HR非常专业,也没有任何要彰显自己存在感的意思。接下来是研发主管的面试。主管从一些小问题切入,深入地与我探讨了系统编程相关的问题。之后主管问我对数据库有没有什么了解,我说我只有对levelDB有一定的了解,于是主管和我深入探讨了在时序数据库场景下应用LSMT时需要注意的问题和可优化的地方。非常有意思的是,我和xj加入公司后,到目前为止做的最大最重要的一个项目物联网(Internet of Things, IoT)存储引擎,正是基于LSMT设计和开发的 XD

最后一轮面试,是公司的创始人、CEO兼CTO 周小华 Xiaohua/Davis Zhou 来面试我。之前每次和xj谈到Davis的时候,他都会赞不绝口,我也因此很好奇他究竟是怎么样的人。Davis本硕在上海交大就读,博士在美国Drexel University就读,博士期间 发了很多顶级的信息检索、数据挖掘的文章。博士毕业后,他在美国多家金融公司先后就职,后于2016年回国与另外两位创始人一起创立 DolphinDB智臾科技。DolphinDB是一款完全自研、拥有完全自主产权的国产分布式时序数据库,拥有强大的计算引擎和存储引擎,支持每秒百万级数据写入,在万亿级规模下支持数据毫秒级查询和秒级计算分析(突然有种广告的感觉是怎么回事,总之欢迎感兴趣的同学了解)。

Davis进了面试的房间,和我握了个手,就开始了与我的面试交流。说是面试,但与其说是他面试我,更有点像是他在和我交流公司的现状以及未来发展,询问我对公司的期望,看看我们双方是否能够满足对方的期望。Davis首先问我对于公司的期望是什么。这是一个正中我下怀的问题,我立刻将前面提到的那几点需求描述了一通。这里要说明的是,我以前认为在面试中这样诚实地说出自己的期望是不合适的,因为有可能这家公司不符合这样的期望,最后就不发offer了;但我后来觉得既然我不缺offer,不如说得直接一些,也免得去了公司之后发现期望与现实落差太大而离职,那样对双方的代价还要大得多。总之,我很诚实地和Davis说了我的全部期望。Davis很高兴地告诉我说他认为DolphinDB可以满足这几点的:

  1. 从事的行业和工作内容要有意义,对社会有贡献:时序数据库在物联网和金融领域均有广泛的应用。而这其中,金融中的银行等机构与物联网中制造业、研究院、水电煤国企等都是对国家非常重要的战略性机构。前些年的技术卡脖子,让国家政府意识到不能再这样下去,因此提出了去IOE的口号,希望在这些机构都能使用具有完全自主知识产权的基础软件(如数据库)。而这些领域应用高性能的时序数据库,还能够实现一些以前很难实现的功能,如核电站的实时异常检测等,这些功能的实现对于国家与社会显然是具有重要意义的。而且,在我国物联网领域,由于我国的人口规模,很多场景面临的难题是现在市面上没有一款软件能够解决的,所以在DolphinDB做开发,不仅仅是“去IOE”(指脱离对IBM, Oracle, EMC三大基础软件外企的依赖),更是要去做到一些之前没有产品能做到事情,去突破最前沿的数据库难题。
  2. 从事的工作内容要有意思,我得喜欢,工程味道要重而且能够从内到外理解每一个细节:数据库可以说是完美的符合这些要求,而在技术方面,分布式时序数据库显然也是站在最前沿的。
  3. 最好是有熟识的靠谱的人能够带我:xj就可以带我。
  4. 我希望这份工作能给我带来持久的、我所期望的成长:数据库这类基础架构的开发能力磨练的是最核心的开发能力,自然可以带来持久的成长。
  5. 我希望能够做到工作与生活的平衡:公司工作时间965,而且公司认为这样的制度是更能帮助员工的产出的,因为员工需要锻炼身体来保证强健的体魄,需要下班之后自己学习额外的知识来获得技术上的成长,需要陪伴家人等等。
  6. 收入较高,能够保障我的父母:这个自不必多说。

于是Davis和我一起讨论了未来公司的一些规划,以及如果我来的话愿意做哪方面的工作。令我非常惊讶的是,Davis是公司的CEO&CTO,有非常多的事情在忙,但从和他的交流中,我能很明显感觉到他还在一线上写非常多的代码,甚至仍然是代码库的最主要的贡献者。而且不夸张地说,问到DolphinDB的几乎所有实现的细节问题,他都能了如指掌地回答出来。这真是非常令人印象深刻!因为在国内的大环境下,技术管理层不写代码的情况实在是太普遍了。当然我不是想说孰优孰劣,只是我更想和写代码的CTO甚至是写代码的CEO一起工作。除了扎实和雄厚的技术功底以外,Davis对市场的判断和对技术架构的视野(vision)也让我叹为观止。写这篇文章的时候,距离我的面试已经过去了快5个月,而这段时间市场的发展基本上与当时Davis和我描述的一致。在面试最后,Davis当场就给我发了offer,这反而让我有些紧张,我说:“你不需要再考察一下我的技术能力吗?我们都没怎么聊具体的技术。”Davis笑了下,说道:“你的履历以及xj对你的评价就足够说明你的能力了,况且刚刚和你的交流中我也能感受到你各方面的能力。虽然你之前不是做数据库的,但我对你在这边的发展没有任何顾虑。”

之前曾经看过一篇沈向洋的文章,其中他提到了Jim Gray对他说的关于程序员生涯的一段话。Jim Gray说(此为意译):“程序员的生涯是由一个个项目组成的,这些项目的好坏就定义了你的职业生涯的成功与否。所以,要选择好每一个项目,做好每一个项目。“我又想起来我在Google的Host和我说的一段话,他说:”人在选择工作的时候,有的时候很难看清一家公司一个部门一个行业的未来发展。所以,选公司,不如选人,至少一个熟悉的靠谱的人,是可以看清的。”DolphinDB就是我此次选择的项目,Davis和xj就是我此次选择的人。

于是最后,我就和xj一起加入了DolphinDB,工作至今。从我加入公司到现在也差不多有三个月了。这三个月里,我们的主要工作是一起开发了基于LSMT(Log Structured Merge Tree)的新的IoT存储引擎,新的存储引擎主要是针对物联网的大规模场景的,典型的场景可能是有千万台设备(如千万个电表)每秒都会产生一条数据,在支撑这个级别的数据量写入的前提下,新的存储引擎同时要支持毫秒级的点查(即查询某设备在某段时间内的数据),以及要高效地支持其他类型的数据查询与数据分析系统(OLAP负载)。这个项目非常有挑战性,但同时也非常得有意思,我在这中间学到了很多。除此以外,我也负责了一部分计算引擎的开发工作,做了一些计算函数的实现与查询优化,这些同样是很有意思也很锻炼工程能力的项目。经过这三个月的工作,我很确信,这就是我想做的工作。除了工作内容以外,公司的同事也非常的nice又好相处,技术主管和CEO Davis可以说是我处过的最好的领导之一。总之,这里的工作完美地符合了我的期望。

社招总结

整个社招过程中,对我帮助最大的当属MIT的6.S081课程,它让我的操作系统基础比以往任何时候都要扎实,而这样扎实的“地基”,使得我在面对几乎所有来自面试官在这个方向上的“狂风”都可以自如应对、岿然不动。我很庆幸自己即使在工作之后也没有停下学习和成长的脚步,也庆幸自己之前对自己基础不扎实的清晰认识与这段时间对基础的认真打磨。

除此以外,还有一个体会颇深的是面试中的“气场”。面试中个人应该保持一个什么样的气场呢?我想这个问题见仁见智。就我个人而言,我的气场往往是“自信而求是,扎实而敏锐”,所谓自信,是说自己对自己所做的项目、所学的知识具有应有的自信,绝不畏畏缩缩唯唯诺诺;所谓求是,是说自己知道的就是知道的,不知道就是不知道,绝不不懂装懂;所谓扎实,是说自己对自己的项目与所学的知识了解到应该了解的每个细节,而不是夸夸其谈金玉其外败絮其中;所谓敏锐,是说自己能够灵活应用自己的知识来解决新的问题,能够利用自己解决的问题来系统地分析问题、找到其中的关键点。当然了,这样的气场的背后是我多年时间勤勤恳恳的学习,这是无可替代的。而据我观察,我这样的气场配合上我的能力,就可以大大提升面试官对我的评价,我想这也是为什么有些公司面试我的时候,对我的评级会一涨再涨了。当然了,我仍然深知我现在的知识与能力在真理面前仍然不值一提,我仍然有数不尽的东西需要去学习;但我也知道,我的能力已算不错,我已具备较扎实的基础和有一定体系的解决问题的能力。

最后一个体会就是,看到一些公司给自己开出的非常高的offer,我深知这很大程度上是因为自己幸运地选择了一个在风口上的行业。前方还有无数的知识等待我去学习、还有无数有趣有意义的问题等待我去解决,绝不能骄傲自大、固步自封。前进、前进,永不止步!

总结

工作半年就辞职找工作,这本是一件非常致命的事情,因为工作经验不多,但又没了校招应届生的身份,同时一些公司可能还会担忧我是不是自身存在什么问题。但是回过头看,我无比庆幸自己当初辞职的决定,这也许是我做过的最正确的决定之一。

同时要感谢这个过程中一直支持和帮助我的各位朋友与师长。大家总是能在我需要的时候给我以支持。

也希望我的这些经历和思考能对一部分读者有所启发。

最后以乔布斯演讲中的一段话作为本文的结束:

工作将占据你生命中很大的一部分

Your work is going to fill a large part of your life

只有相信自己所做的是伟大的工作,你才能获得快乐

and the only way to be truly satisfied is to do what you believe is great work

而伟大的工作就源自你的爱

And the only way to do great work is to love what you do

如果你还没有找到

If you haven’t found it yet

继续寻找,不要止步

Keep looking and don’t settle

全心全意地寻找

As with all matters of the heart

当你遇到它时,你就会明白

You’ll know when you find it

就像那些美好的爱情

And like any great relationship

随着岁月的流逝,愈加醇美

it just gets better and better as the years roll on

所以,继续寻找,绝不止步!

So keep looking, don’t settle

Avatar
Jinming Hu
Software Engineer

My research interests include machine learning, data mining, deep learning, computer vision, operating system, and database.