BOOK 一月 15, 2023

《大教堂与集市》书摘

文章字数 7.1k 阅读约需 6 mins. 阅读次数

豆瓣评分 8.4:https://book.douban.com/subject/25881855/

译者序

  • Eric在本书中向大家展示了两种最为经典且截然不同的模式:大教堂模式和集市模式。传统大型软件公司的开发模式就像是艰难而缓慢的大教堂建造工程,它有着严密的管理和封闭的集中式结构,但在创新上、生产力上和Bug控制上却落后于集市模式。集市模式是一种并行的、对等的扁平化开发结构,其参与者大多来自于互联网上的志愿者,结构松散,来去自由,就像是一个乱糟糟的集市,但就是这 样的组织形式,却取得了像Linux这样令人惊叹的成功。

2. 大教堂与集市

  1. 好的软件作品,往往源自于开发者的个人需要。
  2. 优秀的程序员知道写什么,卓越的程序员知道改写(和重用)什么。
  3. “计划好扔掉一个吧,迟早你会这么做的。”(Fred Brooks,《人月神话》第11章)
  4. 如果你有正确的态度,有趣的事情自然会找到你。
  5. 当你对一个程序不再感兴趣时,你最后的责任就是把它交给一个可以胜任的接棒者。
  6. 把你的用户当成开发合作者对待,如果想让代码质量快速提升并有效排错,这是最省心的途径。
  7. 早发布,常发布,倾听用户的反馈。
  8. 如果有足够多的beta测试者和合作开发者,几乎所有问题都会很快显现,然后自然有人会把它解决。
  9. 聪明的数据结构配上愚笨的代码,远比反过来要好得多。
  10. 如果你把beta测试者当做最珍贵的资源对待,他们就会成为你最珍贵的资源。
  11. 仅次于拥有好主意的是,识别来自用户的好主意,有时后者会更好。
  12. 通常,那些最有突破性和最有创新力的解决方案来自于你认识到你对问题的基本观念是错的。
  13. “设计上的完美不是没有东西可以再加,而是没有东西可以再减。”
  14. 任何工具都应具备预期内的功能,但一个伟大的工具能给你带来预期外的功能。
  15. 写网关类软件时,尽可能不要干扰数据流,而且绝不要扔掉信息,除非接收方强迫你这么做。
  16. 当你的语言还远不是图灵完备(Turing-complete)的时候,语法糖会让你受益良多。
  17. 系统的安全性只取决于它所拥有的秘密。谨防虚假的秘密。
  18. 想要解决一个有趣的问题,先去找一个让你感兴趣的问题。
  19. 如果开发协调者有一个至少像Internet这样好的沟通媒介,并且知道如何不靠强制来领导,那么多人合作必然强于单兵作战。

3. 开垦心智层

3.6 黑客境遇和礼物文化

  • 用这种方式考察开源黑客社会,可以很清楚地看出它就是一种礼物文化。这里没有非常稀缺的“生存必需品”(如磁盘空间、网络带宽、计算能力),软件则是自由共享的,这种物质充裕导致成功的唯一标准就是同侪中的声誉。

3.11 谦逊的价值

  • 比较有趣的一点是和学术圈相比。在学术圈,公开批评他人有缺陷的作品是赢得声誉的重要方式,而类似行为在黑客文化中会被严厉禁止。

3.12 声誉竞争模型的推论

  • “自称是黑客不代表你就是黑客,只有其他黑客认为你是黑客,你才是黑客”。从这个角度看,所谓黑客,是一个通过贡献礼物表现出他(或她)既拥有技术能力又懂得声誉竞争如何运转的人。

3.13 什么才是好礼物

  • 开源世界的 1.0 版意味“开发者愿意拿自己的名誉赌它好使”,而闭源世界的 1.0 版则意味着“如果你很谨慎,不要用这版”。
  • 相比那些只挑有趣和简单工作的人,长期致力于艰苦和乏味工作(如调试、写文档)的人更令人钦佩。

3.19 礼物胜过交换

  • 自由市场经济是全世界范围内通过合作获得经济效能的最佳方法,这一点看来已成为历史定论,同样,基于声誉竞争的礼物文化可能是通过合作产生(和检验)高质量创造性工作的全世界范围内的最佳方法。
  • “与完全出于兴趣的工作相比,被委托的工作通常表现出较少的创造性。”
  • “活动越复杂,就越容易被外部的报酬损害。”
  • 固定工资不会降低人们的积极性,但计件工资和奖金会,这一点很有意思。
  • 因此,给那些做汉堡和挖地沟的人们发放绩效奖金可能是经济正确的,但更明智的做法是:在编程工作中把薪水和绩效奖励完全分开,并让人们选择他们自己的项目(这两种趋势自然而然地在开源世界里得到了体现)。这些事实表明:只有当程序员非常积极以至于没有奖励他(她)也愿意工作时,才是唯一应该给予绩效奖励的时候。
  • “如果一个人越是感受到自主性受限,其创造力就会越少。”
  • 这也使管理变得更复杂,支配性的语言反馈似乎也如纪检报酬一样降低着人们的积极性。
  • “我给你报酬是因为我认可你工作的价值”和“你得到报酬是因为你达到了我的标准”,第一种说法不会挫伤积极性,但第二种会。
  • 以这些心理学观察为依据,我们可以得出论断:开源开发团体在生产力上会远远超过(特别是长远地看,创造性作为生产力倍乘器的作用会越来越重要)同等规模与技能的闭源程序员团体,后者受稀缺性报酬激励但同时也导致动力不足。
  • 事实上,获取最高软件生产力的药方看上去自相矛盾而又颇具禅意:如果你想获得最有效率的产品,你必须放弃促进程序员生产力。做好他们的后勤,让他们自己做主,并忘掉最后期限。在传统的管理者看来,这种几近疯狂的宽容注定失败 —— 但它的的确确有效,使用这种方法,开源文化正势如破竹地痛击着它的对手。

4. 魔法锅

4.2 礼物文化之外

  • “大教堂与集市”一文描述了分布式合作开发模式是怎样颠覆了 Brooks 法则,使得单个项目的可靠性和质量都能达到空前的水平。“开垦心智层”一文研究了“集市”开发模式的社会动力学,指出要想最有效理解这种模式,应参考一下人类学家所称的礼物文化(而不是传统的交换经济),这种文化下,其成员通过送出礼物而竞争社会地位。

4.3 批量制造的错觉

  • 软件很大程度上是一个服务行业,虽然长期以来都毫无根据地被错认为是制造行业。
  • 如果软件生命周期中超过 75% 的成本(这已经被普遍接受)都花在维护、排错和扩展上,那么常见的价格策略 —— 给软件定以较高的购买价格和相对较低甚至为零的维护费 —— 就必然导致很差的服务。
  • 如果供应商的收入来自于销售软件,那么大部分的努力就会是制造软件并将它们推销出去;至于帮助台(help desk),它们不是盈利中心,将会成为最低效员工的发配地,并只能得到仅供维持客户数量不低于临界值的资源。

4.4 “信息要免费”的神话

  • 有些类型的信息缺失需要免费,不准确地讲,当越多的人能够接触到它,它的价值就会越高 —— 技术标准文档就是一个很好的例子。但如果认为所有信息都该免费,那可经不起推敲,考虑一下那些使人们能够获取排他性好处的信息 —— 一张藏宝图、一个瑞士银行账号,或一个可用来索取服务的信息如计算机账号密码。即使这些信息的复制成本可以为零,该信息所能索取对象的成本也不会为零。因此,被索取对象非零成本的特性会继承到该信息上。

4.5 反公地模型

  • 公地悲剧预言了三个可能的结果。一是公地退化为泥沼,二是少数有强制力的成员代表全村实施分配策略,三是将公地分割给村民,让每个村民自行保护(如围起篱笆)和管理自己那块草地的可持续性。

4.10 何时开放,何时关闭

  • 开源的同行评审是得到高可靠和高质量软件的唯一可扩展方法。
  • 经济学家知道,信息不对称会给市场带来负面影响。如果靠特权信息收费能够比努力生产好产品更有利可图,高质量的产品就会被逐出市场。不透明是质量的敌人(secrecy is the enemy of quality),软件业如此,其他行业也如此。
  • 如果满足下面这些条件,就该考虑把源码开放:
  1. 可靠性/稳定性/可扩展性非常重要。
  2. 除了独立的同行评审,没有其他便捷易行的方法验证设计和实现的正确性。
  3. 该软件对客户端业务非常关键。
  4. 该软件创建或运转一个公共计算或通信基础架构。
  5. 关键方法(或能实现同等功能的方法)属于公共知识。

4.11 用开放源码做战略武器

  • 开源项目可以有效防止闭源产品制约市场,能重置竞争并让新进公司从劣势领域转至优势领域里。

4.13 开源的商业生态

  • 传统闭源项目给开发者带来的压力,会日复一日地损害软件质量并将项目变成“焦油坑”(tar-pit),开源开发者则无需承受这种压力 —— 没有来自市场部的无意义且分散注意力的功能列表;没有管理层要求他们使用不合适和过时的语言或开发环境;不会因为产品差异化或知识产权保护的需要而以一种新的、不兼容的方式重新发明“轮子”;(最重要的是)没有“最后期限”;不需要在产品还没有做好时就匆匆忙忙推出 1.0 版本。
  • “好了告诉我”管理模式不仅有利于提升质量,实际上也有利于工作成果的最快交付。

附录A:如何成为一名黑客

A.3 黑客的态度

  • 你还必须要培养出一种对自己学习能力的信心 —— 你要相信,即便你没有掌握解决某个问题所需的全部知识,如果你成功处理了其中一小部分而且从中学到东西,你将会学到足够多的知识去解决下一小部分 —— 如此往复,最终你会解决整个问题。

A.5 地位之于黑客文化

  • 黑客文化是人类学家所称的礼物文化。你之所以获得地位和荣誉,不是通过支配别人,不是通过美貌,也不是通过拥有别人想要的东西,而更多是通过给出。特别是给出你的时间、给出你的创造力、给出体现你技能的成果。

正文注释

大教堂与集市

  • 软件项目的规模(可分为三种)很关键。对于小项目(我认为也就一到三个开发人员)而言,没有什么管理结构比好好找一个主力程序员更有效。对于规模稍微大一些但传统管理成本相对还比较低的项目,集市模式虽然能避免重复劳动、易于跟踪错误、容易看到不易监管的细节,但其好处并不明显。
  • 当项目规模大到一定程度,传统管理的成本和问题会比重复劳动的成本增长得快得多。集市模式虽然有自身问题,但不会像传统模式那样存在不能利用“多眼球效应(many-eyeballs effect)的结构缺陷。(正如我们所看到的,)集市模式在确认 bug 和易疏漏细节上比传统模式要管用得多。因此,对于大型项目,这些定律的组合效果,使得传统管理模式的净收益趋近于零。
  • 开源提升产品质量的三驾马车中,“好了告诉我”和开发者“自我选择”是两架,另一架是“过程透明”。
  • 创新的根本问题(在软件中,或任何其他领域)是:如何不压制创意。但是,更为根本的是,如何先产生出一批有创见的人。
  • 如果我们需要的是一个人和他的创意,那怎样的社会环境会更有利于这个创意的实现?一个能凭借创意迅速吸引成百上千合作者的环境,必然要好过任何这样的环境:这个人在着手实现他的创意前,不得不向领导层推销他的创意,否则就有被炒掉的风险。
  • “只有平等各地之间才有真正的交流,因为下级向上级讲好听的谎话会比讲真话更能得到持续的奖励。”

开垦心智层

  • 开放市场有着最强的竞争力,并且通常有着最好和最便宜的产品。
  • 拥有最严格准入门槛的市场正是那些遭受革命者最猛烈攻击的市场。
0%