技术债务真正的代价

无论你是否喜欢把它想成技术债务或是对冲期权,在我们的周围都充斥着糟糕的代码,糟糕的决定,以及这些东西给我们每天的生活带来的影响。但是这些决定所带来的长期影响会是什么?我们真的做了明智的选择吗?Martin Fowler谈论了技术债务的四种类型:从鲁莽的、故意的到偶然的、谨慎的。

故意不计后果的债务

故意不计后果的技术债务就是这样的:开发者(或者他们的经理)会允许那些只可能带来坏结果不可能带来好结果的决定被通过—例如,放弃TDD或者不用任何设计。无论从什么角度来看,这种做法都是非常不专业的。如果开发人员不能做出正确的选择,那么管理者就应该介入,并带入一些能够做明智选择的人进来。 Michael Norton将这称为“令人讨厌的行为,而不是技术债务”。如果我们不能从中受益,并且只是简单地完成任务,写一些糟糕代码,那么这根本不是技术债务,这是垃圾。

The true cost of technical debt 2

不易察觉的债务

不易察觉的技术债务比较有趣。如果我们不知道有更好的东西,我们又怎么会去做一些改变呢?工业标准和最佳的实践都在不断发展。我确定曾经某段时间EJB被认为是很好的组件模型,但现在它绝对被认为是不折不扣技术债务。当前的最佳实践方式很容易就变成未来的垃圾代码。

当开始时,如果我们就已经有了这个领域的知识,或者可能我们从未在这个领域工作过,没有这个领域的知识,可能设计出来的东西会不太相同。有些时候技术债务是不可避免和必然发生的。

谨慎故意的债务

接下来是谨慎而有意的技术债务,这种情况下,我们会有意做一个决定来增加技术债务。这里就有一个再普通不过的决定:

“不管怎样,我们要达到这个季度的目标利润。

我们的市场工作已经开始,所以我们必须在短的时间内抢占市场。

我们已经承诺了交货日期,所以没有太多时间给我们去犯错误。”

有时,我们必须做一些妥协:通过降低工作成果的品质,我们可以更快的完成工作,但我们会稍晚时候付出代价。

不同于其它的技术债务,这是一种特殊的技术妥协。我们故意做决定让代码质量比我们能够达到的质量要差。我们知道这会在以后让我们慢下来;我们知道我们需要回来重做,在所谓的“二期工程”里完善它;但是为了在规定的时间内完成任务,我们接受妥协。

它始终都是正确的决定吗?

1.妥协在短期来看更快,但在长期来看其实更慢

在我们现在就需要的东西与后续可能产生的不明的债务之间做选择时—显而易见,我们始终都会选择妥协。

2.每个妥协都看似渺小,但它们积累起来却非常庞大

不管有多少人都经历过“欠债”,技术债务都会积累起来。我们所做的每次妥协都会增加已有债务的代价。这意味着,每次妥协的代价可能很小,但积累起来后它们会产生巨大的影响。

一开始,我决定不重构一些代码。下一轮时,由于没有很好的重构,很难测试代码,所以我跳过了一些单元测试。第三轮时,我的测试覆盖率非常低,所以我没有信心进行扩展性重构。现在,这段程序真的变得很难测试也很难修改。我的代码在一点一点地,越来越快地恶化。每个妥协都堆积在以前的妥协之上,而且将它们放大。每次妥协看似影响很小,但它们累加起来却让人大伤脑筋。

The true cost of technical debt 1

3.长期的代价很难被量化

当我们同意不重构一段代码时,当我们同意留下一些半成品时,当我们同意为了急于通过测试而采用最小测试项时:这真的很难去估计长期的代价。当然,我们能够估算如何做是正确的—我们知道什么是“真理”。但是,我们如何去估计成本的支出?特别是当它们积累起来时。

我怎么能估计为了解决复杂问题而浪费的时间?时间的损失有可能是因为一个非常难以追查的bug。额外花费的时间可能是因为下一次我无法很容易地重构代码;或者是因为下一次我不敢重构代码,但额外的债务使我不得不这样去做。我怎么可能去量化这个问题?

在IMVU,他们发现他们:

“至少低估了一个量级的技术债务的长期代价”

它始终都是错误的吗?

这里有一些很明显的例子,它们都在产生技术债务;或者至少做得有些不称职。如果你想在客户面前展示一个新特性以判断其是否有价值,那么它不需要很完美,它只需要迅速地出现在那里就行。如果新特性对客户没用,那么你将其删除。你节省了将其做“完美”的成本,并迅速获得了你所需要的信息。这显然是符合成本控制的,是一种管理开发过程的简易方式。

The true cost of technical debt 3

但是,如果展示的这个特性获得成功了呢?那么,你需要制定一个计划清理它,重构它,确保它产生足够的文档并被充分的测试。这就是债务。只要你有一个删除它的计划,无论这个特性是有用或无用—那么这是一个完美而有效的方式。但如果不是这样,那么这个半成品特性可能需要数年时间去构建代码。

不同的是,我们会有一个计划来消除债务。多久我们就会接受一个模糊的承诺“我们会回过头来修复它”,或者,“我们会在第二阶段完善它”。我的墓志铭应该是“现在开始第二阶段的工作”。

在代码中留下债务,且没有任何消除债务的计划,就像一个家伙用一张信用的钱去还另一张信用卡的钱。你让债务产生,而不去处理它。没有偿还债务的计划,你最终将走向破产。

技术债务的风险

也许技术债务最大的危害是它代表的风险。技术债务使得我们的代码更加脆弱,不太容易修改。当我们最近讨论这个问题时,正如@bertvanbrakel所说:

“技术债务会使代码变得僵化”

在我们代码上堆积的债务越多,代码就越难改变。这种僵化会带来最大的风险:我们无法足够快速地改变代码。如果竞争环境和监管环境突然变化?如果一个新的竞争对手出现,彻底改变了我们的行业,我们需要多久才能赶上?如果我们只有一个僵化的代码库,在我们花2、3或4年时间赶上竞争对手时,我们又能得到什么呢?

当然这是指的最坏的情况,这种灵活性的缺失(缺乏创新)会一点一点地损害公司。一旦一个革命性的公司变成老古板,无法作出反应,并只释放衍生产品。当公司发现自己无法创新,跟不上不断变化的局势—它们就会变得无关紧要。这也就是技术债务真实的代价。

没有一个偿还技术债务的计划,没有可靠的办法来估计它所带来的长期成本,我们真的可能做出谨慎而故意的决定吗?这种轻易就能增加技术债务的决定做得是否太草率了呢?


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

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

相关文章

Java 8 Stream的性能到底如何?

Java 8提供的流的基于Lambda表达式的函数式的操作写法让人感觉很爽,笔者也一直用的很开心,直到看到了Java8 Lambda表达式和流操作如何让你的代码变慢5倍,笔者当时是震惊的,我读书少,你不要骗我。瞬间我似乎为我的Serve…

【linux】使用swap文件恢复非正常关闭的文件

前言 使用vim的时候,文件编辑过程中可能会出现bug,导致非正常关闭。为了保存刚刚修改的内容,需要对文件进行恢复。 操作过程 1.查看目录文件 zrjzrj-ThinkPad-E470:~/work/code/facedetection/src$ ll total 48 drwxrwxr-x 2 xxx xxx 4096 S…

js中比较时间字串大小

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 var start Date.parse($("#str_atBeginDate").val().replace("-","/"));var end Date.parse($("#…

MySQL运维系列 之 如何监控大事务

long transaction背景 大家有没有遇到这样的情况 某个SQL执行特别慢,导致整个transaction一直处于running阶段某个Session的SQL已经执行完了,但是迟迟没有commit,一直处于sleep阶段某个Session处于lock wait阶段,迟迟没有结束以上…

再见腾讯,创业我来了!!!

发现好久没有更新博客了,确实自从进了腾讯以后博客写的寥寥无几,一来是忙,而来是写博客没以前那么有成就感了。但是今天在半夜我又鬼使神差的想写了,因为尼玛欧冠巴萨 VS AC米兰还有将近一个小时,哥实在是等的蛋疼。有…

“docker-app”实用工具分享,大大提高 Compose 文件复用率

本文首发自“Docker公司”公众号(ID:docker-cn)编译丨小东每周一、三、五 与您不见不散! Docker Compose 在开发人员中非常流行,它用来描述应用程序。目前,GitHub 上有超过30万个 Docker Compose 文件。通过…

9.11学习笔记

备注&#xff1a; <span class"kp"> <a href""></a></san>a 是特殊的 要改变a里面的颜色&#xff0c;必须直接给a设置&#xff0c;给a的父级设置不行 属性继承&#xff1a;明明是父级上设置样式&#xff0c;结果后代标签也跟着发生…

bootstrap-validator 验证一个标签同时验证另一个指定标签

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如图 验证 str_atBeginDate 同时把 str_atTermDate 也作一次验证&#xff1a; 注意 红框中 " value “ 不能少&#xff0c;我之…

solr基本查询和高级查询

查询参数常用&#xff1a; q - 查询字符串&#xff0c;必须的。fl - 指定返回那些字段内容&#xff0c;用逗号或空格分隔多个。start - 返回第一条记录在完整找到结果中的偏移位置&#xff0c;0开始&#xff0c;一般分页用。rows - 指定返回结果最多有多少条记录&#xff0c;配…

送给“苦逼”的IT人系列

送给“苦逼”的IT人系列1&#xff1a;IT人的“钱”景以及收入的两道坎 虽然IT工作五花八门&#xff0c;而且年纪有老有少&#xff0c;但IT人的收入总体还是比较有规律的&#xff0c;很明显的可以看出有两道坎&#xff0c;分别是10W&#xff0c;和30W&#xff0c;当然&#xff…

锐动SDK应用于行车记录仪

方案架构手机端直播与录播功能忠实记录旅途中各种突发事件&#xff0c;还原事实真相&#xff0c;与家人和朋友分享沿途美景&#xff0c;一同感受美妙之旅。强大的视频编辑功能&#xff0c;像编辑图片一样给视频添加各种滤镜&#xff0c;配音&#xff0c;配乐&#xff0c;标题文…

Angular4 存储访问路由栈信息

一、实现方法1.可以通过路由守卫&#xff0c;可以给父级路由添加&#xff0c;若无父级路由&#xff0c;则需要每个路由都需要添加守卫&#xff0c;即每个页面都需要调该方法例如&#xff1a;jdb-app端上的tool.service.ts是每个页面都会调取的方法&#xff0c;可以将监听路由函…

python基本语法:字典

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、数据类型和对应符号&#xff1a; 元组 ( ) 列表 [ ] 字典 { } 二、字典是python中唯一的映射类型&#xff08;哈希表&#xf…

网址URL中特殊字符转义编码

字符 - URL编码值 空格 - %20" - %22# - %23% - %25& - %26( - %28) - %29 - %2B, - %2C/ - %2F: - %3A; - %3B< - %3C - %3D> - %3E? - %3F - %40\ - %5C| - %7C…

无病呻吟系列

无病呻吟1&#xff1a;给应届生的话 讲到第一份工作&#xff0c;自然要给应届毕业生一点建议。 其实这不是我的初衷&#xff0c;写这篇文章的主要目的&#xff0c;是给那些工作了3,5年&#xff0c;正进入迷茫期或已经进入迷茫期的人看的。至于应届毕业生&#xff0c;我想&…

JavaScript实现向OL列表内动态添加LI元素的方法

2019独角兽企业重金招聘Python工程师标准>>> <script type"text/javascript"> function addItem() {var myitem document.getElementById("ItemToAdd").value;var mylistItems document.getElementById("mylist");var newP …

【blockly教程】第五章 循环结构

在这里&#xff0c;我们将介绍一个新游戏--Pond Tutor 在Pond Tutor(https://blockly-games.appspot.com/pond-tutor)这个游戏中&#xff0c;我们将扮演黄色的鸭子&#xff0c;通过不断的发炮弹去攻击红色的鸭子&#xff0c;当红色的鸭子血条减为0时则玩家获胜。在这个游戏中为…

数据的PB级别是什么?

PB是数据存储容量的单位&#xff0c;它等于2的50次方个字节&#xff0c;或者在数值上大约等于1000个TB。”一提到数据量级&#xff0c;人们通常会联想到美国国会图书馆&#xff0c;德勤、麦肯锡、IBM、Gartner和移动广告公司。Adfonic的数据专家向TechTarget记者介绍了PB级数据…

js 获取字符串最后一位的4种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方法一&#xff1a;运用String对象下的charAt方法 charAt() 方法可返回指定位置的字符。 复制代码代码如下:str.charAt(str.length – …

360董事长周鸿祎跨足手机市场是福还是祸?

编者按&#xff1a;奇虎360董事长周鸿祎做的这个“思考了半年”的决定&#xff1a;进军智能手机&#xff0c;是于5月4日夜10时45分。他所发布新浪微博称&#xff1a;“现在每个人都想拥有高性能的智能手机&#xff0c;高富帅白富美人手一iPhone&#xff0c;难道吊丝只能买便宜低…