图1 是我这两天用 ClaudeCode (Claude 4)Vibe Coding 的成果,一个复杂的视频编辑器,有基本功能,能加入元素,能播放。但我不是在这里吹 Claude 4 编程多厉害的,恰恰相反,我无法基于这个项目继续开发维护,不是代码不厉害,而是一个仅仅靠 AI 开发的负责系统,几乎是不可维护的!
首先说一下我是怎么开发这个项目的:
1. 找到个视频编辑器网站,Vue 开发的,下载它编译好的js脚本
2. 使用 ClaudeCode,让它把脚本反编译成 VUE + TypeScript 代码,完成的相当好,几乎完整的还原了原始代码(图2)
顺便说一下,编译后的 js 文件有 6 万多行,但是它能通过关键字查找,找出来相关的内容,并反编译
3. 继续使用 ClaudeCode,让它把 VUE 代码用 React 代码重写(因为我不会 VUE),使用 jotai 作为状态管理,它完成的相当相当好,帮我把 VUE 代码用 React 重写了,包括重新使用了新的状态管理框架(图3)
但是刚开始的结果,它无法直接运行,需要凭借我的专业知识解决一些问题,这些问题完全靠 AI 是无法解决的,因为你甚至很难描述清楚是什么问题,当你能描述清楚问题,其实你就可以自己解决了。
花了几个小时让它可以运行了,但是问题来了,测下来 Bug 一大堆,这些 Bug 都是牵一发而动全身,人很难修改。
让 AI 修改 Bug 的问题在于:
1. 你无法准确描述这些 Bug,如果你都无法描述 bug,AI 没法帮到你
2. 很多 bug 是相互关联的,AI 可以修复单个 Bug,但是可能修了一个又会冒出更多的 Bug,准确来说 AI 没有全局概念(受上下文窗口长度限制),它一次只能读取一部分代码。
那么人类是怎么解决这个问题的呢?
复杂系统通常是从简单系统演化而来的,大部分系统一开始并不复杂,并且是一点点迭代而来,这个过程中,工程师能了解这个系统的各个细节,有问题能及时处理。
人类有架构师的角色,复杂的系统会有先有系统的设计,把复杂系统拆分成小的系统,小系统再拆分成小的模块,最终构成一个复杂系统。
一个稳定的复杂系统中的小问题是好维护的,但是一个复杂系统中一堆小问题,那么几乎是不可维护的,现实的复杂系统,通常都是反复迭代慢慢稳定下来的,要么是一个稳定的小系统逐步演化成大系统,要么是一个大系统有很多小系统,这些小系统都是稳定的。
那么 AI 能复制这条路或者找到新的解决方案吗?
首先想要复制这条路,目前制约的不是编程能力,我觉得 Claude 4 单纯编程能力已经是高级程序员的水平了,超过绝大部分程序员,制约的是工程能力。
什么是工程能力呢?
工程能力就是对整个项目的掌控能力,不仅仅是编程能力,涉及方方面面:
- 需求的理解
- 架构的设计
- 编码
- 测试
- 运维
举例来说,要做一个视频编辑器,你得先想清楚要做成什么样子,有什么功能,然后你得把它变成 UI/UX 设计,变成架构设计,架构设计要做好技术选型、要拆分成模块,还得设计好模块之间是怎么通信的,最后要把模块整合在一起变成一个完成的系统。
这里面模块级别的,AI 是足够胜任的,但是系统层面,模块一多 AI 就不行了,因为 AI 上下文窗口长度制约了 AI 从全局上理解、更新维护整个项目。虽然限制上下文窗口长度越来越大,但是大了后幻觉就厉害,短期内如果没有大的突破还是挺难解决好的。
另外就是 AI 对环境的感知能力还是不够强,比如这个 AI 做好的视频编辑器,它无法自己测试(其实 ClaudeCode 真的有测试,不过是基于网页抓取分析),对测试结果无法甄别,最多能根据错误日志去做一些修改,像 UI 上各种错误,根本感知不到问题。
所以现阶段来说,模块级别(千行以内)的编程开发, AI 已经非常强了,但是涉及到系统层面,AI 还帮不上太多。
对于普通程序员来说,不要再浪费时间去刷 leetcode 搞算法了,多提升系统设计能力和使用 AI 能力会更有前途。
不要被各种“炸裂”误导,比如有人说通过 Vibe Coding 做了一个复杂的视频编辑器,他们不会说的是这个视频编辑器只能用来 Demo 而且几乎无法维护。
现在 AI 编程,提升编程效率已经毋庸置疑了,如何提升工程能力还有很多挑战。
点击图片查看原图
点击图片查看原图
点击图片查看原图