2.3 用户群体的重要作用
就这样,我接手了 popclient。更关键的是,我一并接手了它的用户群。拥有用户是件美妙的事:这不单能印证你的产品贴合真实需求,说明你的开发方向没有出错;只要用心培育,这些用户还能成为协作开发者。
Unix 传统还有一大优势,Linux 将其推向了令人欣喜的极致——很多用户本身就是黑客。源代码是公开的,他们能高效参与开发,大幅缩短调试的时间。只要稍加鼓励,你的用户就会主动排查故障、给出修复方案、优化代码,效率远比你孤军奋战要高。
- 将用户当作协作开发者,是快速改进代码、高效调试最省心的办法。
我们很容易低估这种效应的威力。在林纳斯・托瓦兹用实践给出全新示范之前,开源圈子里开源圈子里几乎所有人都严重低估了这点:用户越多、系统越复杂,这套协作模式能释放的价值会成倍放大。
实际上,我认为林纳斯最聪明、影响也最深远的一招,不是编写了 Linux 内核,而是他创造出的 Linux 开发模式。有一回我当面和他聊起这个看法,他只是笑着轻声复述了那句口头禅:"我本质上是个非常懒惰的人,喜欢靠别人实际做的活儿来获得声誉。"这真是像狐狸一般狡猾的"懒惰"啊,正如罗伯特·海因莱因(Robert Heinlein)笔下人物的经典描述:懒到无可失败。
回想起来,GNU Emacs Lisp 函数库与 Lisp 代码仓库的发展,早已为 Linux 的这套开发思路与成功提供了先例。Emacs 的 C 语言内核和多数 GNU 工具都采用大教堂式开发,而 Lisp 代码库迭代灵活,全程以用户为主导。各类创意与功能原型,往往要反复改写三四轮,才能打磨出稳定版本。当时互联网上已经普遍流行这种和 Linux 相仿的松耦合协作方式。
在开发 fetchmail 之前,我做得最成功的个人项目或许是 Emacs VC(版本控制)模式。当年我和另外三位开发者依靠邮件远程协作,模式和 Linux 十分相似;四人之中,直到今天我只见过理查德・斯托曼(Richard Stallman,Emacs 的作者及自由软件基金会(http://www.fsf.org)的创始人)。VC 模式是 Emacs 内部为 SCCS、RCS 以及后来的 CVS 提供的前端界面,支持一键式版本管理操作,它脱胎于他人写的一段简短简陋的 sccs.el 脚本。VC 的开发之所以成功,是因为与 Emacs 本身不同,Emacs Lisp 代码能够快速走完发布/测试/优化整套流程。
Emacs 的故事并不独一无二。不少软件都会搭建双层架构、两级用户社群,内核采用大教堂开发模式,配套工具集则走集市模式,MATLAB 这款商用数据分析可视化软件就是典型。使用这类分层软件的用户都有同一个感受:项目里最有活力、创意迸发、持续产出新功能的地方,永远是对外开放的工具模块,各式各样的社区开发者都能在这部分自由调试修改。