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

=====
前言
=====
在这与这段文字之前,我已经阅读过种种关于《人月神话》的文字。评论者既有刘天北这样的美食家,试图在书页中夹点胡椒面以慢慢品味,为了表现食客特有的风格,他的书页都比别人数得仔细。也有 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 认为“获得和保障”它的角色是并不是同一个人:前者是结构师(第 3 4 章所论),后者是项目经理(第 5 章所论)。对于这两个角色(或相似的角色),在第 7 章“大型编程项目的组织架构”中, Brooks 提出:要么产品负责人任总指挥,技术主管充当其左右手;或者反之。 Brooks 认为前者更适于大型项目,后者更适于(相对)小型的项目。
在人月神话中对这两个角色的用词与我们现在(至少是翻译过来的)用词略有点不一致。事实上书中的产品负责人相当于现在的项目经理,而技术主管相当于技术经理(至少参与系统设计或直接由架构师担任)。
Brooks 并没有低估(或错误认识)系统一致性和文档的重要性。但除了这两点未被足够重视之外,我想前十五章的内容不必再复述了。如果你不能理解我为什么不再复述,那可能你需要更多的工程经验或者理论基础。除非你决心认为大师的一切都必须被象圣经一样地重述,但那只是你个人的信仰,或者喜好。
 
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
- 电话日志.....................................................................................................................................38 产品测试.....................................................................................................................................38 为什么巴比伦塔会失败?(WHY DID THE TOWER OF BABEL FAIL?)...........................40 巴比伦塔的管理教训.................................................................................................................41 大型编程项目中的交流.............................................................................................................41 项目工作手册.............................................................................................................................42 大型编程项目的组织架构.........................................................................................................44 胸有成竹(CALLING THE SHOT)..........................................................................................49 PORTMAN的数据........................................................................................................................50 ARON的数据..............................................................................................................................51 HARR的数据..............................................................................................................................51 OS/360的数据...........................................................................................................................53 CORBATO的数据........................................................................................................................53 削足适履(TEN POUNDS IN A FIVE-POUND SACK)..........................................................55 作为成本的程序空间.................................................................................................................55 规模控制.....................................................................................................................................56 空间技能.....................................................................................................................................57 数据的表现形式是编程的根本.................................................................................................58 提纲挈领(THE DOCUMENTARY HYPOTHESIS)...............................................................60 计算机产品文档.....................................................................................................................60 大学科系的文档.........................................................................................................................62 软件项目的文档.........................................................................................................................62 为什么要有正式的文档?.........................................................................................................63 未雨绸缪(PLAN TO THROW ONE AWAY)............................................................................64 试验性工厂和增大规模.............................................................................................................64 唯一不变的就是变化本身.........................................................................................................65 为变更计划系统.........................................................................................................................66 为变更计划组织架构.................................................................................................................66 前进两步,后退一步.................................................................................................................68 前进一步,后退一步.................................................................................................................69 干将莫邪(SHARP TOOLS)......................................................................................................71 目标机器.....................................................................................................................................72 辅助机器和数据服务.................................................................................................................73 高级语言和交互式编程.............................................................................................................76 整体部分(THE WHOLE AND THE PARTS)..........................................................................78 剔除BUG的设计........................................................................................................................78 构件单元调试.............................................................................................................................80 - vi - 系统集成调试.............................................................................................................................82 祸起萧墙(HATCHING A CATASTROPHE)...........................................................................85 里程碑还是沉重的负担?.........................................................................................................85 “其他的部分反正会落后”.....................................................................................................86 地毯的下面.................................................................................................................................87 另外一面(THE OTHER FACE)..............................................................................................92 需要什么样的文档.....................................................................................................................93 流程图.........................................................................................................................................95 自文档化(SELF-DOCUMENTING)的程序................................................................................96 没有银弹-软件工程中的根本和次要问题(NO SILVER BULLET – ESSENCE AND ACCIDENT IN SOFTWARE ENGINEERING).....................................................................102 摘要1........................................................................................................................................102 介绍...........................................................................................................................................103 是否一定那么困难呢?——根本困难...................................................................................103 以往解决次要困难的一些突破...............................................................................................106 银弹的希望...............................................................................................................................108 针对概念上根本问题的颇具前途的方法...............................................................................113 NO.........................................................................................................................................118 再论《没有银弹》(“NO SILVER BULLET”REFIRED)..................................................120 人和其他恐怖传说...............................................................................................................120 存在着银弹-就在这里!.......................................................................................................121 含糊的表达将会导致误解.......................................................................................................121 HAREL的分析..........................................................................................................................124 JONE的观点——质量带来生产率..........................................................................................127 那么,生产率的情形如何?...................................................................................................128 面向对象编程——这颗铜质子弹可以吗?...........................................................................129 重用的情况怎样?...................................................................................................................130 学习大量的词汇——对软件重用的一个可预见,但还没有被预言的问题.......................132 子弹的本质——形势没有发生改变.......................................................................................133 《人月神话》的观点:是或非?(PROPOSITIONS OF THE MYTHICAL MAN-MONTH: TRUE OR FALSE?)................................................................................................................134 第1章 焦油坑.........................................................................................................................134 第2章 人月神话.....................................................................................................................135 第3章 外科手术队伍.............................................................................................................136 第4章 贵族专制、民主政治和系统设计.............................................................................137 第5章 画蛇添足.....................................................................................................................137 第6章 贯彻执行.....................................................................................................................138 第7章 为什么巴比伦塔会失败?.........................................................................................139 第8章 胸有成竹.....................................................................................................................141 - vii - 第9章 削足适履.....................................................................................................................141 第10章 提纲挈领...................................................................................................................143 第11章 未雨绸缪...................................................................................................................143 第12章 干将莫邪...................................................................................................................146 第13章 整体部分...................................................................................................................148 第14章 祸起萧墙...................................................................................................................149 第15章 另外一面...................................................................................................................150 原著结束语...............................................................................................................................152 20年后的人月神话(THE MYTHICAL MAN-MONTH AFTER 20 YEARS).................153 为什么会出现二十周年纪念版本?.......................................................................................153 核心观点:概念完整性和结构师...........................................................................................154 开发第二个系统所引起的后果:盲目的功能和频率猜测...................................................156 图形(WIMP)界面的成功....................................................................................................157 没有构建舍弃原型——瀑布模型是错误的!.......................................................................160 增量开发模型更佳——渐进地精化.......................................................................................162 关于信息隐藏,PARNAS是正确的,我是错误的.................................................................165 人月到底有多少神话色彩?BOEHM的模型和数据..............................................................167 人就是一切(或者说,几乎是一切)...................................................................................168 放弃权力的力量.......................................................................................................................169 最令人惊讶的新事物是什么?数百万的计算机...................................................................171 全新的软件产业——塑料薄膜包装的成品软件...................................................................173 买来开发——使用塑料包装的成品软件包作为构件...........................................................174 软件工程的状态和未来...........................................................................................................176 结束语:令人向往、激动人心和充满乐趣的五十年(EPILOGUE FIFTY YEARS OF WONDER, EXCITEMENT, AND JOY)......................................................................................................178 注解和参考文献(NOTES AND REFERENCES).................................................................180 第1章.......................................................................................................................................180 第2章.......................................................................................................................................180 第3章.......................................................................................................................................180 第4章.......................................................................................................................................181 第5章.......................................................................................................................................181 第6章.......................................................................................................................................182 第7章.......................................................................................................................................182 第8章.......................................................................................................................................182 第9章.......................................................................................................................................183 第10章.....................................................................................................................................183 第11章.....................................................................................................................................184 第12章.....................................................................................................................................184 第13章.....................................................................................................................................185 第14章.....................................................................................................................................186 第15章.....................................................................................................................................187 第16章.....................................................................................................................................187 - viii - 第17章.....................................................................................................................................188 第18章.....................................................................................................................................190 第19章.....................................................................................................................................190 索引(INDEX)..........................................................................................................................193
目录(Contents) 二十周年纪念版序言(PREFACE TO THE 20TH ANNIVERSARY EDITION)......................I 第一版序言(PREFACE TO THE FIRST EDITION)............................................................III 目录(CONTENTS).....................................................................................................................V 焦油坑(THE TAR PIT)..............................................................................................................1 编程系统产品...............................................................................................................................1 职业的乐趣...................................................................................................................................3 职业的苦恼...................................................................................................................................4 人月神话(THE MYTHICAL MAN-MONTH)...........................................................................6 乐观主义.......................................................................................................................................7 人月...............................................................................................................................................8 系统测试.....................................................................................................................................10 空泛的估算.................................................................................................................................11 重复产生的进度灾难.................................................................................................................12 外科手术队伍(THE SURGICAL TEAM)...............................................................................16 问题.............................................................................................................................................16 MILLS的建议.............................................................................................................................17 如何运作.....................................................................................................................................20 团队的扩建.................................................................................................................................21 贵族专制、民主政治和系统设计(ARISTOCRACY, DEMOCRACY, AND SYSTEM DESIGN)........................................................................................................................................................22 概念一致性.................................................................................................................................22 获得概念的完整性.....................................................................................................................23 贵族专制统治和民主政治.........................................................................................................24 在等待时,实现人员应该做什么?.........................................................................................26 画蛇添足(THE SECOND-SYSTEM EFFECT)......................................................................29 结构师的交互准则和机制.........................................................................................................29 自律——开发第二个系统所带来的后果.................................................................................30 贯彻执行(PASSING THE WORD)..........................................................................................33 文档化的规格说明——手册.....................................................................................................33 形式化定义.................................................................................................................................34 直接整合.....................................................................................................................................36 会议和大会.................................................................................................................................36 多重实现.....................................................................................................................................38 - v - 电话日志.....................................................................................................................................38 产品测试.....................................................................................................................................38 为什么巴比伦塔会失败?(WHY DID THE TOWER OF BABEL FAIL?)...........................40 巴比伦塔的管理教训.................................................................................................................41 大型编程项目中的交流.............................................................................................................41 项目工作手册.............................................................................................................................42 大型编程项目的组织架构.........................................................................................................44 胸有成竹(CALLING THE SHOT)..........................................................................................49 PORTMAN的数据........................................................................................................................50 ARON的数据..............................................................................................................................51 HARR的数据..............................................................................................................................51 OS/360的数据...........................................................................................................................53 CORBATO的数据........................................................................................................................53 削足适履(TEN POUNDS IN A FIVE-POUND SACK)..........................................................55 作为成本的程序空间.................................................................................................................55 规模控制.....................................................................................................................................56 空间技能.....................................................................................................................................57 数据的表现形式是编程的根本.................................................................................................58 提纲挈领(THE DOCUMENTARY HYPOTHESIS)...............................................................60 计算机产品文档.....................................................................................................................60 大学科系的文档.........................................................................................................................62 软件项目的文档.........................................................................................................................62 为什么要有正式的文档?.........................................................................................................63 未雨绸缪(PLAN TO THROW ONE AWAY)............................................................................64 试验性工厂和增大规模.............................................................................................................64 唯一不变的就是变化本身.........................................................................................................65 为变更计划系统.........................................................................................................................66 为变更计划组织架构.................................................................................................................66 前进两步,后退一步.................................................................................................................68 前进一步,后退一步.................................................................................................................69 干将莫邪(SHARP TOOLS)......................................................................................................71 目标机器.....................................................................................................................................72 辅助机器和数据服务.................................................................................................................73 高级语言和交互式编程.............................................................................................................76 整体部分(THE WHOLE AND THE PARTS)..........................................................................78 剔除BUG的设计........................................................................................................................78 构件单元调试.............................................................................................................................80 - vi - 系统集成调试.............................................................................................................................82 祸起萧墙(HATCHING A CATASTROPHE)...........................................................................85 里程碑还是沉重的负担?.........................................................................................................85 “其他的部分反正会落后”.....................................................................................................86 地毯的下面.................................................................................................................................87 另外一面(THE OTHER FACE)..............................................................................................92 需要什么样的文档.....................................................................................................................93 流程图.........................................................................................................................................95 自文档化(SELF-DOCUMENTING)的程序................................................................................96 没有银弹-软件工程中的根本和次要问题(NO SILVER BULLET – ESSENCE AND ACCIDENT IN SOFTWARE ENGINEERING).....................................................................102 摘要1........................................................................................................................................102 介绍...........................................................................................................................................103 是否一定那么困难呢?——根本困难...................................................................................103 以往解决次要困难的一些突破...............................................................................................106 银弹的希望...............................................................................................................................108 针对概念上根本问题的颇具前途的方法...............................................................................113 NO.........................................................................................................................................118 再论《没有银弹》(“NO SILVER BULLET”REFIRED)..................................................120 人和其他恐怖传说...............................................................................................................120 存在着银弹-就在这里!.......................................................................................................121 含糊的表达将会导致误解.......................................................................................................121 HAREL的分析..........................................................................................................................124 JONE的观点——质量带来生产率..........................................................................................127 那么,生产率的情形如何?...................................................................................................128 面向对象编程——这颗铜质子弹可以吗?...........................................................................129 重用的情况怎样?...................................................................................................................130 学习大量的词汇——对软件重用的一个可预见,但还没有被预言的问题.......................132 子弹的本质——形势没有发生改变.......................................................................................133 《人月神话》的观点:是或非?(PROPOSITIONS OF THE MYTHICAL MAN-MONTH: TRUE OR FALSE?)................................................................................................................134 第1章 焦油坑.........................................................................................................................134 第2章 人月神话.....................................................................................................................135 第3章 外科手术队伍.............................................................................................................136 第4章 贵族专制、民主政治和系统设计.............................................................................137 第5章 画蛇添足.....................................................................................................................137 第6章 贯彻执行.....................................................................................................................138 第7章 为什么巴比伦塔会失败?.........................................................................................139 第8章 胸有成竹.....................................................................................................................141 - vii - 第9章 削足适履.....................................................................................................................141 第10章 提纲挈领...................................................................................................................143 第11章 未雨绸缪...................................................................................................................143 第12章 干将莫邪...................................................................................................................146 第13章 整体部分...................................................................................................................148 第14章 祸起萧墙...................................................................................................................149 第15章 另外一面...................................................................................................................150 原著结束语...............................................................................................................................152 20年后的人月神话(THE MYTHICAL MAN-MONTH AFTER 20 YEARS).................153 为什么会出现二十周年纪念版本?.......................................................................................153 核心观点:概念完整性和结构师...........................................................................................154 开发第二个系统所引起的后果:盲目的功能和频率猜测...................................................156 图形(WIMP)界面的成功....................................................................................................157 没有构建舍弃原型——瀑布模型是错误的!.......................................................................160 增量开发模型更佳——渐进地精化.......................................................................................162 关于信息隐藏,PARNAS是正确的,我是错误的.................................................................165 人月到底有多少神话色彩?BOEHM的模型和数据..............................................................167 人就是一切(或者说,几乎是一切)...................................................................................168 放弃权力的力量.......................................................................................................................169 最令人惊讶的新事物是什么?数百万的计算机...................................................................171 全新的软件产业——塑料薄膜包装的成品软件...................................................................173 买来开发——使用塑料包装的成品软件包作为构件...........................................................174 软件工程的状态和未来...........................................................................................................176 结束语:令人向往、激动人心和充满乐趣的五十年(EPILOGUE FIFTY YEARS OF WONDER, EXCITEMENT, AND JOY)......................................................................................................178 注解和参考文献(NOTES AND REFERENCES).................................................................180 第1章.......................................................................................................................................180 第2章.......................................................................................................................................180 第3章.......................................................................................................................................180 第4章.......................................................................................................................................181 第5章.......................................................................................................................................181 第6章.......................................................................................................................................182 第7章.......................................................................................................................................182 第8章.......................................................................................................................................182 第9章.......................................................................................................................................183 第10章.....................................................................................................................................183 第11章.....................................................................................................................................184 第12章.....................................................................................................................................184 第13章.....................................................................................................................................185 第14章.....................................................................................................................................186 第15章.....................................................................................................................................187 第16章.....................................................................................................................................187 - viii - 第17章.....................................................................................................................................188 第18章.....................................................................................................................................190 第19章.....................................................................................................................................190 索引(INDEX)..........................................................................................................................193
目录(Contents) 二十周年纪念版序言(PREFACE TO THE 20TH ANNIVERSARY EDITION) ...................... I 第一版序言(PREFACE TO THE FIRST EDITION) ............................................................ III 目录(CONTENTS) .....................................................................................................................V 焦油坑(THE TAR PIT) ..............................................................................................................1 编程系统产品...............................................................................................................................1 职业的乐趣...................................................................................................................................3 职业的苦恼...................................................................................................................................4 人月神话(THE MYTHICAL MAN-MONTH) ...........................................................................6 乐观主义.......................................................................................................................................7 人月...............................................................................................................................................8 系统测试.....................................................................................................................................10 空泛的估算.................................................................................................................................11 重复产生的进度灾难.................................................................................................................12 外科手术队伍(THE SURGICAL TEAM) ...............................................................................16 问题.............................................................................................................................................16 MILLS 的建议 .............................................................................................................................17 如何运作.....................................................................................................................................20 团队的扩建.................................................................................................................................21 贵族专制、 民主政治和系统设计(ARISTOCRACY, DEMOCRACY, AND SYSTEM DESIGN)
羊菜过河问题是一个经典的逻辑谜题,其中有四个角色需要过河,但是只有一条小船,且小船只能容纳两个人。而在四个角色中,会吃羊,羊会吃菜,因此需要注意安排过河顺序,以保证所有角色都能安全到达对岸。 以下是一个 Python 实现的人羊菜过河问题代码: ```python # 定义初始状态 start = {'farmer': True, 'wolf': True, 'sheep': True, 'cabbage': True} # 定义目标状态 goal = {'farmer': False, 'wolf': False, 'sheep': False, 'cabbage': False} # 定义动作 actions = { ('farmer',): ['farmer_cross'], ('farmer', 'wolf'): ['farmer_cross_with_wolf'], ('farmer', 'sheep'): ['farmer_cross_with_sheep'], ('farmer', 'cabbage'): ['farmer_cross_with_cabbage'] } # 定义状态转移函数 def transition(state, action): new_state = state.copy() if 'wolf' in action: new_state['wolf'] = not state['wolf'] if 'sheep' in action: new_state['sheep'] = not state['sheep'] if 'cabbage' in action: new_state['cabbage'] = not state['cabbage'] new_state['farmer'] = not state['farmer'] return new_state # 定义判断状态是否合法的函数 def is_valid(state): if state['wolf'] == state['sheep'] and state['farmer'] != state['wolf']: return False if state['sheep'] == state['cabbage'] and state['farmer'] != state['sheep']: return False return True # 定义求解函数 def solve(state, goal, actions, transition, is_valid, path=[]): if state == goal: return path for action, next_actions in actions.items(): if state['farmer'] in action: for next_action in next_actions: next_state = transition(state, action) if is_valid(next_state) and next_state not in path: new_path = path + [(action, next_action)] result = solve(next_state, goal, actions, transition, is_valid, new_path) if result is not None: return result return None # 输出结果 result = solve(start, goal, actions, transition, is_valid) for action in result: print(action[0], '->', action[1]) ``` 这个代码实现了一个求解人羊菜过河问题的函数 `solve`,它接受初始状态、目标状态、动作、状态转移函数和判断状态是否合法的函数作为参数,并返回一个路径,表示从初始状态到达目标状态的一系列动作。在实现过程中,我们定义了初始状态、目标状态、动作和状态转移函数,以及判断状态是否合法的函数。其中,动作是一个字典,键表示当前在岸上的角色,值表示当前这些角色可以进行的动作。状态转移函数接受一个状态和一个动作,返回一个新的状态,表示执行这个动作后的状态。判断状态是否合法的函数用于排除一些不符合规则的状态。最后,我们使用深度优先搜索求解从初始状态到达目标状态的路径,并输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值