前言 1
简介 1
第一章 奠基 1
有几点原则是所有取得成功的软件项目主管人员牢记脑海中的。最重要的思想是程序员应该做那些直接或间接提高产品质量的工作。为其他小组成员的主要工作开道是主管人员的职责,主管人员要无情地去除那些阻挡提高产品质量的工作 1
——例如,过分追求进展报告和会议,或开发对产品或公司不是很重要的功能。为容易判定哪些任务是重要的而哪些是白费力气,主管人员应该建立详细的项目目标和优先级规定。项目目标和编程优先级规定越详细,就越容易找出无用的工作 1
目录 1
为了获取最好策略而有效率地工作,主管人员应该把他们试图要解决的问题形成不断细化的提问。例如,主管人员不能这样问,“我们怎样总是按期交付产品?”,它可能导致许多不期望的回答 26
相反,主管人员应该问一个更明确,更有益的问题:“我们怎样总是按期交付产品,而不用雇用更多的人和迫使开发人员超时工作?”主管人员应该试图将负反馈循环并入到他们采用的策略中 26
并且当他们把工作策略传授给小组其他成员时,他们应该确保提醒小组,一个好的策略和指导方针不必要在所有情况下都有效 26
令人惊奇的是,相当细微的工作习惯或过程如何能够导致结果的截然不同。确实,这些习惯或过程不用花费半点力气就可付诸实践,而且它产生的效果也不依赖于使用它的程序员的技能水平 26
第二章 合理的方法 26
第三章 战略的重要性 49
项目可能以如此之多的微妙方式误入歧途,主管们永远不能对项目放任自流,以为它们会按计划进行并会自己运转。为使一个项目平稳运转,主管必须时时监视着项目,目光要向前看,在问题尚小的时候解决它们 49
为促使项目按期交付,主管每天要问自己这个问题,“我今天可以做什么事情来让项目在下几月里按预定轨道前进?”通过每天询问自己这个问题并认真寻找答案,主管可能预见到各种问题,否则这些问题会阻碍项目 49
为了防止浪费人力,主管应该审评每项请求,来辨明真正的问题或目标,而且应该确保每项任务是实现项目的目标和遵循优先级规定 49
有一些任务,可能根本不具备战略重要性,例如满足市场小组要求扩充功能集的请求,或是实现从程序员的设计中冒出来的不花钱的功能。一位好主管应学会说“不” 49
第四章 无法遏制的热情 79
如果主管希望软件开发小组创造性地活动,他或她必须创建一种开发氛围,孕育这种创造激情。不幸的是,当公司从小小夫妻店发展成大企业公司时,程序员日常担负的非开发性工作激剧增多 79
主管应该努力工作消除不必要的报告和会议,以及有碍开发工作的企业事务。这里,事务越简单越好。如果程序员有机会好好工作而不被过多的企业事务所防碍,他们有更好的机会抓住灵感的火花并促使项目向前进行 79
重要的一点是,主管人员应该总是讲明他们真正的(而不是正式的)需要。要求写报告或召开会议是收集信息的一般方法,但是如果有其它更有效的办法来收集信息(确有),为什么要把报告和会议压在程序员肩上呢? 79
任何程序员如果认定他没有足够的时间来详尽地测试其代码,就犯了把计划凌驾于产品之上的错误 98
太紧迫的计划会导致歇斯底里症,程序员为达到短期的计划会采取短期行为,从而使产品从长远来看面临危险。一个项目计划应该足够紧迫,使得项目能快速进行,但如果计划过于紧迫,程序员们就会不去理会他们正确的判断而做出愚蠢的决定 98
使用“阶段性计划”,项目负责人不仅可以更好地协调其它几个小组的工作,还能使项目更令人兴奋,培养一种富有创造性的气氛,使程序员以惊人的速度写出高质量的代码 98
第五章 疯狂的计划 98
最少,市场组应该知道他们该何时开始为产品做广告,但正如计划对于协调公司内各个小组的工作非常重要一样,如果计划制订或执行得不理想的话,它也会给开发造成灾难性的影响 98
在大多数公司里,开发小组要维持某一进度,这样,公司里别的组就可以配合他们的工作 98
一旦不能达到计划,就会打击开发小组的士气,最终会损害其工作量 98
第六章 连续的、不间断的提高 116
项目负责人可以将开发过程优化到某一点上,在这个水平上,每个小组成员只将注意力集中在富有战略意义的工作上 116
但如果负责人真想项目腾飞,他就要关注人员培训,使每个小组成员经常性地学习一些广泛使用的新技术。一种能保证小组成员主动地提高自己的办法就是将个人成长目标与 116
这样可使每个程序员每年至少学会6种新技能,程序员在工作过程中能够,也确实学到了新的技术,但这种被动的学习方式速度要慢得多 128
要通过工作分配和明确的教育目标,确保程序员能主动地学习新的技能,从而使项目和公司受益,还可以促进程序员职业生涯的发展 128
第五章中提到的两个月的项目阶段计划统一起来 128
第七章 完全是态度问题 137
通过主动学习来提高小组成员的技能很好,但当项目负责人着眼于改正不正确的态度和提倡有益的态度时,他就可以获得更加令人瞩目的结果。新的态度其作用力将遍及程序员要做的每一件工作,这就是好的态度的杠杆作用 137
第七章严肃地审视了导致项目失败的一些程序员中普遍存在的态度 140
错误难免,我晚些时候再改正错误,要把事情做好花的时间太长,对用户来说已经够好了,给用户一些东西总比不给好,我做我的你做你的,这只是给公司内部使用 140
第八章 沉没的感觉 167
当项目的进度开始落后时,一个很自然的反应就是雇更多的人手,让小组加班加点。但是投入更多的人员和逼着程序员加班并不能在最关键的地方解决引起项目落后的问题 167
如果小组每周工作80个小时才能达到40个小时的计划,肯定有哪里出了严重的问题。项目负责人应该追踪原因,并且(有时)要使程序员不做关于加班加点具有激励作用的假设——这种假设有时是他们自己产生的,有时是高层管理人员这么认为的 167
雇佣更多的人和要求程序员加班加点只会掩盖影响项目进度的问题之所在。项目负责人应该发现并解决问题,而不是将它们掩盖起来 167
后记 关于领导的一句话 190