程序员应知——技术债务

债务这个词,相信大家已经都对其深有体会了,特别是像我一样作为“房奴”的人,每个月都要去银行还钱,那就是债务啊。

在软件开发的过程中,我们往往也会借债,人们称之为技术债务,其实也就是为了快速地解决问题,而采取的不规范的方案。比方说把某个条件写死,再比方说采用一些捷径达到目的,而这只是特殊情况,无法应用在其他模块中。

对于房贷,大家肯定每个月都会记着去还,但是对于技术债务,大家似乎就不那么关心了,的确这个东西不一定是谁借谁还,可能一个人的代码中产生了技术债务,然后由于负担太重,闪人了,那没有办法,这笔债务就会压在后来工作接替者身上,古语说:父债子偿,不知道这应该叫什么。

然而,技术债务其实最终的承担者还是系统的所有者,或者说系统的开发商。而且,技术债务有一个致命的特点,与我们的房贷不同,而与一种很可怕的借款——我们称之为高利贷——相同,那就是会利滚利。试想一下,如果我们在一个类中欠下了技术债务,然后之后的程序又对这个类进行了扩展和修改,再后的程序对扩展后的程序又做出了更大的扩展,或者说后来的程序在一些功能的写法上参照了欠下债务的类,那么这个债务就会产生非常大的利息,甚至于超过了债务本身。用不了太多时间,我们就会发现,已经无力偿还这份技术债务了。

上面所提到的还只是在功能上的技术债务,我觉得技术债务遍布于我们的系统开发过程之中。比方说:

在代码规范上也存在技术债务,如果一个程序员为了快速开发或者修改一个功能,在开发的时候没有遵守代码规范,那么此时就会欠下代码规范方面的债务。如果不尽快偿还的话,那么之后的基于该程序的修改,也会有很大的可能不遵守代码规范,这也正是破窗子理论的体现。这样下去,程序的可维护性就会大大降低,直至不可维护。

在文档上也存在技术债务。现在很多的开发团队中还是存在技术文档的,像详细设计什么的。如果一次开发中,由于时间紧,只修改了代码,而没有修改相关的文档,那么必定就会造成文档和实际代码功能上的不一致。这样做的后果就是,在一段时间之后,我们会发现文档根本就不足以作为参考,因为有些时候不仅不会帮助我们,而且还会造成误导,从而大家对文档都失去了信心。

从上面的种种我们可以看出,欠下技术债务,而疏于修改,后果会非常严重,那么我们应该怎么做呢?其实道理很简单,首先是尽量不要欠下技术债务,其次就是一旦迫不得已欠下了债务,就应该以最快的速度偿还。我们在银行借的房贷,5年还和20年还,利息会相差很多,对于技术债务,也是同样,如果尽快偿还,那么不会付出太大的代价,而且是在我们的能力承受范围之内的,但是如果拖的时间太长,债务就会变得越来越多,直至我们无力偿还。

所以,作为程序员,除了关心自己生活中的债务之外,也请对技术债务提高警惕

作者:侯伯薇@大连
出处:http://www.cnblogs.com/houbowei/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted @ 2010-05-20 08:56 侯伯薇 阅读(3525) 评论(19) 编辑 收藏

 回复 引用 查看   
#1楼 2010-05-20 09:04 | 常言不哭      
说的太有道理了,特别是文档,以前别人做的系统让我写,真叫郁闷!
 回复 引用 查看   
#2楼 2010-05-20 09:15 | Alan Lau      
有点意思
为了写个像样的文档,我耗费了2个月时间才写好一个“通用权限管理组件使用说明书V3.0.doc”
技术债务 这个词汇,挺有意思,推荐+1
 回复 引用 查看   
#5楼 2010-05-20 09:45 | Prime Li      
代码+注释>>>不更新的文档
 回复 引用 查看   
#6楼 2010-05-20 09:45 | winter-cn      
深有同感
 回复 引用 查看   
#7楼 2010-05-20 10:01 | 风中灵药      
楼主的抽象思维不错。这样看来,敏捷开发这位愣头青肯定已经负债累累了。
 回复 引用 查看   
#8楼 2010-05-20 10:35 | 坤坤      
好文。通过对生活上的归纳,影射到技术上来。lz也是位会观察生活的细心人。
 回复 引用 查看   
#9楼 2010-05-20 10:40 | Beech      
太精辟了 。
 回复 引用 查看   
#10楼[楼主] 2010-05-20 10:42 | 侯伯薇      
@Prime Li
代码真的是最重要的,但是毕竟不是所有项目中所有的人都有这种敏捷的思想。特别在传统的观念中,或者说在传统形式的项目中,设计文档还是占有很重要的地位的。并且,很多项目中,设计文档也必须作为产品的一部分提交给客户的。
所以我才会有这么一说,并不适用于所有项目,呵呵。
 回复 引用 查看   
#11楼[楼主] 2010-05-20 10:43 | 侯伯薇      
@吉日嘎拉 不仅权限设计
汗颜!
这个词也不是我发明的,呵呵。
 回复 引用 查看   
#12楼[楼主] 2010-05-20 10:46 | 侯伯薇      
@风中灵药
你一定是位注重文档的人,呵呵。
其实敏捷开发中,由于没有把重点放在文档上,可能不会出现严重的文档上的债务。
这里的债务并不是说应该做而没有做的事儿,而是采用了不规范,并且会对系统造成影响的捷径所做的事儿。:)
 回复 引用 查看   
#13楼 2010-05-20 21:50 | 菜阿彬      
这么常识性的东西,吉日同学好像没听过?国内软件圈真的挺悲哀的。楼主加油,多普及下这些常识。

关于技术文档,的确容易造成文档与代码不一致的情况,更好的做法是尽量少的文档,让你的代码自解释,写成Clean Code!
 回复 引用 查看   
#14楼 2010-05-20 21:51 | 菜阿彬      
@风中灵药
引用风中灵药:楼主的抽象思维不错。这样看来,敏捷开发这位愣头青肯定已经负债累累了。

这位先生连敏捷的门都还没看到,无知者无畏啊。
 回复 引用 查看   
#15楼 2010-05-21 09:38 | midnight      
代码.....唉...
刚开始编程的时候不知道什么好不好的代码.现在看自已以前编的东西真蛋疼..但现在仍找不着好的方式.估计几年后看现在编的,也是蛋疼
 回复 引用 查看   
#16楼 2010-05-21 13:34 | Lex Cui      
发放债券也是为了融资以获取更高的回报,这点上看来,欠债未必是件坏事。
 回复 引用 查看   
#17楼 2010-06-08 10:12 | Curry      
在代码规范上也存在技术债务
在文档上也存在技术债务。

是什么原因造成的?项目赶没有时间?那是否项目做完以后让你有时候去补充,反思项目。

不好意思,我们项目很多,下面的项目也很急。那出了问题能怪谁。
 回复 引用 查看   
#18楼 2010-09-11 17:46 | Study by myself      
这个肯定是个事 关键是着急的时候肯定以客户需求为第一位 有时间了整理呗 日子么 总不能按规矩把人憋死啊
 回复 引用 查看   
#19楼 2011-04-19 12:05 | 风云      
技术债务很新颖!