《大教堂与集市》读书笔记

“软件的核心在于设计,而所有设计都会体现在源码之中,拿到源码,你就几乎拿到了软件的一切。”

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

“要想对世界做出实质性的改变,开源需要做到这两点:一是要让人们广泛使用开源软件;二是要让用户知道并理解这种软件开发模式能给他们带来的益处。”

“开源软件系统性地利用开放式开发和分布式同行评审(peer review),不仅降低了成本,还提高了软件质量”

1.黑客圈简史

“真程序员”文化和批处理计算(尤其是批处理技术)密切相关,随着交互式计算、大学和 络的兴起,“真程序员”文化逐渐衰落,另一个工程师文化诞生并最终演化成今天的开源黑客文化。”

UNIX
C语言

“如果UNIX能够在多种不同型 的机器上提供相同的人机界面和相同的功能,它就能成为一个通用的软件环境。”

“Linux最重要的特点不是技术上的,而是 会学上的。在Linux被开发出来之前,所有人都认为,如果软件复杂到操作系统这样的程度,就必须要有一个精心协作的团队,团队要比较小,而且紧密互动,不管是以前还是现在,这都是很典型的开发模式。”

2.大教堂与集市

“绝大多数商业公司所采用的“大教堂”模式和Linux世界采用的“集市”模式。两种模式的根本不同点在于他们对软件排错有着完全对立的认识。”

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

“2.优秀的程序员知道写什么,卓越的程序员知道改写(和重用)什么。”

“3.“计划好扔掉一个吧,迟早你会这么做的。”(Fred Brooks,《人月神话》第11章)”

“4.如果你有正确的态度,有趣的事情自然会找到你。”

“5.当你对一个程序不再感兴趣时,你最后的责任就是把它交给一个可以胜任的接棒者。”

“UNIX另一个传统强项也被Linux发挥到美妙的极致:很多用户本身就是黑客。因为可以拿到源代码,这些黑客能极为有效地缩短排错时间,只要给他们一点点鼓励,他们就会帮你查找问题、给出建议并帮助改善代码,这些比你自己做要快得多得多。

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

“尽早和尽量频繁发布是Linux开发模式中至关重要的一部分”

“7.早发布,常发布,倾听用户的反馈。”

“Linus的创新之处,并不完全在于大量采纳用户反馈并快速发布系统版本(这也是UNIX世界多年来的传统),而更多在于将这种做法强化到一种能和系统复杂度相匹配的强度。”

“Linus在持续不断地激励和回 着他的黑客/用户,用自我满足感激励他们,用持续改进(甚至每天都有改进)回 他们。

Linus的直接目标就是将投入排错和开发的“人时”(person-hour)最大化,即便这样做可能导致代码不稳定,或者可能因为一些难以消除的严重bug导致用户群流失,Linus也在所不惜,他相信:

8.如果有足够多的beta测试者 [1]和合作开发者,几乎所有问题都会很快显现,然后自然有人会把它解决。”

“Linus定律道出了大教堂模式和集市模式最关键的区别:在大教堂建筑者看来,bug是棘手的、难以发现的、隐藏在深处的,要经过几个人数月的全心投入和仔细检查,才能有点信心说已经剔除了所有错误。而发布间隔越长,倘若等待已久的发布版本并不完美,人们的失望就越发不可避免。”

“对集市模式而言则完全不同,在上千名合作开发者热切钻研每个新发布版本的情况下,你可以假定bug是浅显易找的,或者至少可以很快变得浅显易找。所以你会频繁发布以获取更多的修正,其副作用是良性的:即便发布中有些小问题,你也不会损失太多。”

“9.聪明的数据结构配上愚笨的代码,远比反过来要好得多。”

“10.如果你把beta测试者当做最珍贵的资源对待,他们就会成为你最珍贵的资源。”

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

“12.通常,那些最有突破性和最有创新力的解决方案来自于你认识到你对问题的基本观念是错的。”

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

“14.任何工具都应具备预期内的功能,但一个伟大的工具能给你带来预期外的功能。”

“15.写 关类软件时,尽可能不要干扰数据流,而且绝不要扔掉信息,除非接收方强迫你这么做。”

“16.当你的语言还远不是图灵完备(Turing-complete)的时候,语法糖[4]会让你受益良多。”

“17.系统的安全性只取决于它所拥有的秘密。谨防虚假的秘密。”

“18.想要解决一个有趣的问题,先去找一个让你感兴趣的问题。”

“当编码在本质上仍然是个体行为时,真正了不起的作品来自于对整个 区注意力及脑力的有效利用。一个在封闭项目中只靠自己的开发者,将远远落后于这种开发者:他们知道如何创建一个开放的、有改进能力的环境,在这个环境中,上百人(甚至上千人)反馈并提供设计空间拓展、代码贡献、bug定位以及软件的其他改进。”

“19.如果开发协调者有一个至少像Internet这样好的沟通媒介,并且知道如何不靠强制来领导,那么多人合作必然强于单兵作战。”

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

3.开垦心智层

“开源文化的“官方”意识形态和他们的实践并不一致。”

“1997年,“Debian自由软件准则”提炼了这些共同要素,并形成了开放源码定义(OSD,参见http://www.opensource.org)。

定义指出,开源许可证必须保护任何个人或团体无条件修改开源软件(以及发布修改后软件版本)的权利。”

“没有任何事情可以阻止人们获取任意开源产品(如自由软件基金会的gcc编译器)、复制其源码、推进其向不同方向演进,并都可声称是该产品。”

“事实上,和“任何人能干任何事”共识相矛盾的是,开源文化有一套严格的但主要是“不允许”类型的所有权惯例。”:
“·分化一个项目会遇到强大的 会压力,只有在极为必要的情况下才使用,而且要重新命名和做出大量的公开解释。
·在没有项目主持人认可的情况下发布更新是令人不悦的,除非是特殊情况(如本质上不重要的移植bug修复)。
·在项目历史、致谢表或维护列表中移除某个人的名字是绝对不可以的,除非当事人明确表示同意。”

“一个软件项目的“所有者”就是在 区中众所周知的对软件版本改动有唯一发布权的那个人。”

“FaréRideau(fare@tunes.org)正确地指出,黑客的工作领域并不完全是纯粹的思想领域,他认为黑客所拥有的“编程项目”,不仅包括内涵概念上的具体劳动(如开发、服务等),还包括与之相关的名声、信任等等。他继而指出,黑客项目所位于的空间不是心智层,而更像是一种双重心智层空间,也即在心智层上探索的程序项目空间。”

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

“绝大多数礼物文化都会有折中——不论是对交换经济关系的折中(如奢侈品交易),还是对命令经济关系的折中(如家庭或宗族结盟)。”

“开源文化中不存在真正意义上类似的折中,也就是说,要想获取地位,除了同侪声誉,没有什么更多途径了。”

“我们已经了解心智层开垦的产出,就是黑客礼物文化中的同侪声望以及所有它带来的二次收益和额外作用。”

“黑客文化一个有趣的方面,它有意识地不信任或者看不起“自我主义”或者基于自我的动机。”

“自我表现”禁忌会促进生产力,但这只是一个次生(second-order)效果;该禁忌直接保护的是 区同侪评价系统的信息质量,之所以要抑制自我吹捧或妄自尊大,是因为它像噪声一样,往往会破坏在创造性和合作性行为实验中得出的重要信 。”

“如何评判礼物价值并给予相应的尊重,在黑客文化中有着始终如一的标准。主要如下:

“创立一个开源项目相当于在心智层上的发布一个领土声明(习惯上也认可这点),但并不是强迫人们在心理层面上接受它。因为不管怎么说,软件没有自然上的位置,并且可以很快地被复制。只有在经过一番努力之后,软件是“领土”和“财产”的观念才会融入我们的直觉认识中。

通过建立项目“主页”,使项目在组织上更有空间感的万维 王国中建立起“家园”(home territory),从而具象化了在程序空间中“开垦家园”的抽象概念。从“心智层”落到“电脑空间”并不能让我们得到真实世界中栅栏和狗吠的感觉,但它的确把抽象的财产声明和人们对领土的直觉认识更牢固地连接了起来,这也正是为什么拥有 页的项目看起来更“真实”一些。”

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

事实上,获取最高软件生产力的药方看上去自相矛盾而又颇具禅意:如果你想获得最有效率的产品,你必须放弃促进程序员生产力。做好他们的后勤,让他们自己做主,并忘掉最后期限。在传统的管理者看来,这种几近疯狂的宽容注定失败——但它的的确确有效,使用这种方法,开源文化正势如破竹地痛击着它的对手。”

第四章:魔法锅

“程序的使用价值是它作为一个工具、一个生产率倍乘器的经济价值;程序的销售价值是它作为一个可买卖商品的价值。(按照经济学家的专业说法,销售价值是最终产品价值,使用价值是中间产品价值。)”

“事实上,消费者愿意支付的价格不会超过对供应商服务的未来预期价值(“服务”的含义很广,在这里包括完善、升级以及后续产品等等)。”

“换句话说,软件很大程度上是一个服务行业,虽然长期以来都毫无根据地被错认为是制造行业。”

“在从闭源转向开源的过程中,受到威胁的仅仅是销售价值,而非使用价值。”

“开源的同行评审是得到高可靠和高质量软件的唯一的可扩展方法。”

“软件越重要,消费者就越无法容忍被外人控制。”

“开源获取高收益的条件大约有如下几种:(a)当可靠性/稳定性/可扩展性至关重要时,(b)没有其他方法比独立同行评审能更便捷易行地验证设计和实现正确性时(多数稍具规模的程序都适用这条)。软件成为对业务起关键作用的资产(比如存在于很多企业的MIS部门中)时。(d)当创建或运转一个公共计算或通信基础架构时,开源总是能够非常成功地比闭源获取更多的回 。(e)当关键方法(或能实现同等功能的方法)属于公共知识时,开源更可能胜出。”

“总而言之,如果满足下面这些条件,就该考虑把源码开放:

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

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

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

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

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

第五章:黑客的反击

“1.忘掉自底向上,开始自顶向下”

“2.Linux是我们最好的例证”

“3.抓住财富500强”

“4.赢得那些效劳财富500强的有威望媒体”

“5.说服黑客,游击市场”

“6.使用“Open Source”认证标识,保持纯净度”

后记,如何成为一个黑客:
“1.这个世界充满了迷人的问题等待人们去解决。”

“2…不要解决一个问题两次。”

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

“4.自由是好事。”

“5.态度不能代替能力。”

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年9月27日
下一篇 2019年9月27日

相关推荐