郑东阳:参与开源是件很酷 😎 的事情 | nStar 专访

自 19 年开源到现在,Nebula Graph 社区出现了一群有想法、有实力的用户,将他们的优雅留在 Nebula Graph 的代码中,他们是 nStar,是 Nebula 社区不可或缺的一部分。
—— Nebula 社区

在之前的专访中,曾经采访过 PingCAP 的实习生——江一舟,让我们见识到“当代”在校大学生的风采。在开源之夏活动中,同样的我们也认识了一名优秀的在校生,和江一舟直接参与公司业务开发不同,他换了一种相对而言比较“学术”的方式,以“课题”的方式进行他的编程实践。

于是,我问他:东阳,来做一期嘉宾,来聊聊在校生是如何研究学术之余,实践编程技术,可好?

于是乎,本文诞生了:同所有的科班出身的开发者一样,在学校中东阳学习基础知识——计组、数据结构、计网,做一些常规的哈夫曼(没想到那么多年过去了还在手写哈夫曼树)树的编写工作。不过又有所不同,东阳同他实验室的小伙伴们也会关注国内的开发者社区,例如:华为开发者社区,来 pick 他们感兴趣的议题提升实践能力,也在这个过程中参与到“开源”这件事当中。

让我影响深刻的是,他多次提到:“在开源的世界中留下代码,这是一件很酷 😎 的事情”。那么来认识下,这个做了很酷事情的在校生——东阳吧。

This is Dongyang Zheng

清蒸(下面简称:Q):向 Nebula 社区得小伙伴介绍下自己吧

郑东阳(下面简称:Z):Hi there. 我是郑东阳,目前在广州上学,现在是研究生一年级,计算机科学与技术专业。日常在实验室做的主要是 Java 后端开发工作,爱好篮球和游泳。

在这个暑假偶然得知 开源之夏 的活动便提交了申请,有幸中选 Nebula Graph 社区的项目 “图数据库 Nebula Graph 支持 JDBC 协议” ,负责项目的开发任务。目前项目进展顺利,应该会在不久的将来上线和大家见面,到时候大家若发现 bug 请轻喷哈哈哈哈哈~

Q:作为一个在校生,东阳平时一般通过什么方式来提升自己的编程技术呢?

Z:主要还是在实践中学习和提高吧:以前学过的知识和技术如果没有在实践中应用,那么很快便会忘了。对于在日常开发中需要用到、但我还没掌握的技术,首先我会在论坛、博客找到这方面的一些小 Demo,参考着它们写下自己的代码然后调试跑通,在这个过程下收藏下对我有帮助的文章以便日后回顾;对于开发中遇到的问题,在解决完之后我会把问题的描述和解决方法记录起来,这样一来以后再遇到就能快速解决,没事翻翻看的话也能加深自己的印象。

大学生实践这件事

Q:东阳,现在高校的计算机学院都设置了什么专业课程,搭配了什么实践课程?

Z:本科阶段的专业课程主要是 408(研究生全国统考科目代码)的计算机组成原理操作系统计算机网络数据结构与算法数据库原理编译原理人工智能导论。这些是我觉得比较重要的,前 5 门是基础,不管对于考研还是就业都很重要,最后一门人工智能导论会让你了解这个方向经典的一些模型和算法,至于深不深入就看个人了。

实践课程主要是前面四科搭配的实验课,比如说数据结构的实验课会让你完成算法的设计与实现(手写哈夫曼树、解决 N皇后问题等),学完这门课做完实验就可以投入 LeetCode 的怀抱了……至于研究生阶段,我们学院是只有研一上课,学的是数理逻辑、计算理论、高级数据库、人工智能原理这些很头大的课,而且大多是"翻转课堂"的形式:老师讲一些,剩下的每个人或者每个小组上台分享……

Q:一般你和实验室的同学们是如何做提升实操能力呢?

Z:实践编程技术我觉得最好还是自己做项目,像我日常在实验室做的后端开发就是比较好的实践。做一个具体的项目是应用并检验你所学的机会,解决遇到的 bug 就是学习新知识的过程。如果能参与一个开源的项目及更好了,提 PR 之后别人给你的 review 就是很好发现自己不足的机会,在这次对接 JDBC 协议项目中我的导师 @laura.ding 的给我的 review 就让我意识到平时不太在意的问题:注释格式写得不规范、代码写得不够优雅、对架构考虑得不够充分就动手实现等等;另外,能在开源的世界中留下自己的代码本身也是一件很 cool​:sunglasses: 的事情。

Q:你是如何找寻实践项目,以及会倾向找哪些类型的项目吗?

Z:我们实验室里的小伙伴都很优秀,这次开源之夏的项目就是 kk 告诉我的,他这次也中选了项目,而且做得很棒。

不过像开源之夏这样的活动也不是时常都有,此外还有一些别的渠道:如果是开发者的话可以看看华为的开发者社区,新系统 HarmonyOS 想要可持续发展肯定要有开发者的贡献,官方就会举办活动设置奖励吸引开发者参与;如果是 Machine Learninger 还可以参加华为云或者biendata的比赛,实验室里就有小伙伴在参加这些比赛并且拿到了奖金。

从上面参加实践项目的途径来看,我们比较倾向于正规、靠谱、主办方有点名气(如果有设置奖励就更好了)的活动或者比赛,这是项目质量的保证,而且会有比较完善的活动支持:比如答疑、讨论这些,这也是像开源之夏之类的活动吸引我们的点。

自己在 Github 上找项目提 PR 也可以,不过最好去那些比较活跃的社区(比如 Nebula Graph 哈哈哈哈),这样你在做的过程中也好有个讨论的地方,写的代码也有人给你 review;如果是那些很多 Issue、PR 都没人理的高冷社区就要好好考虑了,很可能你辛辛苦苦提个 PR 别人都不理你……

还有一些关于心态和自我认知的:如果你遇到了一个很好的项目机会,那么请勇敢地去尝试。不要觉得自己不够优秀不够有能力去参与到其中,我在刚刚接触开源之夏的项目是觉得自己还没有过参与开源项目的经验,连要不要申请项目都很犹豫(后来在实验室同学的鼓励下提交了项目申请书)。每一个技术大牛都是从小菜鸟过来的,抓住每一个能让自己开始成长的机会。

种一棵树最好的时间是十年前,其次是现在,去年入学的时候我对游泳还一窍不通,后来跟着 kk 去游泳馆学,到现在自由泳也能一次游到对面了;此前没有参与过开源项目,这个暑假参与的这个项目目前做得也挺顺利。有人报名了考试但最后也没去考场,也有人参加了比赛最后都没提交代码,只要行动起来就超越了很多人,共勉!

聊聊开源的经历

Q:之前有参与过开源项目,协作开发一个产品吗?感觉如何?

Z:之前没有过,都是在实验室做老师的项目。开源之夏这次的项目是我第一次开源经历,想到自己写的代码以后能合并到 repo,被其他开发者使用就感觉很 cool​:sunglasses:

Q:最后,来安利几个你觉得好用的软件。

Z:那就推荐 3 个常用的软件吧:

  • ditto:一款剪切板管理工具,我觉得这个名字起得很贴切。平时写代码 (Ctrl C + Ctrl V) 很有用
  • MouseInc:一款小巧好用的全局鼠标手势软件,可以自定义右键手势操作,浏览器关闭标签页画个"C"、窗口最小化画一划就可以
  • fnsync:手机电脑同步通知、文本;文件管理和文件传输功能(再也不用发给微信的文件传输助手了)