自 19 年开源到现在,Nebula Graph 社区出现了一群有想法、有实力的用户,将他们的优雅留在 Nebula Graph 的代码中,他们是 nStar,是 Nebula 社区不可或缺的一部分。
—— Nebula 社区
一开始认识秋梵是 Nebula 社区的大叶老师介绍的,他说有个妹纸想要做 ngbatis 的贡献,可以介绍给我。恰逢那时候文档写注释上线,作为一个低成本提交 PR 的形式,便安利给了秋梵。她非常快地响应了信息,并提交了第一个语句注释 PR。原以为,她只是提个 PR 来熟悉下流程,没想到她陆陆续续用提交了快 50 条 nGQL 查询语句注释,而整个过程中,她还完成了 ngbatis 的代码贡献——这点她并没有和我提及。
所以,当要采访这么低调、持续贡献的 contributor,非常担心她过往的痕迹除了 GitHub PR 之外没有其他的参考资料。非常难得是,秋梵不只是一个写代码的工程师,更是一个会抽空将相关心得用文字记录下来的人。
在开始她的专访之前,先附上她的个人博客:knqiufan - 博客园 以及,她的 GitHub:knqiufan (knqiufan) · GitHub
在她的博客封面图中,我们开始了解下本期的嘉宾——秋梵。
Q:秋梵,和社区的小伙伴们打个招呼吧(^^)
秋梵:我是秋梵,今年 28 岁,是少有的因为兴趣爱好所以跨专业成为一名开发的女生。自诩是技术的拥护者,开源爱好者,终身学习者。喜欢看书,喜欢旅游,喜欢二次元。当下因为不满自己目前的技术水平,以及想对现存的个人困境寻求解决方案和一些答案,所以正在努力的进行内外兼修(内修心理、外修技术)。最近值得炫耀的事情,是在工作 996 的情况下努力拿到了 Nebula 社区的 Contributor,和成功 6 个月减肥 20 斤。
Q:看你介绍感觉你是一个很意志力和执行力的人,尤其是减肥这件事。减肥作为一个公认难有成效的事情,作为旁观者见到了不少 Nebula 核心研发们只有胖起来的,没有减肥成功。不知道秋梵有啥减肥心得分享下呢?
秋梵:哈哈减肥是一件很考验毅力的事情呢。我觉得想要减肥成功有具备两个因素,第一是要有足够的信念和动力去支撑,第二就是大家都懂的管住嘴迈开腿。
首先是关于动力,因为减肥是一件很反人性的事情,所以如果没有足够的动力就很难去坚持。我开始减肥的契机很简单,就是在某一天发现自己在自然的状态下都能看见双下巴,内心危机感暴增,从此立志一定要减肥,这份强烈的危机感就是我的动力。所以大家要找到能让自己狠狠下定决心的理由,产生强大的动力。
其次关于管住嘴迈开腿,其实管住嘴并不是指少吃或者不吃,绝食意义的减肥是不可取的。在减肥期间一定要吃,但要有选择的吃。高热量高碳水高油脂的食物要少吃,比如油炸食品、油乎乎的外卖、馒头包子等。米饭还是要吃点的,碳水要少摄入,但不能不摄入。多吃蔬菜水果、膳食纤维(玉米、山药、麦片等)、高蛋白(鸡蛋、海鲜、牛肉、减肥明星鸡胸肉等)的食物,且重点在于每种要素均衡摄入。有的人会觉得这些东西又不好吃又容易饿,其实容易饿就是吃太少啦,而这些东西不用去水煮,当家常菜做就很好吃。减肥不要饿着委屈自己。
最后是迈开腿,那就是要锻炼了。减肥反人性的地方就在于锻炼这件事情很难坚持,要不断的去“折磨”自己的身体从而达到大量消耗热量的目的。我减肥的那六个月,几乎每周有四到五次让自己累到汗浸湿了衣服。哈哈说起来很夸张但是也不用被这种运动量震惊,因为人的身体是有适应性的。锻炼难坚持,难就难在开头的那段时间,也就是让身体去适应的那段时间难。一旦度过了适应期,身体适应了这种节奏和强度,就很好坚持了。就如现在的我,每天锻炼半小时并不痛苦,享受它就好了。
最后,戒掉小零食。
以上是一些我的心得体会,希望可以对想要减肥的胖友们有所帮助。
Q:翻看你个人博客的时候,发现了你是个资深二次元,想问下,你平时爱好看什么类型的番?以及如果一个人心情不好,你会推荐他看什么番呢?
秋梵:我的喜好类型有很多呢,首推有脑洞、有剧情、需要带脑子去看的番哈哈。在前期留下几个悬念让人总有一种想继续探究的欲望,勾着这股好奇心看到最后,到解开谜底的时候恍然大悟:原来如此!忍不住直呼精彩,这种感觉真的很爽。也喜欢带有励志色彩的番,每次看到主人公为了梦想和目标努力追求的样子会给到自己很多力量。还喜欢互相救赎的番,可以收获很多感动。想要推荐的番太多啦,比如《某科学的超电磁炮》、《夏日重现》、《GOSICK》、《命运石之门》、《转生王女与天才千金的魔法革命》等等,看它们的时候会不自觉被故事内容吸引,从而忘记不开心的事情。另外在不同的番里会出现的各种不同个性的美少女们,这也会让人心情舒畅,谁不喜欢长的好看又优秀的少女们呢,这也经常是我疗愈自己很好的一个方式(笑)。
在积累中成长
Q:你的博客偏学习记录,看了下你的 NebulaGraph 学习记录,里面有一个脑图(下图),这是你学习新知识的一贯习惯么?
秋梵:是的,是习惯之一。针对不同类型的知识会有不同方式。对概念的学习上我会使用脑图,脑图是梳理知识脉络很好的一个方式,自己手动去整理一下会更加清楚每个概念之间的联系。对于框架或工具的使用学习,在看教程的基础上,我会去动手写一些简单的 Demo 测试,感受一下实际使用输入输出情况,了解完具体使用,再去探究一些原理。
日常工作中,如果遇到了一些奇怪的 bug 和疑难杂症,在先解决了问题之后,我会再继续去追问一下为什么,毕竟错误也是很好的学习机会呢。当然,最后就是总结输出成文章了,这样可以让自己对相关知识的印象更深刻、理解更透彻,之后也更好回顾。整理成文章输出是一个很花时间费脑子的事情,我也没有做的很好,所以会一直往这方面努力。
Q:之前有个小伙伴说学习产品最好的方式是阅读源码,看你最近也在学习 ngbatis 的源码,可能一开始就来读源码有一点难度,秋梵你是如何解决这个问题的呢?
秋梵:其实我个人是不建议一上来就读源码的。我比较倾向于的一个学习方式是,当接触到一个新工具首先去了解它有哪些功能,该如何使用,在对这些内容有所了解之后,再带着问题对内部的运行原理进行深挖了解。因为阅读源码的难处可能就在于不知道如何下手调试,不知道如何开始,所以可以以问题为导向,有目的性的学习,会减少一些源码阅读上的迷茫感。
拿我阅读 ngbatis 的源码举例,在了解了 ngbatis 的使用方法之后,深入多问几个为什么,列出一些问题:
-
ngbatis 在 Spring Boot 启动时就进行了装载和初始化工作,那么是如何进行装载的?
-
初始化的时候做了哪些工作?
-
yml 里的配置参数是在什么地方被读取的?
-
ngbatis 是如何做 xml 文件与 Dao 的映射的?
-
……等等
可以提出很多问题,带着这些问题去思考去动手 Debug。一开始 Debug 的时候也不用太抠细节,先掌握大致的设计思路。读源码的时候如果陷入细节里就会忘记一开始的目标是什么,越看越懵。了解整个框架的运行的流程和设计思路之后,再继续针对某个点深入挖掘。就是所谓的从整体到细节,再从细节到整体。最后阅读源码还需要一些耐心和专注力,静下心来,不要放弃努力思考,一遍 Debug 不懂就再来一次。当自己对某个过程恍然大悟的时候,这种掌握了原理的成就感真的让人心情很好呢。
Q:纵观你的博客,从 C 到 C++ 到 Java 都有涉猎,不知道你有没有学习下近年比较火的 Rust 呢?
秋梵:很巧啊,Rust 在我朋友的推荐下了解过一点,简单写过几行。Rust 感觉整个风格比较偏 C / C++,但是因为支持类型推导,所以编写起来又像是在写脚本语言,还挺有意思的。
我只浅尝了一下,只了解了一些语法和函数的使用,还没有继续深入学习,接下来如果有时间的话可以继续研究看看。另外我对 Go 语言也挺感兴趣的,还没有尝试着玩过,有时间也可以安排一下。
其实我本科不是计算机相关专业,学的是海洋测绘工程,因为大三的时候感受到了程序的神奇之处,所以便一心想入开发岗,毕业之后直接跨专业做了程序员。所以我学习的初衷就是因为兴趣,我喜欢技术,也热爱技术。现在因为工作需要算是一名全栈工程师了,工作的时候写前端可能更多一点,工作之余主打学习后端相关内容。
我觉得现在的社会是一个数字社会,数字融入我们的生活无处不在,开发者们就是构建这个数字世界的基石,所以程序这个东西真的很棒、很神奇,它似乎什么都能做,去学习相关知识去挖掘内在原理本质上就是在探索世界;开发者们也很厉害、很伟大,因为他们创造了什么都有可能实现的数字世界,我很高兴能成为其中的一员。
哈哈,突然有些感慨,有些偏题了。当然了,努力学习还有一个很现实的理由就是为了可以找到一个好工作。
在开源中成长
Q:一开始认识你,是大叶老师(关于大叶老师:见其专访)说有个小伙伴可能要做 ngbatis 相关的贡献,后来安利了你参加我们的文档写注释活动。好奇地问下你为什么想要参加开源项目呢?
秋梵:开源是件很棒的事情,在一个开放的网络平台上一群拥有相同兴趣爱好的人组在一起自由学习和交流,可以接触到各种各样不同的想法不同的设计,思想的碰撞产生火花,这想想都让人心动啊。
“开源项目不是一个人的独酌,而是一群人的狂欢。”我想对技术有追求的人来说,都抵挡不住开源的魅力吧。在开源项目中磨练自己的技术,在每次的 PR 后被合并的成就感和被认同感,在对知识的不断交流中感受新的思路,还能加入社区认识很多很棒的志同道合的朋友!所以在此我要特别感谢大叶老师,带领之前一直想加入开源,但一直都是一个人孤独的修行,也不知道如何加入的我打开开源世界的大门。成为一名开源项目的贡献者,这是对我自身技术能力的认可,这也是一件很令人骄傲的事情呢。
Q:参加 ngbatis 之类的开源项目协作,觉得参加这种多人协作咋样?和公司里和其他同事合作有啥区别呢?
秋梵:很棒呀,就像我之前说的,一群拥有相同兴趣爱好的人组在一起自由学习和交流,可以接触到各种各样不同的想法不同的设计,思想的碰撞产生火花,一起共同成长共同进步。这让我想起当初还在上大学时,和不同专业的同学们组队参加软件大赛的时候,大家为了完成一个创意目标聚在一起热火朝天的交流讨论,一起写代码到深夜,一起享受获奖的喜悦。
团队的力量会比个人的力量更强大,我认为多人协作项目的优势之一就在于,是集体的智慧。就我自己的感受而言,这与公司里其他同事的合作是有很大区别的。因为是工作嘛,所以很多时候同事们其实也没有什么太多自己的想法,交流的最多是需求,技术层面够用就好,完成任务就行。在项目层面也没有那么自由,按照自己的兴趣爱好来写肯定是不行的,要根据具体要求在具体时限内想办法完成任务,也不能因为不想做就不做,时间上也没有那么自由。当然这只是我自己的工作环境感受,我相信也会有充满热情和想法,热爱技术的公司,希望自己以后有机会也可以加入这样的公司吧哈哈。
Q:如果有其他的小伙伴想参与开源当中,你觉得对新手而言比较友好的 tips 有哪些呢?
秋梵:我参加开源的时间还没有很长,所以就以我自己这段时间的经历给新手朋友们一些 tips:
-
要仔细查看开源库中已有的文档文件,包括
README.MD
、CONTRIBUTING.MD
等,可以让自己更清楚该项目的整体情况,包括代码变更指南、如何贡献代码等,会很有帮助。 -
多看看 issue,尝试去解决和修复其中提出的 bug,是参与开源很好的入口。
-
多参与社区或 issue 中的讨论,对代码的理解和思维的扩展有很大帮助。
-
积极参与社区发起的一些活动,也是可以快速参与到开源当中的很好路径。
-
推荐一个对新手很有帮助的开源百科网站:开源指北
提升幸福度的工具们
Q:按照惯例,可以分享 2 个你觉得能提高你的开发效率的工具么?
秋梵:
- Snipaste,官网:https://www.snipaste.com/
首先就要推荐我一直都在使用,也推荐过很多人使用,用过了都说好的截图贴图小工具 Snipaste。我在工作的时候经常需要翻看不同地方的代码或者查看不同软件窗口的内容,频繁的切换窗口界面有的时候真的挺麻烦的,Snipaste 很好的解决了我这方面的烦恼,设置一个快捷键就可以随时随地截图贴图置顶,不同界面显示的内容放一起展示,很方便做对比和查看。Snipaste 是我见过最好用的贴图工具。它除了贴图、旋转、缩放、半透明等常规功能,还有截图记录回放、贴图窗口编辑,甚至连 GIF 动图都能贴的特性功能。感兴趣的同学可以去玩一下。
- Typora,官网:https://typora.io/
Typora 也是我一直在使用,且很喜欢的一款 Markdown 编辑器,简洁易用,足够轻量;可以自定义主题模式,让我们能使用自己喜欢的主题模式;还支持导出文本为 PDF、图片、Word等形式等等优点。最主要的是 Typora 能实时预览,只要足够熟悉 Markdown 语法,用 Typora 写文档或写文章真的是一件让人非常舒服的事情。在开发过程中如果遇到了什么问题,学习到了什么新知识,立马打开 Typora 就可以很快的记录下来,形成一篇知识记录或文章。非常方便,强烈推荐。
多面,是社区用户的常态,正如 Nebula 支持一点多 tag 一样。希望大家能在一期期的专访中,了解社区中那些鲜活的人。如果你有什么想要了解的社区用户,记得留言^^
如果你也想开启开源之旅,不妨从一个简单的文档注释 PR 开始 (///▽///)