2014 年 10 月 25 日
关注 @K0nserv7 月 7 日,我参加了 CocoaHeads Stockholm 聚会。在这次特别的聚会上,当时我并不认识的才华横溢的 Orta Therox 发表了关于开源、CocoaPods 以及他们在 Artsy 的工作原理的演讲。
很长一段时间以来,我一直觉得我没有为我每天使用的所有出色项目做出足够的贡献;CocoaPods 就是其中之一。Orta 真的激励我迈出回馈的第一步。我立刻回家,开始处理我在 GitHub 上 CocoaPods 问题 中发现的一个问题。完成之后,我直接跳到另一个相关问题上。在提交了一些 PR 之后,我被邀请加入 CocoaPods slack 团队进行进一步讨论。这篇文章讲述了我为一个大型项目做出回馈的第一步。
为什么 Github 问题经常会被诸如 +1、我需要这个 和 太棒了 之类的话语填满,而不是解决问题的 PR?
我能理解这一点,我发表过很多 +1 和 我需要这个 的评论。从我非常个人的,但可能并非独一无二的经验来看,这更多的是一种心态问题。最终,这与我作为一名程序员的信心以及一丝 冒名顶替综合征 有关。
我无法提供价值
我经常用来为我的消极辩护的一句话是 我无法在这里提供价值,其他贡献者太熟练了。确实,许多开源项目都是庞然大物,包含大量的代码和需要理解的内容,但每一个贡献仍然很重要,并且为项目提供了价值。没有大大小小的贡献,一个项目就会停滞不前。
我认为这里还有一个重要的问题,即让新贡献者可以访问该项目。开始操作应该尽可能简单,这意味着设置环境和查找适合尚未熟悉代码库的贡献者的问题。CocoaPods 很好地完成了这两项工作。
对于设置,有一个名为 Rainforest 的存储库,其中包含一个 rake 任务,用于设置开发 CocoaPods 所需的一切。此外,几乎所有存储库都包含一个名为 bootstrap
的 rake 任务,该任务将设置用于开发的存储库。
对于查找问题,CocoaPods 使用标签系统来说明问题有多难,如 此处 所示。标签 easy
非常适合为新贡献者查找任务。事实上,我已经开始处理其中一些任务,但很多时候我遇到的问题太难或是我根本不够了解。由于遇到困难,我放弃了很多问题,这既好又坏。这样做很好,因为重要的是,你能够尝试解决问题并失败,而无需分配该问题或感到有压力必须完成它。坏的部分让我遇到了下一个问题,即提出问题。
我不应该通过询问琐碎的问题来浪费核心贡献者的宝贵时间
即使在克服了最初无法提供任何价值的感觉之后,我的第一个 PR 也帮助解决了这个问题,但我仍然不愿向核心贡献者提问,因为我觉得我是在浪费他们的时间。引用我们讨论中我自己的话。
这是我的一个担忧。我知道其他人可以比我更快地实现琐碎的事情。我尝试权衡提出问题和不产生负面价值之间的关系
虽然让核心贡献者花时间帮助你可能会在短期内产生负的净值,但从长远来看,你最终会拥有更多高效且熟悉代码库的开发人员。
这是由一位核心贡献者最好地表达出来的。
让我重新强调一下 @k0nserv:请向我们提出任何和所有你遇到的问题。这就是我们所有人致力于 CocoaPods 的原因
结论
在强迫自己向 CocoaPods 提交第一个 PR 之后,事情变得容易多了。我为做出贡献感到高兴,而且维护人员也很好地接受了我的贡献。克服我提出问题的疑虑实际上只是为了告诉它并不是我所认为的问题。
回到最初的问题,自从我第一次为 CocoaPods 做出贡献以来,我向其他项目发送了许多 PR,我在这些项目中看到了一些不足之处。这些不足之处包括 AWS 食谱的 SSL 改进,以及我考虑用于工作的一个 gem 的小拼写错误。我真正感觉到自己已经摆脱了+1心态,进入了我将提交一个 PR 来修复我发现的问题的心态。开始做开源贡献是一件需要你勇敢尝试的事情,很快你就会发现自己会自然而然地去做。
对贡献者的建议
你想为开源做出贡献,但和我一样有同样的疑问,或者有完全不同的疑问?以下是我开始入门的一些建议。
最初的障碍主要在于决定去做这件事并选择一个项目。对于项目而言,选择你正在使用的东西是有意义的,如果你已经确定了一项任务,那就更有意义了。如果你没有想要处理的特定任务,可以查看 GitHub 上的问题,如果你无法在问题中找到似乎适合新贡献者的内容,可以询问维护者。项目的良好候选者是依赖项管理器、库和其他支持工具。
因此,你选择了项目和任务并开始着手处理。如果它是一个像 CocoaPods 这样相当大的项目,那么记住完全没有必要掌握代码的所有来龙去脉,事实上你也不必这样做。重要的是理解与你正在处理的任务相关的足够多的代码。如果你使用 iOS 或 OSX,CocoaPods 当然是你项目的完美选择。
完成任务后,确保你有测试来涵盖任何新代码或可能必须调整的旧测试,还要确保你遵守项目设定的任何风格指南。提交你的 PR 并等待。修复维护者提出的任何问题,希望你的 PR 能够合并。干得好!
下次当你发现自己对开源工具中缺少或无法正常工作的东西感到沮丧时,请记住你有能力修复它!
对维护者的建议
如果您希望有更多贡献者帮助您维护项目(为什么不呢?),请确保该项目易于访问,并为新贡献者提供良好的介绍。这包括设置、运行测试、代码约定、CI、问题标记等内容。
在有人提问时回答问题,并鼓励建立一个可以提问问题而不是沉默的社区。
我觉得 CocoaPods 在这方面确实是一个很好的项目,值得借鉴。这是一个真正很棒的入门项目。