我对贡献代码的要求比较简单:每次贡献都必须有意义,必须有实实在在的影响。我可以提交仅包含空格的修复,但不应将它们算作影响提交。它必须是开源的。我从2013年夏天开始,稍微早于JohnResig,他每天都在博客上介绍提交代码,但我的第一次尝试失败了。是他的文章启发了我,告诉我我并不孤单。我和John有同样的理由:我喜欢业余项目,但我不想花整个周末来完成它们。有时,我在周末通宵工作,但这并没有多大帮助:业余项目的工作时间跨度太长,以至于我常常不记得我在做什么以及我的下一个想法是什么项目是。我总是需要很长时间才能回到项目上。还有,我不想在周末的两天里完全忙于副业,因为我想和我的朋友一起度过一些时间,以缓解一直坐在电脑前的紧张感。我开始每天贡献代码的另一个原因是我认为这可能会提高我的技能。积极的一面改善我的业余时间管理我的整个业余时间安排都发生了变化。更好的是,我开始计划和管理我的业余时间。在此之前,我并没有真正考虑过工作之外的时间。完成日常工作后,我突然(震惊,震惊!)有了一些空闲时间,却不知道该做什么。技能提升由于每天忙于编码,我看不到日常工作真的能提高我的技能。由于我正在学习Erlang并在Scheme中编写了我的第一个程序,因此我在简历中添加了一门新语言。我还在写Erlang。我还了解了更大的开源项目是如何工作和组织的,以及开源对公司意味着什么(我什至可以说它对每家公司意味着什么,但那是另一篇博文的内容)。我并不是说开发一个不包含任何开源组件的产品就没有利润,就我而言,每个项目都有可能拥有大量的开源组件来盈利和受益从长远来看,来自更好的代码。此外,我在无数知识点上提高了自己的知识和技能,仅举几例:语法分析和词法分析、分布式计算、架构、安全、项目之间的快速切换(代码规范)、理解代码和代码审查。我还提高了我的软技能:沟通、团队合作、解决冲突、指导和处理困难/紧急情况。刚开始一份新工作的时候,我有很多自己的小副项目,很好玩,但是到了某个阶段,我就不开心了,没人fork,好像也没人用。我是唯一的开发人员,我没有合作伙伴来讨论解决方案或获得评论,这是改进代码和技能的唯一途径。我决定将代码提交到更大的项目,并且由于我从0.4版开始就一直在使用node,并且是npm的日常用户,所以我向npm提交了一个补丁。IsaacSchlueter审查了我的一个PR,这很好,并引导我向npm提交更多代码。npm注册中心使用CouchDB作为数据库,但我不知道如何使用它。我开始将CouchDB文档翻译成德语,因此我学习了如何使用CouchDB以及如何为项目提供帮助。有一天,我想托管我自己的私有注册中心,当时我的硬盘上有CouchDB源代码,我不确定为什么注册中心没有启动。在阅读代码时,我看到CouchDB有一个JavaScriptMVC应用程序,尚未正式发布。这是我开始向CouchDB贡献代码的那天,有一堆npmPR,我不想再提交了:我不想让花时间看的审稿人太难了。我为CouchDB贡献了更多代码,因为他们真的很好。有时,npm会出现一些与Node.js直接相关的错误和问题,所以我也将代码提交到Node.js项目。加入所有这些项目,获得评论,与许多不同的贡献者合作,阅读大量其他人编写的代码,审查补丁,与用户交谈并解决他们的问题,这些都真正增强了我的技能。2014年,我很幸运地找到了一份工作,因为在开源项目CouchDB上工作而获得了奖励。结交新朋友我在开源技术社区结交了很多新朋友。我遇到了很多忙于同一工作的合作者,也有人使用我从事的项目。他们大部分都比我聪明,至少在我参与过的项目中,可以说他们都是很优秀很豁达的人。它们是我在发送初始PR后提交更多补丁的原因。我认为没有人有兴趣将业余时间(甚至工作时间)投入到充满敌意的恶劣环境中。不好的方面每天贡献代码,真正坚持下来,不会一直顺利的。我认为大多数令人沮丧的事情是人们对开源产品抱有奇怪的期望,他们使用人们在业余时间免费维护的产品。npm中的这个问题就是一个例子。我曾经在业余时间用Domenic做很多工作,Domenic也花了很多时间维护npm:结论每天为开源软件贡献代码的决定改变了我生活的许多方面。现在有偿参与开源,在很多项目中交到了很多朋友,让自己的技能得到了提升。我很乐意看到公司支持他们的员工为开源软件贡献代码——99.99%的公司都依赖开源软件,例如,他们的开发工具、直接应用的产品,或者两者兼而有之。可悲的是,大多数员工很难在工作时间参与开源软件,也不是每个人都有足够的特权每天在业余时间花1小时参与开源软件。随着KyleSimpson和MathiasLafeldt等人开始类似的项目并似乎改变了他们的生活和他们看待世界的方式,我真的很期待未来。
