很多优秀的软件公司和开发者为什么愿意开源和共享?
编者按:本文作者 Yevgeniy (Jim) Brikman 是《Hello,Startup》这本书的作者,同时也是 Gruntwork 的创始人。之前他曾在 LinkedIn、Cisco 和 TripAdvisor 等公司工作过。在这篇文章中,他深入分析了很多优秀的软件公司和开发者愿意开源和共享自己的工作成果的内在原因,同时还指出那些不愿意分享的人所给出的理由其实都是站不住脚的。
首先,我给大家抛出两个问题。在继续阅读后面的内容之前,建议大家花几分钟的时间认真思考自己对下面这两个问题的答案:
- 在当今世界上,你认为最优秀的软件公司都有哪些?
- 在当今世界上,你认为最优秀的软件工程师都有哪些?
对于上面这两个问题,你是不是在心里已经有了自己的答案?如果有的话,你的答案的名单列表里分别有多少家软件公司和多少个软件工程师的名字呢?3 个?5 个?还是 10 个?尽管目前全世界有成千上万的软件公司和软件工程师都在做一些非常出色的软件开发工作,但当我让你列举出最优秀的软件公司和软件工程师的时候,我敢肯定你的脑海里只能浮现少数几家软件公司和几位软件工程师的名字。为什么在如此多优秀的软件公司和工程师里,你的脑海里只会浮现这些软件公司或工程师的名字,而不是其他的公司或工程师呢?
这是因为浮现在你脑海里的这些公司和软件开发者不仅做的工作非常出色,而且因为他们愿意花时间去告诉你他们在从事着非常出色的工作。我敢肯定,对于你名单上列的每一家公司和工程师,你一定读过他们写过的东西(如博客、论文或书籍)、听过他们的演讲(如访谈节目、会议演讲)或是使用过他们的代码(如开源代码)。
例如,如果你列的优秀软件工程师的名单里有 Linus Torvalds 的话,很有可能是因为你对操作系统 Linux 或分布式版本控制系统 Git 比较熟悉,而 Linux 和 Git 都是 Torvalds 开发出来并且供大家免费使用的开源项目。如果你列的名单里有 Dennis Ritchie 的话,这很有可能是因为他是 Unix 操作系统和 C 语言之父,而且是开源标准、开源文库和相关书籍等缔造者之一。如果你列的优秀软件公司的名单里有 Google 的话,这可能是因为 Google 经常公开发布自己的研究论文,并将 Google Talks 系列放到网上供所有人观看,它同时还开源了包括 Android、Chrome、Angular 和 Go 在内的众多项目。包括 Facebook、Twitter 和 LinkedIn 在内的一些其它主要的软件公司,甚至包括微软这种之前非常传统封闭的软件公司,现在都已经开始定期开源数百万行的代码供大家使用。现在有一些公司甚至将自己的项目完全建立在开源的基础上,将自己几乎所有的代码都共享开源出去,包括 Mozilla 和开源解决方案供应商 Red Hat 等。
说了这么多,很多人要开始问了:为什么?为什么这么多软件公司和软件开发者愿意共享自己的工作成果?为什么他们在一个项目上投入了大量时间和数百万美元后会选择将项目开源供大家免费使用,甚至让竞争对手也免费使用呢?这只是单纯的利他主义,因为他们愿意帮助其他人吗?
当然,利他主义是其中的一个原因,不过这只是能够解释这个问题的原因之一。在下面的内容里,我将深入分析优秀的软件公司和开发者愿意共享和开源自己的大部分工作成果的其它五个关键原因,同时探讨那部分不愿意共享与开源的人通常会给出的原因,最后,我希望能够说服你和你的公司在未来都能够更多地共享和开源自己的工作成果。
一、优秀的软件公司和开发者愿意共享和开源的五大原因
据统计,大概有三分之二的软件公司都曾为开源贡献过自己的力量。仅仅在 GitHub 平台上,就有超过 140 万的开发者在超过 3500 万个开源项目里共享过自己的工作成果。这个数字已经让人非常惊讶了,更重要的是,开源项目的规模正在呈指级增长,所以这个数字将会变得越来越大。
进行开源项目共享、博客分享、演讲分享的人并不仅仅是想做慈善。当然了,确实有很多开发者是真心地想回馈开发社区,但这本身并不能解释为什么软件行业的共享开源会如此普遍。很多优秀的软件公司和工程师之所以愿意共享和开源自己的工作成果,主要有以下五个方面的原因。
原因一:共享和开源有助于自己更娴熟地掌握相关知识
学习一样东西的最好方式就是去将它教授给其他人。这是因为要想将一种知识教授给其他人,需要你自己对这种知识有更加深刻的理解和认识。每当我准备完一场演讲、写完一篇博客或是为一个开源项目贡献了新的成果之后,我便会对相关的知识有更加深刻的理解。
对于一家软件公司而言,鼓励你的员工通过写作、演讲或开源项目的方式去分享他们的工作成果是你给他们提供的最廉价但最高效的培训项目。对于个人而言,花一定的时间去分享自己的知识是提升自我的最容易、最有效的方式之一。事实上,一位工程师之所以能被大家尊称为资深工程师就是因为他们能够帮助身边的每一个人变得更加优秀,而让周围的人变得更优秀的唯一的方法就是去给大家教授知识。
原因二:共享和开源共享有助于提高自己的项目质量
你家里一般在什么时候是最干净整洁的?我猜应该是每次家里来客人之前你精心打扫之后的家最干净整洁的。毕竟家里来客人时,你想将最干净整洁的家展示给客人,就好比是你将自己的家和客人分享。其实不管你和别人分享什么,同样的道理都是适用的。将自己的代码开源的一个最意想不到的益处之一在于,在准备代码开源的时候,你会确保即将开源的代码是高质量的,因为你知道一旦开源,就会有 “客人” 看,这和家里来客人之前你都精心打扫一番是一个道理。在开源之前,你会花更多的时间去清理代码、增加测试项目、编写所需要的文档,争取让准备开源的项目以最好的面貌展示在大家面前。如果你准备写一篇博客或是准备就自己的工作给大家做分享,上面这个道理同样适用。开源一个项目有助于让项目的质量变得更高。
除了上面所说的之外,共享你的工作和项目还能从另一个方面提高你的工作和项目的质量:反馈。你分享的东西获得的所有评价反馈,不管是正面评价还是负面评价,都是你进一步学习和提高的一个难得的机会。有时你会发现自己在交流分享一些内容的时候没有表现得很好,或是你遗漏了所分享主题的一个非常重要的部分、或是针对一个问题的一个完全不同的视角你没有考虑到。在开源代码方面,反馈所发挥的作用就更加强大,因为它本身就是一种获取同行审查的方式。正是基于这个原因,开源已经成为开发复杂和关键的软件系统的一个标准,例如安全稳定、操作系统和编程语言的开源。有数据表明,通常情况下,开源的项目要比那些封闭的项目质量更高。
著名的计算机程序员、开源软件运动的旗手 Eric S. Raymond 曾这样说过:
“只要经过足够多双眼睛的审查,所有的 bug 都将失去藏身之地。这就是 Linus 定律。”
原因三:开源和共享能够让你免费利用大家的智慧与劳动
每当有人使用了你的开源代码并报告了一个 bug 之后,就等于他们为你免费做了一次 QA。每当有人在你的开源项目里提交了一个补丁之后,就等于他们在为你免费开发软件。每当有人写一篇有关你的开源项目的博客的时候,就等于他们免费为你写了一篇文档。如果他写的是一篇负面评论的博客,即使这样,这也等于他为你免费做了一次设计评估。
将你的项目开源就等于允许让整个开发社区都在这个项目上贡献,相比你自己单兵作战而言,尤其是当你在一家小的创业公司工作的时候,项目开源可能会帮助你将项目变得更大、质量变得更高。即使你在一家大公司上班,你也会发现有很多优秀的开发者你是无法招聘到的——可能是因为你的招聘经费不够,可能是因为那些开发者非常满意自己当前的工作,也可能是因为他们生活在地球的另一端。但是如果你开发了一个非常优秀的开源项目,那些优秀的开发者可能就会免费帮你在这个项目里贡献他们的力量。举个例子,目前已经有超过 3000 名开发者为开源的 web 框架 Ruby on Rails 贡献过自己的代码,更不用说还有上万的开发者使用过这个框架、报告过 bug、写过有关它的博客文章以及写过插件。如果你的公司想写一个自己专有的 web 框架,你认为你能够投入多少人在这个项目上呢?
原因四:开源与共享是推销自己的最好方式
如果你是一位软件开发者,让自己在一家公司面前看起来非常优秀的最好办法就是共享你的工作。你不妨将其视为一种让公司主动找上门的推销自我的策略。在找工作的时候,你不用通过盲目地满世界投递简历的方式让招聘公司注意到你,你通过共享很多公司认为有价值的内容的方式来吸引那些潜在的招聘公司的注意。如果你通过共享让其他公司的工程师曾读过你写的博客、看过你演讲访谈视频亦或是使用过你开源的项目,他们便会将你视为专家,也就会更想去招聘你。你共享过的内容将成为你的简历的一个永久的组成部分。事实上,共享对找工作的作用可能超出你的想象,正如 jQuery 的创始人 John Resig 曾说过的那样:“不管在任何时候,只要涉及到招聘,相比普通的简历而言我更看重的是应聘者在 GitHub 上开源共享的东西。”
如果你是一家正在招人的公司,上面的道理反过来同样适用。给那些优秀的开发者留下一个好印象的最好的方法就是共享你的工作。如果一位开发者在过去几年里一直在使用你们公司的开源代码,那么他们想要加入你的公司并继续使用你的开源代码的可能性也就更高。开源项目是吸引优秀的开发者加入公司的最有效的方法之一,这种方法比传统的发招聘简章的方法不知要好多少倍。
原因五:开源和共享能够让你获得对项目的拥有权
作为一位开发者,如果你已经投入了上千个小时的时间在一个项目上,那么你就会变得非常依赖这个项目。它就像你的孩子一样。如果这个项目是公司专有的项目,这时如果你从这家公司离职,这就好像你经历了一次离婚一样,你失去了对这个孩子的监护权,这是非常痛苦的一件事。如果你经历了多次这样的事情,这就会让你很难再有足够的激情在一个不真正属于你自己的项目上投入太多精力。
然而,如果你更多的和大家分享你的工作,发布有关自己工作成果的博客或论文,最好是开源你的项目,这样的话这个项目将一辈子都属于你。这个开源项目将成为你工具箱里的一个永久的组成部分,不管你去哪里,你都可以随身带着它,你可以和更多的人分享它,你也会为在这个开源项目上工作感到自豪的。
换句话说,开源项目能让工作变得更加有趣,更有满足感。在这个大家甚至会为争抢优秀的开发者打烂头的年代,让工作变得更有趣可以成为你招聘的一个巨大优势。正如著名的计算机程序员、开源软件运动的旗手 Eric S. Raymond 曾这样说过:
事实证明,开源带给我们的宝贵财富之一是它教会了我们这样一个道理:玩的心态是最经济也高效的创意工作模式。
二、一些人不愿意共享和开源的三大最常见的理由
虽然我在上面举出了很多开源和共享所带来的益处,我知道依然还有很多人不愿意共享和开源,下面我列出了一些人不愿意开源共享的三个主要原因。
- 我太忙了,根本没时间去共享和开源。
- 没人会看我共享的东西的。
- 担心有人会剽窃我的工作成果。
下面我们就一条一条来看上面列出的不愿意开源共享的三个常见原因:
原因一:我太忙了,根本没时间去共享和开源
很多人之所以不愿意花时间去写博客、做分享演讲或是开源代码的一个最常见的原因就是:“我太忙了,根本没时间去共享和开源。” 每当这个想法将要蹦出来的时候,希望你都能记住这一点:忙与不忙其实是你自己的决定。什么意思呢?你不是找时间去做很多事情的,你通常是挤时间做很多事情的,就好比你为了在项目截止日期前完成一项工作,你晚上就算是熬到很晚也会挤时间将工作完成,就好比你不管怎样也会挤时间去看预约的医生,就好比你不管怎样也会挤时间去看《权利的游戏》,以及很多其它你认为重要的事情。而事实证明,如果你想拥有一个非常成功的职业生涯,学会共享也是至关重要的。
在职业体育里,繁重的锻炼和强化的训练是必不可少的一部分。同样的道理,职业音乐家、舞蹈家和棋手每天都会花很长时间去训练、去磨练自己的技艺。在大部分公司的工作里,一旦你大学毕业并完成了在新公司的入职提升培训项目之后,你就再也没有专门的时间去专门进行学习与培训了。其实你可以完全不用这样的。就以我为例,每天晚上 11 点,我都会花 20-40 分钟的时间去创作、学习和分享。根据我当时的心情,我可能会看视频学习、读书、写博客(比如你正在读的这篇文章)或是投身到一个开源项目里。我发现,我每天都会抽一定的时间去学习并分享自己的学习心得的这个习惯已经彻底改变了我的职业生涯。
让学习和分享变成你每天的时间安排里必不可少的一部分。找到适合你的时间段——可能是每天早上工作前,可能是午饭时间,也可能像我一样在每天晚上睡觉前——每天花 20-40 分钟的时间去学习和分享。每天 20-40 分钟,看起来时间并不长,想想一旦长时间坚持下来它可能会带给你的复利:你现在每天投入的很短的时间在未来产生的集聚效果可能会超出你的想象。
原因二:没人会看我共享的东西的
即使没人看你写的博客或是使用你的开源项目,那也没关系。写作、演讲和开源项目最重要的作用是,它们可以作为你学习的工具。正如著名作家 William Zinsser 在他的书《On Writing Well》里所写的那样:写作其实就是一种在笔尖上的思考。写博客的主要的目的就是为了提升你的思考能力,所以即使你写的东西没人看,写作也是非常值得做的一件事。同样的道理,准备一场演讲,将你的想法分享给大家听也是可以帮助你理清思路的。此外,正如我之前说过的那样,你为开源代码所做的准备是可以提高你的代码的质量的。
如果你经常锻炼你的写作、演讲和编码的技巧的话,你的粉丝、读者和观众可能会慢慢变多。最开始可能是身边的朋友和同事,但慢慢的,尤其当你将你的作品在 Twitter、Facebook、LinkedIn、Reddit 和 Hacker News 等平台上分享的时候,很多原来陌生的人也会看到你分享的东西,并且会主动分享它并提供反馈。此外,在互联网上,是没人能看到你的真面目的,你的身份其实就是你写的东西、演讲内容和开源的项目的集合体。换句话说,在如今的世界上,人们可以将你等同于你分享的东西。
如果你担心没人对你所要分享的东西感兴趣,你只要记住:每个人其实都在学习的不同阶段。正如一位非常知名的程序员 Steve Yegge 在他的一篇文章《你应该写博客》里所写的那样:
你会惊讶于太多看起来就像是 “常识” 的知识实际上对很多同样聪明的人来说都是全新的知识。其实只不过是因为这个世界上有太多东西需要我们去了解,我们都在不断的学习罢了。有时候我也会被泼冷水,因为看起来好像我讨论的东西早就已经有人和大家讨论过了。我需要记住的是总有一个 “恰好的时间” 去学习某些恰好的东西,这个 “恰好的时间” 对每一个人来说是不同的。
无论你处在教育生涯的哪个阶段,有些人会喜欢了解你的奋斗过程。当你在写博客的时候,你应该把这句话放在心里。你的读者当中每一个人都有一个属于他们自己的不同的时钟,他们都是在某方面比你强,但又在某方面比你弱。写博客的意义在于我们都乐意去分享自己目前的状态,并且不会去嘲笑那些在这方面没我们懂的多的人,因为很有可能他们在其它某个领域的造诣可能是我们自己未来很多年都无法企及的。
原因三:担心有人会剽窃自己的工作成果
大部分人其实都没有兴趣、时间、精力、知识或技能去剽窃你的工作成果的。正如计算机先驱 Howard H. Aiken 所说的那样:“不要担心别人偷取你的想法。如果你的想法足够好,你还得努力把它塞到别人喉咙里呢。” 此外,即使有人想从你写的东西或是通过使用你的开源项目去剽窃你的想法,这在大多时候其实都是一件好事,因为与你自己单兵作战相比,他们的反馈和贡献能够让你的工作成果变得更好。
不过也存在如果有人剽窃你的成果会对你造成危害的情况,那就是当剽窃你的工作成果会让你的竞争对手超过你的时候。当然,只有当你将自己最核心的技术成果共享出去才会出现这样的情况。例如,对于 Google 这家公司而言,它的核心技术成果就是它的搜索架构,即它的搜索算法和大规模分布式系统,这是 Google 的秘密武器。Google 是不会将自己的秘密武器也共享出去的。
但对于很多其它东西来说,将它们开源共享比保密能让 Google 从中获益更多,这也是 Google 将自己和搜索不直接相关的超过 900 个项目的 2000 万多行代码都共享出去的原因。此外,Google 还发布了一些有关搜索价格的论文(包括 PageRank、MapReduce 和 Gogle File System 等)。毕竟光听到一个想法是不足以去剽窃的。事实上,如果你的想法足够简单,导致其他人仅仅通过阅读你的博客或听了一场你的演讲就能轻易剽窃并打败你的话,这只能说明你的想法可能还不够好。对比一下这两种说法:“我有一个有关社交网络的想法” 和 “我已经开发出了一种能将物体运送到太空中的方法”。执行其实才是更加重要的。相比想法,执行力是更难剽窃的。
三、共享的文化
其实在生活的方方面面,要想成功,光完成出色的工作是不够的,你还需要确保其他人知道你完成了出色的工作。我发现,要想让程序员明白这个道理尤其困难,因为程序员通常比较内向,不善于推销自己。但好消息是,分享自己的工作成果能够实现一个良性的循环,它既能提升工作本身,也能提高你的能力。一旦你意识到分享自己的工作成果其实并不需要你去多花费额外的精力,而是工作本身不可或缺的一部分的时候(就好比写文档和测试是写代码不可分割的一部分一样),那么你在生活的各个方面取得成功的可能性就会更高,包括找工作、获得升职加薪、获取客户和招聘员工等。
分享的文化是软件行业和硅谷能够取得如此大的成功的原因之一。相比华尔街的保密文化,科技行业相对是比较开放的。如果大家都能学会共享,大家便能共赢。在一个流行共享的文化里,我们便能站在巨人的肩膀上看得更远。
这也是我经常写博客、演讲和开源代码的原因所在。在分享我知道的东西的过程中,我也能学习到新的东西,同时也能看得更远。最后,我也非常希望能听到你的想法。