在软件工程领域中,“技术债务“是一个贬义词。人们在使用这个词的时候常常表达出某种遗憾,过去犯下的错误,最终需要通过重构来弥补。
什么是技术负债?
技术负债(英语:Technical debt),又译技术债,也称为设计负债(design debt)、代码负债(code debt),是编程及软件工程中的一个比喻。指开发人员为了加速软件开发,在应该采用最佳方案时进行了妥协,改用了短期内能加速软件开发的方案,从而在未来给自己带来的额外开发负担。这种技术上的选择,就像一笔债务一样,虽然眼前看起来可以得到好处,但必须在未来偿还。
技术债务的产生有着很多原因,但其中更多的是由于要在短时间内匆忙完成原本耗时较长的工作,导致部分业务逻辑没有完整的设计等,使得产品在短时间内有效,但是长远来看,却是一颗不稳定的炸弹,一旦触发,对产品、对企业都有可能造成无法挽回的损失。
总而言之,技术债务会带来很多麻烦,有些甚至是“致命”的。
那么身为技术开发者,该如何偿还技术负债?
如何偿还技术负债?
技术债务分为有意的技术债务和无意的技术债务,两种形式的技术债务形成的原因和带来的结果是不同的,解决方法也不同。
无意的
由于经验的缺乏导致初级开发者编写了质量低劣的代码。
解决方案
技术培训
毕竟大部分的程序员学习能力还是很强的,部门牛人的培训还是很有必要的,也是学习的重要途径之一。
从最开始的代码规范、到熟悉业务、最后再到编写文档。
2.CodeReview
CodeReview 是非常重要的,同时也是对自身的一个提高。
在这个阶段不同工程师之间可以相互review,审查别人的代码能够发现很多问题,同时也能学到很多知识。
有意的
团队根据当前而非未来进行设计选型,这种方式可能很快就能解决当前的问题,但却很拙劣。
这就情况很可能是为了图省事才这样干的。也有可能是工期太短,人员太少,技术问题等等。
解决方案
1.系统设计的框架是对的
必须能够有效处理当前需求可预见的情况,对于未知的、可能出现的特殊情况,很小的改动就能解决问题。
根据当前的业务,进行合理的创建数据表,尽量的代码解耦和。必须有日志模块,操作日志,错误日志,业务日志等等…
2.所有的工程师有主人翁的意识
开发前,针对产品提出的需求,进行要进行细节确认,自己也可以画一个程序的流程图。
开发时,首先把流程全部顺下来,其中遇到调用其他接口、技术难点、需求模糊,及时确认或记录 TODO 标签。
开发后,及时对自己的流程进行确认,查看代码中是否有未解决的地方。
每个公司都有自己任务管理系统,例如JIRA之类的,提测后,时时关注自己的BUG。
如果与产品有分歧的地方一定要及时沟通,达成共识。
3.一定要有健全的测试环境、预发布环境、正式环境
因为有些程序可能需要进行压力测试,所以服务器的配置还是很关键的。
多个环境的测试,更能保证程序的健壮性。
4.定期处理一些技术债务
等产品上线后,开发就没有那么紧啦,这个时间大家可以找个时间处理技术债务,一边建立感情,一边品味一下原来的代码,是不是酸爽无比。
5.善于发现系统的技术债务
勇于发现系统中的技术债务,当然不是为了所谓的奖励,仅仅是为了自己的提高,让自己为系统负责,而不是事不关己高高挂起。
当然,最重要的其实是把技术债务的重要性提到一个被认可的位置上。
工程师如果能遇见一个债务可能导致的问题,自然愿意花时间去处理。
总结
技术债务是伴随着项目出现而且无法避免,但是如何保持其在可控范围之内,是我们应该思考的问题。技术债务的避免和消除都需要优秀的开发人员,人始终是软件开发中最重要的因素。作为一名普通的码农,不断地提升自己是非常必要的。