【转】如何对待技术债务?资产or负债?
原文: http://tommwq.tech/blog/2020/12/23/289
-----------------------------------
现代软件系统都是采用分层式开发和模块式开发,每一层次的程序都是在更低层次模块的基础上构建的。比如Java程序在读写文件的时候,不会直接操作磁盘硬件,而是使用文件相关的类,这些类又调用操作系统提供的API接口。我们在开发的过程中,很少有从底层模块直接开始开发的,大部分时间是在已经存在的模块上进行修改,在历史代码的基础上工作。
1 历史代码:优质资产还是历史包袱?
事物总是有两面的,一面是好的,一面就不那么好了。历史代码也是如此。一方面,历史代码提供了大量可以复用的框架和模块,提供了一个基础,我们可以在基础上快速创建软件。另一面,历史代码的设计可能不符合新的需求,历史代码也可能存在缺陷,我们必须花费时间和精力来处理这些问题。那么历史代码,究竟是优质资产还是历史包袱呢?事物虽然有两面,但往往总有一面是主要的,占主导地位的。当好的一面占主导地位的时候,历史代码就成为优质资产,反之就是历史包袱。那么,什么样的历史代码,是好的一面主导的呢?其实前面已经给出了答案:如果新需求可以基于历史代码快速实现,这就是好的一面在主导。如果开发新功能的时间中,大部分是在处理历史代码在设计和编码上的缺陷时,就是坏的一面在主导。
2 软件演化:不断进化还是渐渐腐坏?
软件在整个生命周期中总是不断变化的,新增功能、修复缺陷,都要修改软件。一些软件变得越来越好,功能逐渐完善,性能也不断提高,体验、易用性不断提升。另一些软件则越来越糟,功能杂乱却无用,运行越来越慢,界面难以使用。代码也是一样。一些代码变得越来越好,设计合理,结构清晰,性能优越。另一些代码变得越来越糟糕,一团乱麻,缺陷丛生。事物的演化通常有两个方向,一个是不断进化,一个是不断腐坏。不断进化的代码,最终会变成优质资产,而不断腐坏的代码,终将成为历史包袱。代码是进化还是腐坏,区别就在于如何对待技术债务。
3 技术债务:以平常心对待
如果对技术债务视而不见,任由其泛滥,代码渐渐腐坏,最终代码变得不可维护,软件也进入生命周期末端。但技术债务也不可能完全消除。试图彻底消除技术债务,将不断权衡而难以抉择,或产生过度设计,导致软件不断延期。因此,技术债务注定要伴随软件的整个生命周期,而开发团队要做的是,如何在软件的生命周期中,让技术债务保持在一个合理的范围之内,不要让技术债务恶化。这就需要接受和技术债务共存的事实,以平常心来对待。经常性的审查代码,消除即将恶化的技术债务。
4 几条具体措施
- 保持整洁。保持项目目录、代码、注释、配置整洁,及时清理过时、无效的文件、代码和注释。
- 排除歧义。采用具有业务含义的命名,避免混淆、歧义、不清晰的命名。
- 合理设计。设计结构合理,不过度负载,也不过于简化。保持设计的正交性。
- 适时重构。避免大量重复的代码。在第3次复制粘贴时进行重构。
5 进一步阅读
- 设计模式
- 重构
- 代码整洁之道
- 编写可读代码的艺术
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2017-12-25 介绍css 的3D 变换(3D transform)
2016-12-25 “psql: could not connect to server: Connection refused” Error when connecting to remote database
2016-12-25 postgreSqL的序列sequence
2016-12-25 nginx+php-fpm 的配置下,php的错误日志
2015-12-25 FastCgi与PHP-fpm之间是个什么样的关系