通过贡献学习 每次遇到问题时,它都会对你大有裨益 贡献清单 发现贡献机会 摘要 通过贡献学习 想要了解更多?PS:启用 TypeScript 的严格模式 #1783 lib.dom.d.ts 中 NamedNodeMap 接口缺少字符串索引器?#30928 修复了一些前端 linting 问题 #2495 开始使用

2025-05-24

通过贡献来学习

这对你很有好处

每次你遇到问题

贡献清单

发现贡献机会

概括

通过贡献来学习

想要了解更多?

聚苯乙烯

启用 TypeScript 的严格模式 #1783

lib.dom.d.ts 中的 NamedNodeMap 接口缺少字符串索引器? #30928

修复了一些前端 linting 问题 #2495

开始

为开源项目做出贡献有助于您提高专业技能并发现新的机会。

成为一名专业的软件开发人员需要不断提高和学习。

无论您是训练营新手、大学毕业生还是软件开发老手,探索不同的软件开发方法对您自己的专业发展(和好奇心)都是有益的。

保持节奏相当困难。你必须“横向”成长——了解并积累新技术的经验,使用主流流行工具提升你的专业知识;同时,你还需要“纵向”进化,解决更复杂、更抽象的问题。 

经验丰富的开发人员会受到其所在团队所采用的技术栈的限制。了解不同的方法将为他们带来优势,并让他们对团队/公司中常见的解决方案以及替代方案展现出不同的视角。

对于职业生涯初期的开发人员来说,挑战更是无比巨大。琳琅满目的工具和技术令人眼花缭乱!如果没有处理过类似问题的经验,很难知道应该关注什么,以及哪种工具最适合特定的任务。

课程和教程,即使是高级的,通常也无法提供所需的信心水平。总有一道“超越教程”的墙。你偶然发现了一个超出教程范围的问题,于是开始从其他地方寻找解决方案。


我的主要背景是 Web 开发,而这个软件开发领域在过去几年里发生了巨大的变化。由于每周都会涌现大量新工具和新技术,出现了一个众所周知的“JavaScript 疲劳”现象。JavaScript 语言本身也发生了巨大的变化,并成为了地球上最受欢迎的编程语言。

2019 年 Stackoverflow 开发者调查 - 最热门技术

Stackoverflow 开发人员调查 2019 - 最受欢迎的技术。

在这篇文章中,我想分享我在过去几年中一直在实践的使用开源项目进行专业开发的技术。

JS 生态系统特别“开源”——允许充分利用 OSS 的功能。

这对你很有好处

为开源做贡献对你有好处。实际上,这对每个人都有好处,原因如下。

你帮助别人

无论您的贡献类型是什么 - 文档、代码更改甚至只是提出一个问题 - 您都会改进我们所有人使用的工具并使其他开发人员的生活更轻松。

优良的项目质量

开源软件不再是弱势群体。其代码质量通常远超内部代码库。通过参与如此高质量的项目,你可以看到其他人是如何开发优秀软件的。

Stackoverflow 开源项目质量 - 2019 年调查。链接

Stackoverflow 开源项目质量 - 2019 年调查。

了解专业软件开发

您可以真正看到并了解微软、谷歌或 Facebook(以及许多其他以优秀工程而闻名的公司)的软件是如何开发的——这些公司使用开源许可证来共享内部编写的代码。 

与专家合作

识别、实施和维护一个成功的软件项目需要相当多的经验和专业知识。 

这些工具背后的开发者对自己的创作充满热情,热爱自己的工作——他们是真正的专家。与他们合作时获得的反馈非常宝贵。

你正在创造你的专业知识的证明

在 Github(或任何你选择的平台)上拥有令人印象深刻的作品集,对未来的雇主来说是一个可靠的指标。此外,许多猎头也使用 Github 来寻找人才。

许多公司聘请核心贡献者来从事公司支持的开源项目。 

Andrew Clark 发推文表示自己被 Facebook 聘用。在此之前,Andrew 已经为 ReactJS 生态系统做出了许多贡献。

一些公司赞助开源项目的维护者,但没有雇佣他们。

维护者通过 Open Collective 获得对 BabelJS 支持报酬的示例。

维护者通过 Open Collective 获得对 BabelJS 支持报酬的示例。

它是免费的

教育和经验成本高昂。参与开源项目并做出贡献的同时,你还能免费获得宝贵的软件开发实践经验、获取反馈并创建作品集!

Stackoverflow 非正式教育类型 - 2019 年调查。

Stackoverflow 非正式教育类型 - 2019 年调查。

既然我们已经同意贡献很棒,那么让我们尝试根据可用的时间、所需的努力和主题的专业知识来分解您可以做的贡献类型。

每次你遇到问题

如果没有任何背景或特定动机,那么开始做出贡献是很困难的——你如何选择一个足够有趣且对你的专业发展有用的项目? 

Stackoverflow 开源贡献调查结果 - 2019

Stackoverflow 开源贡献 2019 调查结果。

当你遇到第三方开源项目的实际问题时,开始会容易得多。这个问题对你来说很重要。 

幸运的是,Javascript 开发非常依赖于公开可用的软件(通过 npm 包),并且解决方案并不完美。 

每次您看到问题 - 无论是配置、文档还是实际问题,这都是一个改进、贡献和学习/提升专业水平的机会!

贡献清单

创建问题

这是您能做的最小、最省时且最重要的贡献。

有人可能会说这不算真正的贡献,但我确实认为它非常重要。事实上,Github 确实把它算作贡献:

Github 认为的贡献类型有 4 种

Github 认为的贡献类型有 4 种

让我们从一个显而易见的观察开始——如果不产生问题,维护人员就永远不会知道他们的软件存在问题,也无法改进它。

但是,这样做最受益的还是你!

你是否曾经遇到过这样的情况:自己尝试解决问题却无功而返,几次尝试之后才打电话给同事寻求帮助?当你开始描述问题时——灵光一现! 

你突然明白了!(通常都是打字错误,对吧?)

有效且准确地描述一个问题非常困难✍🏻。如今大多数项目都会使用某种模板来处理新问题。遵循模板,你就会强迫自己从不同的角度看待问题。

通过用自己的语言描述问题,您可以突然意识到解决方案是什么,然后……就应用它!

或者,用你自己的话描述问题可能会激发新的想法/假设。如果是这样——🙌🏻 干得好——那就告诉你的同事吧。

如果没有,你刚刚创建了一个问题,并且给出了很好的解释。这会对维护人员有所帮助。你也帮助了其他开发者——现在他们可以确认问题不在他们自己的代码中。人们会发现你的问题并添加👍🏻

通过这次首次接触,您可以为维护人员创造一个机会来指导您,可能提出解决方案并激励您打开一个带有修复的拉取请求(稍后会详细介绍)。

瞧,你已经帮助了很多人!

额外福利:在 Github 上创建问题时,你会获得一个自动推荐的现有问题列表,这有助于找到解决方案并防止重复!👍🏻

Github 自动建议类似问题

Github 自动建议类似问题

提供一个最小的例子

对于维护人员来说,处理您所报告的问题的非常具体、最小的表述会容易得多。

虽然这比较耗时,但对你来说也是有益的。通过提取问题,你可以获得:

  • 确认这实际上是工具/库本身的问题,而不是您自己的代码的问题
  • 更好地理解问题是什么(稍后可以用来有效地描述问题)
  • 通过处理简化的环境来解决问题的机会

通过在编写最小示例时消除不必要的复杂性,您很有可能更好地理解问题,找到解决方案,甚至意识到这根本不是问题😼

以下是一些可用于创建可重现示例的平台的列表:

具有可重现问题的专用存储库问题示例。

具有可重现问题的专用存储库的示例。

寻找解决方法

在这个阶段,问题已经得到确认和验证,或者可能没有完全验证,但是……您想继续前进并摆脱它! 

大多数情况下您没有时间深入研究第三方库源代码,但您可能可以找到解决方法!

这可能是一个丑陋的猴子补丁,配置更改,或者你找到了一些解决问题的创造性方法。你有义务与世界分享它!

创建新问题或添加评论。您将获得大量❤️、👍🏻和🎉!

解决方法和大量👍🏻示例

解决方法和大量👍🏻示例

奖励:其他人可以评论并分享比您的更好的解决方法。 

在评论中提出解决方案

好消息——您刚刚找到了解决方案,或者对可能是一个好的解决方案充满信心! 

它在您的代码库中运行良好,但您没有时间创建带有测试和/或文档的拉取请求。

分享您的发现可能仍然很有价值——其他人会从您离开的地方继续寻找。

顺便说一句,问题通常甚至不在代码本身——可能是配置问题,或者缺乏清晰的文档,导致项目用户误入歧途。 
关键在于分享这小小的知识——即使它看起来贡献不大,也很有价值。

在您自己的存储库中实施解决方案

经常发生的情况是,项目维护人员响应不够及时。大多数情况下,他们只是忙于生活,或者工作太忙。
 
一个好的临时解决方案可能是 fork 项目,并将更改推送到你自己的仓库中。 

你的同事可以将你的临时仓库用作依赖项。虽然并非理想之选,但它可以帮助你的团队继续前进。✅

同时,请将您的修复程序提交为 PR。最终,作者会审核您的修复程序并发布新版本。创建 PR 非常重要,否则,您可能会面临无法更新依赖项的风险。

有时,作者会建议加入核心贡献者列表,这很棒 - 您有机会承担责任并维护一个拥有活跃用户的项目。 

创建拉取请求

拉取请求是开源开发的核心。

每个人都可以做出贡献,参与更大的项目,留下技能和专业知识的数字痕迹🌟

最重要的是——这是个人学习和提高的最大、最有效的机会💪🏻

为开源项目做出贡献可以赋予你超能力并帮助人类

为开源项目做出贡献可以赋予你超能力并帮助人类

通过提交拉取请求,您可以获得多层宝贵的经验 - 让我们列出它们:

  • 您将了解如何解决复杂问题,发现新的架构方法以及组织项目和代码的不同方法。

  • 您发现新的编码风格和技术

  • 您将发现测试框架、CI 管道、linters 的新用途或不同用途,并丰富您使用其他补充工具的经验和知识

  • 您正在创造一个机会来从经验丰富的专业人士那里获得宝贵的反馈

  • 您正在学习所用工具的内部实现 - 它将帮助您更好地使用它

  • 您正在创建真实、透明的成就和专业精神记录

  • 您可以与其他开发人员建立联系,从而创造合作、招聘的机会,而且非常有趣。

这就是你学习并成为更好的专业人士的方式——做更多不同的事情。 

您可以观察并尝试不同的方法,了解其优点和缺点,将所见应用于不同情况并获得有关您决策的反馈。

通过反复练习并定期挑战更复杂的主题,您将获得专业的信心和经验🥋

发现贡献机会

正如我之前提到的,当你有一个需要解决的实际问题时,开始贡献会更容易。但是,如果你不使用开源软件工具,但仍想寻找贡献机会,该怎么办? 

在线的

Github建议项目所有者为问题分配标签,以便更容易上手。简单搜索一下,label: good first issue就能找到超过 20 万个问题供你选择 😄

您可以使用label: help wanted 搜索查询来发现不一定适合初学者的更复杂的问题。 

有大量资源根据项目的技术、难度和受欢迎程度进行某种聚合。

下面列出了一些可以帮助您入门的项目:

还有很多很多……

离线

你所在地区很可能有更多人对开源贡献机会感兴趣。不妨尝试寻找一些聚会活动。 

我想特别强调的一个例子是“善良小队”(Goodness Squad)。几年前,我亲自参加过一次这样的活动。它非常有效,也很有帮助。

概括

在撰写本文并与朋友讨论的过程中,我们注意到有很多资源可以帮助发现需要贡献者帮助的项目。然而,找到一个可以学习特定技能/编码方面的项目却相当困难。 

这就是我创建此类列表的 alpha 版本的原因:

GitHub 徽标 agoldis /通过贡献来学习

您可以从中学习的精选开源项目列表

通过贡献来学习

这是我个人用来学习 Javascript 开发不同方面(后端和前端)的开源项目列表。

它非常非常不完整。我正在尝试寻找一种有效的方法来发现和分类项目,以便其他人可以通过贡献来学习。如果你有什么想法,请帮助我!

请随意添加您最喜欢的项目以及其他人可以从中学到什么!

JavaScript

代码转换

https://github.com/babel/babel/tree/master/packages/babel-parser - 了解 JavaScript 解析器的工作原理,该解析器支持 babeljs 和 prettier 等流行工具

https://github.com/kentcdodds/babel-plugin-macros - 学习如何编写 babeljs 插件

架构模式

https://github.com/webpack/tapable - 学习支持 webpack 的通用 hooks 架构

https://github.com/ncthbrt/nact - 从这个 NodeJS 实现中了解纳米服务

前端

https://github.com/GoogleChromeLabs/prerender-loader/blob/master/src/index.js - ???

https://github.com/tcoopman/image-webpack-loader -学习如何编写一个简单的 webpack 插件

https://github.com/willyelm/pug-html-loader - 学习如何编写一个简单的 webpack 加载器

动画

https://github.com/aholachek/animate-css-grid - 学习如何为复杂的动画制作...

这是我个人认为对我的专业发展有帮助的项目清单(目前仅限于 JavaScript 相关)。我希望它能帮助开发者找到值得学习的好项目。

封面照片由Hello I'm NikUnsplash上拍摄

想要了解更多?

查看《开源贡献权威指南

聚苯乙烯

编辑(2019 年 4 月 23 日)

我想强调一下

Nick 给了我们一些提示,并列举了一些他对开源软件 (OSS) 贡献的真实案例。以下是 Nick 所提内容的简要概述,更多详情请参阅对话主题

  • 我想说,只做那些你觉得有趣且有挑战性的事情。否则就别费心了。你不会享受其中的乐趣。

  • 我刚开始学习 React 的时候,就把贡献代码当成一种学习的方式。我找到了一个 React 样板项目,react-slingshot然后开始提供建议,这些建议后来变成了 PR,同时我还修复了一些 bug。从中我学到的是,开源是向他人学习的好方法,如果你对一个项目贡献足够多,你可能会被邀请成为维护者(如果你喜欢的话)。

更多的

文章来源:https://dev.to/agoldis/learn-by-contributing-27g6
PREV
VS Code 设置 - 推荐的扩展
NEXT
如何撰写 SOLID 开发者简历,成为 2018 年 STAR