你想成为一名开源开发者吗?

导航至

自从十一个月前加入 InfluxDB 核心工程团队以来,我被问过好几次,成为一名开源开发者是什么感觉,以及这是否是他们(提问者)会喜欢的事情。我发现回答这个问题的唯一正确方法是讲述我的经历,让他们自己得出结论。

这家伙是谁?

通常我不会以谈论自己来开始一篇文章。我不认为自己有多么了不起或重要,但对于这个主题,设置背景是相关的。

我一生中的大部分时间都是一名软件开发者。虽然在我刚开始工作时,我并不总是拥有正式的“开发者”头衔,但当反思我的日常活动时,很明显我实际上是一名开发者。我于 1994 年开始在一家小型电阻焊机制造公司担任质量保证技术员。在纸上跟踪缺陷和异常情况非常困难。我的经理已经在使用名为 Paradox 的软件来跟踪缺陷。不久之后,我就开始修改输入屏幕和报告,以增强软件的实用性。从那时起,我接连获得了一个又一个软件机会(如果您真的想了解详细信息,请查看我的 linked in 个人资料)。总结我的职业生涯,我大约花了十五年的时间在各种闭源平台上编写软件。从 Borland DelphiMicrosoft .Net,应有尽有。

开始!

2012 年 3 月,Go 发布了第一个官方 1.0 版本。这恰好与我们当前平台的完全重写同时发生,并且看起来是一项非常适合的技术。对我来说,这独特之处在于当时实际上还没有多少社区。当然,Go 的核心团队正在回复邮件列表,并在各地进行一些演讲,但如果您在 Google 上搜索 Golang 或 Twitter 标签 #golang,您会发现几乎是空白。随着我继续用 Go 进行开发并遇到问题,我开始通过 Twitter 与他们的社区互动。我非常热爱 Go,以至于我创办了世界上最早的 Go Meetup 之一(仅在 GoSF Meetup 之后 3 个月)。几年后,GopherCon 在我居住的丹佛举办。参加 GopherCon 永远巩固了我成为社区一员的愿望。在那里,我还遇到了 Paul DixInfluxDB 的首席执行官。

进入开源世界

我于 2014 年 12 月 29 日加入了 InfluxDB 团队。我对他们的代码库完全陌生,但是,由于它是用 Go 编写的,我能够立即开始工作并开始贡献。

这是我对该项目的第一个 提交。不久之后,我有了我的第一个 拉取请求。由于评论,有 80 条评论和许多额外的提交。这立即为我设定了一些期望。

经验教训

首先,代码质量非常重要。这并不是说你要编写优雅、漂亮的代码。我几乎总是编写丑陋的代码(而且我并不总是像我知道的那样重构)。代码质量是指以下几点:

  • 变量名 - 它们是否具有清晰的上下文。
  • 注释 - 它们是否有用还是只是令人困惑?
  • 代码组织 - 别人能否理解我刚刚写的内容的流程。


很明显,我已经独自编写代码很长时间了,没有人告诉我我变得马虎了。

有人可以看看这个吗?

这也是我第一次体验真正的代码审查。当然,以前有人看过我的代码,但从来没有逐行看过。对你的代码的评论往往非常“实事求是”,并且很容易被认为是侮辱或有人在挑你的毛病。请放心,他们不是。我总是将所有反馈都视为计算机分析了我的代码并做出了回应。

我认为反馈就像拼写检查器。当出现问题时,通常是因为它是错误的,或者计算机不理解它。有时你的单词拼写正确,你可以忽略。但是,我的经验是,如果有两个或更多开发者评论代码的同一区域,则以下两种情况之一为真。最好的情况是有改进的空间。最坏的情况是你完全搞错了。这些既不好也不坏,它们只是事实。作为一名开发者,你修复它们,使它们变得更好,并成长。最重要的是,我感谢我的团队或社区中的有人足够关心我,帮助我成为一名更好的开发者。

底线,对我来说,代码审查是必须的。你的整个团队都会因此变得更好。我可能永远不会在不做代码审查或不理解其重要性的地方工作。

你知道每个人都能看到,对吧?

在我的第二个 拉取请求 中,另一件事变得非常明显。每个人都能看到我的代码。现在,我在开始时就理解了这一点,但我没有准备好感受到对此有多么不舒服。如果每个人都认为我的代码很糟糕怎么办?

为了增加这种恐惧,在处理这个特定的 PR 时,我遇到了 Go 语言中一个意外的行为。当我在 Go 问题中查找该问题时,我看到 Dave Cheney 对该问题发表了评论并最终关闭了它。我通过社区认识 Dave,所以我联系了他。Dave 向我询问了一些背景信息,所以自然而然地我将 PR 链接给了他,毕竟,它是公开的。

接下来,令我震惊的是,他开始审查 PR!这就像让一位摇滚明星请你在他们面前唱他们的一首歌。更令人压力山大的是,我的团队成员开始在 Slack 中询问 Dave 为什么要审查我们的代码。我的代码有问题吗?哦,是的。Dave 评论了吗?他当然评论了。以下是他的一些评论:

  • “我认为这应该放在函数的顶部。为什么要完成所有这些工作来发现地址无效?”
  • “ResolveUDPAddr 在这里会返回更好的错误。你可以检查它以查看它是否是暂时的。”


最后,这是一次很棒的经历,我担心是毫无理由的。由于所有额外的关注,我从那个特定主题中学到了很多东西。

你必须是专家才能全职从事开源项目。

绝对是错误的!当人们问我关于全职开源的问题时,我最先听到的担忧之一是他们是否足够聪明,或者是否有足够的经验。

关于为什么你不需要成为专家,我学到了几件事。首先,没有人了解软件开发的一切。当我刚开始时,我真的不太了解 Time 包。除了 time.Now() 之外,几乎没有需要它的地方。在 InfluxDB 核心团队开发了 8 个月后,我现在可以不假思索地输入 time.RFC3339Nano 了!其次,对于你不知道的(或弄错的),社区会让你在那里接受教育。有时他们的反馈非常有建设性和帮助性。有时,它可能会显得简洁或粗鲁(尽管我发现很多时候这是因为英语不是他们的主要语言)。始终要记住的重要事情是,你是否从他们的反馈中(好的或粗鲁的)学到了东西?如果是这样,那么这就是一次积极的体验。到目前为止,我还没有遇到过一次我认为是负面的互动。总的来说,他们一直都很支持和具有教育意义。

要无所畏惧!

希望我能稍微介绍一下我作为开源开发者的经历。我鼓励每个人都这样做,如果不是全职,至少找到你热衷的东西并做出贡献。即使是最小的贡献也非常受欢迎。说真的,PR 修改他们文档中的一个单词拼写错误。我可以向你保证,他们会感谢你的!没有时间 PR 某些东西,但已经确定了他们缺少的功能,看到了可以改进的领域,或者“惊呼”你发现了一个错误?只需提交一个问题即可。不要假设他们已经考虑过或发现了它。每一项贡献,无论是代码还是问题,都会使每个开源项目对每个人都更好。

下一步是什么?

如果这篇文章激励你参与到一个开源项目中,那就别再犹豫了!InfluxDB 刚刚对一些开源问题进行了分类,我们正在寻求社区的帮助。查看 博客文章 或直接访问 问题