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

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

如何找到适合初学者的项目?我应该搜索什么属性?有什么警告信号表明某个项目可能不合适?

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

评论

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

#1 楼

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

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

因为生成许多单独的修补程序很简单对于任何重要的开发工作,我都很乏味,因此将存储库克隆到git hub上的一个分支,并开始删除代码。几周几千行代码之后,我和项目负责人通过与库中其余代码一致的方式,将修复程序集成和测试到库中,从而进行了工作。

这是无价的我从以下过程中学到了很多东西:


开始时,我不知道如何使用Git,到最后,我可以熟练地创建远程跟踪分支并将它们合并或重新建立到师傅支流不息。
我从VS 2008开始,最终迁移到Linux和Monodevelop从事代码编写工作(因为VS的unicode延迟,行尾在git中很痛苦)。事实证明,在* nix中不能做的事比在* dows中可以做的事要多。漂亮的基本东西。
我必须学会吞咽舌头,聆听以及练习耐心。没有必要对您在开源项目中的立场立足,因为涉及的每个人都是知识渊博的人(可能比您自己了解的更多),并且能够基于实质性的交付而不接受您的想法。这同时非常令人感到谦卑和收获。
让另一位熟练的开发人员着眼于我的大量代码,就可以指出我以前从未考虑过的风格缺陷(以及我指出了他的缺陷)。码)。对我来说,我了解到定义常量比使用带有详细注释的神奇数字更容易/更好。

该特定项目基于在所有级别的网络中生成和解码网络数据包。网络协议。我对下层网络有个人兴趣,因此很高兴与另一位对此领域有共同兴趣和知识的开发人员进行讨论。您已经使用;克隆存储库;并开始查看您是否可以修复一些错误和/或添加一些单元测试。用新鲜的眼光看别人的代码库似乎很吓人,但这是学习的一种非常有价值的技能。提交一些补丁。您可以期望您的代码在开始时会受到严格审查。不用担心,这是赢得项目管理员信任的正常过程。

与项目管理员建立良好关系后,便开始寻求更多职责,例如提出新功能或要求分配以实施功能请求。

如果您不能在一个主要的开放源代码存储库网络(github,sourceforge,google代码)上找到已经存在的项目,请考虑您真正想要使用的应用程序,它不会还不存在,开始你自己的吧。

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

更新:

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

由于个人时间的限制,我无法在一个项目中贡献代码。年,但我仍然尝试通过潜伏在Stack Overflow上并偶尔回答有关SharpPcap的问题来回报。

评论


您能在这方面建议一些受欢迎的网站吗?

– Aditya P
2011年3月14日下午6:08

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

–伊文·普莱斯
2011-3-14在21:55

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

–伊文·普莱斯
2011-3-14在22:03

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

– Aditya P
2011-3-15在4:36

#2 楼

我建议您在这里找到最合适的方法:


如果您已经使用,了解并关心一个开源项目,那么它应该是您的第一个候选人尝试。否则,请考虑一般要做什么,然后在该区域中搜索一个项目。
找到潜在项目后,请不要着急。尝试自己使用它。从描述和评论看来,它的作用是否令人满意?如果不是的话,那还不是一个完整的秀场停止者;也许这是您进入并真正有所作为的机会。毕竟,没有人需要其他开发人员来提供完美的产品。但这将为您提供重要的见识,让您是否想成为该项目的一分子,同时在感兴趣的领域获得新技术的第一手经验。并了解其来龙去脉,请考虑在项目邮件列表,论坛甚至Bug跟踪系统中徘徊两周。如果您将开始定期为项目做出贡献,那么您将在那里花费很多时间。

弄清楚:您喜欢在附近闲逛,还是对您有拖累?感觉这个项目拥有一个良好而充满活力的社区,还是快要死了?那里的核心人员似乎在鼓励和指导新移民吗,或者您将自己一个人做?一个错误的团队。这样的经历可能会阻止您将来再次这样做。

更多的想法:

如果您真正感兴趣的项目是一个知名度很高的项目,并且周围有很多开发人员和活动,那么您可能会很难在这里建立足够的声誉以在社区中获得例如落实权利或有趣的角色。在这种情况下,请考虑加入具有较低可见性的相关衍生项目。例如,与其尝试开始为jQuery做贡献,不如寻找适合您的jQuery插件。以后,您可以考虑“上移”。报告验证。如果您在项目邮件列表中询问,他们目前最需要哪种帮助,他们将非常乐意为您提供指导。 :)

这样,您将可以在项目中学习和建立声誉,同时为项目做更多的贡献,而不是开始提交不合格的补丁,而这些补丁将被拒绝多次直至准备就绪。

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

希望有帮助。

评论


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

–伊文·普莱斯
2012年3月20日在20:08



#3 楼

我强烈建议您找到一个您真诚的兴趣并积极使用的开源项目。
看看您的计算机。您使用了什么开源软件?猜测可能是Chrome或Firefox,或者可能是Open Office或Instant Messenger客户端。它们是完美的还是是否有一些您想改变的小东西?

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

#4 楼

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

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

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

首先,我建议深入研究Ohloh来查找您可能会对使用感兴趣的软件。下载,构建,使用。然后去抢别的东西。最终,您会想要改进某些东西,或者意识到您有冲动去实现与发现的东西完全不同的冲动。我的公司广泛使用Xen,因此我发现有趣的错误并进行修复没有问题,因为我们仍然需要这样做。他们也不介意参加RFC和规范草案之类的员工,因为我们最终将使用结果。

评论


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

–伊文·普莱斯
2012年11月14日下午3:06

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

– Tim Post
2012年11月14日在8:41

#5 楼

OpenHatch是专门为此目的创建的。工具和教育。


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

评论


很棒的小网站:)也可以签出freecode.com

–那霸
2014年6月11日,12:15

#6 楼

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

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

#7 楼

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

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

评论


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

–伊文·普莱斯
2012年11月14日下午4:38

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

–伊文·普莱斯
2012年11月14日下午6:16

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

–迈克尔·杜兰特(Michael Durrant)
13年4月4日在20:20

#8 楼

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

它旨在帮助那些创建和维护社区的人,以及对自己想加入哪个社区或如何加入社区不确定的人做到这一点。

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

祝您好运。

#9 楼

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

有些项目之所以难以做出贡献,不是因为它们太先进,而是因为社区不受欢迎。因此,当您遇到困难时,不要灰心。这里是要使用的链接:

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

评论


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

– gna
13年8月28日在4:33

#10 楼

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

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

通常可以帮助查看其他人的代码,但是您将通过使用的库和组件在自己的项目中遇到其他人的代码。

经验会教你什么是好的和坏的做法。

评论


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

–TheLQ
10-9-2'2:42

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

–布赖恩·邦迪(Brian R. Bondy)
2010-09-2 11:41

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

–伊文·普莱斯
2010-09-12 10:33

#11 楼

我是Google代码的项目负责人,而且我正在寻找贡献者。 br />首先,您必须找出自己感兴趣的内容,然后在与您的兴趣相关的某些领域中发展一些专业知识。
然后找到一个需要和需要您的专业知识的项目。 />
项目越小,贡献者就越少,寻求贡献者的机会就越大,您可以直接与作者/项目所有者联系。告诉他们a)您的专业知识是什么b)您认为它可以在项目中应用的范围c)您认为可以实现的目标。 。

评论


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

–亚当·李尔♦
2012年3月14日16:16

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

– Ingo
2012年3月14日下午16:28

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

–亚当·李尔♦
2012年3月14日下午16:34

我该怎么办?看书。阅读PDF。与您认识的人或在网上讨论。试试看。实践。回答有关该主题的所有SO问题。有一天,注意到很少有人比你更了解。 -不要从字面上看我是“专家”,而是要记住,在开源项目中,由于它是自愿的,因此没有办法强迫某人从事工作,因此知道他们在做什么和想要的人做到这一点是最受欢迎的。

– Ingo
2012年3月14日17:52