软件管理沉思录读书笔记

全书呼吁管理者要树立一个愿景:生产更好的产品,获得更大的职业满足,享受创造出某种能用而又有用的东西时的喜悦。

它向我们描述了一种全面而有序的方法,涵盖软件开发的各个层面,不论是工程师的单兵作战还是团队合作开发大型软件。这本书值得成为每位软件开发管理者和学生的案头必备。

本书要点

本书是从沃茨的著作、论文以及专栏文章当中精选而成,包含了许多建议、故事以及来之不易的经验,而非具体介绍PSP或TSP如何实现。

本书是想让读者理解,成功的软件项目管理会遭遇许多障碍。为了成功完成项目,工程师需要管理的不仅仅是项目本身,他们必须利用自己和团队的经验,理解项目并提前做出计划。

这些文章解释了软件发展中固有的挑战,并帮助软件工程师明白如何才能成功。

精编书摘

管理你的项目

交付高质量的产品

软件质量改进的需求是巨大的,并且这种改进已经不能单纯地靠延续过去那种基于测试的方法来实现

如果一件产品提供了对用户而言是最重要的功能,那么这就是一件高质量的产品

与漏洞相比,缺陷更像是定时炸弹。尽管不是所有的缺陷都会带来爆炸性影响,但是有一些缺陷的确会

只要技术还在不断进步,并且这种进步能引起新的和不同类型用户的兴趣,我们就会面临新的质量需求

为了完成重要的工作,首先要精确地知道什么是你要努力去实现的

编程是一项严谨的工作,所有从事此项工作的专业人员都是在完成对质量要求极为苛刻的任务。

在软件开发过程中,为了保证质量始终如一,必须遵循以下8个步骤:

  • 确立质量控制的策略、目标和计划
  • 正确训练、指导和支持开发人员及其团队
  • 确立和维护软件需求的质量管理过程
  • 确立和维护软件工程过程的统计控制
  • 审查、检查并评估所有的产品制品
  • 评估所有缺陷,加以更正并用以识别、纠正和预防其他类似问题
  • 确立和维护配置管理和变更控制系统
  • 持续改进开发过程

软件产品的质量应当被定义为产品对用户的有用性。

只有得到了清晰的需求,才有可能开发出高质量的程序。

软件工程师的工作就是在计划成本和计划进度内交付高质量的产品

虽然软件质量包括很多方面,但是首先应当关注的质量问题就是软件的缺陷

目标之所以重要,主要是基于以下两条原因:它们提供了努力的焦点,而且建立了一种优先次序。

为高质量项目制定计划

做两类计划,第一类是基于时间段的计划,阶段计划关心在这一时间段内你准备如何利用时间。第二种是基于行动的计划,比如开发一个程序或者撰写一份报告

产品计划会帮助判断完成工作将需要多少时间,以及会在什么时候完成。计划还可以帮助在工作期间追踪过程

计划必须是易于理解、清晰明白、详细具体、精确缜密、准确无误的

动态计划是避免被种种细微变化蚕食至死的唯一解决拌饭

一份合格的产品计划应当包括三项内容:

  • 将要生产的产品规格和重要的性能指标
  • 估算工作需要的时间
  • 进度预测

3.2.管理你的团队

高效团队的基本要素

高效团队必备的四个条件

  • 团结
  • 富有挑战性的目标
  • 反馈
  • 通用的工作架构

团队交流的三要素

  • 透明
  • 倾听
  • 协商

自主指导型团队的特征是,自己设计开发策略,自己制定计划,并且积极主动、高质量地完成工作

目标追踪和反馈是极其重要的

共鸣性倾听是一种主动性倾听,它对软件团队尤其重要。

群体类型:工作型群体、过程型群体、对抗型群体

工作风格:开发型群体、随意型群体、封闭型群体、同步型群体

自主指导型团队的典型行为:团队成员会主动发现需要做什么并及时去做,而不用人告诉要做什么,为了能完成任务他们会去做任何需要做的事情。

凝聚力是把团队成员紧密联系在一起的纽带,而要想形成凝聚力就需要接触和交往。

组织-动荡-规范-执行

做一位高效的团队成员

优秀的团队成员会去做任何需要做的事

承诺是一项必须要学习的道德规范

只有基于计划才能做出负责人的承诺

对目标状态精确、及时的反馈,是高效能团队绝对必须的前提条件

要想让团队运行顺畅,每一位成员都应当奉献出他所知道的一切。

原则式谈判之所以有效的原因是,它避免了立场的两极分化。原则式谈判的基础是,认识到立场只是满足利益的一种方式,把注意力集中在利益而不是立场上。

剔除不履行职责的团队成员通常会提升团队的整体表现。

支持的本质是帮助人们达到他所能达到的境界。

提供有效支持的关键是,帮助团队伙伴相信他们自己的能力。

领导和指导你的团队

对于工作团队,有三条最重要的激励因素:恐惧、贪婪和承诺

可信的团队承诺有四条要求:自愿、可见、可信、和得到承认

只有当项目团队成员开始自由、开放地交流,开始有自己的主张并协商解决不同意见时,这支团队才有可能是凝胶团队

理性管理的四要素

  • 首先,在确定产品或行动目标时,要检查当前的工作情况,并且根据业务目的确立行动目标。
  • 其次,为短期目标制定计划
  • 再次,评估和追踪计划完成情况,并且监督工作中的纪律执行情况
  • 最后,持续监督业务执行情况

管理你的领导

讨论项目并捍卫你的计划

让团队聚焦于优先级最高的事情

在做出任何承诺之前都要先制定一个计划

制定一个合理、详细的计划是掌控项目的第一步

让计划保持更新是极其关键的,因为软件开发是一个时刻变化的事业,并且每一个意外对团队来说通常都意味着更多的工作。

管理者的层级之所以重要,是因为改进过程处理的是那些具有长期影响的议题,而这正是高层管理者关注的重点

对管理者来说,工作就是利用所有的团队资源去完成此项工作,其他所有的事情都是第二位。

要建立一支真正凝聚力和活力的团队,就必须始终高度重视团队目标,在工作表现中为队员作出表率,坚持高标准,并且为团队所有的工作负责。

管理你自己

控制你的工作

成功者赢得胜利,他们决不抱怨。正是那些永远失败的人才会抱怨人生的不公以及别人该如何为自己的失败负责。

要想生产出优致的产品,必须时不时地休息游戏。不过,为了有较高的效率,同时也是为了优质的完成工作,我们需要对这种休息掌握主动权。

软件项目失败的主要原因通常是团队合作问题而不是技术问题。

学习制定好计划的第一步就是制定计划

要想制定出更加精确的计划,就需要找出先前计划中哪些地方出了错以及怎样改进

要想管理好时间,就是要计划时间并遵守这个计划

真正达成一致是个人承诺中必最重要也是唯一的特征。

管理承诺最主要的原因是,这样就不会忽略或忘记它

管理承诺的另外一个原因是,当你要做的工作超出了可用的时间时,这样做就可以帮到你

不断挑战自己去完成更优质的工作

关键是要保持开放的心态,并时刻做好准备

执著追求卓越,才有可能臻于卓越

学会领导

最成功的团队都有精力充沛、富有热情、满怀信心以及严格要求的领导者

在开发工作中,目标同样重要,但它们很少会是单一明确的。作为领导者,工作很重要的一个方面就是保持团队目标清晰明确,确保团队每一位成员都知道他当前的工作对实现目标有什么帮助

目标非常重要,它们提供了团队成功所需的关注点、激励和能量

工程的本质是质量

比质量标准更重要的是团队合作和支持的标准

领导力低下会有很多症状,但它们的根源通常是因为没有认识到什么是真正需要做的,没有明确一个能充分利用可用资源和机会的方向

领导者和管理者之间最主要的区别是,,管理者命令员工服从他们的指令,而领导者是带领他们完成任务

后记

个人开发者正确地完成软件开发工作,这其中很重要的一部分就是,学习成为自己的管理者,学习制定自己的进度表,追踪自己的过程,管理自己的工作质量,做出个人承诺并始终如一地实现你的承诺

软件能力成熟度模型集成(CMMI)是一种过程改进成熟度模型,用于产品或服务开发。它由一些最佳的实践方法组成,涵盖了产品从概念到发布以及维护的整个生命周期

软件能力成熟度(CMM)是一种过程改进方法,旨在为组织提升其表现提供所需的高效过程。