我如何找到一个好的开源项目加入?[关闭]


152

我一年前才刚刚开始工作,出于与其他人相同的原因,我想加入一个开源项目:帮助创造有用的东西并进一步发展我的技能。

我的问题是,我不知道如何找到适合的项目。

如何找到适合初学者的项目?我应该搜索什么属性?什么是警告标志,一个项目可能不会是合适人选?有没有什么工具可以帮助人们与开源项目匹配?

有一个类似的问题在这里,但这个问题与就业做的,仅限于PHP / Drupal的。


9
太酷了,我只是看了一下ArsTechnica,看到了这个问题作为文章。这是链接。arstechnica.com/business/guides/2012/03/...
埃文鲽

Answers:


111

我的第一个开源贡献是为我以前在以前的付费项目上使用过(如果没有它的话,将会遭受很大的损失)的图书馆。在我的初次使用中,我发现了代码中的错误,因此我创建了一个补丁,加入了该项目,并将其提交进行审查。

大约8个月后,当我有空闲时间时,我决定通过为项目做出更多的贡献来回馈(并致力于我的开发技能)。因此,我克隆了存储库并开始熟悉代码库。在向代码库提交次要补丁修复并监视功能请求几周后,我收到了一个功能请求,为该项目添加了一个相当重要的模块。

由于生成许多单独的补丁程序对于任何重要的开发都是非常繁琐的工作,因此我将存储库克隆到git hub上的一个分支,并开始删除代码。几周又几千行代码之后,项目负责人和我一起以与其他代码库一致的方式,将修复程序集成和测试到库中。

我从中学到了很多宝贵的经验:

  • 当我开始时,我不知道如何使用Git,到最后,我可以熟练地创建远程跟踪分支,并将它们合并或重新设置为master分支,而不会费力。
  • 我从VS 2008开始,最终迁移到Linux和Monodevelop从事代码编写工作(因为VS的unicode延迟,行尾在git中很痛苦)。事实证明,在* nix中不能做的事比在* dows中可以做的事多。
  • 我以前从未真正进行过任何单元测试,Nunit可以用,而且编写单元测试是相当基础的工作。
  • 我必须学会吞咽舌头,聆听以及练习耐心。没有必要对您在开源项目中的立场立足,因为涉及的每个人都是知识渊博的人(可能比您自己了解的更多),并且能够基于不交付的实质接受/拒绝您的想法。同时极其谦虚和有益。
  • 仅仅让另一位熟练的开发人员着眼于我的大量代码,便指出了我以前从未考虑过的风格缺陷(以及我指出了他的代码中的缺陷)。对我来说,我了解到定义常数比使用一堆带有详细注释的神奇数字要容易/更好。

该特定项目基于在所有级别的网络协议上生成和解码网络数据包。我对低级网络很有兴趣,因此很高兴与另一位对此领域有共同兴趣和知识的开发人员进行讨论。

如果您只想弄湿自己:找到一个已经使用的项目;克隆存储库;并开始查看您是否可以修复一些错误和/或添加一些单元测试。用新鲜的眼光看别人的代码库似乎很吓人,但这是学习中非常有价值的技能。提交一些补丁。您可以期望您的代码在开始时会受到严格审查。不必担心,这是获得项目管理员信任的正常过程。

在与项目建立绩效基础后,管理员开始寻求更多职责,例如提出新功能或要求分配以实施功能请求。

如果您在一个主要的开放源代码存储库网络(github,sourceforge,google代码)上找不到一个已经存在的项目,请考虑一个您真正想要使用的应用程序,该应用程序尚不存在,然后启动您自己的应用程序。

做好谦卑的准备,并期望工作被拒绝,以便进行进一步的修订。任何人都可以向开放源代码项目中添加代码的神话是完全错误的。您和推送访问之间始终有一个网守。您的代码越好,从长远来看,随着您对项目管理员的信任,对代码的审查就会越少。如果这是您的项目,那么您将成为该网守。

更新:

我只是考虑了一下,就意识到我没有理会提到很多答案都引用了哪个项目。对于那些想知道的人,它是SharpPcap。首席开发人员Chris Morgan非常专业,而且观点明确。他为项目管理工作做得很艰辛,并教会了我很多有关OSS项目成熟的知识。

由于个人时间的限制,一年多来我一直无法提供代码,但我仍然尝试通过潜入Stack Overflow并偶尔回答有关SharpPcap的问题来回馈他人。


您能在这方面推荐一些受欢迎的网站吗?
Aditya P

2
@AdityaGameProgrammer我会更加强调寻找特定项目而不是开源托管站点。托管站点只是开源项目的垃圾场,如果可以找到更好的功能(例如,支持特定的许可证,更好的版本控制支持,更好的错误跟踪器等),则某些项目将迁移到其他站点。我已经列举了一些。恕我直言,github,谷歌代码,和sourceforge是最流行的。Launchpad(使用市集版本控制)是您在其中进行大多数Ububtu / linux开发的地方。
Evan Plaice

2
@AdityaGameProgrammer(续)Github,sourceforge和google代码都是大量的项目。因为sourceforge已经存在了很长时间,所以您可能会发现更多死掉/孤立的项目。如果您需要一些时间来首先考虑自己感兴趣的项目,那么找到要加入的项目会容易得多。例外是,如果您要托管自己的项目。然后,花一些时间四处寻找最适合您通常的开发工作流程的功能。
Evan Plaice

谢谢。我以前在sourceforge上找到一个的尝试使我进入了许多死掉/孤立的项目。
Aditya P

28

我建议您在这里找到最合适的衣服:

  1. 如果您有一个已经使用,了解和关心的开源项目,那么它应该是您尝试的第一个候选人。否则,想想你什么像一般做的和搜索这方面的项目。

  2. 找到潜在项目后,请不要着急。尝试自己使用它。从描述和评论看来,它的作用是否令人满意?如果不是的话,那还不是一个完整的表演终结者。也许这是您进入并真正有所作为的机会。毕竟,没有人需要其他开发人员来提供完美的产品。但是,当您在感兴趣的领域获得新技术的第一手经验时,它将为您提供重要的见解,使其成为该项目的一部分。

  3. 同样在开始在项目上投入太多时间并了解其来龙去脉之前,请考虑在项目邮件列表,论坛甚至是错误跟踪系统中闲逛几周。如果您将开始定期为该项目做贡献,那么您将在那里花费很多时间。

弄清楚:您喜欢在附近闲逛,还是对您有拖累?感觉这个项目有一个良好而充满活力的社区,还是快要死了?那里的核心人员似乎在鼓励和指导新移民,还是您将自己生活?

对可能在不同领域的几个项目执行这些步骤,并且当您加入错误的团队时,您不太可能感到失望。这样的经历可能会阻止您将来再次这样做。

还有一些想法:

如果您真正感兴趣的项目是一个知名度很高的项目,并且周围有很多开发人员和活动,那么您可能会很难在这里建立足够的声誉,例如获得权利或在社区中扮演有趣的角色。在这种情况下,请考虑加入具有较低可见性的相关衍生项目。例如,与其尝试开始为jQuery做贡献,不如寻找适合您的jQuery插件。稍后,您可以考虑“向上移动”。

如果您喜欢一个项目,但对它的大小,复杂性或代码质量要求感到恐惧,请考虑从支持角色开始,例如测试,文档维护或错误报告验证。如果您在项目邮件列表中询问,他们目前最需要哪种帮助,他们将非常乐意为您提供指导。:)

这样,您将可以在项目中学习并建立声誉,同时为项目做出更多贡献,这比开始提交次标准补丁之前要提交的次标准补丁要好得多。

最后也是最重要的一点:如果您在一个地方被烧毁,请继续前进;不要放弃。

希望能有所帮助。


2
+1表示“考虑从支持角色开始”。编写测试确实很容易,仔细查看测试可以很好地了解代码要完成的工作。文档是了解“大局”的好方法,而验证错误是打破僵局的良好低门槛。开发人员通常忽略的工作表明,您的重点是改善项目,而您的贡献不只是自我驱动的。自我问题会使项目维护者的生活变得困难,因此他们提防此类事情。
Evan Plaice 2012年

9

我强烈建议您找到一个真诚的兴趣并积极使用的开源项目。

原因很简单:它使琐事和业余爱好有所不同。

看一下你的电脑。您使用了什么开源软件?猜测可能是Chrome或Firefox,或者可能是Open Office或Instant Messenger客户端。它们是完美的,还是有一些您想改变的小东西?

如果有的话,现在是时候做点什么了。


8

我建议像人们已经从事多年一样,寻找(或开始)一个项目,开始使用开放源代码软件来做事。这对您来说似乎微不足道,甚至可能过于简化。但是,很难描述使用某种东西,找到一个错误,获取源代码并进行修复的满意度。或者,也许对其进行更改,使其以您希望的方式工作。

另外,不要只是为了“参与”而黑客。我95%的Linux内核补丁都将一去不复返,我可以肯定的是,除了我之外,没有人会想要它们。如果有其他能干的内核黑客曾经看到我,我可能会被迫接受精神病评估。但是我仍然很喜欢我的实现,piglatin_printk()它的实现始于几年前的4月1日:)

是的,让您的代码和思维过程在许多其他有能力的人士面前是无价的,因此学习如何进行沟通和协作也是如此。一个单独的项目是向您展示不该做的好方法。提示,不仅仅使用版本控制软件,邮件列表和错误跟踪器,它还有其他更多功能。

首先,我建议您深入研究Ohloh来查找可能对使用感兴趣的软件。下载,构建,玩游戏。然后去抢别的东西。最终,您会想要改进某些东西,或者意识到您有实现与发现完全不同的东西的冲动。

另一有帮助的是为一家开放友好的公司工作。我的公司广泛使用Xen,因此我发现有趣的错误并加以修复没有问题,因为无论如何我们都需要这样做。他们也不介意参加RFC和规范草案之类的员工,因为我们最终将使用结果。


+1 Piglatin_printk()?听起来很有趣。我想看看实际情况。毫不奇怪,您的大多数Linux内核补丁都被拒绝了,在如此关键的项目中没有太多的娱乐/创造空间。幸运的是,有很多小型项目的接受代码的门槛要低得多,即使在提交之前需要做一些工作。
伊万·普赖斯

1
@EvanPlaice他们没有被拒绝,只是从未提交过;)
Tim Post

7

OpenHatch是专门为此创建的。

报价:

OpenHatch是一个非营利性组织,致力于使潜在的免费软件贡献者与社区,工具和教育相匹配。

您可以按类型,技术,所需的技能水平等浏览项目,并找到与您的水平相匹配的项目。


很棒的小网站:)也可以去看看freecode.com
2014年

4

当人们希望开始使用开源开发时,我反复注意到的一件事是,他们对大型项目的巨大复杂性和规模感到不知所措。几年前,我遇到了同样的问题,根据我的经验,最好不要立即关注更大的项目。

花了一些时间看了我可能喜欢的项目之后,我意识到它们仍然遥不可及,然后我自己开始从事很小的项目。我认为仅在Github上发布代码就可以了,无论它是否真正相关或其他人是否会开始使用它。最终,人们可能会开始对您的工作产生兴趣。甚至否则,您将获得信心和技术能力,以缓慢地转向更大,更受欢迎的项目。


3

这里有一个专门用于此代码的新网站,称为Code 52,它通过每周启动一个新的OSS项目来鼓励新开发人员参与开源。

这个想法是,对于以前从未参与过开源的人们来说,这似乎并不那么令人畏惧,并且希望他们也会更倾向于参与其他OSS项目。


1
我一直在研究它,并添加了一些注释。Code52由Readify公司的3名开发人员领导,他们声称曾获得“微软2012年度合作伙伴”称号。尽管这些项目都托管在GitHub上,但每个项目都是用WinJS(即目标Win8)编写的,并带有Microsoft Public License。从粗略的外观看,MPL是左复制的,但带有某些限制,要求衍生产品继承相同或相似的许可证。也就是说,它与GPL许可证相比更像是GPL许可证,而对MIT的限制要少得多。
Evan Plaice 2012年

该项目看上去非常吸引人,但我不能不感到这是微软新创建的开源开发人员数字共享裁剪程序,无需花费一毛钱就可以填充新的Windows 8生态系统。听起来不像是戴了锡箔纸的锡箔帽子,但MS在与开放源代码集成时并没有最佳声誉。
Evan Plaice 2012年

1
-1看起来这个网站基本上一年前就死了(没有更多更新)
Michael Durrant

3

我建议阅读:http : //open-advice.org/

它的目的是帮助那些创建和维护社区的人,以及对自己想加入哪个社区或如何加入社区不自信的人们。

如果失败,请找到一个任务与您产生共鸣的项目,或者分叉并为已经对您有用的项目做出贡献。

祝好运。


3

当我开始时,我在网上搜索选项,事实证明,找到适合初学者的东西很有挑战性。

有些项目之所以难以做出贡献,不是因为它们太先进,而是因为社区不受欢迎。因此,撞墙时不要灰心。

在搜索过程中,我决定整理一个清单,列出10个开源项目,初学者可以在无需太多压力的情况下开始支持。这是要使用的链接:

十个项目供初学者支持和学习

希望对您有所帮助,如果发现不错的产品,您可以随时添加更多!


您介意进一步解释它的功能吗,为什么在回答所提问题时推荐它?在Stack Exchange上不太欢迎“仅链接的答案”
gna

2

我建议您根据自己感兴趣的主题开始一个项目。

通常,通过从事一个项目可以学到很多东西。无需查看其他人如何编码即可学习如何更好地编码。有时候,您实际上会看到不该做的事,因为其他人通常没有比您经验丰富的经验。

通常,这有助于查看其他人的代码,但是您会通过使用的库和组件在自己的项目中遇到其他人的代码。

经验会教你什么是好事和坏事。


1
虽然我认为这是一个好主意,但作为初学者项目来做可能会令人生畏。尤其是当您没有代码审查或其他人可以添加输入时。我自己的项目经历了许多重写和数千行代码,因为没有人告诉我X更好,但我仍然遇到这个问题。加入已建立的项目将加快学习的步伐
TheLQ'9

@TheLQ:我想这取决于您的经验水平,从头开始做一些事情会教给您很多教训,而加入一个已经做很多事情的团队不会学到什么。我认为,关于您自己或他人项目的利与弊。
Brian R. Bondy

@TheLQ我完全同意。加入已经存在的项目是非常宝贵的经验,因为它使您了解如何管理开源项目以及组织的结构。在完成其他人的成功项目之后,要创建我自己的一个项目,就是在公园里散步。
Evan Plaice

2

我是Google代码的项目所有者,我正在寻找贡献者。(不过,我不会将此答案误用于广告。)因此,我的观点可能对您很有趣。

您首先必须找出感兴趣的内容。然后在与您的兴趣相关的某些领域中发展一些专业知识。然后找到需要和需要您的专业知识的项目。

项目越小,已经存在的贡献者越少,寻求贡献者的机会就越大,您可以直接联系作者/项目所有者。告诉他们a)您的专长是什么b)您认为可以在项目中应用的专业知识c)您认为可以实现的目标。

切记:仅了解一种或两种主流编程语言并不是专业知识。


您如何建议某人去确定他们感兴趣的东西或在这些领域建立专门知识?
亚当李尔

2
@Anna我不确定我是否理解您的问题。我的意思是,这里有数百个主题-从诸如网络协议或GPU的内部工作之类的低级内容到高度抽象,近乎数学的主题(解析,类型系统,类别理论等)。最伟大的天才不会掌握所有这些知识,而是乐于找一个在他(他)才不是的领域里是专家的人。但是真正兴趣是什么,除了您之外,谁能告诉您?
Ingo 2012年

1
是的,发现兴趣也许是非常个人的(或建议等同于“尝试不同的事物并看您喜欢的东西”),但是获得专业知识又如何呢?您说的不仅仅是了解几种语言。因此,给定一个新的主题/主题,您将如何获得专业知识?对我而言,加入OSS项目将是该过程的一部分,但是如果我没看错,您的建议是在加入项目之前应该是一名专家。
亚当李尔

我该怎么办?看书。阅读PDF。与您认识的人或在网上讨论。试试看。实践。回答有关该主题的所有SO问题。有一天,注意到很少有人比你更了解。-不要对我所说的“专家”一词直白,但要记住,在开源项目中,由于它是自愿的,因此没有办法强迫某人从事工作,因此知道自己在做什么和想要什么的人做到这一点 是最受欢迎的。
Ingo 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.