作者:Olivier Halligon,原文链接,原文日期:2015-12-05
译者:小锅;校对:numbbbbb;定稿:Cee
正如大家所知的,Swift 在本周的早些时候开源了(校对注:按照原文的发布时间来看确实是「本周」)。对社区来说这无疑是一个爆炸性的消息,已经有很多的帖子在讨论这件事会产生的一系列后果。
然而我想做一件跟大家不同的事情™,今天我要趁这个机会跟大家分享一下我自己的开源经历,并说明为什么向开源社区做贡献对每个人都有好处。
介绍:Swift 开源系统的大事件
本周最大的新闻无疑就是 Swift 开源。苹果公司比我们所期待的更进一步,不仅公布了 Swift 代码 的完整 GIT 历史记录,还有其它工具的代码,如 lldb
与 REPL,表明它们使用了 Swift 包管理器,同时尽了他们最大的努力去创造一个更好的社区!
尽管在 WWDC 15 上他们就宣布会将 Swift 开源,但是这个举动还是受到了极大欢迎。我几乎可以确定,没有人料到他们会做出如此大的贡献,而且还做得这么好。
为什么大家对开源如此狂热,为什么它这么棒呢?今天我不准备讨论 Swift 的开源对我们意味着什么 —— 已经有太多的博客讨论过这个问题了 —— 我想跟大家讲讲我自己的开源经历,以及开源是如何改变了我的思考方式。希望看完之后你能明白为何我对开源爱得深沉。
你好 GitHub
与大多数人一样,我一开始只是想写一些代码并丢到 GitHub 上,这就是我的开源初体验。在一开始,我并不认为「我现在为开源做贡献」,我只是觉得 「哎哟,不错哦。我写了一些很赞的代码,让我来把它们放到 GitHub 上吧。这样做很酷,而且可以很容易地跟别人分享我的代码」。
我在 GitHub 上的第一个项目其实只是一些测试,就像我之前写的一些玩具应用一样,仅仅是为了实验一些新概念或者一个新的库。我一向十分好奇并且炒鸡喜欢去测试一些新的框架、新的设计模式或者新的创意,因此我一开始只是随便玩玩。
接下来我完成了第一个真正意义上的库并将其放到 GitHub 上,然后真正意义上地将其共享给其它人。我认为我的第一个 pods 是 OHAlertView
和 OHActionSheet
,接着我写了 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 之后,我也试着去帮助那些新来的人,我想像当时帮助我的那些人一样给其它人提供帮助。
之后,我的新的项目开始受到大家的欢迎,像是 SwiftGen 与 Dip 。它们占用了我不少的时间(这就是为什么我最近花在 CocoaPods 上面的时间变少了)。
在那之后,我无意中发现了开源的另一个好处。邮件列表和 Twitter 迅速有人开始讨论我的项目,我的项目很快流行起来,收到了很多来自用户的反馈和 issue,我都有点应接不暇了。
就在这时候 Ilya 开始对 Dip 做出大量贡献,提交了很多修正 bug 和增加新功能的 Pull Requests,于是我决定给他 Push 的权限。
这是我首次将我代码库的 Push 权限交给一个我不认识的人。一开始确实有点慌,因为你永远没办法确定他们的想法是否跟你一致、他们会不会把代码搞乱、会不会有不一样的代码风格、会不会写了跟你之前完全不搭的代码。更重要的是,他们会不会把一切都搞砸。
但是我一点也不后悔这个决定,因为根据我自己的开源背景,我在给他们 Push 权限时一点也不会犹豫。当你信任一个人的时候,你会感觉很棒。结果证明 Ilya 做得相当出色,他给 Dip
增加了很多功能,我一个人是做不到的。从一个新的视角来看你的代码是一件非常有趣的事。
信任你项目的贡献者,这相当重要并且温暖人心。当你在开源系统上信任其它人时,你很少会失望,因为所以的这一切都是为了共享和帮助其它人。
总结
开源很赞
让你有机会结识到很酷的人
分享让人获得满足感
不要因为你的技术感到羞愧或者害羞而不去参加开源项目
再小的 PR 和 issue 都非常重要,关于文档的 PR 和提高文档质量的 issue 都是跟代码贡献一样重要的
当你与人友善时,美好的事情就会发生
好了,我已经讲完了我的开源世界经历,希望这可以激发你加入开源的兴趣和信心!
当然,我十分欢迎你们来对我的开源项目进行贡献,特别是 SwiftGen 有很多很赞的改进创意 ?
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。