开源软件的参与及社区互动的一些体会和建议:学习和参与


有了沙盘弄熟了工具,下面我们来谈谈参与一个项目的开发和测试。我们先从项目的参与者角度开讲,之后再谈项目的发起者应注意的事项。如前所说,这些是我的一些体会和建议,很多方面都是“仁者见仁、智者见智”,所以欢迎大家拍砖、提建议和指教。

要参加一个项目,首先要开始学习,一举成名、一口气吃成个胖子的可能性不大。学习包括阅读文档,该项目的维基网页,加入mailing list,阅读项目发展蓝图,加入论坛(forum)潜水等。在做这些的同时,搞一个自己的branch,编译软件,练手调试,改变一些东西后再编译以满足自己的好奇心,这些都是非常有效的学习手段。

通过在mailing list和论坛上潜水,你可以了解到主要人员的活动、重要的源代码、发展方向、和他们的个性等。如果交流是以英文为主,还可以学习到常用的名词,为以后的研究、搜索、和提问带来方便,因为你会注意到,网上查资料搜索的关键是知道关键词!当然有些比较流行的软件还会有其他独立的社区,如Google group等,那里也可能有些有用的东西。

邮件表的历史很多都有归档,所以那里也可能有有价值的东西。另外,不少开源软件还有互联网聊天频道,IRC,一般是在freenode上。像MariaDB在freenode上的maria频道就比较活跃。这个真是因项目不同而异。一般来讲,我个人并不建议在聊天频道上呆太久,因为很浪费时间并且会分心,很难集中精力花时间做好一件事。但IRC频道的聊天有时也会有记录,所以周期性的快速浏览下可能发现点东西。如果你是有备而来,如果主力人物都在聊天频道上的话,有针对性的在IRC上讨论些问题可能会比较快和直接地找到答案。

在潜水的同时,也要注意性能和bug的标签。如在Launchpad上,有的项目给一些性能和故障贴上low hanging fruit,即易采摘果实的标签。你可以先从这里开始,看看自己能不能搞定。不妨先在自己的沙盘里大胆尝试下,写单元测试实验案例,改下代码,编译测试,推测和验证各种假设。反正是自己的沙盘,尝试下又有何妨?只有敢于尝试,满足自己的好奇心,才能提高自己的功力。

同时,参与并帮助一个项目的测试和文档也是融入该项目的好方法。开源项目是分布式开发,程序员分布在不同的地方,实际上不少非开源项目也是如此。人不在一个地方甚至国家,很可能有语言障碍,就需要花时间了解沟通和建立互信。如果你可以先在测试、文档等基本方面帮忙,就可以建立起良性的互动。这也是我建议先读文档、入邮件表、到论坛潜水学习的原因之一。比方说你可以帮助完善该项目的维基网页,提交一些自己亲身做过的how to文档,提交测试案例等。因为大家一开始对你不了解,如果你一上来不先做调查研究,做好功课,就开始指点江山、激扬文字,要显示自己的聪明才智和独到之处,那么,抱歉,没多少人会买你的帐。

在开发和使用的过程中,你可能会遇到故障。发生了这种情况,在提交故障报告(bug report)之前,请首先在故障表、邮件表、论坛里搜素下,看看别人是否已经提交。如果没有,那你应当提交一个故障报告。提交时,请注意说明系统环境和配置,有没有绕开该故障的办法,怎样才能重生该故障。如果你知道怎么来解决这个故障,那当然更好,那就请提交你自己的补丁。有的项目需要提交测试案例(test cases),有的不需要,但作为一个程序员,你要有自己的test case。我以后会专门写到测试。

——

下面简单说说我关于项目发起的想法和建议。

首先,心里要有这个数:我这个项目是给自己kuai痒的(英文俚语scratch an itch,正式用语可能是抓痒吧,至少鲁南话说三声的kuai,不知有没有这个字)。这个项目满足了我的需求,对我本人有用,这是最重要的。能切实解决我的问题,那别人遇到类似情况,我的解决方案也就可能管用!我开发的过程中会有乐趣,会有挑战和能学到新东西,但知道它能帮助别人也是很大的乐趣。我希望它能火,并且也下力气让它火,但是它火不了的话也没关系。这不是阿Q的精神胜利法,这是全球各地绝大多数开源软件所面对的现实!

那么,我做开源,有意义吗?当然有。简要地说,自己做开源基本上是业余,而不是全职的做商业软件,所以风险小。但如果火起来的话,会有商业利益过来。另外,开源的目的是知识的积累和分享,发起者在这个过程中可以得到全方位的成长:文档、测试、开发、协调、发布等,还可以认识到朋友和同仁来打通人脉。或许这个项目只能给不到一百甚至不到十个人带来益处,但只要它能给自己带来益处,就已经足够。

好,不谈哲学和自己做开源的其他好处,下面我们来谈谈想法和建议。

1. 要有好文档。好文档要告诉读者这个项目的目的,使用方法和流程,注意事项和如何扩展等。最好能做成维基式文档,这样的话可以便于别人的参与。这个文档要有典型的应用案例,给出自始至终的过程指导;
2. 要有良好的测试方法和机制,并把它写入文档。有效和系统的测试是生产可靠、稳定、高性能、高扩展软件的必要条件!
3. 如果有了规模,注意建立起自己的mail list,forum,group等,这样便于知识的积累,便于提问和解疑;
4. 要有计划性,这表现在有好的设计、蓝图和具体的任务清单(software specification,blueprint和To-do list)等,这样便于和别人讨论和鼓励参与;
5. 应当还有别的。先写到这儿,欢迎指正 🙂

, , , ,

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.