3

毕业之后,开源给了我第一份工作

 2 years ago
source link: https://my.oschina.net/u/4209276/blog/5306849
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

毕业之后,开源给了我第一份工作 - Zilliz的个人空间 - OSCHINA - 中文开源技术交流社区

开源对你来说,意味着什么?

从武汉大学软件工程研究生毕业后,杨璇的第一份工作就从事开源软件的开发。除了为开源向量数据库 Milvus 做贡献外,她还负责维护 PyMilvus 项目,业余时间还是上海 GDG (谷歌开发者社区)成员及资深志愿者。从用户到开发者、维护者,身份的转变改变了她对开源的看法,而多个开源社区的辐合影响更是让她有了广阔的视角。

在第六届中国开源年会分论坛-开源女性论坛上,杨璇分享了她的心路历程。让我们一起来看看吧!

完整视频请戳 👉 https://www.bilibili.com/video/BV1Jb4y187Mp

去年 7 月,我加入 Zilliz,开始参与开源向量数据库 Milvus 的研发。今年年初,我还正式接手了 PyMilvus 项目的维护工作。「开源」可以说是我这一年多来工作的主题。 在学生时代,我曾有过一些使用开源软件的经验。当时,我的角色是一个开源软件的用户;而如今,随着我的角色由用户转为开发者和维护者,我对开源的看法也发生了巨大的改变。接下来,我将和大家分享一些我的经验与思考。

开源 = 免费?

我第一个接触的开源软件是 Linux 系统,当时使用的是 Ubuntu 16.04 桌面版,没什么特别的原因,师兄说你需要一个 Linux 系统做开发,我就随大流选择了一个。当时我还没有意识到,我在 Ubuntu 上使用的大部分软件都是开源的。我只看到了「免费」这一个点,因此我当时对 Ubuntu 唯一的看法是:嗯,免费就行。后来我需要用一些研发工具,由于 JetBrains 公司会给学生免费认证,因此我当时所有的研发工具都是用的是他们公司的产品,比如 IDEA、PyCharm、CLion、GoLand。

学生时代的我,把开源和免费画上了等号,再加上「便宜没好货的」粗暴想法,我的内心其实有这样一个观念:免费虽好,不如白嫖付费的好,付费的产品肯定比免费的要好。

在这一年多来的工作过程中,我发现自己之前的观点是一个巨大的偏见。首先,开源从来就不仅仅意味着免费。使用 Ubuntu 作为开发系统后,我接触到了 Git、Vim、Make、CMake 等优秀的开源软件,我逐渐意识到:它们虽然是免费的,但是它们非常好用。 可以说,Linux 系统这个媒介为我的代码生涯开了扇窗,让开源的光照了进来。

开源意味着一切!

工作之后,要说什么开源软件影响我最深,那一定是 Vim 和 CMake。

从 IDE 移到 Vim 的过程,痛并快乐着。 让我放弃 IDE 的原因很简单:我需要同时开发几个 Python 项目,而 PyCharm 实在太占内存资源了,64G 内存的电脑都经不起内存怪兽的吞噬,我需要一个更轻量的代码编辑器。这时候 Vim 出现在我的眼里。 Vim 的学习曲线非常陡峭。学习使用传统软件的套路并不适用于 Vim:有图形界面的软件,至少我可以点点看看,实在有不明白的使用方法 Google 一下就能学到;没有图形界面的,如 Git,一篇文章就足以入门其基本操作。然而,Vim 的学习曲线至少有三个难点:一是习惯 Vim 的基本操作;二是使用研发必备的 Vim 的插件;三是设置自己习惯的快捷键。除了这三点,还有一个隐含的学习点:命令行工具。 使用鼠标点击一下就能编译运行调试的操作已经成了过去,我必须牢记每种语言的编译运行和调试方式,使用命令行来完成进行调试,这又让我接触到了更多的开源工具。

学习 Vim 感触最深的是,搜索引擎搜索出来的 Vim 教学,远不如 Vim 官方入门文档 vimtutor。如果你的机器上安装了 Vim, 在命令行可以直接敲出 vimtutor 来激活这个入门文档。强烈建议正在使用 Vim 而没有使用过官方 vimtutor 的人过一遍这个文档,一定会让你有所收获。

那么这里引出了两个问题:

  • 当你想要学习一个开源软件时,你看开源软件的官方文档吗?
  • 学习命令行工具的使用方法时,你会使用 man 查看官方文档还是会在搜索引擎上搜索?

我来先给出我的答案,我会看开源软件的官方文档,使用 man 命令查看命令行工具的使用方法。 我更希望学生时代的我给出的答案也能是这个,但可惜的是,我在学生时代很少阅读官方文档,在学习过程中重度依赖搜索引擎。 为什么我认为阅读开源软件的官方文档是更好的学习方式?因为,除了非常流行的开源软件,其他的开源项目几乎只有官方文档资源是最新的。CMake 的例子就是典型,CMake 官方的版本已经演进到了 3.21,而搜索引擎上搜索出来大量的入门教学竟然是 3.12 以前的…… 😄

无论是什么样的开源评判标准,文档一定是被纳入其中的考核对象。诚然,比较流行的的开源项目也会有配套的书籍在售,这些书籍也是不错的选择。

说回 Vim,学会 Vim 的基本操作之后,接下来就是选择和学习使用插件了。

Vim 的插件数不胜数,且都是开源的,在挑选 Vim 插件时我就感受到了什么是开源世界的参差。当带上目的去挑选插件的时候,优秀的开源插件就能轻松的脱颖而出。比如我希望这些插件有这样几个特点:活跃度高、使用 Vim8 的异步 IO、文档详细丰富、支持多语言等。按照这些条件筛选一遍,虽然能打的 Vim 插件就不剩几个了,但是这几个插件正是我目前开发最依赖的插件。除了经久不衰的大型插件,我还关注了一些比较新的插件,有一个文件搜索跳转插件 LeaderF 非常好用,我试用了之后就立马抛弃了老牌插件 ctrlP,奔向了 LeaderF。

在搜寻好用的 Vim 插件过程中,我还发现了文本搜索工具 grep 的替代品 Ripgrep,这算是一个小惊喜。当然,我也遇到了自己很喜欢但是用起来有点不舒服的插件,果断 fork 过来自己私人订制了一下。

讲到这里,其实很多人就能看出来 Vim 对我的影响有多大了。它把我领入了 Vim 这个开源圈子里,让我深刻认识到这样一个事实:Vim = Vim + Plugin。一个软件的开源并不只是软件源代码本身被开放,它还包括了这个软件辐射到的所有开放的内容。

在探索 Vim 的社区时,我不仅发现了很多优秀的插件,也发现了很多疏于维护而慢慢不再有人使用的插件,这激发了我推广 Vim 的使命感。机缘巧合,我在公司内部做了一个 Vim 使用方法的分享,成功安利了很多同事开始使用 Vim。不过就像我前面所说的,Vim 的学习曲线过于陡峭,有一些人坚持不到感受 Vim 真正的魅力的程度,也有一些人坚持下来了。但是就算是从 Vim 转为其他 IDE 开发的人,他们也会在那个 IDE 装上 Vim 插件,模拟 Vim 的操作,也算是推广成功了。

另一个对我影响深刻的开源软件是 CMake,这就跟我的工作有了一定的关系。

来到公司之后,第一个月的新人培训中,我发现向量数据库 Milvus 的编译代码难以阅读、难以维护、编译速度缓慢并且还存在明显的重复编译问题,第三方库文件下载缓慢且没有缓存。

于是,我提出来,“我想要优化这些编译”。

当时我的 leader 翔宇说,干。

说干就干,我首先就从学习最新的 CMake 语法开始。

没错,当时的我并不会 CMake,但这丝毫没有阻挡我尝试解决这个问题的决心。一个月后,我把项目的编译优化完毕,优化的结果是大幅缩短 CI 运行时间,从之前的 CPU 30分钟、GPU 50 分钟的 CI 平均运行时间缩减到了 CPU 10 分钟之内、GPU 15 分钟之内。第三方库的管理也变成了可插拔的方式,可维护性可阅读性大大增强。

讲到这里可能有人会想,这不就是你的工作吗?

是的,但由于这是我在公司做的第一件工作,而且与我之后的工作内容差别很大,因此在我内心留下了很深刻的印象:你看到了开源软件的缺陷,就可以尝试去解决它,即便你最开始不知道如何去解决它。

这也对我之后维护 PyMilvus 项目提供了不少启发。

开源,与人建立联系

自从接手了 PyMilvus 项目的维护工作,我第一次拥有了一个开源项目的决策权。这时候我才发现让一个项目永葆生命力有多难。 PyMilvus 是 Milvus 这个开源向量数据库的 Python SDK,是开发者想要通过 Python 语言来使用 Milvus 时会使用到的包。目前在 GitHub 上有 300 多颗星,拥有 49 个贡献者, 被 139 个开源项目使用。

成为了项目的维护者之后,我不单是从开发者视角来看待这个项目,我开始关心与这个项目相关的一切开源方面的内容,比如文档的完整性、代码风格和质量、发布流程、开发流程、问题回答等等。

循着自己之前使用开源软件的经验,我把文档放在了第一位。虽然 PyMilvus 的用户参考文档非常全面,但是缺乏开发者文档,很多项目约定的准则都得我亲自去和开发者沟通。

为了吸引更多的人来贡献代码,我还尝试着把 PyMilvus 的 Issue 分类,将解决起来不超过 30 分钟的 Issue 聚合在一起,标记为「good first issues」,吸引熟悉 Python 但不熟悉 PyMilvus 源码的人来贡献。这么做的效果确实非常不错,简单易上手的 Issue 非常吸引贡献者,尤其是初次贡献者。PyMilvus 最近参加的 Hacktoberfest 活动,我遇到了很多新面孔给项目做贡献。他们都非常的礼貌,愿意遵循这个开源项目的规则。和他们交流时,我发现他们都拥有着超强的开源项目贡献意愿,有时回复延时,他们也会耐心等待,或者去我们的 slack 上寻求 review 帮助。

我遇到一个哥们,中秋前提了一个 PR,以我的标准他这个 PR 几乎得打回去重做,因此这个 PR 就暂时搁置,我打算专门找个时间和他探讨如何解决这个问题。没想到这一搁置,就到了国庆结束。他在这期间一直没有放弃和我们研发团队沟通,时不时就会冒头戳一下,询问这个 PR 的进展和优化方向。他坚持不懈的态度让我们印象深刻,虽然最后这个 PR 还是被关闭了,但由于他和我们建立了密切联系,他依旧对我们项目抱有很高的积极性。

项目维护过程中,大部分贡献者都像刚才这个哥们一样礼貌、遵循规则。但是我也遇到有贡献者的行为则令人哭笑不得。近期就碰到了这么一个贡献者,他贡献了一个 266 个文件修改共 29000 多行 diff 的 PR。先不论修改是否正确,这么多文件改动的一个 PR,几乎不可能被合进项目中。

以开源为主题的工作环境,促使我参与了其他一些项目的贡献,比如 uber-go/guide,CockroachDB 等。有的项目,维护者的反馈非常的实时,我贡献体验就非常好。从我自身的体验来讲,贡献代码时我并不在意项目的规则繁琐与否,我会在意贡献时维护者的反馈态度和速度。如果我得到了快速且积极的反馈,即使我这个 PR 需要有很大的改动,我也会充满干劲地去做。而如果我的 PR 和 Issue 是石沉大海,我会迅速对这个社区失去兴趣。总体来说,与贡献者无延迟的沟通就是最有效的联系!

项目之外……

除了日常工作,我还把自己对开源的兴趣扩展到工作之外的各种活动。在开源之夏,我作为 mentor 来带领一位学生来参与开源项目的贡献;在 Hactoberfest,我通过宣讲来鼓励大家贡献代码;我还是 GDG(谷歌开发者社区)上海核心志愿者成员,帮助 GDG 举办各种大大小小的活动。

在我眼中,并不是只有贡献代码才算走进了开源世界。

开源之夏是中科院软件所专为学生办的活动,该活动为高校学生准备了丰富的开源工程项目,帮助学生的同时也帮助开源社区扩大影响力。Milvus 社区今年与开源之夏进行了合作,我很荣幸地帮助一名学生参与了 Milvus 社区的代码贡献。除了在技术上答疑之外,我还成功地给学生心中种下开源的种子。他在结项报告中说,“导师在在未来发展上也给了我很多很好的建设,让我对开源领域有了浓厚的兴趣,并愿意在里面努力做出一些贡献和工作...”

Hactorberfest 是每年十月都会举办的开源十月盛典活动,鼓励大家在十月份给开源的项目做贡献。这个项目在国外的影响力非常大,但是在国内不太火。为了激发国内开发者的贡献热情,Milvus 社区专门利用一期 Office Hour,面向国内开发者举办了一场如何参加 Hactorberfest 的直播活动,我在此次直播中详细介绍了 Milvus 社区贡献的规则。

我个人还是一名 GDG(Google developer group)志愿者,GDG 基于地域创建,方便这个城市的人能够参加 GDG 举办的丰富的线下活动。GDG 吸引我的原因是,我发现活动的组织方全部都是志愿者,这是一个完全自愿贡献的团体。活动的经费都是志愿者自己拉的赞助商,所有的组织方在整个过程中没有任何的金钱回报。大家都是在用爱推动 Google 社区的发展。

今年 GDG 组织的线下活动中,从主持人到嘉宾接待,从 PPT 到公众号文章撰写,从摄影到直播团队,从设计到活动策划,全部都是有技术背景的志愿者。分享嘉宾也是无偿分享。今年十一月底还会有 GDG 上海每年最盛大的活动 GDG DevFest,如果有朋友参加这场盛会,说不定能在志愿者中发现我的身影。

我希望自己的所作所为能够帮助到一些人,让没有接触过开源的人感受到开源的魅力,让开源社区的人获得更多的知识,把开源的理念传播得更远,让越来越多的人投身开源事业。谢谢大家!


Zilliz 以重新定义数据科学为愿景,致力于打造一家全球领先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的隐藏价值。

Zilliz 构建了 Milvus 向量数据库,以加快下一代数据平台的发展。Milvus 数据库是 LF AI & Data 基金会的毕业项目,能够管理大量非结构化数据集,在新药发现、推荐系统、聊天机器人等方面具有广泛的应用。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK