AI 编程工具正在改变开发者的工作方式。
以前,一个功能可能需要搜索半天文档,调试几个小时 Bug,现在通过 AI 辅助,很多工作几分钟就能完成。
但是,很多开发者使用 AI 的方式并不正确:
- 把 AI 当成自动写代码机器
- 复制粘贴 AI 生成的代码,从不验证
- 不会写提示词,只会问一句「帮我写代码」
最终结果就是:
AI 没有提高效率,反而制造了更多问题。
真正高效的 AI 编程方式,是让 AI 成为你的 技术助手、代码审查员和思维伙伴。
本文将系统介绍:
- AI 擅长什么,不擅长什么
- 如何写高质量 Prompt
- 如何让 AI 辅助开发
- 如何使用 AI Debug
- 常见 AI 编程场景
- 如何避免被 AI 降低开发能力
一、AI 编程的边界——它擅长什么,不擅长什么
在开始使用 AI 编程之前,首先要明确它的能力边界。
对 AI 抱有不切实际的期望,是很多开发者失望的主要原因。
AI 很强,但它并不是万能程序员。
AI 擅长的事情
1. 写重复性代码
AI 最擅长处理规则明确、模式固定的代码。
例如:
- CRUD 接口
- 数据模型
- 配置文件
- 单元测试
- 表单代码
- API 请求封装
这些代码通常没有太多创造性,因此 AI 生成质量非常高。
例如:
根据 User 表生成增删改查接口
这种任务 AI 几乎可以秒完成。
2. 解释代码
面对一段陌生代码:
“`javascript
const result = await Promise.all(
users.map(async user => {
return await getUserInfo(user.id)
})
)
你可以直接让 AI:
帮我逐行解释这段代码,并说明执行流程。
AI 在代码阅读和解释方面,往往比搜索引擎更加高效。
3. 代码转换
AI 非常擅长格式转换。
例如:
- JSON 转 TypeScript 类型
- SQL 转 ORM 查询
- Python 转 JavaScript
- Java 转 Go
- 普通函数改成 Promise
- JavaScript 改 TypeScript
示例:
{
"name": "Tom",
"age": 18
}
转换:
interface User {
name: string;
age: number;
}
这种任务 AI 基本不会出错。
4. 正则表达式
正则一直是很多开发者的痛点。
以前:
写一个邮箱验证正则,搜索半小时。
现在:
直接告诉 AI:
帮我写一个正则:
1. 匹配国内手机号
2. 支持 11 位
3. 支持空格分隔
4. 解释每一部分含义
AI 不仅生成代码,还会解释规则。
5. Debug 辅助
把错误日志直接发送给 AI:
这是我的报错:
Cannot read properties of undefined
请分析原因,并给出排查步骤。
AI 可以帮助:
- 定位错误位置
- 分析可能原因
- 提供修复方案
虽然不是百分百正确,但可以大幅减少排查范围。
6. 文档生成
AI 非常适合生成:
- API 文档
- README
- JSDoc
- 注释
- 技术说明
例如:
帮我给这个函数生成标准 JSDoc 注释。
几秒钟即可完成。
AI 不擅长的事情
1. 理解复杂业务逻辑
你的业务规则:
- 为什么这么设计
- 为什么不能这样处理
- 用户真实需求是什么
这些 AI 并不知道。
它可能生成:
看起来正确,但是业务错误的代码。
2. 架构设计
AI 可以提供架构建议:
例如:
- 微服务
- 单体应用
- DDD
- MVC
但是最终选择必须由开发者决定。
因为 AI 不知道:
- 团队规模
- 历史代码
- 运维成本
- 业务发展方向
3. 安全相关代码
以下内容不能完全交给 AI:
- 登录认证
- 权限控制
- 加密算法
- 支付逻辑
- 数据安全
AI 可能生成:
可以运行,但是存在安全漏洞的代码。
4. 创新解决方案
AI 本质上是在已有知识基础上生成答案。
它擅长:
组合已有方案。
但真正:
从 0 到 1 的创新设计
仍然需要人完成。
一句话总结:
AI 是你的副驾驶,不是你的替身。它帮你踩油门,但方向盘必须在你手里。
二、提示词的艺术——如何让 AI 给出高质量答案
Prompt(提示词)决定 AI 输出质量。
同样一个 AI:
不同的人使用,结果可能完全不同。
原则一:提供上下文,不要裸问需求
错误:
帮我写一个登录接口
正确:
帮我使用 Express + TypeScript 写一个登录接口。
技术栈:
Node.js 18
Express 4.x
TypeScript 5.x
数据库:
PostgreSQL
ORM:
Prisma
认证:
JWT
access token:
15分钟过期
refresh token:
7天过期
密码:
bcrypt 加密
需要处理:
1. 用户不存在
2. 密码错误
3. 用户禁用
返回格式:
{
code:number,
data:any,
message:string
}
原则:
把你知道的信息全部告诉 AI。
上下文越完整,答案越准确。
原则二:给示例,让 AI 模仿
AI 非常擅长学习你的代码风格。
例如:
已有代码:
const user = await User.findById(id);
if (!user) {
throw new NotFoundError('用户不存在');
}
告诉 AI:
请按照上面的代码风格,
实现根据邮箱查询用户。
如果不存在,抛出同样错误。
生成代码会保持一致。
原则三:复杂任务拆分
不要:
帮我写一个完整博客系统。
推荐:
第一步:
设计博客系统数据库结构。
第二步:
根据数据库设计 API。
第三步:
实现创建文章接口。
第四步:
实现前端文章列表。
拆分任务:
AI 输出质量会明显提升。
原则四:告诉 AI 你的水平
例如:
我是一个 3 年 React 开发者,
正在学习 Node.js 后端。
请使用专业方式解释,
不要过度简化。
或者:
我是 JavaScript 新手。
请用简单语言解释异步。
AI 会自动调整回答深度。
三、写代码——让 AI 写,但你负责审核
正确方式:
不是:
AI 写完 → 直接上线
而是:
AI 写初稿 → 人审核 → 测试 → 优化
AI 编程推荐流程
第一步:让 AI 理解需求
不要马上写代码。
先:
请不要写代码。
请用自己的话复述我的需求,
确认你理解正确。
这一步可以减少大量错误。
第二步:生成伪代码
理解正确。
请先写实现步骤和伪代码,
不要写正式代码。
先确认逻辑。
第三步:生成代码
逻辑确认无误。
现在生成完整代码。
第四步:生成测试
请帮我为这个代码编写 Jest 单元测试。
测试可以发现隐藏问题。
第五步:代码审查
让 AI 自己检查:
请检查代码:
1. 是否存在性能问题
2. 是否存在安全风险
3. 是否遗漏边界情况
4. 是否可以优化
很多问题会在这里被发现。
四、Debug——AI 最强大的能力之一
很多开发者只用 AI 写代码。
实际上:
AI Debug 能力可能比写代码更强。
直接发送错误日志
例如:
错误:
Uncaught TypeError:
Cannot read properties of undefined
代码:
(粘贴代码)
请分析原因,并提供解决方案。
AI 作为橡皮鸭调试助手
程序员有一种经典方法:
橡皮鸭调试法
通过向别人解释问题,自己找到答案。
现在 AI 就是一个智能橡皮鸭。
例如:
我的 React 组件存在问题。
useEffect 获取 state 总是旧值。
请不要直接告诉答案,
通过提问引导我分析。
AI 可以帮助你建立排查思路。
五、AI 编程实际应用场景
场景一:阅读陌生项目
例如:
这是 Node.js 项目入口文件。
请分析:
1. 项目核心功能
2. 模块依赖关系
3. 请求执行流程
场景二:生成 Git 提交信息
输入:
修改内容:
- UserService 新增 resetPassword
- emailService 支持 HTML 模板
- 新增 POST /api/user/reset-password
输出:
feat(user): add password reset functionality
场景三:SQL 优化
例如:
SQL 查询很慢。
数据库:
users:
50万数据
orders:
200万数据
请分析性能问题,并提供优化方案。
AI 可以帮助:
- 分析索引
- 优化 SQL
- 调整查询结构
六、不要让 AI 降低你的能力
AI 最大的问题:
它可能让开发者变懒。
常见情况:
以前:
- 自己研究正则
现在:
- 全问 AI
以前:
- 看官方文档
现在:
- 直接问 AI
以前:
- 自己分析 Bug
现在:
- 直接复制错误日志
长期下来:
基础能力会下降。
正确方式
1. AI 给答案后问为什么
不要只拿结果。
问:
为什么这样解决?
为什么使用这个方案?
2. 定期脱离 AI
建议:
每周安排时间:
- 手写代码
- 阅读源码
- 查看官方文档
保持自己的技术能力。
3. 永远验证 AI 输出
不要:
复制 → 粘贴 → 上线
正确:
生成:
↓
阅读:
↓
测试:
↓
上线。
总结
AI 辅助编程正确姿势:
1. AI 出草稿,你做决策
AI 可以写代码,但最终质量由开发者负责。
2. Prompt 决定结果
好的输入:
上下文 + 示例 + 分步骤
才能得到好的输出。
3. 保持基本功
AI 是工具,不是拐杖。
真正强大的开发者:
不是不用 AI,
而是能够驾驭 AI。
未来的开发竞争力:
不是谁写代码更快,
而是谁更懂得:
如何让 AI 帮自己解决问题。