程序员应知——技术债务
债务这个词,相信大家已经都对其深有体会了,特别是像我一样作为“房奴”的人,每个月都要去银行还钱,那就是债务啊。
在软件开发的过程中,我们往往也会借债,人们称之为技术债务,其实也就是为了快速地解决问题,而采取的不规范的方案。比方说把某个条件写死,再比方说采用一些捷径达到目的,而这只是特殊情况,无法应用在其他模块中。
对于房贷,大家肯定每个月都会记着去还,但是对于技术债务,大家似乎就不那么关心了,的确这个东西不一定是谁借谁还,可能一个人的代码中产生了技术债务,然后由于负担太重,闪人了,那没有办法,这笔债务就会压在后来工作接替者身上,古语说:父债子偿,不知道这应该叫什么。
然而,技术债务其实最终的承担者还是系统的所有者,或者说系统的开发商。而且,技术债务有一个致命的特点,与我们的房贷不同,而与一种很可怕的借款——我们称之为高利贷——相同,那就是会利滚利。试想一下,如果我们在一个类中欠下了技术债务,然后之后的程序又对这个类进行了扩展和修改,再后的程序对扩展后的程序又做出了更大的扩展,或者说后来的程序在一些功能的写法上参照了欠下债务的类,那么这个债务就会产生非常大的利息,甚至于超过了债务本身。用不了太多时间,我们就会发现,已经无力偿还这份技术债务了。
上面所提到的还只是在功能上的技术债务,我觉得技术债务遍布于我们的系统开发过程之中。比方说:
在代码规范上也存在技术债务,如果一个程序员为了快速开发或者修改一个功能,在开发的时候没有遵守代码规范,那么此时就会欠下代码规范方面的债务。如果不尽快偿还的话,那么之后的基于该程序的修改,也会有很大的可能不遵守代码规范,这也正是破窗子理论的体现。这样下去,程序的可维护性就会大大降低,直至不可维护。
在文档上也存在技术债务。现在很多的开发团队中还是存在技术文档的,像详细设计什么的。如果一次开发中,由于时间紧,只修改了代码,而没有修改相关的文档,那么必定就会造成文档和实际代码功能上的不一致。这样做的后果就是,在一段时间之后,我们会发现文档根本就不足以作为参考,因为有些时候不仅不会帮助我们,而且还会造成误导,从而大家对文档都失去了信心。
从上面的种种我们可以看出,欠下技术债务,而疏于修改,后果会非常严重,那么我们应该怎么做呢?其实道理很简单,首先是尽量不要欠下技术债务,其次就是一旦迫不得已欠下了债务,就应该以最快的速度偿还。我们在银行借的房贷,5年还和20年还,利息会相差很多,对于技术债务,也是同样,如果尽快偿还,那么不会付出太大的代价,而且是在我们的能力承受范围之内的,但是如果拖的时间太长,债务就会变得越来越多,直至我们无力偿还。
所以,作为程序员,除了关心自己生活中的债务之外,也请对技术债务提高警惕!