为什么公司应该鼓励员工参与开源软件

随着软件技术的发展,越来越多的国内外公司加入开源软件的行列,纷纷开源了自己公司内部的软件,这是一件非常好的事情。但可能有人会有这样的疑问,开源软件往往意味着免费,将自己的代码无偿地提供给别人使用,还要帮助他们解决各种问题,这明显是费力不讨好的事情,那为什么还有那么多大公司去做这样的事情呢?

让项目得到更多帮助

很多公司的开源项目都是从公司内部开始推广使用的,但公司内部使用的人毕竟有限,这样给项目的帮助也就十分有限了。

但如果把项目开源出来,一来可以帮助到有需要的人,二来可以让世界各地的开发者给项目提问题或贡献代码,让项目变得更好,从而吸引更多的人来使用,使得项目发展进入一个良性循环。

比如蚂蚁金服的 antd,其实阿里的开源项目有很多,很多人都说他们的开源项目是 KPI 导向,但至少 antd 这个项目我觉得还是维护得挺好的。这个项目开始的时候有很多 bug,每个用过的人几乎都会提 issue,但是 antd 的开发团队对 issue 的处理非常及时,有时候当天提的 issue 当天就修复了,这样慢慢发展了一段时间之后,项目功能越来越完善,问题越来越少,最终发展成为一个令人交口称赞的项目。如果 antd 项目一开始没有开源,光靠内部人力去使用测试的话,不仅要耗费大量的人力和时间,而且缺少社区的声音项目很难做好,只有开源了才能让项目得到这样的发展。

口碑好的开源项目能吸引更多的人为其贡献代码,比如 Fackbook 的 React,现在已经全球最火的几个开源项目之一,开发者都以能为其贡献代码为荣。前不久 React 提了一个求助的 issue,内容是请开发人员为项目重构老的测试用例。issue 提出不到一天,里面的几十个开发任务就被认领完了,这部分工作要是让内部人员来完成的话可能要耗费不少人力,但现在 Facebook 只要付出一点点的人力(review 代码的人力)就可以完成这一项繁杂的工作。

提升公司的技术影响力

人们在买东西的时候大多喜欢选择品牌,品牌会让人觉得质量有保障,会觉得大家都在买的东西自己跟着买肯定没有错,影响力就跟品牌一样。对于开发者来说,提升技术影响力,可以让团队成员悉心听取你的意见,让自己的想法更容易地在团队中进行推广和实施,让自己获得更大的尊敬。对于公司来说也一样,提升技术影响力可以建立公司在技术领域的专家形象,甚至可以影响该领域技术的标准规范,让其他企业来遵循这些规范,这样可以极大地提升自己的产品竞争力。

开源无疑是提升公司技术影响力的最好方式,下面图中展示的是 2017 年在 github 上贡献最多的公司,他们无疑已经成为行业技术领域的风向标,只要是他们发布的开源项目大家都会争先使用和参与,同时也会加深对他们产品的喜爱。

吸引高素质的技术人才

开发人员往往更倾向于选择技术好的公司,请问:

  • 谁不想和技术大牛一起共事?
  • 谁不想参与能学习到前沿技术的项目?
  • 谁不想自己参与的项目是广受好评的?

但是怎么知道一家公司里面有没有大牛?开发的项目是不是用到前沿技术?开发的项目是不是广受好评呢?

最简单的方式就是看公司开源项目的数量和质量了,通过 github 上面的源码可以看出该公司的代码质量和技术选型,从项目维护中可以看到团队的水平,开发人员的能力,项目信息一目了然。这也是技术好的公司技术越来越好的原因,因为开源了优秀的项目吸引了优秀的开发人员加入,然后又做出了更多优秀的开源项目,从而吸引到更多优秀的开发人员。

技术好的公司不一定开源做得好,但开源做得好的公司一定是技术好的公司。

通过开源还可以在社区中发现优秀的开发人员,比如 Redux 的作者 Dan,因为在 React 社区中非常活跃,所以 Facebbook 向其抛出了橄榄枝并成功的将其吸纳为 React 团队的成员,Dan 进入 Facebook 之后也为 React 团队做出了不少的贡献。还有微软,虽然微软以前是一家封闭的公司,但这些年来微软一直在寻求改变,开始积极地向开源靠拢,做出了 TypeScriptvscode 等一些优秀的开源项目,从而也吸引了一批优秀的开发人员加入,如果是换做以前的微软,这些优秀的开源开发者是绝对不会加入的。

提高团队成员的技术水平

开发人员提升技术水平有很多方式,可以看书、看视频、看博客等,更多时候开发人员是通过平时的工作来提升自己,但受限于公司所用的技术和业务的压力往往使得技术水平的提升变得缓慢,那要如何更有效更快速的提升技术水平呢?答案是参与开源软件

受益于现在互联网的发达和 github 等代码托管网站的发展,开发者现在可以毫不费力地查看开源项目的代码,通过阅读优秀源码可以:

  • 掌握良好的编程规范
  • 了解技术的最佳实践
  • 加深对技术原理的理解

参与开源软件不仅可以参考别人的代码,还可以学习其他团队如何管理项目,比如有些开源项目如果有新的想法要实施,他们会在问题区里先提一个 issue 咨询用户,让用户决定这个想法是否可行;有些开源项目在正式发布重大版本之前,都会先发布 alpha,beta 等预发布版本,让用户进行试用和测试,并让大家反馈问题,等到问题和 bug 修复得差不多了再正式发布新版本。这些都是运营和管理项目的有效方式。

如果团队成员能积极参与到开源项目中,就可以学习到这些优秀的实践,并把它们带到公司内部,从而提升公司和团队的技术水平。

公司如何参与开源

如果公司从来没有参与过开源,但想开始加入开源这一行列,可以通过以下方法:

金钱捐赠

很多开源项目都是项目作者无偿无私地贡献自己的宝贵时间来进行开发和维护的,如果可以的话就通过金钱捐赠的方式给开源项目维护者提供支持,让维护者更有动力去维护项目。在开源社区有个网站叫 opencollective,是一个专门给开源项目提供金钱捐赠的网站,个人或者企业可以在上面找到对自己有帮助的开源项目为其提供帮助。

组织员工参与开源

以前 Google 公司允许员工每个星期自由支配 20% 的时间来做自己喜欢的事情,可以效仿这种方式,比如每周五的时候抽出一些时间让团队为一些开源项目提供力所能及的帮助,例如帮忙解答 issue,编写文档,贡献代码等,让团队逐渐养成参与开源项目的习惯。如果不知道从何入手的,可以通过这个网站了解更多信息:开源星期五

Comments