微软研发致胜策略 01:尊定基础

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1994 年发布。我们看到的标题是中译版名字,英文版的名字是《Debugging the Development Process》,这本书详细阐述了软件开发过程中的常见问题及其解决方案,强调团队合作、项目管理和开发流程的优化。该书成为软件开发和项目管理领域的经典著作,受到了广泛的认可和赞誉。

作者 Steve Maguire 曾在微软担任高级项目经理和软件工程师,这是他写的第二本书。第一本书是之前文章已经介绍过的《编程精粹—— Microsoft 编写优质无错 C 程序秘诀》,在《编程精粹》中,作者关注的是开发过程中最严重的 “BUG”:太多的软件 BUG。而本书是《编程精粹》的补充,是为每个团队成员准备的:如果一个软件项目要取得成功,每个团队成员都必须理解那些能够按时交付高质量软件的原则、指南和策略。本书中的建议对开发过程进行了微调,重点介绍了软件团队可以使用的技术和策略,以实现持续的成功。本书包含许多轶事性例子,大多数来自微软的经验。

成功的项目维系在每位组员身上,才能如期完成高品质的软件。本书所提供的技巧和策略,不是软件开发主管会用就够了,每位组员都必须充 分了解。除非每个人都懂得如何在合理的工作时间内做出 高品质的软件,否则项目仍是不会成功的。


不记录,等于没读。


成功的软件项目负责人都牢记一些原则。其中最重要的一个是,程序员应该只从事那些直接或间接改进产品的任务。负责人的工作是为其他团队成员的主要工作扫清障碍,通过无情地消除那些妨碍产品改进的工作——例如,过度的状态报告和会议,或开发对产品或公司没有战略意义的功能。为了便于确定哪些任务是战略性的,哪些是浪费精力的,负责人应制定详细的项目目标和优先事项。目标和优先事项越详细,就越容易发现浪费的工作。

如何使项目的效率更有效率?

要让项目提高效率,需要长时间、一点一滴地累积非常多的知识、技巧和信念,尤其新手更是如此。这种能力的培养需要很大的耐心和毅力,需要从错误中学习。如果能善用前人的经验,学习前人已经归纳出来的知识,避免犯下同样的错误,可以快速提升你的技能。本章首先介绍前人的经验,这是软件开发部门的基本观念,也是往后几章的基础

1. 专心改善产品

软件开发的真理是:任何不能改善产品的工作,都是潜在的浪费或是错误的努力。公司付薪水给程序设计师,是要他们在合理时间内做出品质精良的软件,不要让无关的事情占用他们的时间。

你要专心研究、设计和测试产品。开会、写设计文档、写进度报告等等,都是在浪费时间,因为这些事情不能改善产品。这些浪费时间的事情,往往是领导下的命令:让组员交工作周报、每周一小时会议,讨论各自的工作内容,并要求写书面报告交给经理。这会让团队被无意义的工作压得无法喘息。报告真那么重要吗?经理不能主动收集组员的工作内容吗?

软件开发领导者的基本守则是:努力消除程序设计师工作上的一切障碍,让程序设计师全力专注在真正重要的工作——改善产品

思考如何设计、测试程序和接受培训虽然不是直接投入在改善产品上,但对产品质量却有重大深远的影响。有些团队的活动,可以让团队成员在愉快的环境中工作,提供程序设计师的生产力和士气,虽然看似与产品无关,最后还是对产品质量与工作效率有正面帮助。

2.排除干扰

如果希望团队在期限内完成任务,就必须尽可能排除一切不必要的工作,在将任务分配给组员前,想一下这件工作有没有必要、能不能由你做

  • 那些不能不做、却与产品无关的工作,最好由主管主动接手,让设计师专心在软件上面。
  • 凡是能有主管出席的会议或能有主管执笔的报告,都不应该丢给程序设计师,最好能把这些开会、报告都废除。
  • 如果管理者将工作分出去的目的仅仅是为了减轻个人负担,实质上你做的是伤害团队生产力的事情。

保护程序设计师不受任何阻碍和干扰。身为主管的重大责任就是让属下专项做他该做的事,无论他该做的是写程序、测软件还是写文件。

3. 一定有更好的方法可以减少干扰

因为太容易被不重要的工作拉偏方向,所以在项目的每个阶段问自己:“我努力的目的究竟是什么?”努力的目的应该是改善产品,所有与这个目标不一致的行为都要警惕,要想办法减少这种行为。

掌控项目的进度不一定非要动员全体人员开会和写进度报告。进度报告是必要的,因为经理要了解项目是否出问题。但进度报告绝对不会对产品有任何帮助。这种必要但对产品没有帮助的工作,我们需要想一个更好的方法,即保有这项工作的好处,又消除它的缺点。对于进度报告,一些更好的方法有:

  • 每当有人完成了一项新功能或特色,就发个 e-mail 给大家 (简短的描述,只发给同组的几个人)
  • 每当进度快要落后了,就到主管的办公室私下讨论原因,一起寻求解决之道
  • 可以使用版本控制工具,每次提交都有说明,管理者也可以方便查看代码和测试。

4 明确的说出目标

“在我合作过的团队中,有 6 个在失败边缘苦苦挣扎,他们都有一个共同特征:目标太模糊!”

某小组任务是编写图形函数库,这个库给另外 20 个左右的小组使用。但使用者对这个库并不满意:既笨重、BUG 也多。

他们组长认为自己小组的任务是: 为 MS-DOS 应用程序提供图形接口库

但这个库包含很多某个小组需要但其他小组不需要的特殊函数,因为只要有人提出需求,他都来着不拒,后果就是函数库越来越笨重。另外一个问题是函数库在发布新版本的时候还经常的修改函数名,因为他们发现了更好的名字或者要强调修改的差异部分。这会导致使用者更换新版本时会链接错误,让使用者无所适从。

只要在作出决定之前想一想,“我要在合格函数库能做到什么?项目目标是什么?”只要组长把目标整理的清楚些,整个项目的方向就会有惊人的改变,这个项目更具体化的目标是:为 MS-DOS 应用程序提供图形接口库,只包含对所有小组都有用的函数,并且保持版本向后兼容

项目失控最有可能的原因是小组之间工作上的相互依赖: 一方必须依赖另一方把工作做完才能进行自己的工作,而且若是彼此的配合或沟通不够好,整体工作必然受到不利的影响,依赖愈多,愈容易失控。使用共享函数库有很多好处,这是人尽皆知的事。但是身为组长的人,必须衡量是否该把这部分的程序代码放进项目中,所获得的好处与必须忍受的缺点——让其他的工作依赖于它, 孰轻孰重。任何领导者,必须牢记并且实践以下的座右铭:尽可能减少项目对其它组的依赖

5 努力要有收获

设定目标 就是把“你要完成的事”用清晰的语言描述出来,让每个人都有明确的概念

目标越是明确,达成目标的过程就会越有效率,因为你能马上拒绝任何与你脑海中的画面不符的东西;明确的目标之所以带来效率,正是由于它能帮你挡掉别的项目丢过来的不相干的垃圾,使你专注在本项目的策略性事项上。但是在开发过程中,庞大的压力迫使领导者没有时间思考,因而忽略了设定目标这么重要的事。不要因为工作漫无目标,而让你的组员长期加班、饱受压力,以至于他们的努力没有收获。

6 确定软件开发遵循的优先顺序

每一位程序设计师的侧重点并不相同,有人侧重执行速度,有人侧重代码尺寸,也有人侧重稳定性。如果程序设计师心目中理想的优先顺序与项目目标不一致,通常不会产出好的产品。作为管理者,你需要建立你们小组最适当的软件开发应遵循的优先顺序,并让所有人确实遵守。可以从以下侧重点中考虑:大小、速度、可靠性、安全、可测试、可维护、可移植。关键是你必须事先决定编码的优先级和质量标准,否则团队将不得不浪费时间重写错误或不合格的代码。

你可能听过很多极为成功的人士都有当机立断的倾向。如果普通人做出快速决策,大都是颜面尽失的悲惨下场。与普通人的区别在于,这些成功人士有 明确的目标清晰的优先事项。如果你给这些人一个问题或提议,他们会立即将其与脑海中铭刻的目标和优先事项进行比较,立刻就会有答案。他们目标和优先事项的清晰性也解释了这些人的另一个众所周知的特征:一旦做出决定,他们很少改变主意。改变主意意味着背叛他们的信念。这些成功人士实际上并不是在做出仓促决定——这个想法暗示没有经过思考。只是这些人对自己的目标和优先事项非常了解,以至于他们不必为不符合他们标准的事情浪费时间。结果是:他们不必花太多时间来做决定,而是花时间去做已经决定的事

7 严守基本原则

软件开发的基本观念:

  • 确定你要达成什么目标及如何去做,让每一位组员都明白目标,并专注地朝这个目标努力;
  • 确定开发遵循的优先顺序,以及相对应的指令规范指导。

这些都是很基本很简单的观念,但就是很少人能严格遵守。

要点

公司聘请程序设计师,是为了开发高品质的软件,但如果经常被杂事打扰、分心,就无法保持专注在真正该做的事情上。主管必须确定程序设计师能专心投入在具有策略价值的工作上,而不是打杂。凡是会阻碍软件开发的东西,主管应该毫不犹豫地把它排除。

然而,有很多杂事其实是无法避免的,大公司尤其如此,那就只好将它的负面效应尽量减少,方法是不断自问:“我到底想要完成什么?”、“我该怎么做才能既保持这件工作的好处,又能避免它的坏处?”要满足实质上的需求,而不是表面上的作业程序。

拥有明确目标所带来的好处虽然不是立竿见影,但没有明确目标所造成的混乱绝对是显而易见。没错,建立明确目标是一件费力又无趣的工作,但比起项目延误或失控的危险,肯定是值得付出的。请记住用户界面函数库例子,项目目标只要稍微改好一些,就会明显地减轻压力,项目目标再修正一次,问题就几乎都迎刃而解了。

每一位成员都必须有一致的软件开发应遵循的优先顺序,程序的可维护性是最重要的吗?可移植性?大小?速度?为了让软件符合项目的目标,必须让程序设计师明白本项目应遵循的优先顺序,这样他们在程序设计时才知道该如何取舍。同时,你还得对每一项优先考虑点事先建立质量规范指导,以避免到时候质量不合格又得重写部分程序,导致时间浪费和项目延误。越早定出质量规范指南,越能省时省力。






每一份打赏,都是对创作者劳动的肯定与回报。
千金难买知识,但可以买好多奶粉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特征映射(机器学习)

有时数据的分类并不像我们想象的那么简单,需要高次曲线才能分类。 就像下面的数据: 数据集最后给出: 我们这样看,至少需要达到2次以及以上的曲线才可以进行比较准确的分类。 比如如果已知数据有3列(两列特征) x1x2y-1-110.50.…

Axolotl

文章目录 一、关于 Axolotl特点Axolotl支持 二、快速入门⚡用法 三、环境设置1、Docker2、Conda/Pip venv3、Cloud GPU4、Bare Metal Cloud GPULambdaLabsGCP 5、Windows6、Mac7、Google Colab8、通过SkyPilot在公共云上启动9、通过 dstack 在公共云上启动 四、其他高级设置1、…

网站成长时间轴页面,网站发展记录页源码

一、源码描述 这是一款网站时间轴HTML源码,样式设计精美并且使用简单,主要用于记录你的网站发展历程,或者可以用于发布心情动态等,左侧年份可以折叠起来,页面底部是导航区域,可以自定义文本和链接。 二、…

Azure Repos 仓库管理

从远端仓库克隆到本地 前提:本地要安装git,并且登录了账户 1.在要放这个远程仓库的路径下,打git 然后 git clone https://.. 如果要登录验证,那就验证下 克隆完后,cd 到克隆的路径, 可以用 git branch -a //查看分支名 git status //查看代码状态 删除…

对于GPT-5在一年半后发布的期待!

首先,如果GPT-5真如OpenAI首席技术官米拉穆拉蒂(Mira Murati)在采访中所透露的那样,在一年半后发布,并在某些领域达到博士级的智能,这无疑将是一个令人振奋的消息。这一预测不仅反映了AI技术的快速发展&…

MPAS跨尺度、可变分辨率模式实践技术

跨尺度预测模式(The Model for Prediction Across Scales - MPAS)是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发,其由3个部分组成,分别称为 MPAS-A(大气模型)、MPAS-O(海洋模型&…

python实例练习00001:打开文件输出文件内容

try:file input(enter the file :)with open(file, r) as f:data f.read()print(data) except FileNotFoundError:print(fthe file {file} does not exists:) 打开windows的cmd运行程序,效果如下:

vscode常用组件

1.vue-helper 启用后点击右下角注册,可以通过vue组件点击到源码里面 2.【Auto Close Tag】和【Auto Rename Tag】 3.setting---Auto Reveal Exclude vscode跳转node_modules下文件,没有切换定位到左侧菜单目录> 打开VSCode的setting配置&#xff…

非法闯入智能监测摄像机:安全守护的新利器

在当今社会,安全问题愈发受到重视。随着科技的进步,非法闯入智能监测摄像机应运而生,成为保护家庭和财产安全的重要工具。这种摄像机不仅具备监控功能,还集成了智能识别和报警系统,能够在第一时间内检测到潜在的入侵行…

第七天 SpringBoot与SpringCloud微服务项目交付

Spring Cloud微服务项目交付 微服务扫盲篇 微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。 单体应用架构 如下是传统打车软件架构图: 这种单体应用比较适合于小项…

图像处理中的Scharr算子的原理,并附OpenCV和MATLAB示例代码

Scharr算子是图像处理中的一种边缘检测算子,主要用于计算图像梯度的边缘检测。与Sobel算子类似,Scharr算子也使用卷积核来计算图像的导数,但Scharr算子在精度和抗噪性方面表现更优。其原理如下: 原理 梯度计算 在图像处理中&…

服务器数据恢复—raid5阵列热备盘同步失败导致lun不可用的数据恢复案例

服务器存储数据恢复环境: 华为S5300存储中有一组由16块FC硬盘组建的RAID5磁盘阵列(包含一块热备盘)。 服务器存储故障: 该存储中的RAID5阵列1块硬盘由于未知原因离线,热备盘上线并开始同步数据,数据同步到…

Android C++系列:Linux文件系统(二)

1. VFS虚拟文件系统 Linux支持各种各样的文件系统格式,如ext2、ext3、reiserfs、FAT、NTFS、iso9660 等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式,然而这些文件系统 都可以mount到某个目录下,使我们看到一个…

如何提升运维管理的精细化管理能力

在当今这个信息化的时代,运维管理已经成为企业IT架构中不可或缺的一环。随着企业业务的不断扩张和技术的日益复杂,提升运维管理的精细化管理能力显得尤为重要。精细化管理不仅能够提高企业的运营效率,还能有效降低运维成本,为企业…

最新PHP自助商城源码,彩虹商城源码

演示效果图 后台效果图 运行环境: Nginx 1.22.1 Mysql5.7 PHP7.4 直接访问域名即可安装 彩虹自助下单系统二次开发 拥有供货商系统 多余模板删除 保留一套商城,两套发卡 源码无后门隐患 已知存在的BUG修复 彩虹商城源码:下载 密码:chsc 免责声明&…

05 以物品与用户为基础个性化推荐算法的四大策略

《易经》:“九二:见龙在田,利见大人”。九二是指阳爻在卦中处于第二位,见龙指龙出现在地面上,开始崭露头角,但是仍须努力,应处于安于偏下的位置。 本节是模块二第一节,模块二讲解传…

Python中的数据结构:五彩斑斓的糖果盒

在Python编程的世界里,数据结构就像是一个个五彩斑斓的糖果盒,每一种糖果都有其独特的味道和形状。这些多姿多彩,形状和味道各异的糖果盒子包括了:List(列表)、Tuple(元组)、Diction…

如何保证数据库和redis的数据一致性

1、简介 在客户端请求数据时,如果能在缓存中命中数据,那就查询缓存,不用在去查询数据库,从而减轻数据库的压力,提高服务器的性能。 2、问题如何保证两者的一致性 先更新数据库在删除缓存 难点:如何保证…

微信小程序,订阅消息

微信小程序,订阅消息,完整流程 1.选择需要的模版 2.前端调用订阅消息 注:tmplIds:模板ID模版id,这里也可以选多个 wx.requestSubscribeMessage({tmplIds: [7UezzOrfJg_NIYdE1p*******],success (res) { console.log(res);wx.g…

一款简单的音频剪辑工具

Hello,大家好呀,我是努力搬砖的小画。 今天小画给大伙分享一款强大的音频剪辑工具--【剪画】,无需下载就能使用,支持对MP3、M4A、AAC等多种格式文件进行剪辑、分割、拼接、混音、变声、淡入淡出、音频格式转换、视频转音频、消除…