作者:Olivier Halligon,原文链接,原文日期:2015-12-05
译者:小锅;校对:numbbbbb;定稿:Cee

正如大家所知的,Swift 在本周的早些时候开源了(校对注:按照原文的发布时间来看确实是「本周」)。对社区来说这无疑是一个爆炸性的消息,已经有很多的帖子在讨论这件事会产生的一系列后果。

然而我想做一件跟大家不同的事情™,今天我要趁这个机会跟大家分享一下我自己的开源经历,并说明为什么向开源社区做贡献对每个人都有好处。

介绍:Swift 开源系统的大事件

本周最大的新闻无疑就是 Swift 开源。苹果公司比我们所期待的更进一步,不仅公布了 Swift 代码完整 GIT 历史记录,还有其它工具的代码,如 lldb 与 REPL,表明它们使用了 Swift 包管理器,同时尽了他们最大的努力去创造一个更好的社区

尽管在 WWDC 15 上他们就宣布会将 Swift 开源,但是这个举动还是受到了极大欢迎。我几乎可以确定,没有人料到他们会做出如此大的贡献,而且还做得这么好。

为什么大家对开源如此狂热,为什么它这么棒呢?今天我不准备讨论 Swift 的开源对我们意味着什么 —— 已经有太多的博客讨论过这个问题了 —— 我想跟大家讲讲我自己的开源经历,以及开源是如何改变了我的思考方式。希望看完之后你能明白为何我对开源爱得深沉。

你好 GitHub

GitHub

与大多数人一样,我一开始只是想写一些代码并丢到 GitHub 上,这就是我的开源初体验。在一开始,我并不认为「我现在为开源做贡献」,我只是觉得 「哎哟,不错哦。我写了一些很赞的代码,让我来把它们放到 GitHub 上吧。这样做很酷,而且可以很容易地跟别人分享我的代码」。

我在 GitHub 上的第一个项目其实只是一些测试,就像我之前写的一些玩具应用一样,仅仅是为了实验一些新概念或者一个新的库。我一向十分好奇并且炒鸡喜欢去测试一些新的框架、新的设计模式或者新的创意,因此我一开始只是随便玩玩。

接下来我完成了第一个真正意义上的库并将其放到 GitHub 上,然后真正意义上地将其共享给其它人。我认为我的第一个 pods 是 OHAlertViewOHActionSheet,接着我写了 OHHTTPStubs

分享你的爱

这里是故事真正开始的地方:在读了一篇关于 NSURLProtocol 的博客后,它再次激起了我的好奇心,我想对它进行定制并让它通用化。当我开始写这个项目的第一行代码时,它依然还是属于“概念验证”。但是后来我对它进行了改进,将它改造成了一个独立的组件… 接着人们就开始对这个项目点星星了🌟

我并没有意识到 OHHTTPStubs 的成功,我只是感觉良好,然后收获了一些自信。看到这个项目越来越受欢迎,我泪流满面。我的代码帮助了很多人并且被真正地用在项目中,我感到十分开心。这不再是一个玩具项目了,我真正地为社区做出了贡献。

当你开源你的项目,并且把你的库发布到社区时,人们会用他们的爱❤️来回馈你。而,这就是最重要的。

要记住一件事:不要为了出名而去做开源。做开源只是因为它很棒,与其它人共享会让你获得成就感。随着 OHHTTPStubs 的开源并且越来越流行,我很高兴,不仅因为我的工作成果在被别人使用,还因为其它人的贡献让代码的质量得到了提高,增加了它的功能。团队工作真的是太赞了!

不要害怕做贡献

一段时间后,我希望自己能回馈社区。由于我自己是 CocoaPods 的重度使用者,我希望能对它做贡献。

现在已经找不到我对 CocoaPods 的第一个 Pull Request 了,但是我还记得当时我完全没有信心,因为:

  • CocoaPods 是一个相当大的项目,我有点找不着北,不知道从哪里着手
  • 根本不懂 Ruby。我觉得相对于 CocoaPods 里面的大师级代码,我的代码看起来肯定会很蠢

所以我从小处开始着手。我只提一些修改错字的 Pull Request,还从 CocoaPods 用户的角度来帮助改进文档,防止其它用户踩我第一次使用 CocoaPods 时踩过的坑。这看起来微不足道,但是确实起到了帮助。

每一个小的帮助,都可以产生大的作用。即使是对于文档的 Pull Request 都是很重要的。📚

正如 Chris Lattner 自己说过的:「从小处入手,每个人都能参与进来。」

初次尝试我不熟悉的语言

在我第一次给 CocoaPods 贡献 PR 后,我觉得是时候尝试着去修复 CocoaPods 代码库中的小 bug 了。即使我根本不会 Ruby,我还是开始修复 CocoaPods 中的一些小问题。Ruby 相当容易理解和阅读(正如 Swift 一样),虽然我很怕把代码搞乱,但是基于原来的代码进行修改很容易。

我第一次贡献的代码受到了 CocoaPods 团队的欢迎。讲真,CocoaPods 团队真的超赞,虽然我自己对第一次贡献的代码没有信心,但他们很欢迎我,这让我很感动。

他们并没有对我说你的代码很烂,相反,他们告诉我如何提高我的 Ruby 技术,并对我的代码进行改进。他们甚至帮我配置了 Ruby 开发环境(我在运行单元测试的时候碰到了一些问题,我一开始并不知道它们是怎么组织的)!这大大鼓舞了我,让我想做得更多更好。

当你为一个开源项目做贡献时,社区是相当重要的。一个好的社区 —— 遵循好的行为规范并欢迎新手 —— 会改变一切。并不是每个人都拥有跟你一样的技术,但是他们渴望提高,了解这一点会让你做得更好。

事实是,我通过对 CocoaPods 的贡献逐渐学会了 Ruby ,我是在 Pull Reuqest 的过程中学习的。

以人为本

有一件事不太显眼,但是非常重要,那就是归属感。在我给 CocoaPods 提了第一个 Pull Request 之后,团队就把我的名字加到了项目的 CHANGELOG 当中,这让我感觉很好。

这对于项目的长期贡献者来说可能并不代表什么,可是对于我这种新加入的贡献者,我的名字出现在上面确实有很大的意义。即使是非常小的贡献,我还是感到十分自豪。

不要害怕向长期贡献者问问题或寻求帮助。就算会花费一些时间,他们也还是会帮你。这并不是浪费时间,因为这会帮你提高然后促使你做更多的贡献。多多益善!

随着时间的推进,我对 CocoaPods 做了越来越多的贡献,某一天他们邀请我加入了核心团队,然后我的名字就被写在了“关于”页面上。这对我来说是一个新的起点。

为 CocoaPods 做贡献也意味着我有机会遇到很多牛人,并且从他们身上进行学习,不管是 GitHub、Slack 这种虚拟世界还是 IRL 这种大会。这真的是跟世界上其它开发者交流的好方法。

送人玫瑰,手留余香

我认为 CocoaPods 社区对我友好欢迎的态度帮了我很多,让我对开源做了更多的贡献。我喜欢与 CocoaPods 团队共事的一个原因是,他们并不会根据你的技术对你做出评判,当你做了某些错事的时候他们会去帮助你,而不是丢弃你,他们会帮助你提高。

但是参与社区有时候真的很艰难。在 GitHub 上每个人都可以提 issue 并提交 Pull Request,但是有些人会用很刻薄的话来提 issue,比如“在我这运行不起来啦,这个库真是没什么卵用”,这并不能提供什么实质性的帮助。我能理解当代码运行不起来的那种沮丧,但是贡献者需要明确以下几点:

  • 开源项目是完全免费的,它没有收过你一毛钱
  • 它的维护者是那些利用自己的业余时间来写代码以及对它改进的人
  • 每个人的时间都是有限的,虽然他们已经很尽力了,但是对开源系统做贡献的人不可能测试到方方面面
  • 说那些刻薄的话于事无补。提供一些更好的描述来帮助我们重现,并且解释你想要帮忙改进的部分。

Orta 说过 送人玫瑰,手留余香(译者注:嗯,作为收了二十多年好人卡的我相当认同这句话)。行为规范很重要,这可以让人们知道如何与人友善,更重要的是,让人们知道他是受欢迎的,只要他们也对别人友善。

你知道吗,提 issue 也是一种参与开源项目的方式。

在 GitHub 上开一个用心编写并且附带重现方法的 issue 与提交一个 Pull Request 同样重要。消除 bug 和提建议都是贡献,只要它们有建设性。

欢迎其它人

当我熟悉 CocoaPods 之后,我也试着去帮助那些新来的人,我想像当时帮助我的那些人一样给其它人提供帮助。

之后,我的新的项目开始受到大家的欢迎,像是 SwiftGenDip 。它们占用了我不少的时间(这就是为什么我最近花在 CocoaPods 上面的时间变少了)。

在那之后,我无意中发现了开源的另一个好处。邮件列表和 Twitter 迅速有人开始讨论我的项目,我的项目很快流行起来,收到了很多来自用户的反馈和 issue,我都有点应接不暇了。

就在这时候 Ilya 开始对 Dip 做出大量贡献,提交了很多修正 bug 和增加新功能的 Pull Requests,于是我决定给他 Push 的权限。

这是我首次将我代码库的 Push 权限交给一个我不认识的人。一开始确实有点慌,因为你永远没办法确定他们的想法是否跟你一致、他们会不会把代码搞乱、会不会有不一样的代码风格、会不会写了跟你之前完全不搭的代码。更重要的是,他们会不会把一切都搞砸。

但是我一点也不后悔这个决定,因为根据我自己的开源背景,我在给他们 Push 权限时一点也不会犹豫。当你信任一个人的时候,你会感觉很棒。结果证明 Ilya 做得相当出色,他给 Dip 增加了很多功能,我一个人是做不到的。从一个新的视角来看你的代码是一件非常有趣的事。

信任你项目的贡献者,这相当重要并且温暖人心。当你在开源系统上信任其它人时,你很少会失望,因为所以的这一切都是为了共享和帮助其它人。

总结

  • 开源很赞
  • 让你有机会结识到很酷的人
  • 分享让人获得满足感
  • 不要因为你的技术感到羞愧或者害羞而不去参加开源项目
  • 再小的 PR 和 issue 都非常重要,关于文档的 PR 和提高文档质量的 issue 都是跟代码贡献一样重要的
  • 当你与人友善时,美好的事情就会发生
  • 开源当作你的默认选项

好了,我已经讲完了我的开源世界经历,希望这可以激发你加入开源的兴趣和信心!

当然,我十分欢迎你们来对我的开源项目进行贡献,特别是 SwiftGen 有很多很赞的改进创意 😉

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

文章目录
  1. 1. 介绍:Swift 开源系统的大事件
  2. 2. 你好 GitHub
  3. 3. 分享你的爱
  4. 4. 不要害怕做贡献
  5. 5. 初次尝试我不熟悉的语言
  6. 6. 以人为本
  7. 7. 送人玫瑰,手留余香
  8. 8. 欢迎其它人
  9. 9. 总结