AI 时代,有重构的自由
从 Bun 迁移到 Rust 和个人项目从 SolidJS 迁到 Vue 出发,讨论 AI 如何降低重构成本,以及技术选型在 AI 时代为什么逐渐从一次性押注变成可持续修正。
过去做项目,最怕第一铲土挖错地方。
语言、框架、目录结构、状态管理、部署方式,看上去是几项技术选择,实际常常是在给未来修路。路修对了,车跑得顺。路修歪了,车也能跑,只是每天多绕十公里,日子久了,司机会把绕路当成生活的一部分。
软件项目有一种很顽固的惯性。
今天的选择,会变成明天的依赖;明天的依赖,会变成后天的约束;约束再往后走,名字就改成了技术债。债这东西最厉害的地方,往往还不在代码里,而在人心里。大家都知道它别扭,也都知道最好改掉,可一想到要动,手又缩回去了。
因为过去的重构太重。
它很少像换一把椅子,更像给一栋已经住满人的楼换地基。窗户要留着,水电要通着,住户还不能被惊醒。很多团队最后选择的办法,是在墙上多钉几块木板。看起来加固了,实际只是让下一次维修更难下手。
AI 时代,这种沉重感开始松动。
程序员开始重新拿到一种久违的东西:重构的自由。
English version: In the AI Era, Developers Have the Freedom to Refactor
Bun 的一声响
2026 年 5 月 14 日,Bun 的 Rewrite Bun in Rust PR 合并到了 main 分支。
Bun 很长时间里给人的印象,是一个用 Zig 写出来的 JavaScript runtime。它快,锋利,有一点年轻工具特有的锐气。突然看到这样一个 PR,很难不愣一下:一个已经跑在大量开发者机器上的基础设施项目,居然把底层语言往 Rust 迁。
这个 PR 不小。
一百多万行新增,两千多个文件,六千多个提交。按老经验看,这种事像远征。路途长,粮草重,中间还容易掉队。换成很多商业项目,光是立项评审就够写几轮 PPT。
把它写成“Zig 输了,Rust 赢了”,未免太省事。PR 说明里讲得清楚:代码库大体沿用原来的架构和数据结构,后续还会继续优化和清理,非 canary 版本要看官方发布节奏。
更值得看的,是一个高速奔跑的工具,居然还有余力在底层材料上动刀。
它不像推倒重建,更像给桥换钢材。桥的走向还在,受力图还在,通行目标也还在,只是过去容易生锈、容易断裂、维修费太高的地方,换成了另一种材料。
过去这种事当然也能做。只是能做和做得起,中间隔着一条河。AI 把河面冻住了一部分,人终于可以试着走过去。
这是一声很响的提醒:软件不必永远忍受自己的出生缺陷。
我的小后台
我自己最近也有一个小得多的例子。
有个后台管理网页,最早用 SolidJS 写。SolidJS 的响应式模型很漂亮,写 demo 的时候也顺手。但真实业务不会只拿理念吃饭。后台系统要表格、表单、弹窗、筛选、权限、菜单、校验、导入导出,还要有足够多的组件和足够好找的答案。
写着写着就发现,能做,慢。
后台管理系统很少需要前端哲学。它要的是稳、快、省心。用户不会因为一个表单背后有精妙的响应式模型就多点一次保存。开发者也不会因为框架观念漂亮,就少写一个日期范围选择器。
这类项目放在以前,大概率先忍着。
因为迁移听起来麻烦。组件要搬,路由要搬,状态要搬,接口调用要搬,样式和细节也要搬。心里知道 Vue 生态更合适,手上还是会继续补丁。补着补着,项目也就老了。
现在做法直接很多。
把页面行为、接口形态、组件结构和关键业务逻辑整理清楚,让 AI 带着这些上下文往 Vue 迁。过程里当然还要检查,还要改,还要盯细节。但最沉的那部分体力活,已经有人帮着扛了。
人需要花精力的地方,变成了判断。
哪些行为必须一致,哪些旧写法可以丢掉,哪些地方应该趁迁移顺手整理,哪些地方最好原样保留。过去重构像搬砖,现在更像监工。砖还是砖,墙还是墙,但人的手终于不用一直陷在水泥里。
技术选型也因此少了一点宿命感。
以前选框架像早婚。合适不合适,都先过下去。现在更像阶段性合作。合适就继续,不合适就把账算清,把东西收拾好,然后换一条路。
反悔的手续费降下来了
AI 没有废掉架构。
它废掉的是一部分对架构的迷信。
过去许多选择之所以显得神圣,并非它们多么高明,只因改起来太累。改 import,改调用方式,改类型定义,改组件写法,补适配层,修一批又一批细碎错误。方向并不难看清,难的是走过去要踩一脚泥。
AI 正好擅长这片泥地。
相似模式的迁移、重复结构的改写、失败测试后的修补、跨文件的机械调整,这些事情以前会消耗大量心力。现在它们还会消耗时间,却不再那么可怕。
人的注意力可以往上提一点。
为什么迁?迁到哪里?成功的标准是什么?旧系统里哪些是业务规则,哪些只是历史包袱?哪些复杂度应该保留,哪些复杂度只是多年风沙堆出来的土坡?
选择仍然有代价。
AI 降低的是反悔的手续费。
这点很重要。手续费下降以后,人可以更大胆地试错。新框架可以试,冷门方案也可以试,小项目可以先用最快的办法跑起来。早期技术选型不必像刻墓志铭一样慎重。
可也别走到另一头。
今天换框架,明天换语言,后天换数据库,把每一次新鲜感都包装成架构演进,那叫折腾。折腾久了,项目会像一间不断装修的房子,墙纸永远是新的,人却始终住不进去。
自由要打桩
重构自由有门槛。
第一根桩是设计文档。
文档要记下当时为什么这么做。代码能告诉人现在怎么跑,很难告诉人当初为什么绕了一个弯。很多看起来奇怪的实现,背后可能有业务限制、历史兼容、线上事故和一段没人想再提的夜班。
第二根桩是测试。
测试管行为。没有测试的大规模重构,就像夜里搬家,东西看着都装上车了,天亮才发现户口本和钥匙不见了。代码变漂亮,用户路径断掉,这种账最难算。
第三根桩是业务分层。
底层语言可以换,中间框架可以换,展示层可以换。业务规则最好别撒得到处都是。业务越集中,迁移越像搬家;业务越散,迁移越像考古。考古当然也能考,只是每挖一铲都怕碰碎东西。
第四根桩是可回滚。
重构在分支里跑通,只算一半。上线后不伤人,才算另一半。分阶段迁移、灰度、对照验证、日志观察、保留旧路径,这些办法看起来笨,却能保命。AI 能把施工队叫来,验收制度还得人自己建。
有了这些桩,程序才有余地。
文档在,测试在,边界在,版本记录在,第一次技术选型就不再像一道圣旨。它只是一个阶段性的决定。决定可以被尊重,也可以在证据充分时被修改。
架构从石碑变成草图
过去的架构像石碑。
既然要刻下去,就希望它一开始足够正确,能挡风,能挨打,能撑很多年。石碑一旦刻错,改字很麻烦;整块推倒,又显得败家。
AI 时代的架构更像草图。
草图也要认真画。比例要对,边界要清,重点要明。可草图承认未来会变,承认今天掌握的信息不够,承认软件系统是一种活的生产工具。
这会改变我们看新技术的眼神。
过去遇到一个新框架,问题总是那些:成熟吗,生态大吗,维护者靠谱吗,三年后还在吗。这些问题仍然要问。只是还可以再加一个更现实的问题:
以后迁得走吗?
这个问题一出来,尺度就变了。
冷门技术未必危险,热门技术也未必稳妥。好方案要看退出成本。它能保护业务逻辑,保护数据结构,保护外部契约,将来换掉也不至于伤筋动骨。坏方案哪怕今天很流行,只要把业务、框架、存储、构建和部署搅成一锅粥,也是在提前抵押未来。
很多技术债,就是在一片掌声里借下来的。
规划的题目变了
初始规划仍然重要。
只是题目换了。
过去的问题是:第一次能不能选对?
现在还要补一句:第一次没有完全选对,未来能不能改?
这更接近真实世界。很多项目刚出生时,没人知道它以后会长成什么样。需求会变,团队会变,流量会变,商业模式会变,依赖的生态也会变。要求一个项目在第一天预见几年后的命运,有点像要求婴儿自己填写退休计划。
更可靠的办法,是给未来留通道。
接口边界清楚一点,领域模型干净一点,测试贴近真实行为一点,文档解释关键取舍一点,数据迁移方案保守一点。做这些事情并不显得时髦,却能让未来那个需要重构的人少骂几句。
那个未来的人,多半还是自己。
技术债像账本
技术债不会消失。
AI 消灭不了偷懒,消灭不了复杂业务,也消灭不了错误判断。只要软件还在现实世界里跑,债就会继续出现。区别在于,过去很多债像判决书,一盖章,人就被压住了;现在它更像账本,数额清楚,利息清楚,还款路径清楚,就有周转的可能。
这对独立开发者尤其要紧。
一个人做项目,最怕被早期选择困住。框架不合适,生态不顺手,架构越来越别扭,新功能写不动,旧代码不敢改。项目还没死,开发者先被自己的代码磨没了兴致。
AI 给小团队和个人开发者多发了一张返程票。
可以先用熟悉的方案把东西做出来。可以试一个新框架验证想法。可以在产品还小的时候换底座。也可以在业务长出新形态后,重新整理分层,少往旧结构上贴膏药。
不过每一次心血来潮都喊重构,系统很快会被喊散。
重构要让系统更接近业务本身,要降低未来变化的阻力,要把散乱的概念重新摆正。追新名词、换新皮肤、给简历添技术栈,这些事情可以做,别借重构的名义。
有自由,也要有纪律
AI 把一部分沉重的重复劳动从程序员肩上搬走了。
这很要紧。
程序员最宝贵的能力,从来都不是把同一类代码改一千遍。更重要的是判断什么值得改,什么该留下,什么只是暂时能用,什么以后会勒住脖子。
有了 AI,重构少了一点悲壮感。它可以更日常,更频繁,也更像工程本来的样子:观察系统,发现问题,调整结构,验证行为,继续前进。
自由需要纪律托住。
敢试,也要会收拾;敢开工,也要敢推倒;不迷信第一次选择,也不轻慢长期结构。设计文档、测试用例、业务边界和发布纪律,就是这种自由的地基。
以前的软件项目,常常像被第一次技术选型押上轨道的列车。轨道歪了,车也只能一路冒烟往前开。
AI 时代,轨道终于没那么神圣了。
路可以改,桥可以重修,车也可以换。目的地要清楚,沿途要有标记,每一次改道要经得起验证。做得到这些,程序员就不必把早年的选择当成一生的枷锁。
AI 没有替程序员免去判断。
它只是把那堵由重复劳动砌成的墙打矮了一点。墙矮了,人可以看见远处的路。
看见了,还得自己走。