博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记-大教堂与集市
阅读量:5967 次
发布时间:2019-06-19

本文共 3496 字,大约阅读时间需要 11 分钟。

内容和作者简介

《大教堂与市集》(The Cathedral and the Bazaar)是埃里克·斯蒂芬·雷蒙(Eric Steven Raymond)所撰写的软件工程方法论。《大教堂与集市》是开源运动的《圣经》,颠覆了传统的软件开发思路,影响了整个软件开发领域。作者Eric S. Raymond是开源运动的旗手、***文化第一理论家,他讲述了开源运动中惊心动魄的故事,提出了大量充满智慧的观念和经过检验的知识,给所有软件开发人员带来启迪。

关于大教堂和集市,阮一峰的博客有一篇精彩的笔记点评:

大教堂与集市

代表了两种不同的开发模式:绝大多数商业公司所采用的是大教堂模式,而Linux世界所采用的是集市模式。

从fetchmail中学到的

1.好的软件作品,往往源自于开发者的个人需要。

2.优秀的程序员知道写什么,卓越的程序员知道改写(和重用)什么。比如linux就是从unix内核改过来的。

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这样好的沟通媒介,并且知道如何不靠强制来领导,那么多人合作必然强于单兵作战。

集市模式成功的关键

Linux操作系统很好的践行了集市模式的概念,一方面是因为他赶上了internet兴起的东风,另外一方面,社区的领导力很关键,这种领导力不是强制的,集权的那种模式,而是非常民主和谐的一种沟通方式。

系统中每个个体都追求自身效用的最大化,在其共生的过程中,能够自然建立起一种具备自我纠错能力的秩序,这种秩序比任何集中式规划都要精妙和高效。这里,正是“共识原则”达成的地方。

开源***社会实际上是一种礼物文化

礼物文化并不是对物质稀缺的适应,而是对物质充裕的适应。产生于没有生活必需品稀缺问题的人群中,在气候宜人且物产丰富的生态环境中,我们经常可以在其原居民文化中观察到礼物文化。我们也能在自身所处的社会中观察到这点,特别是娱乐行业和富豪阶层。

充裕性会使命令关系难以维持,会使交换关系变成无意义的游戏。在礼物文化中,社会地位并不取决于你控制了什么,而是你给予了什么。

***的三个禁忌

如果一个人的作品被他人占用或者乱改,他的声誉就会受到不公平的损害;禁忌(以及相关习惯)倾向于阻止这种情况发生。

第一个是,项目不要有太多的分支。

第二个是,发布流氓补丁。

第三个是,偷偷的将某人的姓名从项目中移除。

声誉竞争

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

好礼物的标准

1.如果它不能像我所预期的那样工作,那就不是好的——不管它多么聪明和有原创性。

2.在心智层的拓展性工作要比在某功能域内(对现有作品)的重复性工作好。

3.能进入主要发行版的作品比不能进入的好。在所有主要发行版中都包含的作品最令人尊敬。

4.“使用”是最真实的赞美,类别杀手比同类竞争者好。

5.相比那些只挑有趣和简单工作的人,长期致力于艰苦和乏味工作(如调试、写文档)的人更令人钦佩。

6.重要的功能扩展比低层次的修补好。

开源项目的决策和冲突处理

从习惯上讲,如果项目有合作开发者,“独裁者”或项目领导人应该在关键决策上征询合作开发者的意见,尤其当决策关乎某个合作开发者所“拥有”(也即投入了时间并为之负责)的子系统时。一个有智慧的领导者,会认识到项目内部财产边界的作用,不会轻易干扰或推翻子系统所有者做出的决定。

若想让这些冲突解决机制生效,需要整个***社区愿意执行它们,唯一可用的执行机制是“批判”和“放逐”——公开谴责那些破坏习俗的人,并拒绝和他们再次合作。

开源盈利模式

开源软件不仅在技术上,而且也在经济上挑战着现有秩序。将软件“免费”所带来的效果,看来会强制我们进入以服务费为主导的世界,并让我们清楚了解,闭源软件一直以来依靠软件销售价值的做法是多么脆弱。

开放源码的条件

1.可靠性/稳定性/可扩展性非常重要。

2.除了独立的同行评审,没有其他便捷易行的方法验证设计和实现的正确性。

3.该软件对客户的业务非常关键。

4.该软件创建或运转一个公共计算或通信基础架构。

5.关键方法(或能实现同等功能的方法)属于公共知识。

linux不会分裂

所有发行商都不得不在同一个公用开源代码库上操作。他们中的任何一个都不可能在事实上保持差异化,因为许可证(Linux代码的有效成长得益于此)要求他们将代码与其他各方共享。任何发行商一旦开发出一个新功能,所有竞争者都可以免费克隆它。

作者观点的极端性

作者预测,windows企业级服务器操作系统面世将不会成功,然而现实的情况是,目前windows服务器操作系统已经发展成为云操作系统,最新的版本已经迭代到了windows server 2019。所以作者对于闭源软件的预测也存在偏颇之处。但因为作者是开源运动的死忠粉,所以这一点也能理解。

保持中立客观和专注

专注就意味着不要游走到其他有诱惑性的分支上,这一点是我经常觉得需要向***们强调的,因为我们过去的代表们表现出了强烈的意识形态化倾向,他们原本可以把精力集中在相对更有效和更务实的内容上。

***精神

***精神并不局限在软件文化中。人们会把***态度用在其他事情上,比如电子或音乐。事实上,对任何科学和艺术,在其最高水平的活动中都可以发现***精神。软件***若是识别出其他领域的同道中人,也会称他们为“***”。所以有人说***的天性其实是独立于他们所从事工作的。

***与骇客的区别

有一群人高调声称自己是***,但他们并不是。这些人(大多是些毛头小子)的主要目的是攻入他人计算机或者破解电话系统。真正的***称他们为“骇客”(cracker),而且完全不想搭理他们。

如何成为***

1.这个世界充满了迷人的问题等待人们去解决。

2.不要解决一个问题两次。

3.无聊和乏味是有害的。

4.自由是好事。

5.态度不能代替能力。

***的基本技能

1.学习如何编程。如果你只懂一两种语言,那你不会达到***的技能水平,甚至连程序员都称不上——你需要学会以一种独立于任何语言的一般方式来思考编程问题。要成为一名真正的***,你需要到达这样的程度:你能把手册上的东西和你已经知道的东西联系起来,从而可以在几天之内学会一门新语言。学习编程就像学习如何写好自然语言。最好的方式是阅读大师们写的东西,然后写你自己的东西,多读一些,多写一些,再多读些,再多写些……如此循环往复,直到你写的东西开始发展出你在经典中所体会到的力量和简洁。

2.找一个开源UNIX,学习使用和运行它。

3.学习如何使用WWW和写HTML。

更多资讯请关注下方微信公众号:

qrcode_for_gh_7159fb337d37_258.jpg

转载地址:http://pfmax.baihongyu.com/

你可能感兴趣的文章
超级硬盘数据恢复软件 4.6.5.0注冊码破解版
查看>>
一款基于jquery和css3实现的摩天轮式分享按钮
查看>>
Android创建启动画面
查看>>
Linux中date命令的各种实用方法--转载
查看>>
mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法
查看>>
苹果企业版帐号申请记录
查看>>
C++ Error: error LNK2019: unresolved external symbol
查看>>
Bitmap 和Drawable 的区别
查看>>
Java操作mongoDB2.6的常见API使用方法
查看>>
如何给服务器设置邮件警报。
查看>>
CEF js调用C#封装类含注释
查看>>
麦克劳林
查看>>
Eclipse SVN修改用户名和密码
查看>>
架构师的职责都有哪些?
查看>>
SVN: bdb: BDB1538 Program version 5.3 doesn't match environment version 4.7
查看>>
jsp内置对象作业3-application用户注册
查看>>
android115 自定义控件
查看>>
iOS uuchart 用法
查看>>
c# 多线程 调用带参数函数
查看>>
JQuery 如何选择带有多个class的元素
查看>>