1.

Eric Raymond有一篇著名文章《大教堂和集市》(The Cathedral and the Bazaar)。

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

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

Eric Raymond就问了一个问题,有没有可能用修建集市的方式,造出一所大教堂?

2.

我多年前读过这篇文章,上个星期与朋友在Email里讨论问题时,突然想到了它。

我们的问题是,有一个项目,方案A是精心准备后再投入使用,方案B是将半成品先公开,然后再逐步完善。这让我情不自禁地就想到了"大教堂和集市"这个比喻。

我们想造出一个大教堂,可是眼下只有一个集市,怎么办?

3.

我找出Eric Raymond的这篇文章,重读了一遍,很多模糊的印象一下子清晰起来。到底是经典文章啊,虽然写在10年前,但是很多问题他都考虑到了。

他说,集市要变成大教堂,有几个前提条件:

1)你不能从零开始建设集市,你必须先有一个原始项目。(It's fairly clear that one cannot code from the ground up in bazaar style.)

2)你的原始项目可以有缺陷,但是它必须能运行。(It can be crude, buggy, incomplete, and poorly documented. What it must not fail to do is run.)

3)你必须向用户展示一个可行的前景,且让潜在的合作者相信在可预见的将来它会变成一个真正漂亮的东西。(When you start community-building, what you need to be able to present is a plausible promise, and convince potential co-developers that it can be evolved into something really neat in the foreseeable future.)

4)项目的主持者本身不一定是天才,但他一定要能够慧眼识别出他人的优秀想法。(it is not critical that the coordinator be able to originate designs of exceptional brilliance, but it is absolutely critical that the coordinator be able to recognize good design ideas from others.)

5)项目的主持者必须要有良好的人际关系、交流技能和人格魅力。这样才能吸引他人,使别人对你所做的事感兴趣,愿意帮助你。(A bazaar project coordinator or leader must have good people and communications skills.)

4.

以上是一些必要条件,Eric Raymond也总结了一些成功的充分条件。

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

2)将用户当作合作者。

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

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

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

5.

Eric Raymond这篇文章,原始目的是要分析Linux的成功之道。为什么一个本科生的业余作品,最后竟变成了全世界最流行的操作系统之一?一个简陋的集市究竟是怎样变成壮丽的大教堂的?这个过程是否是可复制和推广的?

他认为,这就是开放的威力。一个开放式的项目,如果加以良好的管理和运作,能取得比同等的封闭式项目大得多的成功。

他这样看待大教堂和集市之间的竞争:

我认为,未来会更多地属于那些告别大教堂、拥抱集市的人们。

这不是说个人的远见和才华不再重要;而是在我看来,未来的成功者只是从自己的远见和才华开始工作,然后通过有效的社区合作,将其不断地放大。

开放式的文化会最终胜利,这或许不是因为"开放"在道德上正确,或者"封闭"在道德上错误,而只是因为开放式合作可以在一个问题上投入多几个数量级的技术工时,封闭的世界无法赢得这样的竞争。

http://www.ruanyifeng.com/blog/2008/02/notes_on_the_cathedral_and_the_bazaar.html

开放式项目如建造集市难点是良好的管理和运作,管理和运作也可以在开放过程中不断的优化迭代升级。大教堂和集市对现代我们大多数人来说印象不深,传统软件公司有点类似大教堂模式,而互联网软件有点类似集市模式,我们想要用集市模式建设大教堂,其实就是想充分利用两种模式的优势。

《大教堂和集市》笔记——为什么一个本科生业余作品却成了全世界最流行的操作系统之一Linux?的更多相关文章

  1. 大教堂与集市(The Cathedral and the Bazaar)读书笔记

    大教堂与集市The Cathedral and the Bazaar,一本不像计算机方面的计算机书籍 命令式管理,适合和奴隶共事目标共识型管理,适合和自由人共事 心性气层 只要眼多,bug好找 黑客开 ...

  2. 开源运动的"圣经"——《大教堂与集市》读书笔记

    作者:Eric S. Raymond 一.黑客圈简史 1.早期 (1)MIT 与 ITS "黑客"一词大约就起源于MIT的计算机文化. 从PDP-1时代开始,黑客文化的命运就和DE ...

  3. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  4. how tomcat works 读书笔记(二)----------一个简单的servlet容器

    app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...

  5. Jmeter使用基础笔记-写一个http请求

    前言 本篇文章主要讲述2个部分: 搭建一个简单的测试环境 用Jmeter发送一个简单的http请求 搭建测试环境 编写flask代码(我参考了开源项目HttpRunner的测试服务器),将如下的代码保 ...

  6. Go语言笔记[实现一个Web框架实战]——EzWeb框架(一)

    Go语言笔记[实现一个Web框架实战]--EzWeb框架(一) 一.Golang中的net/http标准库如何处理一个请求 func main() { http.HandleFunc("/& ...

  7. Directx11学习笔记【二】 将HelloWin封装成类

    我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 My ...

  8. 把一个集合自定转成json字符串

    List<CityData> listData =new List<CityData>(); //把一个集合自定转成json字符串. foreach (var city in ...

  9. 已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”

    题目:已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”. 代码: <!DOCTYPE html> &l ...

随机推荐

  1. [nowcoder]青蛙

    链接:https://www.nowcoder.com/acm/contest/158/F 挺有意思的一道题,考场并查集忘记路径压缩就没AK== 很显然一个贪心是不,每只青蛙使劲往前跳,能跳多远跳多远 ...

  2. quartz(7)-源码分析

    定时器启动 上图通过spring加载quartz <bean id="scheduler" class="org.springframework.schedulin ...

  3. caffe2 教程入门(python版)

    学习思路 1.先看官方文档,学习如何使用python调用caffe2包,包括 Basics of Caffe2 - Workspaces, Operators, and Nets Toy Regres ...

  4. javascript简单介绍总结(二)

    JavaScript 函数函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块.JavaScript 函数语法函数就是包裹在花括号中的代码块,前面使用了关键词 function:function ...

  5. Confluence 6 测试电子邮件设置

    一个 Confluence 的管理员可以通过下面的步骤测试电子邮件服务器的配置: 按照上面的步骤中描述得方法设置一个电子邮件服务器. 单击 发送测试邮件(Send Test Email)来检查你设置的 ...

  6. 如何去除pycharm中代码下的波浪线

    Pycharm中新建一个工程,如果不经过配置,在该工程下创建模块写代码,通常是有波浪线的,这样看着很不美观 如何解决这种问题,通常有两种方法 方法一:点击右下角的图标,会出现一个Highlightin ...

  7. poj1986带权lca

    lca求距离,带权值 的树上求lca,我是用倍增法求的,求两点之间的距离转化为到根节点之间的距离 (de了一个小时 的bug,重打居然就过了....) #include<map> #inc ...

  8. hdu 5980 Find Small A(水,模拟)

    Find Small A Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  9. python 超时异常处理

    异常处理具体见:[循序渐进学Python]9.异常处理 环境平台:Python2.7.9 + Win8.1 本篇记录一下自己写爬虫的遇到的问题,程序中批量获取图片地址,然后批量保存.由于没有设置网址打 ...

  10. 19-THREE.JS 深度材质

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...