《大教堂和集市》笔记——为什么一个本科生业余作品却成了全世界最流行的操作系统之一Linux?
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?的更多相关文章
- 大教堂与集市(The Cathedral and the Bazaar)读书笔记
大教堂与集市The Cathedral and the Bazaar,一本不像计算机方面的计算机书籍 命令式管理,适合和奴隶共事目标共识型管理,适合和自由人共事 心性气层 只要眼多,bug好找 黑客开 ...
- 开源运动的"圣经"——《大教堂与集市》读书笔记
作者:Eric S. Raymond 一.黑客圈简史 1.早期 (1)MIT 与 ITS "黑客"一词大约就起源于MIT的计算机文化. 从PDP-1时代开始,黑客文化的命运就和DE ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- how tomcat works 读书笔记(二)----------一个简单的servlet容器
app1 (建议读者在看本章之前,先看how tomcat works 读书笔记(一)----------一个简单的web服务器 http://blog.csdn.net/dlf123321/arti ...
- Jmeter使用基础笔记-写一个http请求
前言 本篇文章主要讲述2个部分: 搭建一个简单的测试环境 用Jmeter发送一个简单的http请求 搭建测试环境 编写flask代码(我参考了开源项目HttpRunner的测试服务器),将如下的代码保 ...
- Go语言笔记[实现一个Web框架实战]——EzWeb框架(一)
Go语言笔记[实现一个Web框架实战]--EzWeb框架(一) 一.Golang中的net/http标准库如何处理一个请求 func main() { http.HandleFunc("/& ...
- Directx11学习笔记【二】 将HelloWin封装成类
我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 My ...
- 把一个集合自定转成json字符串
List<CityData> listData =new List<CityData>(); //把一个集合自定转成json字符串. foreach (var city in ...
- 已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”
题目:已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”. 代码: <!DOCTYPE html> &l ...
随机推荐
- Autofac register and resolve
Passing Parameters to Register When you register components you have the ability to provide a set of ...
- data augmentation 总结
data augmentation 几种方法总结 在深度学习中,有的时候训练集不够多,或者某一类数据较少,或者为了防止过拟合,让模型更加鲁棒性,data augmentation是一个不错的选择. 常 ...
- Android View的生命周期
View生命周期相关方法 View是什么?官方源码注释中的定义:这个类是用户接口的基础构件.View表示屏幕上的一块矩形区域,负责绘制这个区域和事件处理. View是所有widget类的基类,Widg ...
- 阿里云centOS7.4 nginx: [emerg] "server" directive is not allowed here in /etc/nginx/vhost/xxxxxx.conf:2
里云centOS7.4配置多个站点遇到的问题nginx: [emerg] "server" directive is not allowed here in /etc/nginx/ ...
- codeforces 831B. Keyboard Layouts 解题报告
题目链接:http://codeforces.com/contest/831/problem/B 题目意思:给出两个长度为26,由小写字母组成的字符串s1和s2,对于给出的第三个字符串s3,写出对应s ...
- SQL Server中解决死锁的新方法介绍
SQL Server中解决死锁的新方法介绍 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面的 ...
- Redis Web界面管理工具
Redis Web界面管理工具 一个很友好的Redis Web界面管理工具.基于.NET实现.可以通过Mono部署到Linux上,下面是我部署在CentOS 5.7 + Mono 2.10.8 + ...
- LeetCode OJ:Longest Palindromic Substring(最长的回文字串)
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- Python基础学习(第5天)
第3课 模块 1.模块(module) Python中一个.py文件就是一个模块,可以调用其它文件中的程序. 例:first.py def laugh(): print '哈哈哈哈哈' second ...
- PostgreSQL java读取bytes字段
写入bytea: File img = new File("/tmp/eclipse.png"); fin = new FileInputStream(img); con = Dr ...