`
ruilin215
  • 浏览: 1143512 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

杀不死的人狼——我读《人月神话》(一)

阅读更多
=====
前言
=====
在这与这段文字之前,我已经阅读过种种关于《人月神话》的文字。评论者既有刘天北这样的美食家,试图在书页中夹点胡椒面以慢慢品味,为了表现食客特有的风格,他的书页都比别人数得仔细。也有marktsen这样的速食者,试图几句话就打发了自己或者读者那漉漉的饥肠。
阅读这些文字给我带来的收获是:面对《人月神话》,除了表示五体投地的诚服,你既不能做正面言论(那是多余),也不能做负面言论(那是找事)。
这是一本可怕的书。
我大概花了三周的时间来细读这本书——也许很多人会说我应该花更多的时候或者读更多遍——不过,这不是重点。我在书中印证和找寻思想,并为这本书写下了数百个注释。最终我很遗憾我读了电子版本,因而注释被写在了文档中而不是书页上。如果不是这样,我将没有任何方法扼制自己购买这本书的冲动。
然而,我发现我还是应该来写写这本书的读后感想。我没有使用“评论”这样的词汇,是因为任何的(正面或负面的)评论都不可能撼动《人月神话》的地位,而“感想”是唯一可能供读者借鉴而又不引起争论的东西。
下面的文字分成两个主要的部分。一部分是如何读这本书,如果你已经读得很好,那可以跳过去,这是留给别人的。另一部分,则是讨论那个著名的命题:没有银弹——似乎,不讨论这个命题的话,连感想都不成其为感想,沦为空谈了。
=====
一、《人月神话》的结构及其与组织
=====
我对《人月神话》的内容结构做了一些分析,大概如下:
内容说明
问题域
1
说明“程序(program)”不是“产品(prodouct)”,更不是“项目(project)”。
说明程序员的心理与情绪因素——这是很重要的一个话题。
2
项目的发起、评审与预估(错误的设定项目周期是最大的错误)。
“人月问题”:周期不因为人力投入而变短,事实上它可能更糟糕。
项目定义
3
十个人与几百人面临的问题是不同的。
团队建设
4~5
从设计阶段开始,即致力于获得和维护概念的完整性。
团队管理 - 方向与决策
6
项目过程中的一般性方法。
团队管理 - 一般性方法
7
项目组织过程中的沟通问题。
团队管理 - 沟通问题
8~10
编码过程中的关键问题:
-项目复杂程度与需要编码的数据呈指数级关系,反过来,减少编码可降低系统复杂性
-数据的表现形式是编程的根本
-文档是必须且重要的,但往往不被关注(主要强调重要性)
编码
11
承认变更,承认从需求和设计期就开始的变化。
为应付变化而实现的原型系统。
项目定义 - 需求不确定
12
工具带来效能。
13
强调测试,以提升品质和保障项目目标。
项目管理 - 检测/回顾
14
项目控制:进度与里程碑
项目管理 - 控制
15
文档:项目过程文档,包括定义、设计与实现(主要强调方法)
项目管理 - 文档化
16,17
没有银弹、再论没有银弹
18,19
前十五章的回顾(不包括“银弹”的话题)
20
二十年后对上述命题的回顾(包括对银弹现象的进一步解释)
正如Brooks说到的,在几十年之后的今天,这本书里的现象或者观点已经为整个行业所认知——无论是从实践中的感受,还是从类似《人月神话》这样的书籍中去获知。其中大多数命题与结论,都在这几十年的开发实施中被印证过,所以它们(我指的是这些命题与结论)备受关注。
我只重述Brooks所讲述到的两点。我重述它们的原因,是认为它们还被关注得不够:通过设计来获得系统的一致性,以及更好的文档。
Brooks的讨论中,不但要“获得”系统的一致性,还是尽力去保障它。Brooks认为“获得和保障”它的角色是并不是同一个人:前者是结构师(第34章所论),后者是项目经理(第5章所论)。对于这两个角色(或相似的角色),在第7章“大型编程项目的组织架构”中,Brooks提出:要么产品负责人任总指挥,技术主管充当其左右手;或者反之。Brooks认为前者更适于大型项目,后者更适于(相对)小型的项目。
在人月神话中对这两个角色的用词与我们现在(至少是翻译过来的)用词略有点不一致。事实上书中的产品负责人相当于现在的项目经理,而技术主管相当于技术经理(至少参与系统设计或直接由架构师担任)。
Brooks并没有低估(或错误认识)系统一致性和文档的重要性。但除了这两点未被足够重视之外,我想前十五章的内容不必再复述了。如果你不能理解我为什么不再复述,那可能你需要更多的工程经验或者理论基础。除非你决心认为大师的一切都必须被象圣经一样地重述,但那只是你个人的信仰,或者喜好。
分享到:
评论

相关推荐

    《人月神话》布鲁克斯.扫描版.pdf

    人月神话(THE MYTHICAL MAN-MONTH)...........................................................................6 乐观主义....................................................................................

    用python编写的一款小游戏,实现人狼羊菜过河

    在这个游戏中,玩家需要帮助人、狼、羊和菜安全地过河,同时要确保在任何时候,狼不会与羊单独在一起(否则狼会吃掉羊),菜也不能与人单独在一起(防止人离开时菜被狼吃掉)。这个游戏体现了经典的逻辑问题,通过...

    人狼羊菜过河问题(编程求得最优算法)

    一个摆渡人F希望用一条小船把一只狼 W,一头羊 G 和一篮白菜 C 从一条河的左岸渡到右岸去,而船小只能容纳 F、W、G、C 中的两个,决不能在无人看守的情况下,留下狼和羊在一起,羊和白菜在一起,应怎样渡河才能将狼...

    人狼羊菜过河程序JAVA

    "人狼羊菜过河"问题是一个经典的逻辑谜题,源于中国的民间故事,也被称为"智渡黄河"或"三子过河"。在编程领域,这个谜题常被用作设计算法和解决约束满足问题的实例。在这个Java程序中,我们将深入探讨如何通过编程来...

    人月神话 pdf

    人月神话(THE MYTHICAL MAN-MONTH)...........................................................................6 乐观主义....................................................................................

    变形金刚人物图片档案集——博派.exe

    变形金刚人物图片档案集——博派.exe <br>擎天柱 火车模式 爵士 爵士pretender 千斤顶 铁皮 救护车 警车 蓝霹雳 探长 开路先锋 幻影 飞毛腿 横炮 红色警报 轮胎 烟幕 消防车 吊车 滑车 刹车 飞过山 ...

    最新人教版七年级生物下册第一次月考试题及答案.docx

    类人狼 —— 不正确,类人狼并不是人类的祖先。 - B. 黑猩猩 —— 黑猩猩与人类有共同的祖先,但并非人类的直接祖先。 - C. 森林古猿 —— 正确选项,森林古猿是人类的早期祖先之一。 - D. 长臂猿 —— 长臂猿与...

    人狼羊菜渡河问题(含Matlab程序).doc

    人狼羊菜渡河问题是一种经典的计算机科学问题,它描述了一个人带着一条狼、一只羊、一筐白菜过河的过程,并且确保狼和羊、羊和白菜不能单独留在同岸,否则羊或白菜会被吃掉。该问题可以使用图论中的最短路算法进行...

    人狼大战 java源代码

    【人狼大战】游戏是一种策略性极强的社交推理游戏,玩家分为村民、狼人和其他特殊角色,通过夜间杀戮和白天投票来决定胜负。在这个Java源代码项目中,开发者可能实现了游戏的核心逻辑,包括角色设定、游戏流程控制、...

    人狼羊菜渡河问题(含Matlab程序).pdf

    问题的核心是设计一种策略,使得人、狼、羊和菜能够安全地通过一条小河,每次只能运输一个物体,并确保在任何时刻,狼不能与羊独处,羊也不能与菜独处,以免发生危险。这个问题可以通过图论中的最短路径算法来解决。...

    【老生谈算法】matlab实现人狼羊菜渡河问题(含Matlab程序).doc

    人每次只能带一件物品过河,而狼不能与羊单独相处,羊也不能与菜单独相处,否则会发生不利的情况。因此,必须确保在任何时候,狼和羊、羊和菜都不能在同一岸。 2. **状态表示**:用四维向量v=(m, n, p, q)表示当前...

    16角色狼人杀游戏规则.docx

    1. **狼人** (LR): 是游戏的主要对立面,每晚可以杀死一名玩家,目标是消灭所有非狼人角色。 2. **村民** (CM): 没有任何特殊能力,通常依赖于推理和观察来参与游戏。 3. **先知** (XZ): 每晚能验证一名玩家的身份,...

    软件的涅槃

    - **银弹理论**:Brooks比喻软件项目的不可预测性类似于民间传说中的人狼——表面熟悉但实质上充满未知与危险。他指出,就像需要用银弹才能杀死人狼一样,软件开发中的问题也需要根本性的解决方案。然而,他认为并不...

    c++语言程序设计 ()详细的讲解了C++)

    布鲁克斯用形象的譬喻来论述软件工程中存在的“陷阱”——“在所有恐怖民间传说的妖怪中,最可怕的是人狼,因为它们可以完全出乎意料地从熟悉的面孔变成可怕的怪物”,而“大家熟悉的软件项目具有一些人狼的特性...

    狼羊过河问题_数学建模

    在这个问题中,有一个人、一只狼、一只羊和一棵菜需要通过一条河流,而狼不能单独与羊在一起,因为狼会吃掉羊;同样,羊也不能单独与菜在一起,因为它可能会吃掉菜。问题的目标是找到一个安全的过河方案。 首先,...

    人狼羊问题

    农夫需要把狼、羊、菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊。请考虑一种方法,让农夫能够安全地安排...

    JinroJ-heartScriptMEmu:MEmu版人狼Jスクリプト

    在IT领域,特别是游戏开发与模拟器技术中,人狼游戏(也称为狼人杀)是一种广受欢迎的社交推理游戏。而JinroJ-heartScriptMEmu则是一个专为MEmu模拟器设计的、用于运行人狼Jスクリプト的程序。这个项目旨在为玩家...

    人工智能 狼 羊 白菜 农夫过河

    首先,我们要明确问题的关键在于保持食物链的关系不被破坏,即在任何时候都不能让狼与羊独处,也不能让羊与白菜独处,否则狼会吃羊,羊会吃白菜。农夫每次只能带一样东西过河,这就需要我们设计一系列的操作步骤,...

    狼羊菜过河问题源程序

    cout有一个农夫带一只羊、一筐菜和一只狼过河. "; cout如果没有农夫看管,则狼要吃羊,羊要吃菜."; cout但是船很小,只够农夫带一样东西过河。"; cout问农夫该如何解此难题?";

    农夫,狼,羊, 菜,过河经典问题

    在这个问题中,农夫需要将狼、羊和菜全部安全地从一岸运送到对岸,同时要确保任何情况下,都不能让狼单独与羊或菜在一起,以免发生危险。为了解决这个问题,我们可以利用有限状态机(Finite State Machine, FSM)的...

Global site tag (gtag.js) - Google Analytics