好好爱自己!

【转】如何对待技术债务?资产or负债?

原文: http://tommwq.tech/blog/2020/12/23/289

-----------------------------------

现代软件系统都是采用分层式开发和模块式开发,每一层次的程序都是在更低层次模块的基础上构建的。比如Java程序在读写文件的时候,不会直接操作磁盘硬件,而是使用文件相关的类,这些类又调用操作系统提供的API接口。我们在开发的过程中,很少有从底层模块直接开始开发的,大部分时间是在已经存在的模块上进行修改,在历史代码的基础上工作。

1 历史代码:优质资产还是历史包袱?

事物总是有两面的,一面是好的,一面就不那么好了。历史代码也是如此。一方面,历史代码提供了大量可以复用的框架和模块,提供了一个基础,我们可以在基础上快速创建软件。另一面,历史代码的设计可能不符合新的需求,历史代码也可能存在缺陷,我们必须花费时间和精力来处理这些问题。那么历史代码,究竟是优质资产还是历史包袱呢?事物虽然有两面,但往往总有一面是主要的,占主导地位的。当好的一面占主导地位的时候,历史代码就成为优质资产,反之就是历史包袱。那么,什么样的历史代码,是好的一面主导的呢?其实前面已经给出了答案:如果新需求可以基于历史代码快速实现,这就是好的一面在主导。如果开发新功能的时间中,大部分是在处理历史代码在设计和编码上的缺陷时,就是坏的一面在主导。

2 软件演化:不断进化还是渐渐腐坏?

软件在整个生命周期中总是不断变化的,新增功能、修复缺陷,都要修改软件。一些软件变得越来越好,功能逐渐完善,性能也不断提高,体验、易用性不断提升。另一些软件则越来越糟,功能杂乱却无用,运行越来越慢,界面难以使用。代码也是一样。一些代码变得越来越好,设计合理,结构清晰,性能优越。另一些代码变得越来越糟糕,一团乱麻,缺陷丛生。事物的演化通常有两个方向,一个是不断进化,一个是不断腐坏。不断进化的代码,最终会变成优质资产,而不断腐坏的代码,终将成为历史包袱。代码是进化还是腐坏,区别就在于如何对待技术债务。

3 技术债务:以平常心对待

如果对技术债务视而不见,任由其泛滥,代码渐渐腐坏,最终代码变得不可维护,软件也进入生命周期末端。但技术债务也不可能完全消除。试图彻底消除技术债务,将不断权衡而难以抉择,或产生过度设计,导致软件不断延期。因此,技术债务注定要伴随软件的整个生命周期,而开发团队要做的是,如何在软件的生命周期中,让技术债务保持在一个合理的范围之内,不要让技术债务恶化。这就需要接受和技术债务共存的事实,以平常心来对待。经常性的审查代码,消除即将恶化的技术债务。

4 几条具体措施

  • 保持整洁。保持项目目录、代码、注释、配置整洁,及时清理过时、无效的文件、代码和注释。
  • 排除歧义。采用具有业务含义的命名,避免混淆、歧义、不清晰的命名。
  • 合理设计。设计结构合理,不过度负载,也不过于简化。保持设计的正交性。
  • 适时重构。避免大量重复的代码。在第3次复制粘贴时进行重构。

5 进一步阅读

  • 设计模式
  • 重构
  • 代码整洁之道
  • 编写可读代码的艺术
posted @   立志做一个好的程序员  阅读(193)  评论(0编辑  收藏  举报
编辑推荐:
· 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之间是个什么样的关系

不断学习创作,与自己快乐相处

点击右上角即可分享
微信分享提示