大教堂与集市

  • 大教堂与集市

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

  • “他教导我:要尊重能力,要珍视和捍卫自由,特别是:昆虫才讲究技能专一。”

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

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

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

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

    • “在你第一次把问题解决的时候,你往往并不了解这个问题,第二次你才可能知道怎么把事情做好。

    • 所以,如果你想做对事情,至少要再做一次。”

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

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

  • UNIX另一个传统强项也被Linux发挥到美妙的极致:

    • 很多用户本身就是黑客。

    • 因为可以拿到源代码,这些黑客能极为有效地缩短排错时间,只要给他们一点点鼓励,他们就会帮你查找问题、给出建议并帮助改善代码,这些比你自己做要快得多得多。

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

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

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

  • Brooks定律

    • “项目的沟通结构是一个完全图 ,即人人之间都沟通。

    • 但在开源项目中,外围开发者实际工作在分散而并行的子任务上,他们之间几乎不交流;

    • 代码修改和bug报告都会流向核心团队,只有在那个小的核心团队里才会有Brooks开销。

  • “源码级bug报告”

    • “一个错误可能会导致多种症状,因用户使用方式和环境不同而有不同表现。

    • 这种错误往往正是那种复杂而狡猾的bug(比如动态内存管理错误或者非确定中断窗口的产物),这些bug很难重现,也很难通过静态分析找到根源,导致软件中长期存在一些难以解决的问题。”

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

    • “让我看你的流程图但不让我看表,我会仍然搞不明白。

    • 给我看你的表,一般我就不再需要你的流程图了,表能让人一目了然。”

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

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

    • “很有趣的是,如果你发自内心地谦逊,并承认你欠别人很多,你将很快发现世界会这样对待你:他们认为是你发明了整个软件,而且你对自己的天赋有着得体的谦虚。

    • 我们可以看到这一点在Linus身上体现得有多好!”

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

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

  • “探索在本质上是分散行动,并通过一种可扩展的通信机制来协调整体行为”

    • “设想下一滩雨水是怎么找到下水口的,或者说蚂蚁是怎么发现食物的”。
  • “14.任何工具都应具备预期内的功能,但一个伟大的工具能给你带来预期外的功能。”

    • “fetchmail的集体邮箱模式就有一个用户预期外的功能:它能在客户端(译者注:指连往ISP邮件服务器的终端)上保存地址列表并实现别名扩展,这意味着用户只要有一台个人电脑和一个ISP账号,就能够维护一个邮件列表,而无需总是读写ISP端的别名文件。”
  • “15.写网关类软件时,尽可能不要干扰数据流,而且绝不要扔掉信息,除非接收方强迫你这么做。”

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

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

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

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

  • “软件管理有五个功能”

    • “明确目标并让大家朝同一个方向努力。

    • ·监督并确保关键细节不被遗漏。

    • ·激励人们去做那些乏味但必要的“体力活”。

    • ·组织人员部署并获得最佳生产力。

    • ·调配项目所需的资源。”

  • 动机和报酬

    • “与完全出于兴趣的工作相比,被委托的工作通常表现出较少的创造性。”

    • “活动越复杂,就越容易被外部的报酬损害。”

    • “固定工资不会降低人们的积极性,但计件工资和奖金会”

  • “给那些做汉堡和挖地沟的人们发放绩效奖金可能是经济正确的,但更明智的做法是:在编程工作中把薪水和绩效奖励完全分开,并让人们选择他们自己的项目(这两种趋势自然而然地在开源世界里得到了体现)。这些事实表明:只有当程序员非常积极以至于没有奖励他(她)也愿意工作时,才是唯一应该给予绩效奖励的时候。”

  • “如果一个人越是感受到自主性受限,其创造力就会越少。”

  • “给予激励是聪明的做法,但一定不能有附加条件,以避免把事情搞糟糕。Ryan观察到以下两种说法有着完全不同的效果:“我给你报酬是因为我认可你工作的价值”和“你得到报酬是因为你达到了我的标准”,第一种说法不会挫伤积极性,但第二种会。”

  • “以这些心理学观察为依据,我们可以得出论断:开源开发团体在生产力上会远远超过(特别是长远地看,创造性作为生产力倍乘器的作用会越来越重要)同等规模与技能的闭源程序员团体,后者受稀缺性报酬激励但同时也导致动力不足。”

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

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

  • “源码开放条件”

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

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

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

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

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

  • “开源不仅可用来拓展市场,有时还可作为一种有效对抗公司间竞争的战略手段。从这个角度重新检视一下前面提到的一些商业战术,会有很多新发现,开源此时的直接目的不是为了收入增长,而是为了闯入市场和重塑市场。”

  • “Apache,是一个在开源项目中通过成本分摊实现质量更好和成本更低的基础架构开发的例子”

    • “基础架构的开放和共享,使每个参与者都得到了竞争上的好处,一是参与者能以较低成本生产出可扩展的产品和服务,二是参与者的市场定位可以让客户放心,他们很少会面临这样的尴尬境遇:由于供应商更改了战略或战术,导致产品被抛弃而无人照管。”
  • “要想成为一只更大的青蛙,最佳办法就是让水池更快变大,这就是技术公司参与公开标准(完全可以将开源软件看成是可执行标准)的经济原因。”

    • “为了给Linux世界一个标准的二进制包安装程序,红帽公司(Red Hat Software)资助了RPM软件包的开发。通过这种方式,他们确信这种标准化的安装程序会给潜在客户增强信心,并因此带来更好的未来收入,尽管会有软件开发成本,并且会因为竞争对手也使用它而损失一些潜在收益。”
posted @ 2020-08-28 12:18  白云辉  阅读(280)  评论(0编辑  收藏  举报