作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
Anna-Chiara贝里尼

当安娜很小就开始编程的时候. 从那时起,她的职业生涯跨越了许多不同的项目和编程技术.

Share

以下是在发布之前发布的 女性开发者总奖学金.

作为开发者, 跟上最新的技术趋势是令人兴奋和具有挑战性的. Every day, 新语言, 框架和设备吸引了我们的注意力,并在聚会中激发了对话, 论坛和聊天. However, 我们的开发者社区是由人组成的, not tools, and it’s fascinating to explore its sociopolitical aspects (for lack of a better word; “social” tends to be associated with social networks, 这些天).

At Toptal, 我们最近进行了一些有趣的对话,讨论了女性对开源做出了多少贡献,以及是什么阻碍了她们做出更多贡献, so we have 调查此事. 在与布里登·贝内肖特和博日达尔·巴索夫的谈话中,我想知道: Bozhidar 是最顶尖的吗 开源贡献者 on GitHub. Where am I? 如果你查看我的公共 GitHub帐户 到今天为止,我主要是在课堂上给我的学生做小的测试项目. 它们是半生不熟的,绝对不能代表我的技能或专业知识. )在这件事上你必须相信我的话.)如果有人考虑雇用我,根据他们在那个账户中找到的信息, 我想我将很难谋生. Still, 我做了20多年的专业开发人员, 在我的日常工作中,我使用的开源软件多得我都记不清了. Over time, 我对Linux内核进行了修改,使其适应某些特定的需要, 调整了我买的每一个路由器和NAS, 我在树莓派的等待名单上耐心地等待了几个月,才得到我的树莓派 自制domotics 如我所愿. 尽管如此,这些调整和测试都没有在我的GitHub上成为开源的. Also, 除了修复Tomcat第一个版本中的一个错误之外, 我从来没有为开源项目做过贡献. 很奇怪,不是吗?

你可能会认为这只是缺乏时间或兴趣,但我知道不是. 至于我的个人项目, 我可能认为没有人会对我所做的事情真正感兴趣, 但最主要的是,在那里发表我的作品的想法, 让每个人都看到,也让子孙后代看到, 这让我很害怕. 虽然你可以从GitHub上删除一个个人项目, 您尝试为一个广泛可用的开源项目做出贡献的那一天, 没有回头路可走. 如果我的代码不够好怎么办? 如果我没有正确理解这个问题怎么办? 如果我的pull请求被拒绝了怎么办? 如果有人喷子我怎么办?

为开源做贡献让你害怕吗?

为开源做贡献让你害怕吗?

与其他开发者朋友进行简短的电话交谈, 大部分是女性, 很快我就相信我不是唯一一个有这个问题的人, 但对于工程师来说,没有问题, 唯一的解决方案, right?

这是一个需要解决的重要问题, 因为为开源项目做贡献可以带来巨大的不同:

  • 在你的职业生涯中: 许多客户 will look at your social everything before deciding to hire you; your GitHub帐户 and your LinkedIn résumé are top of the list, 连同你的Facebook和Twitter资料. 你应该明智地使用它们.
  • 因为你的技术能力检查其他开发人员编写的代码库,通常是非常好的代码库,可以教会你很多东西. 从编写糟糕的代码库中提取意义的能力将挑战并教会您同样多的东西.
  • 你的软技能开源软件是一个协作的过程, 几乎所有有趣的项目都是由团队完成的. 学习通过每个人都使用的工具与其他开发人员一起工作, 融入团队, 有效沟通, 是什么让你成为一名伟大的开发者, 不仅仅是熟练的.
  • 为社区服务你对开源项目的每一点贡献都很重要. 你贡献的越多越好, 但即使是修改翻译中的一个小错别字,也会使最终的产品变得更好.
  • 对于你的关系网你可以向公司发送数百份电子表格, 但没有什么比拥有私人关系的同事更有效的了. 积极地参与一个开源项目将确保你遇到人们并获得他们的尊重, 你的声誉也会随之提升, 这对任何专业人士来说都是无价的.

这是我与这种恐惧作斗争的一个小小的个人旅程. 发表这篇文章本身就是旅程的一部分. 我写这篇文章是希望那些被禁止写博客的人, 或者害怕做出哪怕是很小的贡献, 最后会看到吗, 也没那么可怕. Also, 它旨在帮助任何愿意为开源做出贡献的人, 但不知道从何说起, 所以我将从基础开始.

什么是开源软件,我在哪里可以找到它?

开源软件, 简称OSS, 是否有软件随其源代码发布, 并且包含允许您修改和重新发布它的许可. 它可以送到任何地方:在网站上,通过邮件列表或猫头鹰. 最常见的场景, 也是我们感兴趣的那个, 是在协作存储库上维护代码库的时候. 在这里,我们专注于GitHub,但也有其他选择,如SourceForge和Bitbucket. GitHub非常友好, 拥有庞大的用户基础, 可以用于任何类型的代码, 并且适用于您使用的任何开发环境. 重要的是,它也广泛用于非开源项目. 很有可能您的下一个客户端项目将托管在那里, 因此,知道如何使用它本身就是一项有用的技能.

如果我不知道如何编程怎么办?

如果你正在阅读这篇文章,很可能你想学习如何编码. 你可以在一些免费和付费的网站上找到很棒的课程. You should choose one language to learn; if you don’t have a preference, go with JavaScript. 你已经有了一切你需要开始你的网络浏览器,它是最广泛使用的一个, 和有价, skills. 我个人最喜欢的是 Python,用于web开发和科学应用. 你可以在Coursera、可汗学院和PluralSight上找到几门课程.

如果我不知道呢?

如前所述,知道 Git 是很重要的,所以,参加Git课程. Do it even if you’ve been working with Git for a while; you don’t know how much you don’t know about Git until you really study it. 如果你不能自信地解释什么,就这样做 rebase 命令. 即使错误的重置不会吓到你,也要这样做吗. 我拿走了全部 Git path 但是,你也可以在其他网站上找到更多的选择.

我如何在GitHub上选择一个项目?

您很可能在日常开发中使用一些OSS. Choosing a familiar framework is a good starting point; you are already familiar with the features and how framework works. 当您深入研究源代码时, 你会学到更多, 你会更清楚地理解它的逻辑. 如果有一项技术或工具是你特别喜欢的, 寻找那些提到这一点的项目, 或者工具的项目本身. 作为最后的手段, 您可以在GitHub Showcases上查看项目,并从选择您感兴趣的类别开始.

例如, 在GitHub的搜索中快速搜索“Raspberry”,可以看到超过1.7万个存储库. 这很容易迷失方向,所以要寻找一个拥有良好社区和良好问题跟踪的项目. 在选择项目时,检查以下项目的数量:

  • 贡献者目标是10个以上的贡献者. 这应该确保项目有足够的兴趣,而不仅仅是一个小团队的努力. 如果您是OSS的新手, 或者不太熟练, limit your search to projects with at most fifty contributors; larger communities imply larger codebases and more complicated projects.
  • Commits选择至少有1000次提交的项目, 而且最近的一次活动不超过一周. 在OSS术语中,一个不活跃一个月或更长时间的项目是陈旧的, 而且你可能不会很快得到任何回应. 日常活动是健康计划的标志.
  • Issues问题是未解决的问题,已报告的错误或要求实现的功能. 它们会给你一个起点,是衡量你对项目兴趣的一个很好的指标.

Also, find out what the project’s major language is; you can see the language statistics in the top bar of the main project page. 花点时间读读讨论的语气,看看这些评论是多么友好和有教养. 一些项目因其激进的社区而臭名昭著, 因此,它们可能不是正确的起点.

I chose ScyllaDB, 列式数据存储项目, 因为我对数据很着迷——任何与性能相关的东西. 我从未使用过它,但我希望能够深入研究它的代码库. 使用我熟悉的工具可能会更简单, 但我把这当作一个挑战,一个学习新东西的机会. For the rest, it fits the bill perfectly; it has 18 contributors, 6.5k次提交(最近一次是在撰写本文的23小时前), 178个开放问题,看起来很活跃.

我现在该怎么办?

First, 克隆存储库并在您的机器上安装该软件,以了解其移动部件. 然后,开始通读这些问题. 一旦你准备好了, 看看你能否在你的机器上重现这个问题,然后开始分析是什么导致软件行为不正常.

另一种方法是找到你可以改进或修改自己的地方. 例如,也许你注意到一个错别字,或者一个未对齐的字体. 我选择修复一个小错误,特别是一个错误的变量名 脚本的文档.

它看起来很小,但错误的文档比没有文档更糟糕. 用户将安装ScyllaDB并执行安装步骤, 他们会盲目地依赖剧本里写的东西, 最终会陷入挫败. 这对我的能力来说是完美的, 修复它需要我遵循整个过程, 并且对代码库有一点熟悉. 修复bug很无聊,但这是进入项目的一个很好的开始.

创建fork

这可能是微不足道的,但目前,对于ScyllaDB项目,我是Ms. Nobody; it would be risky to allow me to make changes to their code without supervision. 我需要做的是在我自己的GitHub帐户中创建一个“fork”. Here is 我的ScyllaDB叉子. 它是我自己的游乐场,我可以访问所有的代码,我可以修改我想要的文件. 如果我想创建我自己的ScyllaDB版本,并对其进行调整,使其做一些与最初目的完全不同的事情, 我可以在这里这样做. 创建fork is simple; go to the project’s main page and click the “fork” button. 一点都不吓人.

是时候修复bug了

现在,是时候在计算机上测试代码并进行必要的修改了. 首先,确保您已经安装了 Git client 在你的机器上. 然后,将SSH公钥添加到GitHub,并确保SSH -agent加载了它. Getting the code locally is simple; just use the git clone 命令指向你的fork,而不是主分支:

Git克隆git@github.com: acbellini /“锡拉”.git

By now, 您应该已经在主分支上测试了项目, 因此,您将在本地构建代码并以相同的方式进行测试. 请记住,您将不得不分叉您的项目所依赖的任何其他GitHub项目, 因为参考是相对的. 在我的情况下,我不得不分叉海星,锡拉-阿米和锡拉-斯瓦格-伊.

The bug I need to fix is relatively simple; the documentation in conf /“锡拉”.yaml 提到了三个可配置的目录:一个用于数据文件, 一个用于提交日志,另一个, 显然未使用, for caches, 它们默认都是 CASSANDRA_HOME美元:

深入研究开源代码

深入研究开源代码

深入代码, 它显示默认值是不同的和, 正如我开始的第372期所提到的, CASSANDRA_HOME美元 不宜使用. 我通过用几个不同的设置测试代码来验证我的假设, 通过从配置文件中删除设置并检查使用了哪些目录. 一旦确信一切都是正确的,我就可以添加、提交和推送修改后的文件:

Git添加conf /“锡拉”.yaml
更正conf /“锡拉”中默认的目录值.yaml #372'
git push

注意,我在提交消息中引入了问题号和散列. 这将告诉GitHub自动链接我的代码到问题本身.

另一个需要注意的重要事情是, 当我检查代码时, 我意识到第三个目录, 缓存的那个, 实际上没有被使用. 我们很容易走得太远,把这个设置本身去掉, 或者添加未使用的注释, 但这超出了问题372的范围, 任何与这个问题没有严格关系的事情都是错误的. 您必须将更改集中在手头的任务上.

在这一点上,代码是固定的,并在GitHub上,在我的私人分支. 这就是可怕的部分:要求ScyllaDB人员接受我的代码. 这被称为拉取请求.

最后一步:拉请求

我喜欢直接从GitHub上的web界面创建拉请求. 我发现它比尝试从命令行执行更直观,更防错误. 我所要做的就是创建我的拉请求,点击我的分支名称旁边的绿色小按钮:

在GitHub上创建pull请求

注意,注释是由GitHub自动计算的. 我的分支现在有一个新的提交, 但是自从创建了我的分支之后,主存储库中又有14个提交, 所以我会点击左边的绿色图标.

在创建拉取请求之前比较更改

幸运的是,我的单一提交不与其他14个冲突,所以GitHub告诉我,我很好去. 我不需要添加任何其他评论或信息. 提交消息, 虽然很短, 说明了一切:我的代码更改做了什么以及它与什么相关. 当我点击最后一个按钮来确认我的请求, 我想知道几天前我觉得可怕的是什么. 现在没有怪物向我咆哮,地狱的火焰似乎也没有燃烧. 老实说,一点也不可怕. 在不太可能的情况下,我弄错了,我的解决方案不会被接受,就这样.

如果你现在检查 问题的细节, 你可以看到,GitHub自动添加了一个备注,有一个拉请求引用这个问题. 这就是提交消息中#372的神奇之处. 这将有助于避免其他人浪费时间去修复已经修复的东西.

开源一点也不可怕

开源一点也不可怕.

最后指出

现在我正在等待我的pull请求被接受,当它发生时,我会收到通知. 记住,这可能需要几天的时间, even weeks; someone has to review my code, 测试它是否如描述的那样工作, 修复问题, and, ultimately, 确保它不会对其余代码的功能产生不利影响(即:产生新的bug)。. 所有这些都需要时间,所以要有耐心. In the end, 当我的pull请求被接受时, ScyllaDB将多一个贡献者, 少了一个问题,我就有了我的第一个OSS贡献. 现在,你也该试一试了. 毕竟,这一点也不可怕.

聘请Toptal这方面的专家.
Hire Now

作者简介

当安娜很小就开始编程的时候. 从那时起,她的职业生涯跨越了许多不同的项目和编程技术.

世界级的文章,每周发一次.

输入您的电子邮件,即表示您同意我们的 隐私政策.

世界级的文章,每周发一次.

输入您的电子邮件,即表示您同意我们的 隐私政策.

Toptal开发者

加入总冠军® community.