最近一直在用 Claude Code 写代码,越用越觉得:AI 能力越强,软件工程的价值反而越凸显。这篇是从一个 Code Agent 用户的视角,整理一下我对这个问题的思考。
核心逻辑
LLM 上下文窗口有上限,拉长上下文会带来注意力稀释、输出质量下滑。即便依靠上下文工程(Context Engineering)缓解,随着项目代码体量膨胀,依然会出现代码臃肿、项目难维护、性能失控。
AI 擅长写片段代码,但不会自动产出高质量、可长期维护的工程系统。所以人这一侧需要补上"做正确的系统"这一课。
一、这个背景下,重点要学的软件工程板块
1. 系统架构与模块拆分
不要把大项目全部丢给 LLM。学会合理做模块划分、边界定义、依赖隔离,把大系统拆成多个小的独立单元,刚好适配 LLM 有限上下文,每次只让 Agent 处理局部模块。
重点:高内聚低耦合、接口契约设计、分层设计。
2. 项目工程规范体系
代码规范、目录结构、命名规范、依赖管理、版本控制(Git)、CI/CD 流水线。AI 生成代码风格飘忽,统一规范可以约束 Agent 输出,减少后期整改成本;版本控制更是兜底,防止 AI 大面积改写搞坏项目。
3. 测试工程能力
单元测试、集成测试、契约测试。LLM 很容易写出能跑但暗藏 bug、边界 case 缺失的代码。不能只靠 AI 自测,人要会设计测试用例,用测试去校验 Agent 产出,把测试作为约束 AI 输出质量的手段。
4. 上下文工程(Context Engineering)
属于适配 LLM 开发的新型工程能力:
- 文件选取策略
- 提示词编排
- 知识库检索(RAG)
- 代码切片
- 上下文过滤
只把当前任务相关代码喂给模型,而不是整个仓库。用来缓解上下文长度不足、注意力分散问题。
5. 可维护性与技术债务管理
识别 AI 带来的技术债务:AI 快速堆出来的代码常出现重复、硬编码、逻辑混乱。学习重构、解耦、代码评审方法,定期清理 AI 遗留债务,避免项目越迭代越失控。
6. 性能、安全与错误处理
LLM 生成代码经常忽略异常捕获、资源释放、性能损耗、安全漏洞。需要掌握性能分析、异常处理、安全校验,对 Agent 产出做审查把关。
二、现有 Code Agent 已经具备的能力
| 能力 | 说明 |
|---|---|
| 局部代码生成与修改 | 针对单个函数、单个文件完成编码、重构、bug 修复;理解给定片段代码逻辑 |
| 基础上下文工程 | 自动检索项目相关代码片段,把相关文件拉入上下文 |
| 基础版本交互 | 读取 Git 变更,基于现有修改继续迭代代码 |
| 简单测试生成 | 可以为给定代码片段生成单元测试样例 |
| 基础代码格式化 | 按照指令调整代码风格、注释文档 |
局限:大多只擅长局部任务,缺少全局项目视角。
三、当前 Code Agent 明显薄弱的方向
这块是我自己用下来的痛点,列出来供大家参考:
全局架构把控弱
很难完整理解百万行级项目整体架构,容易破坏原有模块边界,写出破坏系统设计的代码。只看到局部,看不到全局依赖影响。
技术债务感知不足
不会主动识别自己产出带来的债务,为了完成当前任务,会堆砌临时方案,不会主动做整体重构。
复杂多模块协同设计差
跨多个模块、多个文件的大规模改造,容易出现接口不匹配、模块联动出错。
测试只做表层
大多生成样板测试,很难挖掘业务边界、异常场景,不会完整设计整套测试策略。
性能、安全风险自动识别有限
经常写出存在性能瓶颈、安全隐患代码,不会主动做性能评估和安全审计。
长期项目演进能力缺失
不负责项目版本演进规划,无法自主做版本规划、依赖升级、兼容性处理。
四、作为使用者,你需要做的努力
1. 承担架构师角色,把控全局
不要把整个项目全权交给 Agent。由人定义系统架构、模块边界、接口契约,把大任务拆解成小任务,分配给 Agent,限定 Agent 只能在指定模块范围内工作。
2. 做好上下文管控
善用上下文工程,不要把整个仓库丢给模型。每次只提供当前任务真正需要的代码、文档;做好代码切片,过滤无关内容,规避上下文过长导致质量下降。
3. 建立约束规则,输入给 Agent
把项目规范、目录规则、编码约束、安全要求写进提示词或者项目知识库(CLAUDE.md 之类),约束 AI 输出,减少不合规代码。
4. 严格审查 AI 输出产物
AI 输出不等于可用代码。必须做代码评审:检查逻辑、边界、性能、安全、是否破坏原有架构。不要直接无脑采纳。
5. 用测试来校验产出
人来定义测试目标与关键用例,让 Agent 辅助生成测试,运行测试验证代码正确性;发现问题再反馈迭代。
6. 管理技术债务
定期对 AI 生成代码做重构优化,不能一味堆功能;利用 Git 做好版本备份,出现 AI 改崩代码可以回滚。
7. 分清分工边界
| 角色 | 职责 |
|---|---|
| Agent | 高效编码助手,负责实现细节 |
| 人 | 需求、架构、方案决策、质量把关 |
AI 越强大,人的工程判断能力越不能缺位。
总结
AI 代码助手擅长"实现",但不擅长"做正确的系统",软件工程就是用来弥补这个差距。
LLM 不会替代软件工程师,反而把工程师的工作重心从"写代码"推向了"做决策":架构怎么拆、规范怎么定、测试怎么覆盖、债务怎么管。这些判断才是项目能不能长期跑下去的关键。