模块 6 · 第 4 节
技术债与可维护性:为什么「能勉强跑」不等于「能长期稳定跑」
是什么
代码能跑不代表它是好代码。为了赶进度而走的捷径、堆叠的补丁、绕过的问题,都会变成"技术债"——现在省下的时间,未来要连本带利地还回去。
解决什么问题
如果只追求"能跑就行",你的项目会逐渐变成一个连你自己都看不懂、碰不得的脆弱系统。改一个小地方就引发一连串问题,最终到了无人敢维护、无法继续迭代的地步。
一种特殊的债务
在金融世界里,债务是你现在借了钱,将来需要连本带利还回去。
在软件世界里,也存在一种类似的债务,叫做技术债。
它发生在你为了节省时间而选择了一种"不够好但暂时能用"的做法时。比如:
- 为了赶进度,把一段逻辑直接复制粘贴到了三个地方,而不是抽取成一个可复用的模块。
- 为了绕过一个难以理解的 bug,加了一段"不知道为什么但去掉就会出问题"的代码。
- 为了快速实现功能,把所有逻辑都塞进了一个文件里,没有做任何结构上的划分。
这些做法在当时都能"让代码跑起来"。但它们都欠下了一笔债——将来当你需要修改、扩展或排查问题时,这些捷径会成为绊脚石,让你付出比当初"好好做"更多的时间和精力。
债务是怎么利滚利的
技术债最可怕的地方在于它有"利息"。
假设你在项目初期图快,把一段计算价格的逻辑复制粘贴到了三个页面里。当时节省了十分钟。
几周后,你需要修改价格计算的规则。你改了第一个页面,但忘了另外两个。于是三个页面的计算结果不一致了——某些用户看到的价格是对的,某些是错的。你花了两个小时排查才发现原因。
又过了一段时间,你想加一个折扣功能。这段逻辑分散在三个地方,你得改三次,每次都要确保一致。改着改着,你已经不记得哪个页面是"最新"的版本了。
这就是利息——最初省下的十分钟,滚雪球般变成了数小时甚至数天的额外工作。
与 AI 协作时的特殊风险
在传统开发中,程序员通常对自己写的代码有较深的理解,知道哪些是临时的权宜之计、哪些是经过深思熟虑的设计。
但在与 AI 协作时,情况不同。AI 生成的代码你可能只是"大概看了看"就用了。你不太清楚它在某些地方为什么那样写,也不确定哪些是规范的做法、哪些是临时的绕过。
这意味着技术债可能在你不知情的情况下悄悄积累。等到项目膨胀到一定规模,你会突然发现:
- 改一个小功能要改好多地方,而且改完之后不确定有没有遗漏。
- 想加一个新功能,但怎么加都和现有代码冲突。
- 代码越来越长、越来越复杂,但你能描述的功能并没有明显增加。
这就是技术债到了需要"还债"的时候。
技术债雪崩:从「能勉强跑」到「无人能维护」只差一个小改动
技术债最可怕的不是欠债本身,而是它的"利息"会滚雪球。最初省下的十分钟,几周后可能变成数小时的额外排查——改一处牵动一片,越改越乱,越乱越不敢改。最终一个小改动就能引发雪崩,项目变成连你自己都不敢碰的脆弱系统。定期让 AI 审视项目里的临时绕过和重复代码,是防止雪崩的最低成本动作。
什么是可维护性
可维护性说的是:这段代码,将来的你(或者另一个人)还能不能看懂它、修改它、扩展它?
一段可维护性好的代码,即使过了三个月你重新打开它,也能很快理解它在做什么、为什么这样做。修改其中一部分不会莫名其妙地影响其他部分。
一段可维护性差的代码,可能今天写的人自己下周就看不懂了。想改一个地方,不知道会牵动哪些其他地方。最终的结果是:没人敢碰它,只能在旁边另起炉灶。
可维护性不是锦上添花,它决定了你的项目能走多远。
平衡的艺术
说到这里,你可能会觉得:"那我是不是每次都要写最完美的代码?"
不是的。技术债不是绝对的坏事——有时候"先跑起来再说"是完全合理的策略。关键是两点:
知道自己欠了什么债。 每次你选择了一个"先凑合"的方案时,在心里记一笔:"这里以后需要回来清理。"你可以让 AI 帮你维护一份待清理的列表。
定期还债。 不需要一次性把所有债务还清。但在每次迭代中,抽出一些时间来清理之前遗留的问题——把重复的代码合并,把过于复杂的逻辑简化,把临时的绕过替换为正式的解决方案。
就像财务上的债务管理一样:不怕欠债,怕的是不知道自己欠了多少,或者只借不还直到崩盘。
指挥与验收
一边讲怎么让 AI 帮你做,一边讲怎么看出 AI 做砸了。
指挥
连接到
术语
事故复盘