01. 现实:代码不等于工程
Chris Kelly 认为,那些预测者可能已经很久没有接触过真正的生产系统了。AI 生成的代码仍然是代码,它需要运行、维护和调试。
复杂系统必然会失败
在复杂系统中,会涌现出不可预测的行为(Emergent Behavior)。当系统宕机时,需要人类理解这些细微差别并修复它。
大型代码库的惯性
在大公司(如 Meta),架构决策早已确定。工程师可能花六个月只做一个按钮。AI 在这种环境下的决策空间非常有限。
历史总是在重演
DevOps 和云转型没有消灭系统管理员,而是提升了他们的价值。AI 只是一个新的抽象层。拖拉机没有消灭农业。
02. “氛围编程”的陷阱
“氛围编程(Vibe Coding)”:让 AI 编写所有代码,自己却不加审查、不深入思考,只看结果是否符合预期就继续下一步。
Vibe Coder (凭感觉)
- ❌ 依赖 AI 进行思考和逻辑推理。
- ❌ 完全不检查或不理解生成的代码。
- ❌ 只关心功能是否实现(“能跑就行”)。
- ❌ 忽视性能、安全性和长期维护成本。
Professional Engineer (专业级)
- ✅ 为生产环境构建软件,承担责任。
- ✅ 追求“四个九”(99.99%)的可靠性。
- ✅ 处理数千用户和海量数据规模的挑战。
- ✅ 深入理解代码的细微差别和权衡。
“当软件在凌晨两点宕机时,‘氛围’是无法修复 Bug 的。”
03. 核心价值:超越代码生成
代码之于软件工程师,如同蓝图之于建筑师——它只是工作的产物(Artifact),而非工作本身。
“最好的代码就是没有代码。每一行代码都是负担,都需要维护和调试。”
— Jeff Atwood, Stack Overflow 创始人
我们过于关注 AI 能生成多少代码,却忽视了生成的越多,系统的负担就越重。工程师的价值在于做出决策和承担责任。
软件生命周期的工作构成(概念可视化)
LLM 擅长模式匹配,但它们不做决策。在复杂的生产系统中,维护和决策占据了主导地位。
软件工程师的核心工作是:
安全地变更软件
(Changing Software Safely)
04. 专业人士的 AI 实践指南
专业工程师是 AI 采纳最慢的群体之一,这很反常。但随着工具的成熟(从 GPT-3.5 到现在的 Agent 化),我们需要学会如何利用 AI 构建生产级软件。
A. AI 时代最关键的技能
代码审查 (Code Review)
随着 AI Agent 编写越来越多的代码,阅读他人(或 AI)代码并评估其优劣、风险和影响的能力变得至关重要。
我们应该面试的是代码审查能力,而不是解决深奥的 LeetCode 问题。
B. 构建易于 AI 协作的软件
秘诀在于:这听起来就是良好的软件工程实践。AI 需要和人类工程师一样的工具和环境才能高效工作。
文档化的标准和实践
明确团队的技术栈和编码规范,让 AI 了解代码库的发展方向。
可复现的开发环境
确保开发环境易于搭建且一致,避免过于定制化和独特性。
简易快速的测试
能够在本地快速运行测试,为 AI 提供即时反馈循环。
清晰的边界和任务定义
不要给 AI 模糊的指令。像对待团队成员一样,提供具体、清晰的任务描述。
C. 高效工作流:创建-精炼循环 (Create-Refine Loop)
不要期望 AI 一次性写出完美代码(人类也做不到)。采用迭代的方式:
定义需求,让 AI 生成计划文档(如 Markdown),并用作后续上下文。
让 AI Agent 根据计划文档执行任务,生成初始代码。
审查代码,进行必要的编辑和微调。关注代码质量而非个人风格偏好。
D. 实用技巧与心态调整
警惕拟人化
AI 像人一样说话,但本质是机器。不要轻信它的解释(例如“我只是粗略扫描了文件”)。它只是在基于模式生成文本。
接受风格差异
区分代码是“更好”还是仅仅“不同”。放下对风格的执念,只要功能正确且质量达标即可。让 Linter 处理格式问题。
编写规则文件
在项目中明确定义技术栈和编码指南 (Rules File),并将其提供给 LLM 作为上下文。
抽象的演进,专业的坚守
工作岗位不会消失,但我们需要适应新的抽象层级。保持专业,提升审查能力,拥抱变化,成为驾驭 AI 的工程师。
Happy Coding.