导读:互联网+时代,随着业务复杂度的不断提升,高效高可靠的保障企业级软件质量,杜绝各种运营事故和安全风险,是所有互联网企业面临的严峻挑战。
2019 年伊始,任正非公开信《全面提升软件工程能力与实践,打造可信的高质量产品》宣布华为决定投入 20 亿美元全面提升软件质量,刷爆了 IT 技术人朋友圈。对软件质量的高度重视与极致追求,可谓互联网+时代企业的呐喊心声!
本文为资深架构师 Eduards Sizovs 从工程师角度对质量重要性的思考,供参考。特别感谢译者胡八的贡献,文末有福利!
Why Quality Is Important ?
每个人都知道软件质量很重要,但当我问为什么时,许多开发人员都回答不上来。在这篇文章中,我将讲述为什么我们应该关心质量以及追求技术卓越的三个理由。
质量是精进
对于任何一个开发人员来说,关键需求都是希望自己有提升,也称为精进。开发人员喜欢以“正确的方式”做事情,并坚守他们的质量标准。
为了吸引优秀的开发人员,你应该立志营造一种追求技术卓越的文化氛围,在这种氛围当中,软件质量是不接受妥协的。
根据 HackRank[1] 的调查报告,当开发人员决定接受哪个 Offer 时,主要的选择标准是职业成长和学习。这个结论适用于初级和资深开发人员:
比起商业领域,公司声望,甚至报酬,开发人员更在意的是职业上的精进。我总是会选择一家有大师可以向之学习,并且还能享受在一个精心设计的代码库工作的公司。
让开发人员在职业上不断成长,向大师们学习,并以最高的质量标准工作,这样你就可以吸引最优秀的人才。好事不会迟到。你的员工会把你的好口碑口口相传,吸引更多志同道合的专业人才。
A players hire A players.
一流人才会雇佣一流人才。
相反,在软件质量上妥协,会导致员工质量的下降。基于糟糕的代码库工作是一种折磨。在压力下走捷径是一种耻辱。持续退化是职业自杀。没有任何身心健全的人愿意去受这种苦,所以到最后你请不到任何优秀的程序员。
给高薪只会让事情变得更糟糕——你靠高薪吸引来的人只会做你想做的事情,而不是去做需要做的事情。B 等选手雇佣 C 等选手。C 等选手雇佣 D 等选手。不需要很长时间你得到的就是 Z 等选手了。平庸的文化就是这样出现的。
如果你想吸引新的开发人员并留住最好的员工,那么就要把质量放在首位。
质量就是速度
质量和速度并不冲突。高质量的代码可以提高开发速度。没有开发人员会说–“垃圾的代码库让我工作起来飞快!“。每一个优秀的开发人员都知道,基于一个好的代码库去工作会使我们开发地更快,因为我们大部分时间都在读别人的代码。
一些专家声称,读代码和写代码的时间比例远远超过 10:1。因为整洁的代码阅读起来更容易,所以写整洁的代码是一项合理的投资。代码写得越容易读懂,写起来也会越容易。这是利润丰厚的一种投资!
但这里有一个细微的差别。
我们在质量上投入了时间,因为我们希望防止坏事情随着时间的推移而累积,导致开发变得缓慢和不可预测:
但如果我们只是要做一个一次性的原型或者一个假门实验[2]呢?
译者注:「假门实验」旨在低成本地去决策一个创意是否值得去做。大概分为4个步骤:
1.快速做出一个原型(比如一个简单的注册页面)2.导入用户流量(比如在Facebook,Google投广告)3.有意愿的用户会去填一些基本信息然后点击注册按钮,但看到的是一个Fake的页面4.你收集到了访问页面以及愿意注册的人数,借此来判断产品是否值得进一步开发。
在这种情况下,坏事情并不会累积,因为我们最终会把代码扔进垃圾箱。有时候遵循严格的工程标准可能不是最好的主意。在你知道什么是对的事情之前,先去做对的事情是没有意义的。快速做出来,交货,然后就删掉。
一旦确认了你的想法是靠谱的,并且想要做一个可持续的、长期的生意,你最好用正确的方法去建设。现在你在跑马拉松,而不是最后的冲刺。记住,从长远来看,走得好,才能走得快。
质量来之不易
为了保持长期的快速迭代,我们需要注意质量。但为了长期收益而放慢速度的代价非常高昂。唯一的解决办法是学习能够让我们能快速产出高质量结果的技能。
例如,测试驱动开发(TDD)可以带来更好的质量。但是要以 TDD 方式快速去工作,你需要多年的实践。完成一组斐波那契代码并不意味着你掌握了 TDD。生产代码不同于简单的几行代码——生产代码量巨大,有时还比较混乱,部分代码还是喜欢用静态方法的人写的,但此人已经被炒掉了。
当你开始在生产代码库上应用 TDD 时,你的生产效率就会下降。迫于压力,人往往会放弃 TDD 来恢复生产效率,因为TDD学习会减慢你的速度:
我们常常忘记,要想成功,必须要有牺牲,必须在艰难的过程中勇往直前,努力达到下一个职业精进的高度。但这并没有捷径。达到精进的唯一途径是牺牲、纪律和多年的实践。质量来之不易。
质量就是声誉
你的工作质量表明了你对队友和那些在你离开项目后将在代码库工作的人的关心程度。你做的事情代表了你,而不是那些你宣扬的你所做的事情。如果你想让别人把你当作一个专业人士来对待,那么就要做专业的事情。也就是说,做高质量的工作。
如果你在一个团队工作,你应该关心你的队友。如果你的队友正在远离家人加班,在拼命地去帮你填坑,而你却在度假,那么你就不是一个好的队友。如果你想让你的这些犯罪受害者在他们的圈子里推荐你,那你就别想了。
皮特,你这人坏透了©美国电影「上班一条虫」
你的声誉更重于你。如果有人发现你抄了捷径,你马上就成了一个低标准的人。以后人们就是这样看待你的。马虎草率的工作态度成为你品牌的一部分。要建立一个完美无瑕的声誉,你必须多年来一直有高质量的产出。一次马虎的工作就能毁了你的名声。这是一条单行道。
当你不在场的时候,别人对你的评价就是你的品牌。
画好自己的红线。一切都是灵活的——项目范围、时间、金钱,但质量不是。无论别人在做什么,自己的事情都要尽力而为。你的价值是由你所做的事情决定的。失业总比失去声誉好。在质量问题上不要妥协。做一个注重质量的人。
•质量是精进•质量是速度•质量来之不易•质量是声誉
References
[1]
原文链接:https://sizovs.net/2019/05/29/quality-is-not-negotiable/[2]
HackRank: https://research.hackerrank.com/developer-skills/2019[3]
假门实验:https://uxknowledgebase.com/fake-door-testing-48af0616185a
- 推荐学习 -
BAT、TMD 等一线互联网企业如何保障企业级软件质量?软件测试人才应当具备哪些技能?
能根据测试需求,自主设计研发自动化测试工具和平台,解决业务痛点,并能通过 DevOps、持续交付保障系统长生命周期的软件质量,这是优秀测试开发工程师的必备技能,也是当下企业对高级测试和质量保障 QA 人才的基本要求。