大教堂与集市:一本不管你是不是键盘侠都该读的软件行业圣经
本篇文章5168字,读完约13分钟
“如果你有一个正确的态度,有趣的事情自然会找到你”,这是埃里克在《大教堂与市场》一文中给出的经验。Eric s.raymond在开源运动和黑客文化中有很高的地位,可能是迄今为止最著名的黑客。一个更正式的头衔是:网络黑客观察者/参与者人类学家。
作为黑客文化的第一位理论家,他尽力为“黑客”一词辩护,强调“黑客”不是媒体报道中的计算机罪犯,而是一个对计算机技术着迷并通过编程提供有价值软件的人。《大教堂与市场》是他在长期观察和研究该行业后撰写的软件工程方法论。这本书的第一版于1999年出版,被软件从业者视为“圣经”。
今天,不仅在程,而且当“开放源码运动积极参与定义21世纪的计算基础设施时,任何依赖计算机的人都有必要了解它。”
以下摘录摘自《大教堂与市场》,并有删节
前言
你的书是关于黑客和文化的。这本书收集了一系列文章,最初是为程序员和技术经理写的。你可能会很自然(也很正常)地问:“我为什么要关心这个?”最明显的答案是,计算机软件在世界经济和商业战略决策中发挥着越来越重要的作用。不管你打开这本书的原因是什么,你可能听到了太多关于信息经济、数据时代和互联世界的信息,所以我不想在这里重复。我只想说,如果我们对如何编写更好、更稳定的软件有更深的理解,它将会产生滚雪球般的深远影响。
这本书在基础理论上没有任何创新,但是描述了开源软件系统地使用开放开发和分布式同行评审的事实,这不仅降低了成本,而且提高了软件质量。开源软件并不是一个新概念(这种文化可以追溯到30年前互联网的诞生),但它只是最近在技术和市场的共同努力下才从人群中出现。今天,开源运动正积极参与定义21世纪的计算基础设施,任何依赖计算机的人都有必要理解它。
我提到“开源运动”是因为它有其他更有趣的原因值得读者关注。30多年来,一群来自互联网的积极支持者一直在追求、实现和珍惜开源的理念。这些人以自称“黑客”为荣。这里的“黑客”不是被记者滥用的计算机罪犯的名字,而是指狂热分子、艺术家、古怪的天才发明家、解决问题的专家和技术专家。
几十年来,不知名的黑客组织不仅努力解决技术问题,还忍受着来自社会主流的MoMo和排斥。直到最近,他们迎来了自己的春天。他们创造了互联网、unix和万维网,他们也在创造linux和开源软件。在上世纪90年代中期互联网的爆炸式发展之后,人们终于意识到这个世界应该善待黑客。
黑客文化及其成功为研究一些基本问题提供了一个很好的研究范例,如人类动机、工作组织、职业精神的未来、公司形式,以及这些内容在21世纪信息丰富的后稀缺经济时代是如何变化和演变的。此外,黑客文化令人信服地表明,在适应和重塑经济环境的过程中,将会发生一些深刻的变化。因此,了解一些黑客文化对任何想在未来工作和生活的人来说都有着重要的意义。
这本书是我之前在网上发表的一些文章的集合。《黑客圈简史》最早写于1992年,此后被多次更新和修改。其他文章写于1997年2月至1999年5月,1999年10月修订补充,2001年1月本书第二版修订时再次更新,但更多的技术部分没有删除或在我看来,让读者有一些问题和想法比让读者感到无聊或低估他们的智商更礼貌。如果你在文本中遇到一些特定的技术主题、历史典故或远程计算机缩写,跳过就行了。整本书都在讲述一个故事。当你读背面时,你可能理解你以前不理解的东西。
精彩的书籍摘要
第二章大教堂和市场
Linux有一套令人惊讶的软件工程理论。作为一个致力于实验这些理论的开源项目,fetch-mail取得了巨大的成功,这让我感到惊讶。我将在本文中讨论这些理论,并比较两种完全不同的开发模式:大多数商业公司采用的“大教堂”模式和linux世界采用的“集市”模式。这两种模型的根本区别在于它们对软件调试的理解完全相反。从linux的经验出发,我确认了这样一个命题:“只要有很多眼睛,bug就很容易捕捉到。”这类似于那些由自私自利的个人组成的自我纠正系统。在本文的最后,我讨论了在这个概念的影响下,软件的未来。
2.1集市模式的成功
Linux是颠覆性的。就在五年前(1991年),谁会想到分散在世界各地的成千上万的开发人员仅仅通过脆弱的互联网合作就利用他们的业余时间创建了一个世界级的操作系统?我当然不会想到它。当linux在1993年初进入我的视野时,我在unix和开源领域有10年的开发经验。20世纪80年代中期,我是gnu最早的贡献者之一。当时,我已经在网上发布了一些开源软件,我正在开发或与他人合作开发一些程序(如nethack、emacs vc和gud mode、xlife等)。)。这些程序至今仍被广泛使用,我想我理解这一点。
Linux推翻了很多我认为我知道的东西。多年来,我一直在宣扬unix信条,如“小工具”、“快速原型”和“进化编程”。但我也认为,如果它超过了一定的复杂性,就需要更集中的管理和更严格的流程。我相信,最重要的软件(操作系统和真正的大型工具,如emacs editor)需要由有才华的专家或几个专家在一个孤立的环境中仔细构建,就像建造教堂一样,并且永远不要在成熟之前发布测试版。
linus torvalds的开发风格是:早期发布,频繁发布,委托所有可以委托的东西,并开放到几乎混乱的水平,这是令人惊讶的。在linux社区,它不像大教堂那样安静和虔诚,而是更像一个混乱的集市,充满了各种各样的计划和方法(linux的文件服务器就是一个很好的例子,任何人的代码和文档都可以在这里提交),一个稳定和一致的操作系统诞生了,这真是奇迹中的奇迹。
事实上,市场模式确实有效,而且非常有效,这让每个人都感到震惊。我开始以自己的方式理解这种模式。除了试图在我的个人项目中探索之外,我还试图理解为什么linux世界没有在混乱中崩溃,而是以大教堂建造者无法想象的速度变得越来越强大。
1996年年中,我慢慢开始理解,并有机会检验我的理论。这个机会使我能够有意识地在市场模式下尝试一个开源项目。我做到了,更重要的是,它成功了。
我想讲的是这个项目的故事。通过这个故事,我将引出一些在开源开发中有用的格言和格言。虽然对我来说,这些都不是从linux中学到的,但我们可以看到linux是如何将这些理论运用得淋漓尽致。如果我是对的,这些格言将帮助你确切地理解是什么让linux社区产生了这么多好的软件,也许这些格言可以帮助你成为一个有生产力的人。
2.2邮件必须送达
切斯特县互联(CCIL),位于宾夕法尼亚州西切斯特,是一个小型的免费互联服务提供商。自1993年以来,作为联合创始人,我一直负责ccil的技术部分,并编制了我们最初的多用户论坛程序——你可以通过telnet来试试它。这份工作使我能够使用ccil的56k线路24小时保持与网络的连接。当然,这是工作要求!
我习惯于使用电子邮件,但是隔一段时间用telnet来锁定邮件是很烦人的。我真的希望邮件能自动送到snark(我家的机器),这样当邮件来的时候我会得到通知,然后我就可以用本地的工具来处理它。
SMTP(简单邮件传输协议),互联网的本地邮件传输协议,并不适合,因为它最适合机器总是在线的情况,但我家的机器并不总是在线,也没有静态ip地址。我需要这样一个程序,它可以在我间歇拨号的时候把我的邮件带到本地。我知道有这样的软件,大多数都使用应用层协议pop(邮局协议)。目前,大多数普通邮件客户端都支持pop,但当时我使用的邮件阅读器不支持。
看来我需要一个pop3客户端。所以我上网找了一个(事实上,我找到了三四个)。使用一段时间后,我发现它有一个明显的缺陷:它不能正确解析检索到的电子邮件的电子邮件地址,导致我无法正确回复。
问题是这样的:例如,一个叫乔的人给我写了一封关于洛克的信。当我把信带到斯纳克并试图回复时,邮件程序会愚蠢地想把它发送给斯纳克不存在的乔。所以我每次都要把我的回复邮件地址改成@ccil,这有点痛苦。
显然,这种事情应该由电脑来完成,但没有现成的流行客户端可以做到这一点!这给了我们第一课:
好的软件作品通常来自开发者的个人需求。
显而易见(俗话说,“需求是发明之母”),但是太多的软件开发人员不需要或者不喜欢他们正在开发的软件。他们把编程当作一种差事,只是为了得到报酬。在linux世界中情况并非如此——也许这可以解释为什么linux社区中原始软件的平均质量如此之高。
所以,我应该立即投入疯狂的编程,做一个全新的pop3客户端与其他程序竞争吗?请不要!我看着手边的流行音乐节目,认真思考“哪个最接近我想要的”,因为:
2.优秀的程序员知道写什么,优秀的程序员知道重写(和重用)什么。
我不敢说我是一个优秀的程序员,我只是模仿他们。优秀程序员的一个非常重要的特征是“建设性的懒惰”。他们知道人们想要的是结果而不是勤奋,显然从部分可行的计划开始要比从头开始容易得多。
以linus torvalds为例,他并没有试图从头开始编写linux,而是从重用minix(一种类似unix的小型个人电脑操作系统)的代码和思想开始。尽管linux中的所有minix代码最终都被删除或重写,但它在linux的早期发展中确实扮演了一个支架的角色。
基于同样的想法,我试图找到一些有好代码的流行程序作为我开发的基础。
unix世界中共享源代码的传统使得重用代码变得很方便(这就是gnu选择unix作为其基本操作系统的原因,不管它对unix本身有什么保留),而linux世界将这一传统置于技术极限。与其他地方相比,在linux世界中,从几个T字节的开源代码中找到一些其他人编写的“足够好”的代码要可行得多。
毫不奇怪,和我上次发现的一样,我发现了九个可选程序:fetchpop、poptart、get-mail、gwpop、pigger、pop-perl、popc、popmail和upop。我第一次选择了吴承红写的fetchpop。我在程序中添加了“重写邮件头”的功能,并做了一些其他的改进,这些改进被作者接受并在1.9版中发布。
几个星期后,我偶然发现了卡尔·哈里斯(carl harris)编写的popclient代码,这带来了一个难题:虽然fetchpop有一些好的想法(比如使用后台进程模式),但它只能处理pop3协议,而且代码有点业余(吴承宏当时是一个聪明但没有经验的程序员,从这两点都可以看出)。卡尔·哈里斯的代码更好、更专业、更健壮,但缺少fetchpop(包括我写的那个)中一些重要而微妙的特性。
继续改善效果还是切换到popclient?如果您进行转换,我编写的代码可以被保存,但同时,它可以被用来交换更好的开发基础。
更实际的转换动机是popclient对多协议的支持。Pop3是最常用的邮件服务器协议,但它不是唯一的协议。Fetchpop和其他替代程序不支持pop2、rpop或arop等协议,但我想添加对IMAP(互联网消息访问协议)的支持,这是最新设计和最强大的邮局协议,只是为了好玩。
此外,我决定切换还有另一个理论上的原因,这也是我在linux之前很久就知道的:
3.“计划扔掉一个,你迟早会这么做的。”(弗莱德·布鲁克斯,《人月神话》第11章)
或者可以说,当你第一次解决问题时,你经常不理解问题,第二次你可能知道如何把事情做好。所以,如果你想做正确的事情,至少再做一次。我对自己说,重写fetchpop是我的第一次尝试,现在我可以改变它了。
1996年6月25日,我给卡尔·哈里斯发了我为popclient制作的第一个补丁,发现他基本上对popclient失去了兴趣。因为popclient代码有点旧了,还有一些小错误没有解决,很多地方都值得改进,我和carl harris很快就达成了一致:我将接管这个程序。该项目无意中升级了。我没有修补现有的流行客户端,而是开始维护整个程序。新的想法不时出现,我意识到我可以对程序做一些大的改变。在鼓励代码共享的软件文化中,这是项目进化的自然方式。我目睹了以下文章:
4.如果你有正确的态度,有趣的事情会找到你。
当然,卡尔·哈里斯的态度更重要,因为他明白:
5.当你对一个程序不再感兴趣时,你的最终责任是把它交给一个有能力的接收者。
虽然没有明确提到,但我和卡尔·哈里斯都知道,我们的共同目标是找到最佳解决方案。唯一的问题是我能否证明我是可靠的。一旦我这样做了,卡尔·哈里斯就会优雅而干净地把程序交给我。如果有一天轮到我,我希望我能做好交接。
……
注:如果您喜欢阅读和阅读,我们欢迎您关注胡雯旗下的微信公众账户“roobook”。你的一部分是由你读过的书决定的,你会很高兴每天都能遇到新的知识。
标题:大教堂与集市:一本不管你是不是键盘侠都该读的软件行业圣经
地址:http://www.iqulvyou.com/mqhy/4632.html
免责声明:全球名企网是集资讯和商务为一体的食品行业实用型资讯媒体,部分内容来自于网络,不为其真实性负责,只为传播网络信息为目的,非商业用途,如有异议请及时联系btr2031@163.com,全球名企网编辑将予以删除。