一个很可能是迄今为止最有名的黑客如何写出一本软件行业的圣经式著作?

jopen 9年前

原文  http://mp.weixin.qq.com/s?__biz=MzAwNzAwNjMyMw==&mid=202258371&idx=1&sn=5c238dd83d07b2f8e1a91eb5c63a55b2&scene=2&from=timeline&isappinstalled=0

2015 年已经过去了 15 天,你的书单准备好了吗?从本期开始,敏捷商业智能公众号将定期为大家推送书评和鉴书栏目 #Henry 读书笔记 #

何春涛( Henry He )是永洪 BI 创始人,一名大数据资( ku )深 (bi) 创业者,他为大家推荐的是一本软件从业者必读的经典书:《大教堂与市集》( The Cathedral and theBazaar )。

这本书是美国史上最有名的黑客之一的埃里克·斯蒂芬·雷蒙( Eric Steven Raymond )所撰写的软件工程方法论。以 Linux 的核心开发过程以及作者自己主持开发的开放原始码软件── Fetchmail 为讨论案例。这本书早在 1999 年就出版了,很快一版再版,被软件从业者奉为圣经。

雷蒙不仅是个黑客天才,文笔还很不错,他一生共写了 5 本书,最有名的就是这本。他出生于美国波士顿,那里正是黑客文化发源地 MIT 的所在,也是斯托尔曼发动自由软件运动的大本营。雷蒙在 1982 年完成第一个开放源代码软件项目,是 INTERCAL 编程语言的主要创作者之一,曾经为 EMACS 编辑器作出贡献,还是著名的 Fetchmail 程序的作者。

下面是这本书的主要内容。

世界上的建筑可以分两种:一种是集市,天天开放在那里,从无到有,从小到大;还有一种是大教堂,几代人呕心沥血,几十年才能建成,投入使用。

当你新建一座建筑时,你可以采用集市的模式,也可以采用大教堂的模式。一般来说,集市的特点是开放式建设、成本低、周期短、品质平庸;大教堂的特点是封闭式建设、成本高、周期长、品质优异。

而在软件行业,雷蒙相信大多数重要软件(操作系统和真正大型工具如 Emacs 编辑器)需要像建造大教堂那样,在与世隔绝的环境下,由天才式专家或几个行家里手精心打造,不成熟时绝不发布 beta 测试版。

于是他的问题就来了:有没有可能用修建集市的方式,造出一所大教堂?

1993 年,在雷蒙开发 Fetchmail 程序时,当时的 Linux 团体有各种不同的方法( Linux 归档站点接受任何人的建议和作品),显得有点杂乱无章。但 Linux 世界不仅没有在一片混乱中分崩离析,反而越来越强大。

当时 Raymond 在家中收发邮件时遇到了困难,这次他没有编出一个新的 POP3 客户与现存的那些竞争,而是突发奇想效仿 Linus 的做法: Linus 并不是从头开始写 Linux 的。 Raymond 首先做的是寻找一个合适的 POP 雏形,然后对它进行重写。他首先选择了 Fetchpop ,后来又改用 Popclient ,并继承了 Popclient 的用户基础。然后,他像 Linus 那样把用户当作协作开发者,把做好的程序早发布、常发布、听取用户的建议。最后,在 Raymond 认为条件成熟时,他正式将 Popclient 更名为 Fetchmail 。最后 Fetchmail 的强大的功能使他获得了成功。 Raymond 感到 Linux 的这种开发风格确实能工作,并且工作得很好。他为此而感到欣喜不已,同时也想让更多的人来分享他对 Linux 的体验。

在大教堂模式下,原始码在本模式是公开的,但在软件的每个版本开发过程是由一个专属的团队所控管的。他举了以 GNU Emacs GCC 两个软件作为例子。

而在市集模式下,原始码在本模式也是公开的,不过却是放在网上供人检视及开发。作者以 Linux 核心的创始者林纳斯·托瓦兹带领 Linux 核心的开发为例,亦引用 fetchmail 的开发为例。

市集模式的强大之处是在于,越多人看到原始码,错误就越能被揪出来。大教堂模式的软件开发让程序除错的时间大幅增加,因为只有少数的开发者可参与修改工作。市集模式则相反。

大部份的开放原始码及自由软件的开发计划后来都受到雷蒙影响,开始采用市集模式,甚至原来采用大教堂模式的 GNC Emacs GCC 也是如此。

最后跟大家分享下雷蒙的总结。他指出,集市要变成大教堂有几个前提条件:

1 )你不能从零开始建设集市,你必须先有一个原始项目。

2 )你的原始项目可以有缺陷,但是它必须能运行。

3 )你必须向用户展示一个可行的前景,且让潜在的合作者相信在可预见的将来它会变成一个真正漂亮的东西。

4 )项目的主持者本身不一定是天才,但他一定要能够慧眼识别出他人的优秀想法。

5 )项目的主持者必须要有良好的人际关系、交流技能和人格魅力。这样才能吸引他人,使别人对你所做的事感兴趣,愿意帮助你。

以上是一些必要条件,他还总结了一些成功的充分条件。

1 )项目首先必须是你自己感兴趣的,但是最终能对其他人有用。

2 )将用户当作合作者。

3 )尽快地和经常地做出改进,多听取用户的意见。

4 )健壮的结构远比精巧的设计来得重要。换句话说,结构是第一位的,功能是第二位的。

5 )保持项目的简单性。设计达到完美的时候,不是无法再增加东西了,而是无法再减少东西了