不要因为没有为开源事业做贡献而感到内疚

曾经有很长一段时间,我都模糊地觉得我必须为开源软件做些什么。在某种意义上来说开源是很有意义的事,我会因为做得不够多而觉得有点内疚。

我曾常常对自己说这样的话:

  • 茱莉亚,开源软件非常棒!
  • 嗯,我必须为开源项目添砖加瓦。
  • 是什么项目?呃,我不知道。
  • 我用 Pidgin!好像是吧。
  • 去看 pidgin 项目
  • 好多问题啊!我都不知道从何处下手。
  • 是用C写的!好多代码啊!我该怎么办!
  • 心存内疚地放弃吧。

我试着不再感到内疚。现在如果我要参与一个开源项目的话,我会需要某种动机。Mel Chua在 hacker school 有过一场很棒的演讲,她说动机是由胜任力(知道如何去做!)、自主性(自己做出决定!)以及关联性(知道为何要做!)组成的。

开源项目中会有很高的自主性–几乎没有人会强迫你做什么事。而经常会缺失关联性和胜任力。

对于关联性,我会问自己:

“我希望从参与这个项目中获得什么?”

 

我想知道这个项目是如何运作的!(从这个理由来说参与Linux项目会超级有意思!操作系统很惊人!通过做gunzip in julia这个项目我学到了很多。)
我找到一个bug,想要修复它!我想增加一个特性!
我想积累一些编程工作经验以便找到更好的工作!
我觉得这个项目能实现很重要的功能而且我想要完善它!(Kelsey Gilmore-Innis的Anti-Eviction Mapping项目就是一个很棒的例子)
我喜欢和参与这个项目的人来往!(我参加Drupal会议的时候,发现参与Drupal的开发人员都非常可爱,他们吸引着我参与到Drupal项目中去。)
对于胜任力,我会问:

 

“是否有什么东西会阻碍我完成工作?”

 

  • 我是否了解该项目使用的语言?这种语言易学吗?
  • 我可以在自己的电脑上轻松地搭起开发环境吗?
  • 代码库的复杂度如何?项目是否可以完成?相关文档是否完善?
  • 如果我有什么不懂的话,是否可以在社区论坛寻找到答案?论坛里傻瓜多吗?邮寄目录里的地址是否都有效?

 

什么情况下我不会参与

 

通常会是因为相关性阻碍我参与某个开源项目–我不知道我能得到什么!Drupal项目的例子可以很好地说明这一点。Drupal是个非常重要的项目。以前我曾经参与过!我可以再次参与进去的!社区论坛非常友好!但现在对于我来说已经不存在相关性了–我已经不再开发网站了。

大多数时候会因为缺乏相关性而不参与到某个开源项目中去–如果我不用某个东西,那我目前就不会想要学习相关知识,也不认识有谁在做这个东西,也不会很强烈地觉得它有用,因此就不会想参与进去!这其实完全没问题。还有数不清的其他人在参与这些项目!少我一个根本不差的=)

缺乏胜任力的一个例子就是前面说到的Pidgin项目–聊天客户端遇到了一些问题,我想要修复它,但是对于那时的我来说太难了。

 

什么情况下我会参与

 

下面要说的是我参与过的开源项目,以及原因:

IPython项目,是因为我想给它增加一个它本来没有的特性!然后它就有了那个特性!我把一个性能要求合进了IPython,结果非常酷。
这个pandas cookbook项目,是因为我想了解pandas的时候发现没有那么多我所需要的实用资料!还有一个原因!就是我写了一个东西,别人就可以更加了解pandas了!太完美了。
gzip in julia项目,用来学习gzip是如何工作的。现在我学会了!棒极了。参与开源项目是件超级有意思的事!耶!

 

不要感到内疚

 

你能做的事情有很多。如果你在三个星期里花了超过三十个小时来修复一个网卡故障,那可能是很值的,因为你会学到很多,而且你的硬件会更好地运作!或者也许你会更愿意把这些时间花在陪伴家人朋友或者志愿活动或者踢足球或者看电影或者赚房租上面。

有时我听到有人会说“你必须开发开源软件!”,说得好像这是“普遍的善”一样。不要感到内疚。对你没有意义就不要做!除非你知道能获得什么并且觉得值得你花时间才去做!否则的话就做点别的吧!

 

Lukas Eder 是开源项目 jOOQ 的全职开发者,下面是他对 Julia Evans 文章的评论:

I’m a full-time Open Source developer (for jOOQ), and I get a lot of requests from people who would like to contribute. They’re often asking where they can start, how they should proceed, etc.

Then, I never hear from them again :-)

I think that your categorisation makes a lot of sense. The lack of relatedness is something that many people underestimate in search of The Cool. In our case, working on jOOQ means loving SQL and programming languages to the max. This can get quite boring and frustrating if there isn’t a concrete problem with a concrete database at hand.

In the end of the day, merely contributing to Open Source is much like being a customer of any other (even non-software) product. People also contribute to – say – Microsoft, to help them improve their operating system, or MS Office. It just feels great to be heard, as a customer. But since Microsoft sells commercial software, people don’t make the mistake of trying to contribute withoutrelatedness. So maybe, we should start seeing Open Source more like commercial software in general.