查看原文
书评

【读书笔记】《大教堂与集市》|[美] Eric S.Raymond

张沛 沛文沛语Frank 2023-08-24

推荐指数

★★★★




我是在看硅谷王川的Youtube视频《建设个人信息基础设施时,看到王川推荐的这本书


当时吸引我的一个观点是,开源的软件获得Bug反馈的速度是闭源软件难以匹敌的。同样你在社交媒体上发表文章和观点,也可以获得很多类似的体验,你的信息来源比别人要广阔的多,你的纠错成本也比别人要低很多。你的信息来源和信息整合的优势就可以复合式的增长。


读完这本书,让我对开源社区有了更多维度的认知。让一只对社区经济感兴趣的我,忽然重新认知了原来一直就知道,但是认知盲维的一个重要社区:开源社区。


这个社区有很多其他社区不具备的特征:使用技术语言,语言统一,劳动成果可复用,知识密度高,更新快,乐于分享等等。只是原来我一直没有学会一门编程语言,而难以有效的融入开源社区


正好最近的思考中,我开始有一个转变就是我打算35岁之后以5年为周期开始学习新的事物,作者说学习一门编程语言需要18个月,这对我来说就不算很长的时间了,也基本消除了学习编程语言的心理畏难情绪。换一个角度认知,很多问题就迎刃而解!


所以梁宁老师说,人遇到难事过不去,要么是认知不足,要么是能量不足;但归根结底,还是因为能量不足。


正好我自己2019年也有过将个人开源的意识,但是比较模糊,读完这本书就有了一个相对清晰的框架了。

【沛文沛语】开源说明文档





读书笔记编号

PRN2023009

编号备注:Pei's Reading Notes

年份YYYY+年度序号XXX



图书信息

书名:大教堂与集市

作者:【美】Eric S. Raymond

译者:卫剑钒

出版社:机械工业出版社

出版时间:2014年6月

ISBN:9787111452478

字数:145千字

本书由机械工业出版社有限公司授权得到APP电子版制作与发行


图书封面





阅读方式


精读+速读


阅读数据


获取沛哥的读书笔记



方法一:

【沛文沛语】微信公众号,按书目汇总读书笔记


方法二:

得到APP→搜索用户【沛文沛语】→关注→知识城邦




备注:使用得到APP阅读,灰色背景部分为引用原文,原文上方为笔记。



[美] Eric S.Raymond

 2023-08-20 09:06:18

原来大教堂和集市是对两种不同的软件开发模式的比喻,看这本书之前真的没猜出来为啥取了这个名字

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

 2023-08-20 09:11:09

这几年关注过很多分布式方面的案例,分布式的同行评审确实是一个有趣有洞见的视角

本书并没有给出基础理论上的创新,只是描述了这样的事实:开源软件系统性地利用开放式开发和分布式同行评审(peer review),不仅降低了成本,还提高了软件质量。

 2023-08-20 09:29:26

一层层的不断的抽象

,这些观念的着重点在于如何将操作系统的复杂性隐藏在系统内部,不仅让用户看不到,甚至让大多数程序员都看不到。

 2023-08-20 09:44:27

在社区里,如何用一个小的成功来开启增强回路,吸引其他人的加入?

FSF一直未能完成的HURD使得Helsinki大学一名叫Linus Torvalds的学生有了施展才能的空间,1991年,他开始为386机器开发自由UNIX内核,使用的正是FSF提供的软件套件。Linus很快获得了成功并吸引了互联网上的黑客们,他们帮助Linus一同开发Linux:一个全功能的UNIX,源代码完全免费,而且可以再发布。

 2023-08-20 09:46:16

理念的创新比技术创新更有生命力

Linux最重要的特点不是技术上的,而是社会学上的

 2023-08-20 09:47:29

自由,演化,涌现

Linux几乎从一开始就发展出一条完全不同的路,其开发更像是仅通过互联网合作的大量志愿者的随意之作。在质量方面,没有严格的标准也没有一个强有力的机构来管理,他们只是执行一个简单得有点幼稚的策略:每周发布,并在接下来几天内获取数百个用户的反馈。他们创造了一种类似达尔文“物竞天择”的选择机制,被选择对象则是开发者们所做的种种软件修改。让所有人吃惊的是,这种方式工作得非常好。

 2023-08-20 09:53:22

混沌才能孕育创新

Linus Torvalds的开发风格是:早发布、常发布、委托所有能委托的事、开放到几乎是混乱的程度,这些都令人感到惊讶不已。

 2023-08-20 13:58:22

6.把你的用户当成开发合作者对待,如果想让代码质量快速提升并有效排错,这是最省心的途径。

 2023-08-20 13:59:56

全新的生产关系的开辟者,这种名誉当然值得

我想,Linus最聪明和最有价值的成就其实不是构建出一个Linux内核,而是他发明的这种Linux开发模式。有一次我当面向他表达了这个看法,他笑了,平静地重复了他常说的话:“我基本上是个很懒的人,别人做事,我得名誉。”像狐狸那样懒,或者像Robert Heinlein曾经描绘的一个很有名的角色,太懒以至于无所不能。

 2023-08-20 14:02:02

所以迷信去中心化替代中心化是错误的,二者可以有机搭配,分层嵌套,各司其职,各取所长

不只是Emacs,还有其他一些软件产品也使用了两层架构和两级用户群,内核使用大教堂模式开发,工具箱(toolbox)使用集市模式开发,比如数据分析和可视化展现的商业化工具MATLAB就是这样,MATLAB和其他类似产品的用户们发现,创新、酝酿和行动最频繁发生的地方总是在产品的开放部分,而这部分的改进也总是由庞大而多样化的用户群完成。

 2023-08-20 14:09:27

或者说得更通俗一些:“只要眼睛多,bug容易捉。”我把它称为“Linus定律”。

 2023-08-20 14:11:04

我就经常发现软件的各种Bug,但是我没有能力消灭这些Bug
而开发者有能力消灭Bug,但是他们没有发现它的场景

Linus提出异议,他认为那个弄明白并修复问题的人往往不是也没有必要是那个首先发现问题的人,“有人发现问题,”他说,“另有人搞定问题,我可以公开地说,发现问题更具挑战性。”

 2023-08-20 14:14:32

开发者和使用者缺乏统一的语言规则,或者缺少一个优秀的产品经理来做沟通翻译

如果报告bug的用户对源码不关心,则其报告通常不会很有用。对源码不关心的用户,往往报告的都是表面症状,他们把自己的运行环境当成是理所当然的,他们不仅省略了重要的背景数据,而且很少给出重现bug的可靠方法。
这里隐含的问题是开发者和测试者对程序有着不匹配的思维模式,测试者是从外往内看,程序员是从内往外看。对于不开放源码的软件开发,开发者与测试者往往局限于自己的角色,各说各话,都对对方倍感沮丧。

 2023-08-20 14:18:16

软件开发的人效不是我们日常习惯的线性模型,而是开方模型

传统软件开发在组织结构上的根本问题由Brooks定律一语道破:“在一个已经延期的项目上增加人手,只会让项目更加延期。”更为一般地讲,Brooks定律指出,随着开发人员数目的增长,项目复杂度和沟通成本按照人数的平方增加,而工作成果只会呈线性增长。

 2023-08-20 14:30:43

小米将这一点发挥到了极致,和用户做朋友,让用户成为产品开发者的一部分

.仅次于拥有好主意的是,识别来自用户的好主意,有时后者会更好。

 2023-08-20 14:34:01

多么痛的领悟,提出一个准确的问题,意味着问题解决了一半

当你发现自己在开发中碰壁时,当你发现自己苦思冥想也很难做出下一个补丁时,通常你不该问自己是否找到了正确答案,而是该问你是否提出了正确的问题,因为也许问题本身需要被重新定义。

 2023-08-20 14:36:08

less is more

“设计上的完美不是没有东西可以再加,而是没有东西可以再减。”

 2023-08-20 14:47:53

开始集市模式之前需要一个最小凝结核,这个过程需要的个人集中完成

显然,你不可能从零开始实施集市模式 8。可以用集市模式测试、排错和完善项目,但以集市模式从零开始一个项目是非常困难的。Linus没有这么试过,我也没有。开发者社区从成立伊始,就需要一个可以运行和测试的东西。
当开始建设社区的时候,你需要拿出一个像样的承诺。程序此时并不需要特别好,它可以简陋、有错、不完整,文档可以少得可怜。但它至少要做到:(a)能运行,(b)让潜在的合作开发者相信,这个软件在可预见的未来,能演变成一个非常棒的东西。

 2023-08-20 15:06:55

但是在政府软件采购中没有这样的机制,经常是流程合规,然而最后屁都不剩

但我认为,如果一个人真的想要启动一个集市项目,那么他的能力应该已在最低水准以上。开源社区内在的声誉评价机制会给人们施加微妙的压力,使那些不能胜任项目发展的人,不会去发起一个开发项目。至少到目前为止,这个机制非常有效。

 2023-08-20 15:08:50

集市项目的协调人或领导人必须要有很好的人际交往和沟通能力。

 2023-08-20 15:21:48

构建一个有效协作的社区,要靠激发内在驱动力,要靠吸引而非命令

“齐心协力”正是Linux这种项目所需要的——对Internet上(可以看成是无政府主义者的天堂)的志愿者们使用“命令原则”是根本行不通的。如果某个黑客想领导一个协作项目,想要项目有效地运作和竞争,他就不得不学会如何施行Kropotkin所提出的“共识原则”,招募和激励有兴趣的成员形成有效社区。他还必须学会如何使用Linus定律。10

 2023-08-20 15:22:48

声誉系统

Linux黑客们致力于最大化的“效用函数”,其目的并不是经典意义上的经济价值,而是自我满足和黑客声望这些无形的东西。

 2023-08-20 17:30:50

用中国人熟悉的话说就是群主

Linus成功地将自己置于项目看门人的地位——大多数开发工作是他人完成的,他不断培养大家对这个项目的兴趣直到它能够自我维持下去,这表现出他对Kropotkin“共识原则”的敏锐领会。

 2023-08-21 08:46:05

心死而后社死

无论如何,在一个廉价PC和快速Internet连接的世界里,我们发现始终如一真正有限的资源是技术人员的关注,开源项目如果失败了,根本不会是因为机器、网络或办公场地,它们死掉的唯一原因就是开发者们不再感兴趣了。

 2023-08-21 08:46:33

科层制带来的内耗

朋友告诉我,很多资源调配基本上是防守性的;一旦你拥有人、机器和办公空间,你就不得不防备同级管理人员对资源的竞争,以及上级对有限资源中最有效部分的调用。
但开源开发者是志愿者,是因为兴趣和能力(能否对项目有所贡献)自主选择的(即便他们因开源工作领取薪水,这也依然适用),志愿者精神倾向于自发去关心资源问题的“解决”,他们会把自己的资源带到工作中,这里几乎没有传统意义上“防守”的必要。

 2023-08-21 08:50:17

或者说一个人最有价值的5%的才华才会被开源社区认可并接受

我那个朋友对开源世界和大型封闭项目都比较熟悉,她相信开源之所以成功,部分原因是开源文化只接受编程人员中那最有才华的5%。她将自己的大部分时间都花在了组织部署其他的95%,并因而第一手见证到那广为人知的差异:最有才华的程序员和那些刚刚及格的程序员之间,生产率能相差100倍。

 2023-08-21 08:51:54

确实有的人不适合开源社区,他们更适合按部就班的分工

传统开发管理是对缺乏激励的程序员们的必要补充,否则他们不会干得很好。

 2023-08-21 08:53:41

所以开源社区需要有吸引力的问题来激发开发者的才华

如果传统、闭源、严格管理模式的软件开发真的想靠这种由“无聊”部分组成的马其诺防线来防御,那么它之所以在某个应用领域能继续生存下去,只是因为还没人发现这些问题是真正有趣的,并且还没人发现迂回包抄的路径。一旦有开源力量介入这些领域,用户就会发现终于有人是因为问题自身的魅力而去解决它的,就像其他所有需要创造力的工作,若论激励效果,问题自身的魅力比单纯的金钱要有效得多。

 2023-08-21 16:32:39

这种特点和机制,如何迁移到其他领域的社群运营中去呢?

可怜的传统管理者,现在是四面楚歌,在“监管”这个话题上也无法获取一丝安慰,开源社区最强大的一个长项就是非中心化的同行评审,所有致力于细节不被疏漏的传统方法,都无法和它相比。

 2023-08-21 21:22:17

有挑战但又没突破极限

一个快乐的程序员是一个既没有被浪费也没有被压垮(由于不适当的目标或过程中充满压力与冲突)的人,乐趣预示着效率。

 2023-08-21 21:23:02

符合人性,符合底层需求

现在看来,开源成功的一个最重要成果,就是告诉我们,“玩”是创造性活动中最具经济效能的工作模式。

 2023-08-21 21:36:34

要清楚的看到这种文化和中国传统文化的差异之处

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

 2023-08-22 08:00:13

但是对声誉的量化系统,似乎还没有那么好

另一个特殊之处是开源文化相对单纯。绝大多数礼物文化都会有折中——不论是对交换经济关系的折中(如奢侈品交易),还是对命令经济关系的折中(如家庭或宗族结盟)。开源文化中不存在真正意义上类似的折中,也就是说,要想获取地位,除了同侪声誉,没有什么更多途径了。

 2023-08-22 08:17:27

这种文化也避免了草原上长出一棵大树,然后大树底下寸草不生。
在文化机制上去中心化的设计。
类似的今日头条的张一鸣也经常提到,要缩小自己的ego才能看到更大的世界。
从生态系统的角度来讲,有利于保持和维护多样性

这揭示了黑客文化一个有趣的方面,它有意识地不信任或者看不起“自我主义”或者基于自我的动机。“自我推销”往往会遭到批判,即便整个社区可能从中获得好处。正因如此,黑客文化中的“大人物”和“部落长者”需要言谈轻柔和幽默自贬来维护他们的地位。这种否定“自我”的态度和几乎完全建立在“自我”之上的激励结构是如何协调的?这太需要有一个解释了。

 2023-08-22 08:32:54

难怪声誉的量化系统没做好,这也是故意的,筛选下来产物

在与黑客讨论“声誉竞争”模型时,我观察到另一个有趣的现象,那就是很多黑客抵制这个模型,他们非常不愿承认驱动自己行为的动力来自于“对同侪声望的渴望”或是“自我的满足”(这是我当时未考虑后果而贴上的标签)。

 2023-08-22 08:47:25

基于技术语言很容易达成就事论事的共识,基于自然语言则有很多价值观的分歧,情绪的噪音

出于非常类似的原因,抨击作者而非代码是不合常规的,这一点微妙而有趣,黑客们会没有顾忌地在意识形态或个人差异上互相攻击,但从未听说有哪个黑客曾公开攻击另一个人的技术能力(即使是私下的非议也很少见,如果有,也往往以柔和的方式表达),排错和差评总是针对项目而不是个人。

 2023-08-22 08:49:33

在团队里建立代码级的沟通能力,更容易就事论事

更进一步,人们并不会下意识将过往的bug归咎于开发者,普遍认为“bug已被修复”比“这里有过bug”更重要。就像一位读者所说,一个人是通过修复Emacs的bug获得地位,而不是通过修复Richard Stallman的bug获得地位——用已经修复的Emacs的bug来批评Stallman会被认为是极其恶劣的行为。

 2023-08-22 08:50:48

每一种亚文化圈都有其内在禁忌

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

 2023-08-22 08:51:19

这就是社会学的研究方法,观察文化禁忌

攻击他人能力的禁忌(学术圈没有这个禁忌)比起自我表现禁忌(这一点学术圈也有)更有揭示意义,因为我们可以将其关联到学术圈与黑客圈在沟通和支撑结构的差异上。

 2023-08-22 09:10:04

品格还可以成为关系杠杆,撬动更多资源,涨知识了

对项目保持谦虚可充分利用杠杆作用,假如有人展示了自己的优秀代码,然后说:“唉,它没有x、y和z,所以还不是那么好”,通常,针对x、y和z的补丁很快就会出现。

 2023-08-22 09:12:07

把社区领导者的个人人格和集体人格分开,也就是法身分离于肉身

很多志愿者社区就是因为不能辨识共享价值观与领导者个性之间的差异而毁掉的,Larry和Linus肯定都已充分意识到这点。

 2023-08-22 14:01:07

声誉竞争模型解释了一个常被引用的格言,即“自称是黑客不代表你就是黑客,只有其他黑客认为你是黑客,你才是黑客” 10。从这个角度看,所谓黑客,是一个通过贡献礼物表现出他(或她)既拥有技术能力又懂得声誉竞争如何运转的人。对是否为黑客的判断是一种感知和认同,只能由那在文化中已经做得很好的人给出。

 2023-08-23 17:04:04

愿望是美好的,可能也还需要更多的技术进步才能支持,比如有新的激励系统,大量的程序员离开公司还是找不到足够的生活来源

重申了“大教堂与集市”中的论断:最终,当自由市场经济开始创造出足够的财富盈余时,大量程序员可以生活在后稀缺的礼物文化中,而软件产品的工业\工厂模式注定走向衰亡。

 2023-08-23 17:10:21

国内的科研机构经常是大价钱买硬件,不愿意花钱在有高水平的操作人员和软件系统上,结果产出质量很低

同样值得注意的是,这种错觉鼓励了一种病理性的价格结构,完全脱离了开发成本的实际分解。如果软件生命周期中超过75%的成本(这已经被普遍接受)都花在维护、排错和扩展上,那么常见的价格策略——给软件定以较高的购买价和相对较低甚至为零的维护费——就必然导致很差的服务。

 2023-08-23 17:11:07

这一点,苹果公司的售后服务就做的非常好!

如果供应商的收入来自于销售软件,那么大部分的努力就会是制造软件并将它们推销出去;至于帮助台(help desk),它们不是盈利中心,将会成为最低效员工的发配地,并只能得到仅供维持客户数量不低于临界值的资源。

 2023-08-23 17:27:31

有没有可能通过区块链的智能合约系统的底层技术的升级来实现,比如把软件封装到区块链上,链下执行,链上验证,然后按照使用量来收费

走闭源这条路,你能够通过秘密比特赚钱,但也使得真正独立的同行评审变得不可行。开源这条路为独立同行评审创造了条件,但你却不能从比特中赚钱。

 2023-08-23 17:30:59

还真没从标准传播和市场创建的角度思考过开源,认知盲维了

另一个几乎同等重要的收益是,开源是标准传播和市场创建的有效途径。Internet的戏剧性成长,在很大程度上要归功于没人拥有TCP/IP标准,也就是说,没有特权能够控制Internet的核心协议。

 2023-08-24 08:16:37

也许这种理念的指引,正式未来技术进步,技术融合的指引

本文所列举的商业模式并不是最终定式,投资人还在不断思考如何应对软件产业变革带来的后果,软件产业变革后将明确定位于服务而不是封闭的知识产权,这一天终将到来。

 2023-08-24 08:22:42

但是随着数据逐渐被确权,被交易,这些架构可能也会改变。数据可能成为单独的一层,当数据可以被交易的时候,算法也就可以被量化交易了,算法可以按照使用次数来进行收费了,因为算法在某种程度上也是一种特殊的数据

基础架构(互联网、Web、操作系统、跨越竞争者界限的低层通信软件)将会几乎全部开源,并由用户联盟和盈利性发布/服务机构(如Redhat所扮演的角色)共同维护。
应用,则非常倾向于继续封闭。当一个未公开算法或技术的使用价值足够高(且软件不稳定带来的相关成本足够低、供应商垄断带来的相关风险足可容忍)时,用户会继续为此类闭源软件付费。这种情况最有可能发生在自成一体的垂直市场应用中(其网络效应也较弱)。前面提到的锯木软件就是一例,1999年最热门和最有前景的生物识别软件则是另一例。
中间件(像数据库、开发工具或可定制的应用协议栈顶端)将处于开闭源混杂的状态,这类软件走向闭源还是开源,似乎更取决于软件失效的代价,代价越高,其走向开放的市场压力就越大。

 2023-08-24 08:26:03

盗版操作系统,也毁了中国的国产操作系统的生存空间。
中美两国的IT产业的最大的不同之处在于,美国的市场结构中,很大一部分收入是To B的,而中国的To B的份额占的很少

如果你是硬件供应商,你可能害怕开源会泄露产品如何工作的重要细节,会使竞争者趁机复制并获得不公平的竞争利益。在产品周期长达3年到5年的那些年代里,这个观点还算说得过去,但现如今,竞争者花在复制和理解上的时间,将会占据产品周期的很大一部分,他们本该把时间花在创新和考虑如何让产品差异化的。
这个观点并不新鲜,前克格勃首脑Oleg Kalugin说得很好(http://cnn.com/SPECIALS/cold.war/experience/spies/interviews/kalugin/):
“比如说,我们计划窃取IBM这类公司或者其他电子领域的先进技术,由于西方在这方面远超我们,我们需要花费数年让这些情报成果得到实现。而那时,大概五年或七年,西方又往前走了,我们只能跟着一偷再偷,而且会落得越来越远。”

 2023-08-24 08:30:27

对于企业管理者来说,谨慎扩大团队规模,因为沟通的复杂性会以更快的平方级别的速度增长

Brooks推测,如果开发成员数目为N,工作量会呈N倍增长,但复杂性和bug率会以N²增长。N ²体现着各开发者代码之间的通信路径(以及可能的代码接口)。

 2023-08-24 08:41:39

如果你不懂任何计算机语言,我建议从Python入门。它设计整洁,文档良好,对初学者很友好。作为一个好的入门语言的同时,它并不是一个玩具,它非常强大、灵活,完全适用于大型项目,对此我曾写过一个较为详细的评估(http://noframes.linuxjournal.com/lj-issues/issue73/3882.html)。其教程则可在Python网站上找到(http://www.python.org)。

 2023-08-24 08:42:10

,如果你只懂一两种语言,那你不会达到黑客的技能水平,甚至连程序员都称不上——你需要学会以一种独立于任何语言的一般方式来思考编程问题。要成为一名真正的黑客,你需要到达这样的程度:你能把手册上的东西和你已经知道的东西联系起来,从而可以在几天之内学会一门新语言。这意味着你需要学习几种非常不同的语言。

 2023-08-24 08:46:08

这个学习周期在35岁之前,让我觉得有点长,现在我打算以5年为周期来学习新技能,这样看来,18个月并不算很长

我要多久才能学会黑客技能?
这取决于你的天赋和努力程度。如果足够专注,大多数人能在18个月到两年时间内掌握一套相当体面的技能。但是不要觉得这就可以了,如果你是一名真正的黑客,你会用你的一生来学习和完善你的技能。

 2023-08-24 08:46:57

我应该先学习什么语言?
HTML,如果你还不会的话。市面上有很多装帧华丽、被吹得天花乱坠的HTML书籍,遗憾的是几乎没有一本是质量过硬的。我最喜欢的是《HTML:The Definitive Guide》(http://www.oreilly.com/catalog/html3/)
但HTML并不是一个完整的编程语言。如果你做好准备开始学习编程,我建议从Python起步,http://www.python.org。会有很多人向你推荐Perl,而且Perl现在确实比Python流行,但Perl更难学而且(在我看来)它设计得不是很好。

 2023-08-24 08:48:12

免费的软件反而激发了更多的市场需求

软件开源会不会让程序员无以谋生?
不太可能,目前看来,开源软件产业非但没有使工作职位减少,反而创造了更多的工作职位。如果程序写出来比不写出来会有净经济收益,那程序员就会得到报酬,而不论程序写出来后是否免费。此外,不论写出多少“免费”软件,永远存在更多新的和定制化的应用需求。对此我在Open Source网站(http://www.open-source.org)上有更多的论述。


来自得到App


延伸阅读:

  1. 如何有效利用电子书的笔记功能?

  2. 沛哥是如何爱上电子书的?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存