初学者指南:为开源做贡献

当我刚开始做Rails开发者时,我认为所有的Rails gems都是魔法。一些聪明人正在制作这些牛逼的类库让我使用!我不知道这些类库有多少可以使用,我认为它们是好的。它们运行着,并做了我需要它们做的工作。它们好像如此深奥、被想出来,以致于我甚至不知道该如何为它们贡献力量,即使我想!

时至今日,我仍然没有给Rails社区贡献任何开源代码。那是因为Rails社区在开源方面非常活跃,因此找到你要贡献的东西实际上是比较困难的!当然你能够翻阅问题并试着解决,但是,老实讲,它们通常太复杂了、令人望而生畏。有这些聪明人讨论问题,你能足够优秀地解决问题是难以想象的!

快进到Mobile Makers,那时候我刚接触iOS,我第一次给开源代码做了贡献!从那以后,我做了更多,我不再害怕向甚至更多的项目贡献代码!下面是我如何迈出这一步以及在这个过程中我学到了什么:

它不是魔法

走出Rails社区,我很快知道了,大家对开源类库事实上有某种不信任感。当我想一直使用所有的CocoaPods时(就像Rails!),团队的高级iOS工程师总是质疑外部类库的使用,如果可能,宁愿建立我们自己的类库。

在iOS项目,有很少的iOS类库可以一直使用的,大多数项目仅仅在开始的时候使用一些类库!由于CocoaPods的出现以及删除或升级依赖项是如何容易,情况正在发生着变化,但是它还达不到Rails的级别,你的大部分项目仍然由即插即用类库构成。

意识到这些外部类库不是魔法,我的心态改变了,也让我较以前产生了巨大的改变。懂得了编写类库的那个人是一个真实的人,他会犯错,或许不会写出最优的代码,他也不能一直考虑到所有的边界情况,这让我能够轻松发现我能够做贡献的小的(或大的)地方。

关注就是共享

有一些人鼓励积极寻找开源项目去贡献力量,而我发现我贡献的所有项目都是实际在我自己的代码中用到的。

真相是,我没有时间为了贡献而去主动搜寻github上的问题/类库。但是,当我在自己的项目中用到一个类库时,我希望它具备X功能或那个bug Y被解决了,搞定并反馈回去是明摆的事!事实上,自从我喜欢向开源贡献力量以后,当我发现这些机会时,我是超级激动的!

这把我带到了下一个论点……

它是这样一种美好的感觉……

向开源贡献力量真的容易上瘾!先前知道了如何编码,让计算机实现你的愿望是不可思议的,这让你觉得你像个魔法师。但是,当你能够把其他人的“有魔力的”代码变得更好、且他们认同你能够使代码变得更好(通过merge)时,这种感觉是无法用言语表达的。它就像你刚刚变成了10级的魔法师而不是1级。

小的开始

此外,我把开源贡献者看做是用魔棒来作彻底改变、改进一切的魔法师,但实际情况是大多数变化都很微小。他们只是根据每个人的基本方式累计增加,并最终改变和完善了整个类库。因此不要低估小改动的力量!

下面是个例子,我最近贡献力量的过程:

修改一个README

我可能想把Toast类库增加到我的iOS项目,但是他们在README没有提到有可用的CocoaPod。既然我只是想测试我项目中的类库,我想让它较为容易地移除掉。因此即使我以前使用过这个特定类库,也知道它好用,我开始为了另一个Toast类库而搜索CocoaPod。

找了一些类库,我发现这个特定的Toast类库事实上就是CocoaPod!为了确保其他iOS开发者知道有可用的CocoaPod,我就CocoaPod安装说明提交了一个pull request到类库的README。小改动,但是希望对其他开发者有帮助!

增加额外相同的功能

在为CodePath最终项目构建Android app时,我的团队想尝试当前官方Android字体—Roboto。事实表明它在并入外部字体到Android时非常繁琐,因此,我们使用名叫RobotoViews的类库来解决。基本上,每个view不得不经过配置才能得到Roboto的typeface。

然而,有一个我们需要的类库而RobotoViews没有包括进来—较新的Switch view。添加Switch view只需按照其它views的方式大量地拷贝/粘贴,因此它的添加不是太难,但是另一个view可以作为RobotoViews使用!

换句话说,RobotoViews的作者已经做了所有艰难的工作使得只需要修改一些地方就可以添加一个新的view。

类似的,我通过给流行的iOS Foursquare client library添加原来没有的一个额外功能来贡献力量,只是因为有了作者抽象这个过程的工作,这非常容易添加。

重构

当我注意到带有少量变化的三个函数有着相同的代码时,我给ECSlidingViewController添加了一个非常小的修改,来确保在滑动菜单滑出去时键盘隐藏掉。因此我重构了代码,产生一个函数,让三个函数仅仅通过传入一个不同的参数来调用它,因此将来需要改动这个函数的人只需要修改一次。

正如你看到的,我的所有开源贡献都是非常微小、容易做的!当你坚持使用外部类库时,你会看到相似的机会。因此向前走,并作出小的改动——它们是有价值的!

怎么做

看看这个伟大的《RailsCast:一步一步教你如何为开源贡献力量》(它和非rails项目非常类似)。但是基本上,都有下面的几步:

Fork

在Github上找到你想贡献的类库,只需点击Fork按钮!

Clone

下一步,克隆你想fork的类库——它现在应该在你的名字下(比如:NatashaTheRobot/ECSlidingViewController),而不是原作者!

Branch, Change, Push

一旦你克隆了代码库,改变为代码库文件夹。接下来,用能够反映你将要做的修改的、有意义名字来checkout一份新的分支。作出修改,push这个分支到github。

当你去你的Github profile主页,你会看到一个大大的绿色“Compare and Pull Request”按钮。看一下你的文件,确认一切ok。然后确信你给原始分支发送一个pull request(不是你fork的那个分支)。当你做完pull request之后,应该看看是不是这样!再一次,确认你刚刚给原始作者的master分支的master做了一个pull!

Tweet

这一步当然是可选的,但是我喜欢给作者发送tweet,告知他们变化。他们可能没有打开github的通知功能,尤其是那些最近很少改动的、比较老的代码库,因此让他们知道并展开一次沟通是比较好的。

他们或许太忙而没有merge,因此当他们回复,并告知你,在他们有空的时候再去看。你知道你的pull request不会永远悬而不决了!

Enjoy!

真的,为开源贡献力量真的有意思,也是跟最好的人学习以及提高你自己技能的有效方法。希望这个向导能够减轻你对开源的惧怕!!!

如果你已经贡献了,请在评论里分享你的故事!

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-09-26 19:08:30

初学者指南:为开源做贡献的相关文章

《开源思索集》一我能为开源做些什么?

我能为开源做些什么? 开源思索集Crmky独立开发Cindy,已经很久了--至今只有他一个人. 这是一个Java的NIO开发框架,我任职的上一家公司,和现在所在的这家公司,都已经使用了这个框架.但是,开发人员始终只有他一个人. 前天他写了一篇Blog:<目标>,对我有很大的触动.我也一直存在这样的疑虑,为什么我们要用Java开发网络应用?或者说,使用java开发的网络应用,难道注定只是一个快速原型,就像当年用VB开发桌面应用?一旦需要面对性能需求时,就得推翻过去的工作,用C/C++重新实现一遍

《SQL初学者指南》——1.3 Microsoft SQL Server、Oracle和MySQL

1.3 Microsoft SQL Server.Oracle和MySQL SQL初学者指南尽管我的目标是介绍SQL的核心语言,因为它适用于所有的实现,但是我也会提供SQL语法的一些具体示例.因为各个厂商的语法各异,所以我决定重点关注如下这3种数据库所使用的SQL语法: Microsoft SQL Server:Oracle:MySQL.我会在本书的正文中介绍Microsoft SQL Server的语法.然后,如果这3种数据库之间有任何的差异,我会像下面这样,专门指出MySQL或Oracle的

《C语言编程——零基础初学者指南(第3版)》一1.2 编写C语言程序需要什么

1.2 编写C语言程序需要什么 C语言编程--零基础初学者指南(第3版)在计算机上编写并执行C语言程序之前,需要一个C编译器(C compiler).C编译器用于创建(build)或编译(compile)C程序(编译是一个技术术语,指将程序转换为计算机可读的内容),让你在需要查看结果时可以运行已编译的程序.现在有许多非常优秀且免费的软件包,可以用它们来编辑并编译你的C程序.通过网络搜索即可找到诸多这样的软件.本书使用的是Code::Blocks(www.codeblocks.org ). 提示

RMAN 初学者指南

初学 RMAN 初学者指南 转自聚贤庄 作者:gototop ============================================ 这篇文章是去年写的了,最初发表在chinaunix.net的oracle论坛里,收录在旧版文集中,可能很多没有看到,总有人写信要,今天乘改版之际就把它单独拿出来了.(gototop 2003.6.24注)   RMAN(Recovery Manager)是DBA的一个重要工具,用于备份.还原和恢复oracle数据库,前一段时间有网友找我要,可惜没

RMAN初学者指南

RMAN初学者指南    RMAN(Recovery Manager)是DBA的一个重要工具,用于备份.还原和恢复oracle数据库,前一段时间有网友找我要,可惜没时间,趁这两天出差在外没什么事,就写了一下,供初学的朋友参考.本文将介绍RMAN的基本操作,更多的信息请参考<Oracle8i Backup & Recovery  Guide>及RMAN手册,或者是OCP Student Guide M09096<Backup and Recovery Workshop>Vol

《C#初学者指南》一导读

前言 C#初学者指南 欢迎阅读本书. C#(读作"c sharp")是一种易学的.成熟的编程语言.同时,它也是.NET Framework 的一部分..NET Framework是很大的一个技术集合,它包罗万象,以至于初学者往往不知从何入手.如果你也是一名初学者,那么本书非常适合你,因为本书就是专门为.NET初学者所编写的教程. 作为初学者的教程,本书并不会介绍.NET Framework中的每一种技术.相反,本书涵盖C#和.NET Framework 语言中最重要的主题,掌握了这些内

《SQL初学者指南》——1.8 空值

1.8 空值 SQL初学者指南 表中每个单独列的另一个重要属性是,该列是否允许包含空值.空值表示某个特定的数据元素没有数据.按照字面意思解释就是没包含数据.空值不等同于空格或空白.从逻辑上讲,空值和空格要区分对待.在第8章中,我们会详细介绍如何检索包含空值的数据. 许多SQL数据库在显示带有空值的数据时,使用大写的单词NULL来表示.这么做是要让用户能够识别它包含的是一个空值,而不是一个空格.我也会遵循这个惯例,在书中用NULL来强调它表示一个特殊类型的值. 数据库的主键不能包含NULL值.这是

《C语言编程初学者指南》一导读

前言 C语言编程初学者指南 C语言是一种强大的基于过程的编程语言,它于1972年由Dennis Ritchie在贝尔实验室发明.C语言最初是开发来用于UNIX平台的,但却已经扩展到很多其他的系统和应用中.C语言还影响了很多其他的编程语言,例如C++和Java. 编程初学者,特别是那些进入计算机科学和工程专业学习的人,需要构建有关操作系统.硬件和应用程序开发概念的牢固基础知识.很多的学院教授学生学习如何用C编程,从而使他们能够学习高级概念以及在C的基础上建立起来的其他语言. 学习C语言的很多学生也

《C语言编程初学者指南》一第2章 基本数据类型

第2章 基本数据类型 C语言编程初学者指南本章介绍计算机内存概念的基本知识,以及如何从用户那里获取信息并使用C语言的数据类型将其保存为数据.你将学习如何使用printf()函数显示变量内容,以及如何使用基本的算术运算来操作变量中存储的数据. 本章包括以下内容: 内存概念简介:理解数据类型:初始化变量和赋值运算符:打印变量内容:使用转换修饰符:理解常量:使用编程惯例和样式:用C程序做算术运算:理解运算符优先级:本章程序:Shop Profit.