大教堂与集市 笔记

  • 出于商业利益和市场竞争的考虑,软件制造商本能地希望把源码保护起来,而黑客出于分享、贡献和不重复劳动的考虑,下意识认为开放源码是更道德的事情,他们考虑的是如何更好更快地做事,考虑的是如何创建一个自由自在、为所欲为的软件世界,而不是如何把源码藏起来牟利

  • 大教堂和集市模式

    • 传统大型软件公司的开发模式就像艰难而缓慢的大教堂建造工程,它有着严密的管理和封闭的集中式结构,但是在创新上、生产力上和bug控制上却落后于集市模式
    • 集市模式是一种并行的、对等的扁平化开发结构,其参与者大多来自于互联网上的志愿者,结构松散,来去自由,就像是一个乱糟糟的集市,但就是这样的组织形式,却取得了像Linux这样令人惊叹的成功
  • 开源软件系统性的利用开放式开发和分布式评审(peer review),不仅降低了成本,还提高了软件质量。

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

  • 优秀的程序员知道写什么,卓越的程序员知道改写(和重写)什么。

    • 卓越程序员们有一个很重要的特征是"建设性懒惰",他们知道人们要的是结果而不是勤奋,而从一个部分可行的方案开始,明显要比从零开始容易得多。
  • 计划好扔掉一个吧,迟早你会这么做。《人月神话》

    • 在你第一次把问题解决的时候,你往往并不了解这个问题,第二次你才可能知道怎么把事情做好。所以,如果你想做对事情,至少再做一次。
  • 如果你有正确的态度,有趣的事情自然会找到你

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

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

    • 用户越多越能有效对抗系统的复杂性。
  • 早发布,常发布,倾听用户的反馈。

    • linus在持续不断地激励和回报者他的黑客/用户,用自我满足感激励他们,用持续改进(甚至每天都有改进)回报他们。
  • 如果有足够多的beat测试者和合作开发者,几乎所有问题都会很快显现,然后自然有人会把它解决。

    • 只要眼睛多,bug容易捉。–Linus定律
    • Linus定律道出了大教堂模式和集市模式最关键的区别
      • 在大教堂建筑者看来,bug是棘手的、难以发现的、藏在深处的,要经过几个人数月的全心投入和仔细检查,才能有点信心说已经剔除了所有错误。而发布间隔越长,倘若等待已久的发布版本不完美,人们的失望就越发不可避免
      • 对于集市模式而言则完全不同,在上千名合作开发者热切钻研每个新发布版本的情况下,你可以假定bug是浅显易找的,或者至少可以很快变得浅显易找。所以你会频繁发布以获得更多的修正,其副作用是良性的:即使发布中有些小问题,你也不会损失太多
    • 透明性和同行评审对控制操作系统复杂度很有价值
    • Linux实验版和稳定版分开的做法:风险对冲,解决要命的最后期限问题。
      • 程序员在需求列表不能调整和最后期限不能拖延的双重要求下,会完全顾不上质量,整个工作很可能会变成一团乱麻。放宽这两个限制的任意一个,都会使进度变得可行
      • 一种办法是保持最后期限不变而让需求列表灵活一些,允许某些到最后期限时任未完成的需求舍弃,这基本就是"稳定版"核心采用的策略
      • 另一个办法是设定好想要的需求列表,并在其完成时发布,这基本是"实验版"核心的策略。这个进度策略也叫"好了告诉我"(wake me up when it's done),这不仅能够保证最高质量,而且就平均而言,与"保守"和"激进"的进度安排相比,它的交付时间更短
      • 过程透明。
    • 闭源代码,测试者从外往内看,开发者从内往外看,各自局限于自己的角色。开源代码让测试者和开发者发展出一个共享的表达模式并进行有效交流。一个仅描述外部可见症状的bug报告,和一个直接关联到源码的分析性bug报告,对开发者而言简直就是天壤之别。
    • 在快速发布模式下,如果多人同时尝试对bug进行追踪,很可能某人立刻就发现了最短路径,然后在比别人短的时间内逮住bug。项目维护人员看到后会发布一个新版本,这样在其他更难路径上追踪该bug的人就可以停下来,以免浪费更多的时间。
  • 聪明的数据结构配上愚蠢的代码,远比反过来要好的多。

  • 如果你把beat测试者当做最珍贵的资源对待,他们就会成为你最珍贵的资源.

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

    • 如果你发自内心的谦逊,并承认你欠别人很多,你将很快发现世界会这样对待你:他们认为是你发明了整个软件,而且你对自己的天赋有着得体的谦逊。
  • 通常,那些最有突破性和最有创新力的解决方案来自于你认识到你对问题的基本观念是错的。

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

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

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

  • 当你的语言还远不是图灵完备(Turing-Complete)的时候,语法糖会让你受益良多。

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

  • 集市模式的必要条件:

    • 项目领导人必须要有高度的设计直觉和聪明才智。
      • 承诺:项目能运行;让潜在的合作开发者相信,这个软件在可预见的未来,能演变成一个非常棒的东西。
    • 集市项目的协调人或领导人必须要有很好的人际交往和沟通能力。
  • 想要解决一个有趣的问题,先去找一个让你感兴趣的问题。

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

  • linux项目:把一个个黑客的利己动机尽可能牢靠地牵系到一个艰巨的任务目标上,而这个目标只有在众人持续的合作之下才能完成。

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

    • 并不是说个人眼光和远大志向不再重要,相反,冲在开源软件最前沿的人,正是凭借自己的眼光和才华而发起项目,并通过构建有效的志愿者社区将之发扬光大。
  • "玩"是创造性活动中最具经济效能的工作模式

  • 文化禁忌:

    • 分化一个项目会遇到强大的社会压力,只有在极为必要的情况下才使用,而且要重新命名和做出大量的公开解释
    • 在没有项目主持人认可的情况下发布更新是令人不悦的,除非是特殊情况(如本质上不重要的移植bug修复)
    • 在项目历史、致谢表或维护列表中移除某个人的名字是绝对不可以的,除非当事人明确表示同意。
  • "集市模式"开发社会动力学:送出礼物竞争社会地位。

  • 礼物文化并不是对物质稀缺的适应,而是对物质充裕的适应。

  • 在礼物文化中,社会地位并不取决于你控制了什么,而是你给予了什么。

  • 什么是好的礼物?

    • 如果它不能像我所预期的那样工作,那就不是好的–不管它多么聪明和有原创性。
    • 在心智层的拓展性工作要比在某功能域内(对现有作品)的重复性工作好,原创性工作比功能复制要好。
    • 能进入主要发行版的作品比不能进入的好。在所有主要发行版中都包含的作品最令人尊敬。
    • "使用"是最真实的赞美,类别杀手比同类竞争者好。
    • 相比那些只挑有趣和简单工作的人,长期致力于艰苦和乏味工作(如调试、写文档)的人更令人钦佩。
    • 重要的功能扩展比低层次的修补好。
  • 开源开发团体在生产力上会远远超过(特别是长远地看,创造性作为生产力倍乘器的作用会越来越重要)同等规模与技能的闭源程序员团体,后者受稀缺性报酬激励但同时也导致动力不足。

  • 程序的使用价值是它作为一个工具、一个生产率倍乘器的经济价值;程序的销售价值是它作为一个可买卖商品的价值。

  • 将软件”免费”所带来的的效果,看来会强制我们进入以服务费为主导的世界

  • “使用价值”资助模型:仅靠使用价值就能持续资助开源开发的模式。

    • 成本分摊:Apache服务器,由一个通过互联网连接起来的团队做出来的,他们明白,与其很多人都搞类似的开发,不如将自己的工作投入到公共代码中。通过这种方式,他们不仅能获得“自己做一个Web服务器”的好处,还会因为大规模的同行评审而获得强大的排错效果。以更低的成本提供更好的产品。
    • 风险分担:开源不仅可以降低成本,还能分散和降低成本,还能分散和减轻风险。所有参与方都发现,源码的开放与合作社区(由多个独立的收入来源资助)的存在,提供了一种故障保险(fail-safe)机制,其本身的经济价值足以吸引资金支持。【不惧怕开发者的离开等】
  • 开源能获取的非直接销售价值

    • 占领市场
    • 硬件糖霜:靠硬件盈利,软件本身不是盈利中心。开源软件,让其他开发者开发驱动程序。
    • 销售附加价值。Red Hat:通过集成和测试,向客户提供一个不断发展的操作系统,保证它是商业级的,并可以以该品牌其他操作系统向后兼容。
    • 附属物策略:马克杯、T恤
    • 当下收费,未来免费:以封闭许可证的形式发布软件的二进制和源码,在许可证中,禁止免费的商业使用,保证发布一年后,软件遵循GPL条款。
    • 软件免费,品牌收费:开源一项技术,保留其测试套件或兼容性标准,然后卖品牌认证,如果某公司的产品通过认证,则表明他们对该技术的实现和其他拥有该品牌认证的产品是兼容的。
    • 软件免费,内容收费:向用户提供可信的信息
  • 基础架构的开放和共享,使每个参与者都得到竞争上的好处,一是参与者能以较低成本生产出可扩展的产品和服务,而是参与者的市场定位可以让客户放心,他们很少面临这样的尴尬境遇:由于供应商更改了战略和战术,导致产品被抛弃而无人照管

如何成为一名黑客

  • 黑客的态度:黑客解决问题并做出东西,他们相信自由,并自愿地互相帮助。
    • 这个世界充满了迷人的问题等待人们去解决
      • 成为一名黑客,你必须要对解决问题、磨砺技能和智力挑战有着基本的兴奋感。这样你的黑客能量才不会被社会上的其他东西慢慢耗尽。
    • 不要解决一个问题两次
      • 创造性头脑是无比珍贵的有限资源,它们不应该浪费在重新发明轮子这种事情上,尤其还有这么多迷人的新问题在哪里等着。
      • 想要成为一名黑客,你必须相信:其他黑客的思考时间是很宝贵的–它是如此宝贵,以至于共享信息、解决问题并将解决办法馈赠给其他黑客几乎就是你的道德义务,这样,其他黑客就可以解决新问题,而不是永无休止地重复解决老问题
    • 无聊和乏味是有害的
      • 黑客应该不会觉得无聊,也不会去做那些乏味而愚蠢的重复性工作,如果这种事情发生,意味着他们没有做只有他们才能做的事–解决新问题。
      • 要当一名黑客,你必须得非常相信这点,并希望尽可能将那些无趣的事情自动化,这不仅是为自己,也是为其他人(尤其是其他黑客)。
    • 自由是好事
      • 黑客是天生反权威的。如果有人能命令你,他就能让你做不成你特别想做的事。所以无论什么地方出现权威主义倾向,你都要与之抗争,以免他们压迫你和其他黑客。
    • 态度不能代替能力。
      • 要想成为黑客,就需要配上这些态度。但仅凭态度也不行,你需要智慧、实践、投入和努力
  • 黑客技能
    • 编程语言 Lisp C
    • 学习和使用Linux,阅读源码
  • 地位之于黑客文化:给出你的实践、创造力、提现技能的成果。
    • 写开源软件。
      • 最核心、最传统的。写出其他黑客认为有趣或有用的程序,然后将程序源码发布给整个黑客文化。
      • 在黑客圈,最受尊敬的偶像是这样一类人:他们写出大型的、能满足广泛需求的程序,并将程序贡献出来,使得任何人都能使用这些程序。
    • 协助测试和调试开源软件。
      • 找一个感兴趣的项目。并试着做一个beta测试员。从帮助测试到帮助排错,再到帮助修改,这是一个很自然的过程,会从中学到很多。以后也会有人乐意帮助你。
    • 发布有用的信息。
      • 收集、过滤那些有用并且有趣的信息,将他们放到网页或者类似FAQ列表的文档中,并让人们容易看到
    • 帮助做一些基础工作。
      • 志愿者。帮忙管理邮件列表等
    • 服务黑客文化本身。
      • 比如,写一本关于"如何成为黑客"的精准入门教程
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值