简介
我对一个朋友随口说了一句关于技术债的话,他打断了我欧宝体育直播官网,说:“技术债就是扯淡。”根据他的经验,人们谈论技术债的主要目的是:欧宝体育直播官网
- 掩盖坏代码
- 掩盖未完成的工作
把这些问题称为“技术债务”似乎是一种让自己远离这些问题的策略。逃避责任的好方法。把事情掩盖起来。
出于好奇,我决定更好地研究一下技术债务的比喻,以更好地理解它的实际含义。
提示:这篇文章David Vandegrift的《on Medium》也探讨了这个话题。
技术债的定义
我立刻意识到,我自己对技术债的理解是错误的。大多数人似乎把技术债理解为:
“现在走捷径,获取短期商业价值(负债),之后再清理(偿还债务)”。
我认为这是错误的。
Ward Cunningham他创造了技术债务的比喻,他写道:
您知道,如果您希望能够通过开发您不完全理解的软件而以这种方式负债,那么您应该明智地使软件尽可能地反映您的理解,这样当需要重构时,就可以清楚地了解您在编写它时的想法,从而更容易地将其重构为您当前的想法。
在某种意义上,这对我来说是一种原型的形式。尝试和测试设计/架构,看看它是否适合手头的问题空间。但它也包含了在未来花费额外时间来更改代码以更好地反映当前对手头问题的理解的意愿。
...如果我们不能让我们的计划与我们所理解的正确的思考我们的金融目标的方式保持一致,那么我们就会不断地被分歧绊倒,这将会减慢我们的速度,就像为贷款支付利息一样。欧宝体育直播官网
设计/体系结构和问题领域的不一致产生了瓶颈,减缓未来的发展。
所以我认为很明显不欧宝体育直播官网关于采取快捷键对于一个短期业务收益.
这更像是对未来的持续再投资。它可能会暂时停止功能的工作,但从长远来看,它应该会带来更多的功能和特性。在我看来,它一点也不关注短期。你需要编写“干净”的代码,并尽你所能,因为很可能你将不得不重写部分代码。
Ron Jeffries的这两篇文章已经详细讨论了这个问题。
逻辑错误
仔细研究这个话题,我注意到一些非常奇怪的事情。不知怎的,一切阻碍软件开发的因素已经成为“技术债务”。
任何产生瓶颈,突然就被放进了技术债的篮子里。我开始有一种强烈的感觉,很多人都在以某种方式逻辑谬误.
如果你有技术债务,当你试图忽略它并继续前进时,你会遇到摩擦。技术债务产生了瓶颈.
但人们的推理方式是错误的:我注意到我的软件开发过程中有一个瓶颈,所以我们有“技术债”.
然而,由于技术债务造成了瓶颈,因此不因此,每个瓶颈都是技术债务。
我认为正是这种有缺陷的推理,把每一个感知到的障碍都变成了技术债务2.
也许我在制造一个稻草人的论点,但我认为我有一些例子可以表明人们的想法是错误的。
如果我们看维基百科页面欧宝体育直播官网关于技术债务,有一长串技术债务的可能原因。
网站一些例子:
- 预先定义不足
- 开发开始前缺乏明确的需求
- 缺乏文件
- 缺少测试套件
- 缺乏合作/知识共享
- 缺乏知识/技能导致糟糕或次优的代码
- 技术领导能力差
- 最后一分钟的规格变更
请注意,这些问题被称为“技术债”,因为它们可能有相似之处结果作为技术债务。他们可以创建一个瓶颈.
但我们为什么要把这些问题称为技术债呢?
这些问题不言自明。称其为技术债务不仅不合适,而且把这些问题的原因并没有提供任何新的洞察力.甚至在与外行人的谈话中。
混乱不是技术债务
一个鲍勃叔叔的博客标题相同3.也击中了这个问题,很多问题被错误地贴上了“技术债务”的标签。
不幸的是,还有一种情况有时被称为“技术债”,但这既不合理也不明智。一片混乱。
...
混乱不是技术债务。一团糟就是一团糟。技术债务决策是基于真实的项目约束做出的。它们有风险,但也可能是有益的。把事情弄得一团糟的决定从来不是理性的,总是基于懒惰和不专业,将来也没有机会付出代价。一团糟总是一种损失。
坎宁安对技术债务的定义表明,这是一个非常有意识和深思熟虑的过程。但制造混乱却不是。称之为技术债务是完全不合适的。这简直是一团糟。
我认为这很好地与维基百科之前的列表相关联。把事情的本质说出来就行了。
在“技术债务”这个比喻上吹毛求疵是不是没有抓住重点?
在这篇,马丁·福勒在博客中写道Bob大叔他认为,在与非技术人员交流时,技术债务作为一个隐喻(仍然)非常有价值。
他甚至介绍了一个象限:
不计后果的 | 谨慎的 | |
---|---|---|
深思熟虑的 | “我们没有时间设计” | “我们必须现在发布,(以后)处理后果” |
无意中做的 | “分层是什么?” | “现在我们知道该怎么做了” |
这个象限让我非常怀疑。因为在这个象限,一切是技术债。他只是发明了不同类型的技术债。它从来没有不技术债务。一直都是技术债务。
在我看来,马丁·福勒把技术债务的比喻扭曲成了一种永远无法被证伪的东西,就像精神分析一样。
这不是“糟糕的代码”,“设计缺陷”或“混乱”,这是“无心的和鲁莽的技术债务”。更能描述这个问题的是什么?
也许这只是我缺乏理解,但我不明白为什么把每种瓶颈都称为“技术债务”有任何帮助。我还是看不出这有什么意义。
最后,Fowler所做的只是指出软件开发中的瓶颈可能是由于能力的四个阶段.
无能 | 能力 | |
---|---|---|
Concious | “我们没有时间设计” | “我们必须现在发布,(以后)处理后果” |
无意识的 | “分层是什么?” | “现在我们知道该怎么做了” |
我认为对于我们(甚至是外行)已经理解的事物,我们不需要新的隐喻。
技术债务(甚至)存在吗?
高频交易狂人甚至有人认为技术债并不存在,它不是一个“真实的”概念。
在从事了几十年的软件工程之后,我得出了一个专业的结论:技术债务不存在。
他的观点可以归结为这样一个观点,即人们所说的技术债务实际上主要是维护.
因此,将对手头问题的更好理解重新整合到代码(设计)中被视为一种方法软件开发不可分割的一部分,用采矿的替代比喻来说明(在挖掘和加固之间交替)。至少我是这么理解的。
用一个比喻代替另一个比喻,这真的有用吗?但在这种情况下,它至少不那么通用,更精确。
关闭的话
尽管Cunningham的本意是好的,但我认为技术债务的比喻开始有了自己的生命。在某种程度上,不符合柏拉图式理想的代码被称为技术债务4.
每一个错误,每一个不断变化的需求,每一个成为开发过程瓶颈的权衡都被标记为“技术债务”。我不认为这是建设性的。
我认为我的朋友是对的:技术债的概念已经变成了扯淡。它没有传达任何更好的见解或意义。相反,它似乎混淆了瓶颈的真正原因。
在这一点上,当人们谈论技术债务时,我会非常怀疑,并希望了解更多细欧宝体育直播官网节。技术债务实际上并不能解释我们为什么会走到今天这个地步。它已经变成了空洞的、摆手的“解释”。
出于对坎宁安的尊重,因为这个概念被广泛误解和滥用,也许最好是放弃它。