软件项目发展历史<人月神话>这本书好

 

 

几乎是计算机软件开发的发展历史

 

 

人月神话,增加人手并不一定能提高开发速度。

原因在于,有些任务是无法分解的,存在先后顺序。无法同步进行。

增加人手,增加的是沟通成本,相互牵制。可以分解的任务就可以通过增加人手来加快速度。但是不能分解的任务,增加人手只会增加开发时长。打个通俗比方,怀孕需要12个月,增加人手,也不能加快时间。

作者赞赏的是,小型精干的技术团队是最好的。沟通成本低,开发效率高。

厨师煎一个蛋,需要5分钟,而顾客期望2分钟。怎么都达不到,2分钟的办法是,把火开大可以快速点(类似于软件加班,多投入人),蛋会烧掉。

 

我们往往忽略了成员的沟通成本,培训成员的成本,拆解任务后,就变了,结果项目还是继续延长

已经延期的项目增加人手,会更加延期。分配任务,培训新成员的成本。
这方面的坑,前人遇到过了。

 

 

 

 

评估技术开发任务的复杂度和时长,容易凭着直觉

困难的预估不足。这是我们的问题。

做项目,任务的评估时间忽视了软件开发的特点,我们往往凭着直觉来评估周期。增加人手不能解决问题。

 

技术人员往往比较讨厌那种说"这个很简单"的人。他自己去做,被一个小bug栽跟头可能卡住很久

 

以后我们做时间预估的时候,就不要凭着自己想当然
我们自己做的时候,不会这样。等到位置变了,就想当然了。

 

 

这本书里面提到一个经验,调试和测试的时间花费是最多的。比开发写代码要多得多。

现在看来是这样,有时候为一个bug,调试,定位问题,耗费长时间。

 

 

 

 

建立一个组织架构,不要强调头衔。

具体的办法为:

1,叫负责人,而不是叫总监。叫法会造成心理的隔阂。负责人强调的是身上的责任和担子。将会促使人去干实事。

2,提供技术和管理两条发展路线。级别要一样,不应该有待遇差别。办公室的位置要一样,不要刻意显示地位差别。否则,技术人员都挤着想做管理(不安心钻研技术,因为级别和待遇低),而管理人员则显得自己地位的差别,技术人员的话语权就低了。

管理能获得更好的待遇(薪资、受尊重程度,各种权利和荣誉)。那么管理将会务虚不务实了。

3,技术人员向管理的转换,要以调动的名义,而不要以晋升的名义。这种调动时,待遇不要跟着变化,而应该不要变。

 

 

作者观点是:

 

对于一个广泛使用的程序,维护成本是开发成本的40%甚至更多。而且据发现,系统的用户数越多,发现的错误越多(我们想想windows常年打补丁进行更新)。

为什么会这样?用户数多,他们熟练使用旧功能后,就会使用新功能。于是就会发现新功能那些不容易察觉的问题。
修复bug,往往会引入新的bug。经常出现这样现象:前进两步(修复和完善两个地方),后退一步(引入一个新的缺陷)。

读到这个观点,程序员是不是深有共鸣?

我想,更关心的是如何解决这个问题?

……………………书中笼统而过解释了一下

为什么缺陷不能更彻底地被修复?首先,看上去很轻微的错误,似乎仅仅是局部操作上的失败,实际上却是系统级别的问题,通常这不是很明显。修复局部问题的工作量很清晰,并且往往不大。但是,更大范围的修复工作常常会被忽视,除非软件结构很简单,或者文档书写得非常详细。

其次,维护人员常常不是编写代码的开发人员,而是一些初级程序员或者新手。

作为引入新 bug 的一个后果,程序每条语句的维护需要的系统测试比其他编程要多。

理论上,在每次修复之后,必须重新运行先前所有的测试用例,从而确保系统不会以更隐蔽的方式被破坏。实际情况中,回归测试必须接近上述理想状况,所以它的成本非常高。

显然,使用能消除、至少是能指明副作用的程序设计方法,会在维护成本上有很大的回报。同样,设计实现的人员越少、接口越少,产生的错误也就越少。

……………………

作者已经帮我们归纳原因了,那么我们可以根据原因,依据自己项目中实际情况做改进。

原因:

1,修改系统的人不熟悉原来的系统。比如他是系统的新手。比如系统的维护人员,由于他并不是之前开发这个系统(功能)的人员,于是不熟悉系统,修改就会造成麻烦。
不熟悉,改了具备后会影响到哪个环节。

2,缺少评估修改系统后,产生的影响。大系统,修改功能,评估时间做足够点,重点不要放在评估开发时间上,放在修改局部造成哪些方面会影响。不要走形式。

3,系统缺乏必要的文档说明。造成接手的技术不知道来龙去脉,那么为了应付上级任务催促,就只能先改好再说,但是改了后出现问题了。

归纳对策

1、减少开发系统人员的波动。现实中这的确比较难,实际上根源并不是人员波动(因为人员不波动是理想状态而已),而是人员波动后造成的衔接故障问题。只要解决这个根本性问题即可。一个国家主席会有任期,没有不散的筵席。怎么保证国家政权的平稳过渡,有选举制度,按流程走。

2 、详细的文档,避免混乱。古代的经验,今天的人怎么继承的。靠的是古人的文字记载。

 

作者的观点:

杰出的设计人员应该与杰出的管理人员一样重要,受到的回报要一样,不仅仅是薪资待遇,要在认可方面一样:办公室规模、安排、人员支持等方面。这样才会有更多回报。

良好的设计人员和卓越的管理人员都是稀缺的。卓越的管理人员,绝不会比良好的设计人员更加迫切。

之所以那么重管理,那是传统的工厂活,因为是机械式的干活,不需要很强的创造力。而当面对高级人才的时候,这些高级人才往往是自我驱动型,对他们的管太多会造成情绪不爽的。

 

 

如何解释小型团队带来的好处。

维护系统比开发系统的成本更高。如何才能做到这样。

有些开发任务是没法拆分的,拆分后,反而效率不高。需要投入沟通时间,培训成员的时间。

这本书提出一个观点,成员多交流,定期交流,这样才能知道需求有没有偏差。

作者建议的几种搭配:

产品经理和技术总监是同一人。
产品总监总指挥,技术总监当其左右手。
技术总监总负责,产品经理做左右手。

为什么要这样子设计呢?好处是什么呢?

知道正确的办法。很多事情要回报。

老板的目标,如何培养人才,使得技术和管理人员可以互换。
提供两条晋升路线的办法,为什么存在一些社会性障碍。

为技术和管理人员建立相同薪资容易,建立相同的威信则需要很多措施。

项目经理的职责之一就是协调大家按照一致的方向前进。他的重要不是做在决策,而是沟通,沟通使得大家保持一致方向。

文档是作为沟通的渠道,让大家想法达成一致。文档减轻了沟通障碍。


有以文档记录下来,大家的分歧才会明朗,矛盾才会突出。因为文档往往是精确的,可以沟通的(相比口头语而言)。这里文档有个细化到什么程度的问题:什么事
情需要文档,什么事情不需要文档。我以为,重大或者关键性的决定口头说是不准确的,沟通看起来快(相互马上知道),但是要接地气实施目标困难。会出现沟通
偏差,误解,白做。

达到无为而治的情况。

 

 

 

的确是屁股决定脑袋

时间: 2024-09-23 09:35:38

软件项目发展历史<人月神话>这本书好的相关文章

人月神话blog:编程之道和编程之禅摘录

对于聪明的人,只要一个字:对于快马,只要轻轻一鞭:对于写得好的程序,只要单独的一个命令. 设计一个千百万程序的操作系统很容易,要改变一个人的本性却困难得多. 开发前面的百分之九十需要一半时间,而另一半时间则用来完成最后的百分之十. 项目计划和公布的时间表,本身毫无意义.那些日期和项目进展的里程碑本质上不意味着什么.然而有一个秘密的时间表,它被所有工作于一个项目的人所理解.这个秘密的时间表从未被外界的关注所愚弄,也从未被操纵以迎合市场的方案.这个秘密的时间表总是被遵守,因为它反映了所有开发部成员之

软件项目“免坑”指南

"谁也无法改变现状,唯有无数程序员血洒大地,才能使项目重建天日."这一点也不夸张,软件项目做烂了就是个坑,参与者也不过是填坑的.就像是在魔兽世界战场遇到国家队一样,你赢也赢不了,出也出不去. 一.坑有多深? 当我们进入一个项目时,通过不断观察我们可以发现我们的项目到底是不是一个坑.造坑的项目,往往具有某些"臭味",以下是我的一些认识,这些"臭味"即是项目健康状态不佳的明显标志: ● 编码规范形同废纸,代码质量低下.每个项目都有编码规范,但真正严格

软件项目,什么叫坑爹!大家注意了

"谁也无法改变现状,唯有无数程序员血洒大地,才能使项目重建天日."这一点也不夸张,软件项目做烂了就是个坑,参与者也不过是填坑的.就像是在魔兽世界战场遇到国家队一样,你赢也赢不了,出也出不去. 一 坑有多深? 当我们进入一个项目时,通过不断观察我们可以发现我们的项目到底是不是一个坑.造坑的项目,往往具有某些"臭味",以下是我的一些认识,这些"臭味"即是项目健康状态不佳的明显标志: ◆  编码规范形同废纸,代码质量低下 每个项目都有编码规范,但真正严

人月到底有多少神话色彩

       台上一分钟,台下十年功        宝剑锋从磨砺出,梅花香自苦寒来:不经一番寒彻骨,哪得梅花扑鼻香:业精于勤而荒于嬉,行成于思而毁于随.不积跬步,无以至千里:不积小流,无以成江海.骐骥一跃,不能十步:驽马十驾,功在不舍.千百年来,先人的经验都在告诉我们台上一分钟,台下十年功,这句话本意指在台上表演的时间往往只有短短的一分钟,但为了台上这一分钟的表演时间,需要付出十年的艰辛努力.这些都强调了基础的重要性,编程就好比练功,如果学习.net,mfc,vb等具体的语言和工具是外功或者是招

让你提前认识软件开发(24):C语言的发展历史和主要特点

第1部分 重新认识C语言 C语言的发展历史和主要特点          作为一门众所周知的计算机编程语言,C语言是谁发明的呢?它是如何演进的?它有何特点?到底有多少人在使用它? 1. C语言之父        C语言是1972年由美国贝尔实验室的计算机科学家Dennis Ritchie(丹尼斯·里奇)设计发明的.因此,Dennis Ritchie被誉为"C语言之父"(他已于2011年10月9日去世,享年70岁).图1中的人物就是Dennis Ritchie. 图1 "C语言之

你不是一个人在战斗——软件项目团队模型

摘要: 俗话说"三个臭皮匠胜过诸葛亮",但实际工作情况往往是"三个诸葛亮不如一个臭皮匠"! 软件开发是智力型团队,如何发挥每个人的作用,并将所有人的力量扭成一股强大的项目团队战斗力,这是项目团队模型要重点解决的问题. 大纲: 1.传统项目团队模型 2.实际项目团队模型 3.MSF的项目团队模型 4.实用团队模型 5.什么才是合适的项目团队模型? 正文: 传统项目团队模型 什么是项目团队模型?简单地说就是项目以怎样的方式组建团队,软件开发项目团队的传统团队模型如下:

如何和软件项目客户打交道

项目经理需要干的3件事--控制.调配和缓冲. 控制:控制客户与突发事件. 调配:调配 时间.资源.需求之间的三角关系. 缓冲:分解压力,在需求方和工程师之间充当沟通桥梁(这两种人虽然都会说中国话,但在对方听起来基本是两种语言.) 如果你不能学会控制客户,处理好甲方和乙方之间的关系,其实任何项目都有可能变成垃圾项目.  几个首先的原则:  不要忽悠甲方.无论是为了拿下项目还是获得更多预算.这样做好比为了立战功,对朝廷说我有5W雄兵,派我去吧.实际你只有2W人,结果到了战场一看敌军10W人,到时你就

《C程序员从校园到职场》一第1章 概述1.1 C语言的发展历史

第1章 概述 C程序员从校园到职场 本章介绍C语言的发展历史和主要特点,以及实际项目工作中软件开发工程师常用到的工具软件. 1.1 C语言的发展历史 1.1.1 C语言之父 C语言是1972年由美国贝尔实验室的计算机科学家Dennis Ritchie(丹尼斯·里奇)设计发明的.因此,Dennis Ritchie被誉为"C语言之父"(他已于2011年10月9日去世,享年70岁).图1.1所示的人物就是Dennis Ritchie. 图1.1 "C语言之父"Dennis

《Microsoft.NET企业级应用架构设计(第2版)》——2.2 软件项目的机制

2.2 软件项目的机制 如果你问:"什么导致项目失败?",你得到的最常见的回答可能会把失败归咎到与业务有关的问题,比如说,缺少需求,项目管理不到位,成本估算不正确,缺少沟通,甚至各个团队的人员相互不配合.你很难看到坏代码可能导致问题这种情况. 有鉴于此,我们认为未被发现的BBM可以严重损害软件项目,但未能处理的BBM却可以真的毁了它. 最终,个体以及个体之间的实际互动才能真的决定软件项目的成功或失败.但是,组织结构及其整体文化也会影响最终结果. 2.2.1 组织文化 Apple公司的组