参与开源已经有4年的时间了,找个机会聊聊自己对开源的理解。
开源社区 90% 的魅力不在于使用,而是在于参与。可能很多人会觉得自己很菜,不好意思给开源社区提交代码,可是我们每个人都是曾经的菜鸟,参与开源正是让开发者提升自我的最好机会,就像 Open Source Guides 中说的那样:
在 [自由代码] 下工作,让我学习到了职业生涯中非常重要的技能,无论是大学还是实际的工作,我认为从开源项目中得到的收获的远大於我的贡献!
参与开源社区可以给个人带来很好的自我提升。如果不是参与开源系统,我可能到现在也不会了解到 Semantic Versioning 和 Linear Commit History 的重要性,更不用说如何基于各种社区资源搭建全套工作流程。在 commit 代码的过程中,无论是 review 别人的代码,还是被别人 review 代码,都可以帮助你纠正自己的很多认知误区,收获的其实是一对一的免费 coaching。而与社区开发者一起沟通 roadmap 的时候碰撞出的思路和想法也是闭门造车不可能产生的。
参与开源社区可以获得日常工作比较难获得的高成就感,这种高成就感会形成正向反馈让你更加努力和严谨。当看到来自全球的近 30w 开发者使用着这个项目,来自数十个不同的国家和地区的开发者一起共同工作贡献代码的时候。作为项目开发者的一员,你100%会为自己感到骄傲,也一定不敢辜负这么多人的信任,催自己更加努力。
相信很多开源项目最"不待见"的就是“小白”用户,我们刚开始做开源的时候也一样。
是我们最开始维护开源项目最真实的内心反应,毕竟即使有全能工作流帮你降低了大量的时间成本,也挡不住各种“小白”用户提问占用的时间。
我的心态在我们开源的第二年发生了变化,因为我渐渐的发现很多曾经的“小白”用户变得不再那么“白”了,会主动帮我们回答钉钉群、stackoverflow 上的问题,在社区上写技术文章分享,会帮我们提 PR 修 bug,甚至有人成为了我们的 core contributor,还有人做了基于我们开源项目的二次开源项目。
这些曾经的“小白”用户后来成为了我们项目发展的基石,所以,“小白”真的是小白吗?
我们的开源项目虽然是前端项目,但是有相当比例的的开发者是 C# 和 Java 开发者,所有开发者脱离了自己熟悉领域之后必然是小白。但是程序员的自我学习能力却是通用的,只要给予开发者一些时间,很多人都会成为新领域的专家。
18年的时候 deno 的 issue 被中文刷屏,当时我的回答就是很多人不一定真的有恶意,而是真的不知道 issue 是用来做什么的。很多用户的留言很可能是他们第一次使用 github 账号,对初次犯规的用户不妨多一些引导和善意。毕竟嫌货才是买货人,嫌弃你的用户很多正是你的目标用户。
如果用户反复咨询同一个看起来很低级的问题,开源作者可能反思一下以下几个问题:文档有没有写好,FAQ 有没有适当的引导,还有最重要的,文档的搜索功能是否健全。
我们在官网提供了基于 algolia 的全文搜索之后,issue 和日常提问中的“小白”问题比例就直接大幅度降低了。而对于那些第一次接触开源社区,却又不知道怎么提问题的开发者。不妨在官网文档附上《提问的智慧》的链接,我相信真正看完了的开发者会感谢你的。
有非常多的开源项目第一版本发布的时候轰轰烈烈,但是没过一年就会不了了之,真正能长期维护的开源项目更是少之又少。很多时候可能真的不是“KPI项目”在作祟,而是“高功耗”的维护成本最后压垮了维护者的热情。
是的,很多开源项目作者在宣布项目开源的时候都忽略了一件事情,那就是:维护比开发要更加“耗能”。
拿我们的项目举例,2年半的时间我们处理了社区提出了将近 3000 个 Issue 和 1700 个 Pull Request。想象一下,如果你是一个业余维护开源项目的开源作者,在你精疲力尽 996 完成工作之后,发现还有几十个 issue 和 pr 等着你处理,如此这般,经年累月,你还会对开源有着最初的热情吗?
无论是背后有大公司站台的 “3A“ 级开源项目,还是个人驱动的业余项目,维护成本最后都会不停的消耗掉开发者的时间和热情,而想要长期将一个项目稳定维护下去,低能耗维护项目其实是一件很重要的事情。这件事情我们的经验是:
全自动化工作流是降低项目维护功耗最有效的手段。
在我们的项目中,除了大家都了解的 CI 流程以外,Issue 和 PR 的中英文翻译、筛选、分类、分配,到最后的关闭,整理和锁定。甚至每周的项目进展,还有 Changelog 文档的生成,甚至版本的发布,全部都是全部交给 bot 完成的。
大家也可以在 Github Marketplace 找到适合自己的 bot,配合 Github Action 与 Azure Pipeline(对开源项目无上限免费)等工具可以极大的降低开源项目作者的维护负担,让开源作者更聚焦在代码的开发上。
好的项目规范和测试在项目开发的时候会让你付出更多的精力和时间,但是这些成本在后续的维护过程中很快就会收回。这些努力会至少帮你挡住超过 95% 的不合格代码提交,极大的降低你 review 到不合格代码的概率,而当你需要在保证兼容的情况下做项目重构的时候,你一定会感谢自己曾经辛苦写下的单元测试。
最后
参与开源项目的过程很像种树,无论你是种下了树苗,还是参与了浇水施肥。
当它最终长成参天大树,大家可以一起乘凉的时候,你一定会很开心自己也为世界更美好做出了一点点贡献。而种一棵树最好的时机是十年前,其次正是现在。
开源一定会让世界更美好。