别怪程序员——都是项目经理的错

现在有很多糟糕的软件。不可靠,不稳定,不安全,不可用。这些软件是如此糟糕,以致于有些人要求监管软件开发和限制专业软件开发人员为“软件工程师”,以便于软件工程师能够保持专业水准,避免因为疏忽或玩忽职守而被指责。

认可方式可以确保每个开发软件的人具备一定的知识和能力。但是,专业开发人员也不能保证良好的软件。即使是训练有素、经验丰富并全力以赴的开发人员,他们创建的软件,也不能保证都是良好的软件。这是因为大多数影响软件质量的决定,不是由开发人员下的——而是由企业中的其他人决定的。(比如这篇文章《软件开发项目失败的3个原因》提到的几个原因)

产品经理和产品负责人,项目经理和程序经理,执行发起人, CIO和CTO以及工程副总裁。这些人决定了什么是重要的事情,要做什么,不应该做什么,以及谁来做——哪些问题需要最优秀的人去解决,哪些工作可以外包以便于节约成本。决定雇佣和解雇的人,才是决定要花多少钱在培训和工具上面的人。

管理者——不是开发人员——决定了企业对质量的选择——哪里必须完美,哪里“差不多”就行。

管理误区

作为一个管理者,我在我的职业生涯中作过很多错误和糟糕的决策。不要求长期质量以降低成本。替团队签约却无法在最后期限前完成合同。让市场来掌控计划安排和优先事项,挤出更多的功能使客户和营销经理满意。不顾开发人员和测试人员告诉我的软件还没有准备好,以及没有足够的时间让他们做好事情。不管技术负债的增加。坚持现在或永远不交付,但是后来莫名其妙地就搞定了。

我从这些错误中吸取了经验教训。我觉得现在我知道构建良好的软件需要什么了。我会坚持这些理念。但是,我时常看到其他管理人员犯着与我相同的错误。即使是世界上最大和最成功的科技公司——微软和苹果也不例外。

这些巨鳄能够掌控潮流的走向。他们能够决定他们要创建什么,以及什么时候发布。他们有世界上最棒的工程天才。他们拥有所有钱可以买得到的好工具——并且如果他们需要更好的工具,他们可以为自己写出来。他们知道如何正确地做事情,他们有资金有规模,足以完成一个个挑战。

他们应该写出漂亮的软件。使用他们的软件时候应该是让人愉快的。但现实中却并非如此。而这不是工程师的错。

微软质量

微软的软件质量问题由于存在的时间长,以致于“微软质量”已成为一个公认的术语,意味着“差强人意”的软件,可以勉强被接受——虽然有时软件并不那么好。

即使在微软成为占全球主导地位的供应商后,质量仍然是一个问题。《Computer World》于2014年发表了一篇名为《At Microsoft, quality seems to be job none》的文章,抱怨Windows 10的早期版本有严重的质量和可靠性问题。Windows 10原本被认为代表了微软在其新的CEO的执掌下发生的一个翻天覆地的变化,是一个弥补过去错误,把事情做好的机会。那么为什么还是会出现问题呢?

由于一直以来推崇的“差不多”的软件文化和传统,微软似乎被困住了,无法改善这种情况,即使他们已经认识到,“差不多”的理念已经不适合这个时代了。这是一个深层次的企业和文化问题。是管理的问题。而不是工程师的问题。

苹果的软件质量问题

苹果和微软专注的技术领域不同,主要依赖设计和工程的卓越性赚钱。但是,如果说到软件,苹果也不比微软好。

从苹果地图,到iTunes和App Store不断涌现的问题,更新iOS安装失败的问题,iCloud数据丢失,严重的安全漏洞,没有任何意义的错误消息,莫名其妙限制使用的问题,苹果软件在很多基础的地方以一种尴尬的方式令人失望。

和微软相同,苹果的管理层似乎也陷入迷途中:

我担心苹果的领导层并没有认识到软件缺陷使得声誉受损的严重性,因为如果他们意识到的话,他们必然会做出重大改变以避免这种情况的发生。然而现在并没有,相反的,多个产品线的更新步伐似乎是正在扩大和加速。
我怀疑苹果软件的快速下滑,是一个表明现在的苹果将市场的优先地位摆得过高的信号:每年都发布一个重要的新版本,显然对于工程团队来说既要跟上速度,同时又保持品质是不可能的。也许你认为这是工程问题,但我怀疑不是——我怀疑没有任何一个工程团队能够在保证时间的同时,维持一个明显又更高的质量。
Marco Arment,《Apple has lost the functional high ground》,2015年1月4日

在今年的WWDC上,最新的公告显示,苹果正在提供更多的时间,以确保他们的软件质量。我们期待这或许是一个迹象,一个表明管理层已经开始理解质量和可靠性是多么重要的迹象。

管理人员:请不要重蹈覆辙

如果像微软和苹果这样的超级公司,有着这么多的人才和资金,依然不能创建出高质量的软件,那么我们这些小虾米又怎么能办到呢?很简单。不要再犯同样的错误:

  1. 将产品推向市场的速度和成本摆在其他任何事情的首位。督促团队像敢死队一样在期限前完成任务。喊着冲刺的口号:要求速度,不给团队正确做事的时间,也不给他们停下来反思和改善的机会。我们虽然得在期限和预算内开展工作,但在大多数情况下,企业还是有余地的。敏捷方法和增量交付提供了一条当你很难谈判最后期限或成本时的出路。如果你不能说不,那么你可以说“还不行”。铁面无私地安排优先工作,确保你尽可能快地发布重要的事情。并且由于这些事情的重要性,所以一定要确保做得正确。
  2. 从头到尾拒绝测试。这意味着结束之后,依然会残留没有修复的bug。也意味着交付延迟,因为bug太多。训练有素的敏捷实践依赖于测试——和修复——在你的编码过程中。 TDD甚至会强迫你在写代码之前测试。持续集成可以确保每次检查的时候代码都能工作。也就是说不让bug有任何可趁之机。
  3. 不与客户交流,也不早点测试点子。不去了解为什么他们需要软件,他们如何使用软件,他们喜欢软件哪里,哪里又是他们所讨厌的地方。递增式地发布,并获取反馈。按照反馈行事,并改进软件。循环往复。
  4. 忽略基本又良好的工程实践。装得好像你的团队不需要做这些事情,或没有能力和时间来做这些事一样,即使我们很早以前就知道正确地做事有助于更快地发布更好的软件。作为项目经理或产品所有者或企业老板,虽然你不需要成为软件工程方面的专家,但是如果你不能深入了解软件是如何构建的以及软件应该如何被构建这些基本原理,那么就作不出明智的权衡决策。关于如何才能做好软件开发的资讯很多,你没有理由不好好学习。
  5. 忽略警告标记。倾听开发人员的建议,当他们告诉你什么不能做,什么不应该做,或必须做什么事情的时候。开发人员一般都不太愿意和人扯淡。所以,当他们告诉你,他们不会做某件事,或者不应该做某件事的时候,一定要注意。

当你犯错误的时候——别否认,你一定会犯错误,要从中吸取经验教训,不要浪费这个学习的机会。当出错的时候,让团队来审查以搞清楚出了什么问题,为什么,以及如何可以做得更好。从纠错审查和测试中学习。认真对待客户的负面反馈。这是很重要的信息。所以要重视。

作为一个管理者,你能做的最重要的事情是不要带领你的团队走向失败。这要求并不过分,并且也不需要你做太多。

别怪程序员——都是项目经理的错相关推荐

  1. 写给想通过程序员转型为项目经理的人

    写了这么多硬技术文章,今天转一篇在blog.joycode.net看到的软技术文章,对想通过程序员转型为项目经理的人有一些用处. 广为流传的一个关于项目管理的通俗讲解 古老虾 发表于 2005-11- ...

  2. 新手程序员快速升职项目经理(程序员小故事1)

    (刚编的小故事,希望对新入门的程序员有所帮助) "英雄"无用武之地 小谢今年从XX大学计算机专业毕业,和很多大学生不一样,小谢在学校没有将时间用于开黑玩游戏.谈恋爱,而是将时间都用 ...

  3. 程序员当上项目经理的时候!来看看项目经理的素质模型!

    ✎ 1. 素质模型的作用  谈素质模型是一件很严肃的事情.因为素质模型就像一面镜子,项目经理拿来一照,可以发现自己的优势和弱点.只有扬长补短,才能在职业发展之路上步步高升. 管理方面的素质模型很多,但 ...

  4. 如何从程序员转型为项目经理

    当你预期的那一天,也许是你害怕的那一天,终于来到了:从工程师的队伍里,你被提拔到了软件项目领导或者团队领导即项目经理的位置. 这也许就是你选择的职业道路,或许你不太情愿,将就尝试一下.无论在哪种情况下 ...

  5. 程序员如何晋升项目经理?

    在IT行业,程序员如果想要进阶,晋升为项目经理是一个不错的选择.晋升项目经理需要具备哪些能力呢?下面简要介绍一下. 一.技术能力 作为程序员,个人技术能力是晋升项目经理的必备条件之一.优秀的技术能力可 ...

  6. 一般项目中哪里体现了数据结构_优秀程序员都应该学习的数据结构与算法项目(GitHub 开源清单)...

    前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 强烈推荐 GitHub 上值得前端学习的数据结构与算法项目,包含 gif ...

  7. 每个程序员都应该尝试的项目,看了都说好!

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Be yourself and stay unique. Your ...

  8. 每个程序员都应该知道的10件事!

    如果你已经编程了一段时间,并且想学习编程,那么你可能在想什么才是一个好的程序员?计算机科学与技术专业毕业生能做些什么,来为软件开发职业生涯做准备? 在本文中,我将分享10件我认为每个程序员都应该知道的 ...

  9. 老程序员都去哪儿了?

    摆在老程序员们面前有三条路,一是转行,二是继续钻研成为技术大牛,三是转型为管理人员. 我最近采访了十五位30岁以上的老程序员们,在此我想发表下我的观点. 网络上总有这类观点-- 「如果所有的技术都想着 ...

最新文章

  1. c语言scanf结果在printf前,C语言中的scanf与printf
  2. 第十六届全国大学生智能汽车竞赛 讯飞智慧餐厅组别 全国选拔赛成绩公布说明
  3. GoEasy导入依赖的时候报错,包用不了,maven导包
  4. “记录”是给世界做积极贡献的一种方式
  5. 万字长文!java读取json文件数据给对象
  6. 认识Web.config文件
  7. GDI+ 学习记录(31) 图像颜色变换(TGPImageAttributes)
  8. treeset 是有序吗_TreeSet如何实现有序?
  9. 解决:modal中datePicker 选中时,会触发modal的hidden.bs.modal事件
  10. mysql+keepalived实现双主自由切换
  11. 将老电脑从windows xp系统升级到10//将win10 32位系统更为64位
  12. java毕业设计医院管理系统Mybatis+系统+数据库+调试部署
  13. ModuleNotFoundError: No module named ‘keras.api‘解决
  14. Python——爬取单章小说内容
  15. Matlab中ind2sub函数的使用
  16. 【SQL】模糊查找(like)
  17. Python 制作、发布与安装模块
  18. 学校计算机操作培训方案,学校信息化培训方案.doc
  19. 计算机应用基础教学实训计划,计算机应用基础学习计划.docx
  20. 手把手教你搭建Bert文本分类模型,快点看过来吧!

热门文章

  1. java三手交换智能下棋代码,基于Java的六子棋人工智能系统的设计研究
  2. Git将一个分支完全覆盖另一个分支的操作方法
  3. elasticsearch -- win10 elasticsearch.bat闪退
  4. luogu P1941 飞扬的小鸟
  5. HackTheBox-baby todo or not todo
  6. UnityShader-高斯模糊
  7. 发邮件怎么把附件内容直接显示_一年一度调剂忙,且看招生老师怎么说
  8. [ACNOI2022]我不会GF啊
  9. Linux:centos7安装下载工具aria2
  10. 代码签名是如何工作的,为什么需要代码签名?