作者 | Ben Hoskin

译者 | 弯月

出品 | CSDN(ID:CSDNnews)

首先,我并不是说软件开发人员都是输家,我想说的是,大多数软件开发人员都没能赢得软件开发,他们都被软件开发打败了。

开发人员的痛点在于,他们不知道自己面对的是什么游戏,或者说他们不知道应该采用哪种战术。

你必须知道软件开发是何种游戏,才能在游戏中获胜。

在编写代码的过程中,重点不在于代码是否会出错,而是代码何时会出错,以及如何通过最简单的方法修复错误。

赢家与输家

Charles Ellis曾撰写过一篇文章《Loser’s Game》,他指出,职业网球是赢家的比赛,即选手利用自己的技能主动赢得比赛。而业余选手会使用不同的策略避免自己失误,然后等待对手出现失误,从而自己打败自己。

“在专业网球比赛中,80%的得分是赢得的;而在业余网球比赛中,80%的得分是输掉的。换句话说,职业网球是赢家的游戏,即最终结果取决于赢家的活动;而业余网球是输家的游戏,即最终结果取决于输家的活动。这两种游戏的基本特征完全不同,甚至是相反的。”

—— Charles Ellis

游戏虽然相同,但你需要根据对手选择有效的策略:

“专业网球就是我所说的赢家游戏。赢得分数更多的一方选手获胜,也就是说并不是看哪个选手得到的分数更高,而是看哪个选手赢得的分数更高。Ramo发现业余网球则完全不同。业余选手很少打败自己的对手,但是他们会自己打败自己。在这样的比赛中,得分更高的选手获胜,但他得分更高是因为他的对手输掉的分数更多。”

—— Charles Ellis

软件开发游戏

我从事软件开发工作已20载有余,曾与许多软件开发人员一起从事过许多项目。我认为80%的开发人员都是业余玩家,只有20%的是专业玩家。

我为什么这么说?

业余软件开发人员不喜欢:

  • 标准

  • 单元测试

  • 设计模式/ SOLID原则

  • 学习和设置开发运维和产品生命周期管理(他们喜欢使用)

  • 修复构建

  • 代码审查

  • 代码分析/解决方案检查

如果你想毁掉一个开发团队,那就不要执行上述步骤,因为团队中的大多数开发人员都不是专业人员。

“避免犯错的方法是保守行事,想办法让比赛继续下去,给对手充裕的机会出现失误,从而自己打败自己,因为业余选手玩的是输家的游戏,而且他深陷其中却不自知。”

—— Charles Ellis

大多数开发人员都会低估编写代码的难度,同时还会高估自己的能力。他们以为编写代码非常容易,而且编写好的代码第一次运行就可以成功。

业余玩家

如果大多数开发人员都是业余玩家,那么我们就应该将软件开发视作输家的游戏,竭尽全力减少业余玩家容易犯的错误。

业余开发人员的目标是写代码,其他活动都会降低开发的速度。上述提到的其他步骤就是为了创建简单的代码,更快地发现错误,并注意提高质量。产品生命周期管理/开发运维可以快速地完成部署,而且还不容易出错,从而实现快速反馈。

快速编写代码的最佳方法是专注于质量和减少错误,而不是更快地编写代码。

项目和开发团队的规模越大,为bug和错误所付出的代价就越沉重。大型团队的问题可能会导致很多人的进度延误,而实施上述列表中的活动可以让我们集中精力处理阻碍。

我曾经历过一些项目,直到项目后期才发现的一些bug导致用户失去信心,并给上线带来了风险。

本末倒置

我们的目标不是编写有效的代码,而是花时间避免编写质量低劣的代码和bug,否则就会本末倒置。

“对于你我之辈来说,难得的不是一时的聪明,而是坚持不做蠢事。”

—— Charlie Munger

业余开发人员认为,快速编写代码是最有效的创建产品的方法。如果方法庞大,代码复杂,则代码库会越来越复杂,而且每添加一行代码开发工作就会更加困难。这种方法仅适合只有1~2名开发人员的小型项目。

bug的成本

从代码编写完成开始,发现bug的时间越晚,修复所需的时间就越长。举个例子,如果你发现了生产中的某个bug,那么首先你必须设法复现bug,并搞清楚bug发生的原因,修复bug,并通过每个环境的部署和测试,最后才能进入生产。

如果在单元测试中发现相同的错误,则可以快速修复,同时还不会影响到其他开发人员和测试人员。

我们可以在开发过程中添加一些简单的步骤来找出bug,在软件开发这个游戏中,bug会浪费大量时间,并消磨掉客户的信任。

如果我们知道大多数开发团队的成员都是业余玩家,他们很容易犯错并导致自己甚至团队的失败,那么我们就更加应该重视防止bug,而不是假定每个人都是专业的开发人员,每个人都可以编写出色的代码。

赢得软件开发这场游戏的关键,不在于第一次就能创建正确的代码,而在于避免失败的各种方式。

“专业人士靠主动赢分获胜,而业余人士靠对方丢分获胜。”

—— Charles Ellis

原文链接:https://thehosk.medium.com/software-development-is-a-losers-game-fc68bb30d7eb

声明:本文由CSDN翻译,转载请注明来源。

2020-2021中国开发者调查报告重磅来袭,直接扫码或微信搜索「CSDN」公众号,后台回复关键词「开发者」,快速获取完整的报告内容!

软件开发打败了80%的程序员相关推荐

  1. 软件开发打败了 80 %的程序员

    作者 | Ben Hoskin 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 首先,我并不是说软件开发人员都是输家,我想说的是,大多数软件开发人员都没能赢得软件开发,他们都被软件开发打 ...

  2. 这个有争议的软件开发方法,陪伴一代程序员走过了 18 年

    作者:熊节 / 插画:虎头锤 一.生于滑雪度假村,它的名字叫敏捷 敏捷是一种重视质量.追求快速反馈的软件开发方法. 2001 年 2 月,美国犹他州雪鸟滑雪度假村,"敏捷软件开发联盟&quo ...

  3. python怎么做软件开发有前途吗_Python程序员就业行情以及前景分析

    最近Python大热,就想要分析一下相关的市场需求,看一下Python到底集中在哪些城市,企业对Python工程师的一些需求到底是怎样的,基于此,爬取了国内某招聘平台的相关数据,获取到30000+条相 ...

  4. 总结两年半银行软件开发外包项目历程-JAVA程序员

    记得是2011年3月,但忘记是哪一天咯,和一个要好的同学准备启程去深圳找工作,说实在的,现在想想当时还是蛮有勇气的,自己虽说学习计算机专业的,可大学里面被我混提了,皮毛都没有学到,毕业后竟想要做开发, ...

  5. vc6开发一个抓包软件_惊奇软件[21]:这是一个程序员开发的背单词网站,可好用了!...

    惊奇软件 未经授权禁止转载 正文--------------------------------- 哔哩哔哩小破站的UP主们就是厉害...... 就在前几天,小编我想找一款背单词的软件(某百词用的有点 ...

  6. 80后程序员必须知道的编程语言和它们的创造者

     标题怎么想都没办法写段一点,于是还是这么长吧.程序员的世界里,软件开发领域里有许许多多编程语言.在这里,不断有新的编程语言在诞生,如 Scala.Go.Closure 等,也不断有老的编程语言慢 ...

  7. iPhone开发入门(1)----程序员眼中的iPhone

    自去年 iPhone 面世以来,开创了移动设备内容服务的一种新的模式--程序商店(App Store).它极大地降低了移动设备应用程序开发的成本,即使普通人也能进入这个市场.就像在PC上开发应用程序一 ...

  8. Scrum: 在软件开发中应用80:20规则

    在软件开发中应用80:20规则 我们喜欢简单的经验法则,越简单越好.最有用的经验法则之一是80:20规则: 80%的影响来自20%的原因,80%的影响来自20%的努力. 这意味着 :通过更聪明,更努力 ...

  9. iPhone开发入门(1)—-程序员眼中的iPhone

    http://blog.csdn.net/itudou_2010/article/details/5492272 iPhone开发入门(1)--程序员眼中的iPhone 博主:易飞扬 原文链接 : h ...

最新文章

  1. 第二章:二分和前缀和 【完结】
  2. 有什么产品工作,可以每天摸胸,还不用冒生命危险?
  3. pip导包CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘异常处理
  4. html实现“加入收藏”代码
  5. 点云数据增强及预处理
  6. 阿里云的yum源配置
  7. 2017.08.18【NOIP提高组】模拟赛B组 沙耶的玩偶(doll)
  8. 2018年上半年阅读总结(系统架构师)
  9. VS Code | setting.json配置
  10. Failing because I am unlikely to write too排查方案
  11. 智力题:1000瓶酒.10只老鼠.有一瓶酒有毒,每只老鼠可以喝无限多的酒,如何测一次就找出哪瓶酒有毒
  12. POSCMS 后台安全
  13. 用python进行进制转换(二十六进制)
  14. 一例用方错误的女子咳则遗尿案
  15. 数据库实验报告 创建学生关系数据表、课程表、选课表 SQL Kingbase
  16. fgetc, fgetchar 的区别
  17. 掌握JS中的“this” (一)
  18. arcgis做土地利用转移矩阵(直接用栅格数据)
  19. libnet安装配置
  20. 音频PCM数据的单声道、双声道之间的转换

热门文章

  1. 【机房重构】关于App.config配置文件
  2. 作为技术工程师,到底需要怎样的专业能力
  3. 解决网页中Waiting (TTFB)数据加载过慢的问题
  4. 你真的搞懂ES6模块的导入导出规则了吗
  5. 知道端口号如何查看应用位置
  6. linux驱动初探之字符驱动
  7. explict关键字
  8. 关于RMAN recover 过程的讨论
  9. spark节点安装numpy(在线方式,最简洁方式)
  10. 查看各类型数据库版本的SQL(Oracle/DB2/SQL Server/PG/MySQL)