开源思考
在2021年的年终总结中,我把参与开源比做给果园的果树浇水。
大家参与开源项目更像是一起在给一个果园的果树浇水,参与了这个开源项目的人都是属于这个果园的。不同之处在于有些田主负责这一片果树,另一些田主负责那一片果树,有时我没时间,你可能会给我的果树浇浇水,我同样也会帮助你,这样大家一起维护一片果园。果树结了果实,大家也是一起收获和分享的。
这是从贡献者的角度看开源,有一定的道理,但这个观点不够成熟。
首先,大家都喜欢香甜可口的水果,但他怎么知道在你的果园给果树浇水,果树就会结出丰硕的果实呢?
其次,只是浇水,果树是很难结出硕果的,还需要除草、施肥、除虫等,大家都喜欢浇水,除草、施肥、除虫的事情谁来做?
再次,大家守着自己的果树就好,为什么要给别人的果树浇水?为什么要一起维护同一片果园?
最后,经过大家一起漫长的培育,果树最终硕果累累,大家如何一起分享收获的喜悦?
这些是我这半年一直在思考的问题,总结起来就是:
运营一个开源社区究竟意味着什么?
本文将从一个开源社区运营者的角度,尝试做出一些粗浅的解答,如有不当之处,希望大家在评论区指正,非常感谢!
参与开源的动机
先看第一个问题,社区开发者为什么会参与开源贡献?
贡献者对于开源社区来说是最关键的,有贡献者参与到开源项目中来,不断地为开源社区的繁荣和开源项目的成功做贡献,这就是开源社区存在的意义,没有开发者参与的社区就像一潭没有生气的死水。
但是开发者为什么要参与社区,而不是做别的事情?他们为什么要参与这个社区,而不是那个社区?
参与社区贡献是一种行为,它和别的行为发生的原因没有本质上的区别,受三个因素的影响:
- 动机
- 能力
- 提示
能力是可以培养的,提示可以通过技术社区进行传递,动机才是最关键的。
我觉得开发者参与开源贡献主要有以下动机:
- 实践:将开源社区当成一个实践的舞台,用来磨练自己某方面的技能,以方便未来找工作或解决现在工作中遇到的难题。
- 社交:将开源社区当成一个结识朋友的机会,向社区优秀的开发者学习,以帮助自己快速成长。
- 归属感:通过参与开源社区,获得成就感、自信心、荣誉感和归属感,增强自己的影响力,希望得到同行的认可和尊敬。
- 商业合作:通过开源社区获得商业合作的机会,推广自己的品牌或者降低产品研发的成本。
实践
为了给简历添彩,为了找到更好的工作,这是一个最直接的目的,可能也是大部分开发者最初接触开源的动机。
很多公司在招聘时都会将参与开源项目当作加分项,在竞争激烈的市场环境下,求职者怎么才能够脱颖而出,除了扎实的技术基础之外,参与过知名开源项目的贡献,成为Contributor或Committer,这绝对会让面试官眼前一亮。
为了学习新技术,比如Vue3、TypeScript、组件库建设等,有些开发者想学某种新技术,但公司又没有类似的项目可以实践,参与开源项目是一个非常不错的选择,你可以任意选择自己想学的开源项目,参与其中,从修复一些文档书写错误,到慢慢修复一些简单的bug,再到成为核心特性的贡献者,这绝对是一个很好的实践机会。
以上动机确实能吸引很大一部分贡献者,但是这是不长久的,找到工作之后,贡献者很可能就会离开这个开源社区,新技术学会之后,他们也会选择离开,除非有别的东西吸引他们。
社交
我觉得社交是一个很重要的因素。
大部分开发者在公司做业务,只能接触到有限的同事,社交的圈子一般都很小。
他们希望与人分享自己的见解,希望遇到问题有人能够帮忙解答,希望得到前辈的指导,人都有社交需求,有讨论和交流的欲望,不一定跟技术相关。
虽然在公司也能与同事交流,在技术社区(比如掘金)和各种论坛也能与别人交流,但开源社区是一个通过代码和实践跟人交流技术的近乎完美的平台。
遇到问题或者有好的想法💡,你可以通过issue与别人讨论;通过检视别人的代码,可以学到别人做得好的地方,发现别人做得不好的地方,并通过提出检视意见,让对方获得改进机会;自己写的代码也会被别人检视,并以同样是方式让双方都受益。
一般有一定规模的开源社区会组织一些线上线下活动,让开发者之间有更多的连接,促进彼此之间的了解。
DevUI开源社区之前就组织过田主大会,每次都会邀请一些田主一起讨论组件设计的思路,或者是DevUI组件库后续的一些规划,或者是分享一些新技术。
这一块后续需要继续保持和深化,让大家有更多交流和学习的机会,有机会也会约一些线下的沙龙和面基,请大家喝喝咖啡,“一杯咖啡吸收宇宙能量”。
归属感
实践和社交,吸引开发者加入社区,并感觉良好,但让开发者长久留在社区的,一定是别的东西。
随着开发者逐渐融入社区,彼此之间不断产生连接,参与社区的互动,会形成这个社区独特的文化氛围,这个氛围对于凝聚开发者至关重要。
在社区中实践、贡献、成长、与人互动,除了让人产生成就感、荣誉感之外,也能让人获得自信,当你的想法获得社区的认可,你的优点被看见和被鼓励,你的善意得到回馈,这种感觉会让人对社区产生归属感,这种归属感会让人想要留下来。
归属感让人觉得自己是属于这个社区的,是其中的一员,在社区,自己的价值和潜力能得到最大程度的发挥,为社区做贡献,让社区变得更好,帮助其他人成长,这是社区的使命,也是社区成员的使命。
商业合作
前面的动机都是针对个人开发者的,商业合作则是针对企业开发者,有些企业会通过参与和自己业务息息相关的开源项目的贡献,为的是通过开源共建,降低内部研发成本,或者提升自己企业的产品竞争力。
贡献的另一面
代码是一个开源项目的核心,既然参与开源有那么多好处,开发者会不会只想做核心的事情,即提交代码?
这是开源社区要面临的很常见的问题。
开发了多少特性,提交了多少代码,似乎只有这些才是真正有价值的事情。
我觉得这就像是果实🍒和叶子🍃的关系。
对于一棵树🌲来说,每一个组成部分都是至关重要的,树根要扎得深才能汲取更多水分和养料,树皮起保护和输送养分的作用,叶子进行光合作用和呼吸作用为树提供能量,果实为树提供繁育下一代的种子,只有每一个部分都健康,树才能不断成长、不断繁荣。
开源社区也是一样的。
- 代码是产品提供服务的基础
- 单元测试为产品提供质量防护网
- CICD等基础设施提升产品开发和发布的效率
- 代码检视让社区成员之间产生更多连接,让大家可以相互学习和成长
- 文档让产品更能被用户接受和使用
- 推广文章让产品得到传播,让更多用户接触到产品
每个环节都为开源项目的成功和开源社区的繁荣提供助力,开源社区不能只有代码。
协作为什么是可能的
参与开源也可以像在公司开发业务一样,每个人负责自己的模块,有自己的一亩三分地,但这样其实削弱了开源的力量。
开源的本质是通过协作达到思想的交流和碰撞,从而启发创意和创新,但是大家为什么要协作呢?
我觉得原因在于开放性,开源项目的几乎一切都是透明公开的,我们可以看到别人的代码,能看到哪些地方做得好,哪些地方做得不好,正是因为有做得不好或不完善的地方,我们才有贡献的机会。
自己有时很难看到自己的问题,你优化一点,我改进一点,集思广益,通力协作,才能让开源项目变得更好。
另外就是开源社区的文化氛围,如果开源社区是鼓励协作和交流的,大家都会愿意一起协作。
收获和贡献成正比
在开源社区,每个人都是平等的,不管你的国籍、肤色、性别、年龄、背景、宗教信仰如何。
在开源社区只看贡献,谁贡献大,谁的话语权高。
这里的贡献不仅仅是代码,包含很多方面,任何有益于项目成功、有益于社区繁荣的事情,都是贡献。
贡献不是一簇而成的,而是经过时间的积累,慢慢形成的,贡献会随着时间的积累慢慢形成社区的影响力。
开源总结
接下来给大家同步下 DevUI 开源社区近半年取得的一些成果吧。
最让人惊喜的是:
- Vue DevUI 实现
Table
/Tree
/DatePicker
/Form
等复杂组件突破,达到v1.0
版本发布要求 - React DevUI 完成从0到1的突破,目前已有
32
个组件 - Ng DevUI 周下载量突破
1000
掘金
上半年发布15篇文章,掘力值从 6975 增加到 9507
,快升级Lv5
啦,冲鸭!
指标项 | 指标值 |
---|---|
等级 | Lv4 |
文章数 | 113 |
掘力值 | 9,507 |
关注者 | 2,446 |
点赞数 | 5,020 |
阅读数 | 448,803 |
以下是掘金内容数据:
Ng DevUI
由于国内 Angular 生态不佳,Ng DevUI 从2019年开源到现在,3年多时间,数据一直都不行,虽然我们已经很努力地在社区进行推广,也为Ng布道:
Ng很好用,很规范,上手门槛也没有那么高,顺便还可以学习下 TypeScript 和 RxJS 这些流行和先进的技术。
不过参与贡献的开发者寥寥无几,贡献者的数量一直未超过20,周下载量也是常年100的量级。
Ng DevUI 作为整个华为云DevCloud商用业务、以及众多内部服务的体验基座,已经被广泛使用五六年了,是一个经过时间和大量用户考验的相对比较成熟的Ng组件库,为什么那么少人用呢?
今年上半年终于实现了一个小小的突破:
npm 周下载量超过 1000
虽然和material-ui
/ng-zorro-antd
这些业界优秀的Ng组件库相比,还有很大的差距,不过也算是这三年来最大的一次鼓励啦!
我们还专门写了一篇文章表达喜悦之情:
以下是 Ng DevUI 下载量趋势图:
Vue DevUI
Vue DevUI 从2021年开源到现在,一直比较受欢迎,社区活跃度也很高。
这半年来:
- Contributor 数量从 54 增加到
72
- Star 数从 110 增加到
361
- PR 数从 411 到
1102
- Commit 数从 1712 到
2587
- Download 数从 1366 到
3989
v1.0
正式版本近期也将发布,尽请期待!
好不好用,试了才知道哦,觉得好用可以给我们点个星星Star🌟
Vue DevUI:100多位贡献者持续530多天,写了近60000行代码,这个新鲜出炉的 Vue3 组件库你不想尝试下吗?
不好用,也欢迎给我们提issues。
更欢迎你加入进来一起共建:
https://vue-devui.github.io/contributing/
React DevUI
React DevUI 是由 DevUI 开源组织 PMC 成员 Xie Jay 发起的开源项目,目前已经有32个组件啦!
欢迎大家体验和参与共建,以下是React DevUI
官网:
想了解更多 React DevUI 的信息,可以参考我们之前发布的文章:
React DevUI:React 18 还没正式发布,我们已经开发了一个基于 React 18 的组件库
也可以添加 DevUI 小助手微信:devui-official,拉你进我们的技术交流群。
种子终会破土而出
给大家分享一个小故事,我是一个绿植爱好者,2017年我家有一位新的绿植🪴成员加入,它刚来的时候是这样的:
这些年来我们不断地有添置新绿植,有很多都枯萎了,唯有这一株,经历了起起伏伏,不断地有叶子枯萎凋谢,又不断地在来年绿叶成荫。
今年对它来说似乎是最困难,我不断地看到它的叶子在枯萎,一片、两片,从最初的20多片叶子🍃,到最后只剩半片叶子。
中间也尝试抢救过很多次,浇水、施肥、搬位置、换土、移花盆,依然不见好转,叶子依然一片一片地凋零🥀。
当我摘除它的最后一片金黄色的枯叶🍂时,我自己都对它失去信心,放在阳台不再去管它。
我只记得过了很久很久,我最后一次看它的时候,它只剩最后半片叶子(真的是半片叶子,有图为证)。
直到前两天我去给别的植物浇水的时候,突然发现这株绿植竟然神奇地长出了新芽!
惊喜之余,我给它拍了张照片,它现在长这样(拍摄于2022年7月9日):
不知道这株植物的种子在黑暗潮湿的土壤中经历了什么,等待了多久,只知道它最终突破而出了,而且坚信它最终又将会绿叶成荫🍃。
我们有时和这株绿植其实是很相似的,有些事情很困难、模糊、未知,也不知道有没有结果,有时甚至不知道该做什么才能有结果,我们会想放弃。
我们知道放弃是很容易的,我们不能轻易放弃,我们想到了自己的初心,我们为此付出了很多,我们必须坚持到底,我们知道:
种子终会破土而出,迎接它的是温暖的阳光、湿润的雨露和成长的喜悦!
最后,给大家分享一个非常硬核的荒野求生系列视频:女生无工具求生东南亚丛林100天,来自B站Up主麻雀喳喳野行记。
除了渣爷真实的、硬核的100天荒野求生过程本身之外,还有以下几点非常打动我:
- 脱口而出的诗经、经典的唐诗宋词、现代诗,关键这些诗句都非常应景
- 丰富的中草药知识,每种草药的形态特性、作用如数家珍,弹幕都说渣爷是“行走的本草纲目”
- 对大自然和生命的敬畏,在荒野求生过程中抓到蛇、鸟等动物都会放生,自己只吃鱼虾蟹、野果等
- 最关键的是坚定的信念、惊人的毅力和强大的心理素质,以及在绝望中表现出来的乐观、自信
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。