乐于分享
好东西不私藏

编程成本变化,正在改写软件工程

编程成本变化,正在改写软件工程

一个 POC 做完了。过几天又来一个相似需求,大家很自然地打开旧项目,看看哪些代码能搬过去。

真动手才发现没那么省心。上个项目用 Vue,这次想换 React。接口、权限和页面状态绑在一起,拆一处就要顺着依赖再拆几处。等旧代码看明白,新项目的结构也差不多重新搭完了。

这时候会冒出一个几年前很少有人认真考虑的念头。理解旧代码这么费劲,把需求讲清楚,让 AI 重新写一版,会不会更快?

这个念头能够成立,说明编程的成本结构正在变化。我们熟悉的软件工程惯例,大多是在另一套成本结构里形成的。

旧账本里,写代码很贵

过去几十年,软件工程一直面对一个很现实的问题。代码生产很贵。

一个组件要磨几天,一个公共库可能要做几周,一套中间件足以养活一个小组。需求来了,团队先翻内部代码库,找现成方案,再考虑能不能从旧项目里拆。只要复用成功,省下来的都是工期和人力。

围绕这个前提,软件工程慢慢长出了一整套做法。代码评审负责守住质量,技术选型要足够谨慎,公共组件库和脚手架负责减少重复劳动。十个项目做完,留下十个 Git 仓库,大家会觉得这些年没有白干。

在这本账里,技术积累很大一部分就是代码积累。

新账本里,生成便宜,理解仍然很贵

AI 开始改写这本账。

今天用 Vue,明天换 React。这次用 Java,下次换成 Go。过去碰到技术栈切换,重写的代价很高,团队只能尽量守住已有实现。现在把需求、约束和接口边界交代清楚,让模型重新生成一版,在 POC 和早期方案验证中,有时比拆旧代码更利索。

搬代码从来都不只是复制粘贴。你要读懂依赖,分清哪些逻辑已经长在旧项目里,还要处理版本兼容、权限模型和数据结构。部署方式不同,也得重新收拾。代码虽然摆在那里,理解和剥离它的成本一点没少。等这些事情做完,AI 可能已经跑完两轮了。

于是,复用代码的成本开始接近重新生成的成本。有些场景里,重新生成已经更便宜。

线上系统依然需要可靠的代码。稳定性、安全性和维护责任也不会因为 AI 出现就消失。只是代码过去有一部分价值来自生产稀缺。如今生产速度越来越快,单纯拥有一份实现,很难像过去那样形成长期优势。

成本的重心开始从写出来移向想清楚。

项目节奏变了,停手比动手更难

成本结构一变,项目该怎么跑、什么时候停,判断方式也会跟着变。

POC 最能说明问题。它原本只需要证明一件事能不能成立。可项目一旦跑起来,人很容易顺手补页面、调动效,再加几项配置,慢慢把它养成一个半成品。代码越堆越多,最初要验证的问题反倒没人再问。

以前即使 POC 多写了一些,能复用的实现多少还算留下了一点东西。现在生成成本越来越低,单纯多出一批代码,很难再被当成项目进展。团队更该记录几个决定。为什么此时的证据已经够了,为什么要在这里停手,后面出现什么条件才值得继续投入。

项目有没有向前走,不能再只看写了多少代码。能否及时做出判断,会越来越重要。

架构决策变了,被放弃的路也有价值

架构选择也会受到影响。

有些方案演示时很漂亮,数据量一上来就撑不住。有些方案方便 AI 生成,落到真实业务里却很难控制权限和状态,异常一多,很快就乱了。最终保留下来的架构只是结果。下一支团队只看到这个结果,容易把它当成一种固定偏好,却不知道其他方案在哪个量级、哪种并发下开始出问题。

当重新生成一套早期实现变得便宜,为什么放弃某条路就显得格外珍贵。这些信息一旦丢失,下个项目仍要再撞一次同样的墙。AI 最多帮你撞得快一点。

判断需要留下来,也需要能被调用

项目结束以后,团队得重新想一遍什么值得保存。

代码当然要留,接口文档和部署方式也要留。团队还应该写下当时怎样理解问题,试过哪些方案,失败卡在哪一步。最终选择依赖哪些条件,下次遇到相似场景先检查什么,也要交代清楚。

代码天然会进入版本库,判断却经常散在会议纪要、群聊记录和某位同事的脑子里。项目交付以后,大家忙着赶下一件事,很少有人愿意回头解释一次失败为什么发生。半年后再问,通常只剩一句“试过,不太行”。这句话对下一次决策几乎没有帮助。

AI 让这个缺口变得更加显眼。它可以快速生成新实现,也可以按照明确的规则反复执行。团队需要先把规则讲清楚。失败记录和架构取舍可以整理成案例,需求边界和验收标准可以写进 Skill、检查清单或提示词。下一次遇到相似问题,AI 不必重新猜,团队也不用指望某位老员工临场回忆。

没有记录的判断,只能作为一次个人经验。写清适用条件、失败信号和停止标准以后,它才有机会被团队和 AI 反复使用。

技术积累要看判断密度

过去评价一家公司技术积累深不深,常看它有多少公共组件,建了几套平台,又维护着多少中间件。这些东西依然有用,只是复制它们的速度正在加快。一支新团队拿到更强的模型和足够清楚的需求,几个月内重新搭出一套可用实现,已经可以想象。

团队之间的差距,会越来越取决于踩过的坑有没有变成下一次可以调用的判断。一次失败若只留下一批废代码,价值会迅速消失。它若留下了适用条件和失败信号,又明确告诉后来的人什么时候该停,下一次就能少绕一段路。

软件工程的重心也会随之移动。写代码仍然重要,代码评审、持续集成和技术债管理也会继续存在。只是工程师会把更多精力放到问题定义和方案取舍上,提前划清边界,并在证据足够时停下来。项目结束以后,还要让这次选择能够被查到、被理解,也能交给 AI 使用。

AI 会不断造出新的轮子。人的位置会慢慢前移,决定这里需不需要轮子,需要什么样的轮子,以及造到哪一步就该停。