使用最新的 Claude 4,我用两天就开发出一个视频编辑器,但却无法维护
上图是我这两天用 ClaudeCode (Claude 4)Vibe Coding 的成果,一个复杂的视频编辑器,有基本功能,能加入元素,能播放。但我不是在这里吹 Claude 4 编程多厉害的,恰恰相反,我无法基于这个项目继续开发维护,不是代码不厉害,而是一个仅仅靠 AI 开发的负责系统,几乎是不可维护的!
首先说一下我是怎么开发这个项目的:
- 找到个视频编辑器网站,Vue 开发的,下载它编译好的js脚本
- 使用 ClaudeCode,让它把脚本反编译成 VUE + TypeScript 代码,完成的相当好,几乎完整的还原了原始代码 顺便说一下,编译后的 js 文件有 6 万多行,但是它能通过关键字查找,找出来相关的内容,并反编译
1. 继续使用 ClaudeCode,让它把 VUE 代码用 React 代码重写(因为我不会 VUE),使用 jotai 作为状态管理,它完成的相当相当好,帮我把 VUE 代码用 React 重写了,包括重新使用了新的状态管理框架
但是刚开始的结果,它无法直接运行,需要凭借我的专业知识解决一些问题,这些问题完全靠 AI 是无法解决的,因为你甚至很难描述清楚是什么问题,当你能描述清楚问题,其实你就可以自己解决了。
花了几个小时让它可以运行了,但是问题来了,测下来 Bug 一大堆,这些 Bug 都是牵一发而动全身,人很难修改。
让 AI 修改 Bug 的问题在于:
- 你无法准确描述这些 Bug,如果你都无法描述 bug,AI 没法帮到你
- 很多 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 编程,提升编程效率已经毋庸置疑了,如何提升工程能力还有很多挑战。
上面的内容发布到 X 和微博后,跟网友有很多讨论,把其中一些讨论内容也摘录到这里。
Terminator(@autogpt5): 这只能说明传统的程序开发方式落伍了。程序员根本无法理解AI写的出来的复杂工程,更加别提维护升级了。 所有工作都只能由AI来完成。 当然这些传统程序员不认为是自己的问题,他们只会认为是AI写的烂没有工程能力。他们会狡辩到:我们以前都是先定架构再拆分模块然后选择线程通信方式,像极了当年孔乙己 A: 对于这样的观点,只能说代表了一部分不懂软件开发人不切实际的幻想,以为能很快就发明不需要程序员参与的纯 AI 开发的软件,但现实是这样的路还很遥远,真实现了那就是 AGI 了。
hahagood (@hahagood): 既然说 2025 年是 agent 之年, 有没有可能未来的"软件工程", 变成 agent 工程? 类似 n8n 那种, 把一系列的功能模块用一个工作流串起来. A: AI 之前,从刚有软件工程开始,软件工程就想学习建筑工程,把软件模块化标准化,但这么多年发展下来,以 web 前端为例,已经有相当多的标准化 UI 组件了,典型的比如shadcn/ui,但依然难以仅仅靠模块化搭建复杂的系统。
工作流、低代码也做了好多年了,但结果也都看到了,Happy Path 很好,偏离 Happy Path 一点就不行,几乎没有真正做成的。
归根结底还是软件系统需求的多样性和复杂性,导致模块之间的组合太多太复杂,模块大了无法灵活变化,要响应复杂的变化模块就要小,模块一小就导致组合太多,模块组合一多就不稳定不好维护。
建筑行业相对好模块化是因为它有明确的标准,比如尺寸、形状、材料等等,按照这个标准做出来就能灵活应用。但软件的模块是很难标准化的,UI 有各种不同的元素,标准的几种组件是不够用的;服务之间又有很多不同的接口协议,基于接口协议又有无数的数据格式,还要考虑同步和异步;一次性返回结果还是流式的……。所以模块化标准化这件事,一直在努力,但路还很漫长,并不会因为 AI 加入就突然解决了。
马天翼 (@fkysly): 这个跟人写没区别,人也可能写错,保证工程质量可靠肯定是靠测试,而不是靠写代码本身了。在这一点上,AI 写测试的效率更高。 A: 人和AI写代码有区别的,人可以全局的看系统,专业的软件工程师写的时候可以站在全局考虑模块之间的关系,AI 还不能全局考虑。
保证工程质量靠测试远远不够,测试只是检验工程质量是不是稳定,保证工程质量还需要依赖架构设计:去转移复杂度让系统好维护,拆分模块让独立模块稳定起来再让整个系统稳定起来。
另外还有一点,AI 的测试并不能保证覆盖到足够的场景,现实中的软件都是在实际使用中根据使用场景逐步完善测试覆盖的,而这种跟现实场景的交互和反馈恰恰是 AI 欠缺的。
马天翼 (@fkysly): 反正我从来不管推上人说的啥 vibe coding 这不行那不行的,偷摸赚到钱就行,可维护不可维护的问题,那只是 AI 代码生成的太多,需要去理解。而且可维护并不代表人维护,AI 维护也是维护,只要最终系统是对的,谁的代码并不重要 A: “只要最终系统是对的”,是这样没错,但难的恰恰是“如何判断系统是对的?”,一个简单的模块,通过单元测试就知道对不对,一个复杂的系统,怎么让 AI 知道它对不对就太难了!如果 AI 不能自己知道对不对,就需要人去干预,那你就无法让 AI 帮你“自动”维护。
NeonByte (@ByteNeon): 不是这样的,vibe coding不是让AI托管代码的正确方式,把代码托管给AI需要一套完善的设置for AI,另外说AI不擅长架构也是不对的,在我的实践中,AI架构设计能力远强于人类,现在说AI能力不行,真的是为AI服务的思路不对,为AI服务的工程配套不对 A: AI 的架构设计属于纸上谈兵,你让它去面试架构设计,应该是很厉害的,但是你真让它按照需求设计一个系统,简单的也没问题,复杂的一定不行,因为它无法完整的理解背景信息,因为很多信息你都无法用语言、图片甚至视频来表达。
至于说“代码托管给AI需要一套完善的设置for AI”,问题在于这样的设置存在吗?
NeonByte (@ByteNeon): 我让他做的设计基于现有系统,设计数据库,databus,ES,数据流转,消息如何处理,常见的系统服务也没超过这个架构,我不知道这算不算复杂? A: 为什么说 AI 是纸上谈兵呢?因为架构师不是画个系统架构图就是会设计架构了,架构师的职责远不止是列出有几个系统,还需要:
- 满足原始需求
- 经济可行
- 能实施(能变成代码还能运行)
- 好维护
请问 AI 设计的架构能满足几点呢?能把设计出来的架构变成代码吗?好维护吗?
Aries (@AriesYangMen): 有没有可能已经不需要模块化了,一个项目只有一个文件,AI处理好这个文件就行了。模块的存在是给人类方便维护发明的,AI不需要 A: 如果还是代码这种方式构建软件,并且 AI 上下文窗口不足够长,并且代码还需要维护,那么还是要模块化
Chase Passion (@ChasePassi79437): 一个大的agent设计架构,拆分任务,把任务划分给下面很多个小的agent,由agent去实行就跟正常的人类团队协作一样,未来应该是这样的,目前市场上已经出现了可以执行单个任务的agent,比如codex这种 A: 这种妄想着让 Agent 去当架构师设计架构,拆分模块,再委派给小 Agent 去协作执行任务,不能说未来不行,但短期是几乎不可能的。需要有几个前提:
- 上下文窗口必须足够长,这个负责架构的 Agent 需要拥有这个项目所有的上下文信息,从需求到代码,都要清楚的知道,否则无法拆分、无法验证
- 需求的信息必须要能精准的描述,举例来说,如果你要做一个淘宝网站,那么你要怎么让 AI 知道你的每一个需求细节?如果你不能让 AI 完整的理解需求,再厉害的 AI 也无法设计出合适的架构
- 设计好的架构,不是设计完就完了,还要在实施时,确保能按照架构设计实施,变成代码,如果出现情况无法实施或者成本巨大,就需要对架构做出重新调整,这个过程中,要么要让 Agent 能实时对环境感知和执行,要么就需要人参与其中。
这些条件短期都是很难实现的,复杂系统的架构设计还是离不开人的重度参与。
CYan (@Yn3_3nY) 宝玉老师,不知道可以不可以这样理解,在ai深度参与编程下,开发者逐渐失去了对代码(库)的控制? A: 取决于开发者的水平和开发方式,一次性生成很多代码并且不稳定,不仅无法控制,甚至人和 AI 都无法维护。 但如果是开发者自己设计好(哪怕是和AI结对设计),然后一个模块一个模块去开发,并测试稳定,最后再合并在一起再测试稳定,中间借助 AI 生成代码,是可以让系统稳定的
高级分析师 (@techeconomyana) 但其实反过来说,如果你自己拆好了架构,每一个小模具要AI来写不就是小刀切黄油,非常丝滑了。 A: 是的,对于 AI 来说,小模块生成很厉害,但合理的拆分还是很有挑战的事情,然后你还要能对模块精确描述,不要小瞧“精确描述”,也不容易
@Chaaaaz: 或者可不可以理解,工程能力只是人类对于复杂事物管理的力不能及,所以需要工程化帮我们管理维护减少重复劳动,但是既然是AI,那就让它去做好了,哪怕是重复劳动也不再是问题,毕竟最终我们要的是结果 A: “最终我们要的是结果”,是这样没错,但难得恰恰是“如何才能得到我们想要的结果”,简单的模块、写一篇文章、画一张图很容易,但是一个复杂的软件系统,如果你没有准确可靠的反馈系统,AI 无论迭代多少次,也无法得到正确的结果
@特等菌出爪事成: 宝玉老师,请问工程能力强但编程能力弱,要如何把编程能力提升到一定程度呢(大概什么程度够用)?现在是利用vibe coding在有需求的情况下现学。目标能与编程人员(或ai)无障碍沟通 A: 未来确实不需要你编码能力特别强,毕竟有 AI 可以加成,但即使有 AI 加成,也需要这些条件:
- 能把想要生成的代码写成 Prompt,让 AI 可以生成你想要的代码
- 能看出来好代码坏代码,知道怎么测试验证代码
- 出现问题能定位问题,能描述清楚问题,最终能解决问题
做到上面的就合格了,否则还需要多补习编码相关的知识。
@pieckk: 宝玉老师,这个项目,后续,如果继续和Claude合作,让他理出整个项目的大概框架和分为几个模块,输出文档,然后再进入每个模块让Claude继续分析模块运行的流程和代码,逐步深入,理出各个模块的框架,并看看各个模块有没有设计不合理的地方,继续修改。有没有机会让这个项目变得更可维护一些呢。 A: 这应该是相对比较稳妥可行的办法,也就是人深度参与其中,毕竟最终维护靠的还是人而不是 AI。
@黄建同学:短期内AI还只能是辅助开发,你要懂系统,知道如何把系统拆分好,让AI从一个小系统逐步往大了搭。@明风:工程能力其实就包括了架构能力和编码能力,编程能力不是独立于工程能力之外。AI缺的是整体架构能力,这是模型基础决定的,目前这条路无解,而Claude最新PR连续编码7小时,更加是泥潭深陷。 A: 这就像南辕北辙的 AI 版,如果 AI 无法看到全局就会偏离方向,AI 越聪明越能干,错的反而越远。