开源之夏梅开二度的周子轶,他的实习、找项目之旅

这期 nStar 的专访对象是连续两届翻了 NebulaGraph 牌,和 NebulaGraph 一起完成开源之夏项目的周子轶。去年的他,是一个接口工,完成 NebulaGrpah 和 DataX 的集成,为大家提供了图数据库的实时数据同步功能。而今年的他,依旧是做着和数据相关的事项,这次他把目光瞄准了社区最受欢迎的数据导入工具——NebulaGraph Exchange,为它提供批量删除能力。

而在定专访主题的过程中,NebulaGraph 的运营人员发现他是边忙实习工作,边完成开源之夏的项目任务。而他本人对应届生实习也颇有心得。于是乎,除了常规的开源理解之外的,围绕实习开源之夏项目投递 的学生可复制路径专访就此展开。

在开始找项目,找实习之前,我们先看看周子轶眼中的自己:

那个名叫周子轶的人

nebula:正文开始之前,来介绍下自己,让大家了解下你。

子轶:哈喽,大家好,我是周子轶,目前就读于新加坡国立大学计算机专业,之前在某互联网大厂实习,很荣幸两次参加 NebulaGraph 的开源之夏项目,收获颇多。

去年还在校园的我对开源比较懵懂,对 git 使用还很笨拙,但是觉得能够参加开源是很酷的一件事。在浏览众多新颖有趣的社区和项目后,偶然发现图数据库 NebulaGraph 社区,感觉很有意思。因为之前从来没有接触过图数据库,所以,在好奇心的驱使下详细了解了图数据库的应用和基本原理,感觉非常有意思,最后果断 all in 了项目计划书,最终在与导师的沟通指导下顺利结项。

在那次开源之夏,也有幸到 NebulaGraph 社区的公司 vesoft 参观,对公司的氛围和整体环境非常感兴趣,所以萌生了今年继续参加开源之夏,为 NebulaGraph 社区贡献代码。所以,今年又一次报名参加了 NebulaGraph 的开源之夏项目,在实习之后再参加开源工作,感觉整体流程和开发规范上有了很大的提升,整体的开发进度也较为顺利地推进。非常感谢能和 NebulaGraph 二次结缘,期待未来能继续为社区贡献代码,参加开源。

找项目?找实习,我有可复制的心得可以和你分享

nebula:我们循序渐进,先从你熟悉的开源之夏讲起吧。作为两届开源之夏选手,在项目申请这块你有什么心得分享么?

子轶:目前来看,其实开源之夏整体上还挺卷的,可能是受到现在就业形势的影响。我也和同事聊过这个事情,开源之夏经常同一个项目有多人申请。(笑)去年我的 DataX 项目也有 5、6 个人申请。

这种情况下,导师面对这么多申请人的话,他其实主要是根据你的简历,或者是你对这个项目的理解来选人。因此,你对这个项目理解是最关键,怎么体现你的理解?你可以把申请书,好好写一写,和老师好好沟通下

除了项目申请之外,我也想讲讲后期的项目开发的注意事项。

有一点很关键,项目前期一定要做好时间安排。当然我是个反面教材,在这开源之夏项目因为是在实习期,整个节奏没太把控好。除了实习之外,学校这边也有零零碎碎的琐事。这导致我和导师安祺约定好的一些事情没有及时地完成。无论什么时候,和人交流就是打造自己的口碑。准时、守信是很重要的,虽然这个过程我和导师安祺也致歉,并解释了缘由,但是这种事情能避免尽量避免。合理的安排时间,遵守和导师的约定是非常重要的。这会让导师觉得你是个守约、可靠的人。

为什么提到守约这种契约精神呢?因为开源不像去公司实习,天然有一种约束。做开源之夏项目的话,一般和导师都是线上联系,毕竟远程协作,很有可能项目进度突然就失控了,导致后期做着做着就不想做了。因此,你一定要和导师沟通清楚整个项目,你打算怎么做,什么时间节点交付什么东西。尽早和导师沟通清楚你这边的开发进度,好让他安排后期的任务。

回到开源之夏项目申请这个话题,你可以根据你已有的开发经验,再选择同它相关的项目,申请被通过的概率也高点。

最后,回归兴趣,你要对这个技术栈或者是社区有兴趣,申请书认真好好地写。

nebula:你之前在实习,现在应届生找实习是不是挺难的?

子轶:感觉上,今年好像觉得比去年要好一些,整体环境或者是开放岗位要多一些,去年确实不太好找。这次找实习,我一共经历了 20 场面试。大厂的话,除了字节跳动应该都面过,像是拼多多、蚂蚁金服这种基本上都面了。当然,有些可能面得不是很好,面挂了。

找实习过程中,当时主要是逛北邮人论坛,和 BOSS 直聘。还有一个不能忽视的就是,学长和学姐的内推、朋友圈。在 3 月之前集中投递一波简历,4 月开始面试,5、6 月基本上实习就定下来了。如果大家要找实习的话,可以 2、3 月就开始看起来,这样差不多赶得上春招实习。

nebula:在校大学生的话,可能平时在校园做的项目会比较少,你在实习过程中有什么实习心得可以和其他学生分享下的么?

子轶:其实,我觉得实习和做开源、开源之夏项目有一点很像。以我为例,在想到具体方案之前,个人会觉得这个项目(产品)逻辑会特别很复杂。一旦开始着手去调研,或者是看看相关的源码,再分析一下需求,比如说面向产品的需求,你可以把这个产品需求跟产品经理和 mentor(实习的导师)对清楚,就大概能知道它的一个可实践的技术方案是什么。

像是开源之夏的话,学生一开始是需要提交申请书的。如果你足够认真去准备的话,通过 Google / 百度 / Bing 其实能搜到一些资料,再基于这些资料可以初步拟定一个方案。但即便没有这些方案,你和项目的导师聊聊你对这个 Project 的理解,也是不错的方式。 这点和实习中同 mentor 沟通需求有点相似,你要同 mentor 谈你的需求理解,在此基础上,mentor 会纠正理解或者是延伸下,让实习生了解更多的技术细节。

可能大家在学校的时候,实际开发经验不是很足,没关系的,很多开发任务落实到实际开发的时候,相对来说并没有那么复杂,平时我们也可以从一些简单的项目入手,培养下实操能力。

其实,实习也好,开源之夏做项目也好,整个过程有点像垒积木,你一点一点地开发,开发出来一部分,再自测一下,自测完之后看看和预期符不符合。等开发完所有模块之后,做一个整体的通路测试,这种开发流程还是比较既定的。

nebula:除了平时可以做做小项目增加实操技能之外,面试的时候,你准备过哪些事情可以和大家分享下的呢?

子轶:比较常规的就是刷面经,一般来说我会面向技术栈去刷个对应面经 。比如说,这家公司我发现用 C++ 技术栈比较多的,那我就去刷一些 C++ 相关的题。而比较通用的算法题,就会看看哪些是常考的点。此外,计算机基础知识或者是计算机面试的八股文,都是需要去了解下的。但是面试八股文内容比较多,假如你面试准备的时间比较少,就抓最重要的东西,看下哪些内容出现得比较高频。此外,就是因人而异的简历准备了。只要是你简历里面涉及到的项目以及技术点,都得深入去了解、学习下,看看网上的博客或者是视频教程,巩固下技术点,这样即便实习面试的时候,面试官问得深入点,也能应答上。因为常见的面试流程中,面试官一般会让你介绍下自己做的项目,再问一些这个项目中他比较感兴趣,或者是关心的点,可能会再深入地问些技术细节。

开源之夏,让我体会到了极客精神

nebula:其实你已经在实习了,照理来说,实习应该挺忙的,为什么要去做开源之夏的项目?

子轶:怎么说呢,我感觉在做开源之夏之前,我的编程或者说编程概念或者是什么,其实是不太行或者不太合格。我觉得真正地做完开源之夏项目之后,我的能力得到了一个特别大的提升,也很增强自信。因为,其实做项目的第一步就是把环境搭起来,这一点(环境搭建)其实就可以劝退很多人。而当你要去做一个东西的时候,第一点也是不能避免的便是你得会用这个东西,在用之前的话,一套软件运行环境是必须的,有这么一套环境才能做后续的开发。

其实我在本科期间也尝试做过一些项目,好多时候就是不太会搭建项目,接着就是做着做着就放弃了。去年也有这样一个项目,我当时也是在搭环境的时候踩了很多坑。但是最终看博客资料,读一些日志,以及和我的导师去讨论,逐渐把环节搭起来,实现第一步之后,后续就感觉不是那么困难了。

此外,看源码也让我受益良多。像是一些比较大型的开源项目,我要直接给他做一个做开源贡献的话,我会觉得很难,它太复杂了。像去年那个题目 nebula 支持 DataX,因为没有现成的实现方案,当时一点思路也没有。但是和导师沟通之后,去阅读 DataX 集成相关的代码,通过代码了解 DataX 集成其他项目的实现逻辑,以及相关的代码实现,挖掘当中的共同点,最终还是把项目做完了。这个经验,也影响了我现在一些开发习惯,如果遇到不会的项目,可以去读读相关的源码,加上自己的理解去完成自己的项目

所以,今年实习忙之余还去参加这个开源之夏,也是因为觉得开源之夏的话也是一个更好的拓展,因为公司的项目相对来说可能是实习生在打杂。除了这点,我作实习生做的这个东西相对来说比较私密(公司内部系统),面试或者其他交流的话,大家未必能看得到。但是开源之夏的项目的话就不同了,我做的项目里面的代码、实现逻辑大家都能看到,可以进一步地交流。

最后一点是,我觉得做开源之夏的项目,让我感受到了一种极客精神,非常有意思。

nebula:你说到做项目,先遇到的难点是环境搭建。所以,(狗头)你这次又来申请 NebulaGraph 的开源之夏项目是因为环境去年已经搭好了么?

子轶:(微笑)一部分原因是,另外一部分原因是我的确觉得 NebulaGraph 社区很好,产品在大厂里也很有口碑。大家都是基于 NebulaGraph 做二次开发,或者是借鉴一些思路。我跟同学也聊过,如果是图数据库领域的话,NebulaGraph 做的很好,生态也很完善,社区也很不错。(此处应该安排上广告费)

nebula:**看样子你还是很满意 NebulaGraph 和你的合作。去年是你第一次做开源之夏项目,可能首次实践可能会难一点,但是你过了那道坎之后,现在已经有一定的实践基础了。你觉得今年做的项目和去年比,会不会更加简单点?

子轶:感觉今年的项目实现起来要比去年要简单,因为有去年的基础。首先,最明显的一点是我有环境,直接就可以用。而代码开发这块的话,今年在实习以及去年的开发经验,让我读代码的能力进一步加强,所以读下相关的代码实现,开发起来也算是得心应手。在读代码的过程中,我也发现其实我很喜欢开源这个模式,开放的代码让我可以不断地深挖,了解作者的实现思路,以及他是如何编写代码的。

这些开源作者 / 公司为什么会做开源这件事?

nebula:(狗头)你觉得 NebulaGraph 的导师如何?

子轶:去年 DataX 项目是由志鹏老师带的,他实力很强,人也很耐心(我那时候还是个萌新),包括当时线下去见他,感觉他整个人都很有吸引力,在实际开发中指导也很到位。今年的导师是安祺老师,对整个 Exchange 的项目整体的发展和把控非常清晰,正是因为如此,她可以在现有的任务基础上延伸出来其他的开发事项,让我可以更加了解 Exchange 这个项目,做一些相关的项目优化。

nebula:**感觉和 NebulaGraph 的导师配合还挺好的样子。其实 NebulaGraph 也是一款开源项目,你在开源之夏的任务开发过程中也会接触相关的开源事项,可能是基本的 git 操作熟悉,或者是提 pr 的礼仪。你觉得今年和去年,对“开源”这个词,理解有什么不同么?

子轶:去年的理解可能略显浅薄,因为那时候我没有实习经历,算是一个纯小白做和开源相关的事情。当时整个感觉就是:大家都好酷。而当时我们专业厉害的同学,也经常在 GitHub 上写代码。我看过一些国内外知名开源项目,当时就感觉大家都在自愿维护开源项目,而国内有些公司也会把项目代码开源出来,非常诧异:为什么这些开源作者 / 公司会把项目开源出来?尤其是那时候我看到阿里云的一个项目,觉得这个项目实现起来也不容易,开源出来干嘛?甚至会觉得,开源出来是不是会有点亏了。

随着参加开源之夏项目,我接触多了开源项目,慢慢地我开始理解这些项目开源的原因。也许不一定正确,我觉得这些选择开源的公司,它们其实是在维护一个生态,当把那些开源项目建立起来,再逐渐去完善生态的话,可以吸引更多的人去参与进来,不断地去迭代这个社区或者是完善这个项目。按照现在的话,就是这个产品会更加健壮。

丰富生态、迭代产品、一起建设开源社区,这是我去年的理解。

今年的理解,因为进现在公司实习之后,我发现其实公司用到了很多开源组件。遇到什么开发任务,有现成的开源解决方案,大家也会直接拿来用,或者是进行部分二开工作。现在我觉得,开源是一种基石,我们站在之前人的肩膀上,可以走得更远

同去年的理解不同,现在我觉得开源不只是丰富、完善某个单一产品,而是开源它可以帮助整个相关行业去进步。对某个行业不是很了解、熟悉的话,通过勘察代码就可以快速入门这个行业,了解现有的行业技术,它是处于什么水平。

以上,周子轶的专访接近尾声,下面进入“Talk is cheap, Show you code”环节:


多面,是社区用户的常态,希望大家能在一期期的专访中,了解社区中那些鲜活的人。如果你有什么想要了解的社区用户,记得留言^^