跳到主要内容

代码是资产还是负债

大概是去年吧,看了一篇文章,大意就是说代码其实并不是资产,而是负债,这里的负债有几个方面,其中一个最重要的方面就是技术债。当时只是看个热闹,最近的一段时间让我想到了这些东西,然后有了一些新的理解,于是就有了这篇文章。

首先声明,文章中有一些例子,纯属虚构,如有雷同,纯属巧合。

首先的债就是定义了一个个的无用变量,在那里充当代码,让代码日益增长,功能却丝毫不变,这些可能是之前用到的代码,后来不需要了,就留了一个无用的变量,久而久之就出现了一堆没有使用的变量。还有一些隐藏的比较深入的变量,经历了一系列的逻辑操作,最后这个计算出来的变量没有用到,当你顺着函数一层层查下来发现这样一个结果的时候,心情想必是相当难受的。这里还有一个情况是没有用到的导入模块,这个相比较起来是稍微好一点的情况,因为比较现代的语言在编译中都会有一个叫tree shaking的操作,把这些没有用到的导入去掉。

其次就是在实现功能的时候做出的一些妥协和hard code,或者为了快速实现需求所进行的一些比较粗略的设计。妥协产物如果持续迭代会在很多不经意的时候产生一个明明很简单但是却需要绕一个大圈才能实现的需求。就比如复制的功能,点击一个按钮复制一段内容到系统的剪切板上,正常来说其实就是很简单的一句

navigator.clipboard.readText().then(successCallback, failedCallback)

就可以了,但是如果在iframe中就有一些意外了,浏览器的隐私保护导致iframe中无法操作系统的剪切板,需要加上:

allow="clipboard-read; clipboard-write"

如果实在iframe中要读取父页面的内容到剪切板上,还需要配置服务器的同源协议,等等一些内容,就这样一个常见且简单的复制功能在这里就有这么多的工作要做。另一个例子是在iframe中打开一个全屏的弹窗,iframe能影响到的肯定是只有自己的页面了,如果想要覆盖住父页面的内容肯定是天方夜谭,所以,我又陷入了深深的困境中,直到有人提醒我可以让父页面打开弹窗,然后弹窗里继续通过iframe嵌入弹窗中,才算有了解决方案,然后就是通过post message 不停的在父子页面中传递消息,然后一个简单的,ui框架支持的esc自动关闭也需要废一番力气。

从这里可以看到,代码其实并不是资产,尤其是设计不合理的地方,会在不知不觉的时候,抛出一个或大或小的问题,去消耗你的时间,如果项目持续时间比较长,那么这些负债会不断的吞噬你的时间。

可是这里又有一个悖论,如果知道项目会持续下去,那么所有人都去努力,会一定程度减少负债,但是大部分项目都是朝不保夕,所以就经常说,只要能跑就不去动代码的说法。所以作为一个程序员,我们只能保证自己的持续学习和不断的减少负债,这样对自己是有提升的。

如果想明白了代码是负债而不是所谓的资产了,那么就可以毫无顾虑的删掉那些曾经有用,但是已经没有用到的代码了,还有诸如:

false && xxx}

的代码了。

2025.03.19

Loading Comments...