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

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

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


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


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


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


1、赢家与输家


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


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


—— Charles Ellis


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


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


—— Charles Ellis


2、软件开发游戏


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


我为什么这么说?


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


标准

单元测试

设计模式/ SOLID原则

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

修复构建

代码审查

代码分析/解决方案检查

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


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


—— Charles Ellis


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


3、业余玩家


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


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


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


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


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


4、本末倒置


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


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


—— Charlie Munger


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


5、Bug的成本


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


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


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


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


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


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

目录
相关文章
|
5月前
|
存储 搜索推荐 程序员
SnippetsLab:程序员的秘密武器
SnippetsLab:程序员的秘密武器
157 0
|
设计模式 算法 程序员
代码能力,程序员自我修养之基石
提高代码能力不是一蹴而就的事,需要我们不断努力,通过持续学习和练习、参与开源项目、阅读优秀的代码、与他人合作、提升解决问题的能力等方式,提高自己的代码能力,为自己为公司创造价值。
218 0
代码能力,程序员自我修养之基石
|
测试技术 程序员 网络安全
软件测试前途如何?要学吗?
软件测试前途如何?要学吗?
|
前端开发 程序员 pouch
程序员最重要的八种软技能
笔者在带团队的六年中发现,程序员们在职场都有一个共同的困扰:“好像写代码都没什么问题了,日常工作基本上都是应付业务需求的开发,好像找不到其他的更大的附加价值了,我应该找一些什么样的发力点才能让我的价值更突出呢?” 。笔者以为,这就是典型的硬技能当下「看似」没有什么问题了,瓶颈卡在了软技能上。所以开篇做个小分享,聊聊程序员的软技能。
41568 18
程序员最重要的八种软技能
|
传感器 机器学习/深度学习 Kubernetes
2023年的程序员将何去何从
2023年的程序员将何去何从
|
敏捷开发 架构师 测试技术
软技能2:软件开发者职业生涯指南-读书笔记
整书有很多内容,从成为一名软件开发者一直到完整的职业生涯,这里只是记录自己阅读过程中感受最深或者最受用的部分。
|
SQL 运维 NoSQL
35岁后程序员该何去何从?
你所处的行业在什么样的产业周期?你的能力是否被当下的行业所需要?你当前想要什么?你长远想要追求什么?
1086 0
35岁后程序员该何去何从?
|
分布式计算 算法 NoSQL
如果说程序员的硬通货是技术,那么软技能是什么?
程序员往往一心扑在编程技术上面,学习编程语言,算法,网络,自己子领域相关的知识等等。这非常正确,也是作为coder的核心竞争力所在,姑且称之为“硬技能”吧。 对于有一个程序员来说除了日常码代码之外,其实也需要很多编程之外的软件能,非专业上面的技能可以更好的展现你的情商,与人合作的能力等。
|
程序员 开发工具 IDE
对程序员非常重要的24个软技能
英文原文:Soft Skills are so important to Software Engineers   软技能通常是被低估的。几乎所有的软件工程师都知道要关注技术的提高,但你忽视的软技能很可能会影响你的职业生涯。
1085 1
下一篇
无影云桌面