Skip to content
imshengli blog
Go back

AI 原住民开发者:当编程遇上大模型

一个全栈工程师的 AI 辅助开发实践:工作流、边界、思考,以及为什么 Prompt Engineering 是新时代的必修课。

· 11 min

开场:一个普通工作日的变化

两年前,我遇到一个不熟悉的 API 报错,第一反应是打开 Google,翻 Stack Overflow,看文档。

现在,我直接把错误信息丢给 Claude,附上相关代码上下文,30 秒内拿到可能的原因和修复方案。

这不是什么革命性的宣言,只是一个事实:开发者的信息获取方式,已经从”搜索-筛选-拼接”变成了”描述问题-获得方案-验证执行”

我的 slogan 是 “I ship code that thinks”。不是说代码会思考,而是在写代码的每一步,都有一个能思考的 AI 在旁边。这篇文章记录的,是我作为一个 AI 原住民开发者的真实工作方式。


一、工作方式的根本转变

从搜索到对话

传统开发流程中,“查资料”占据了大量时间。你需要:

  1. 把问题抽象成关键词
  2. 在搜索结果中筛选有效信息
  3. 从多个来源拼接出解决方案
  4. 适配到自己的代码上下文

现在这个过程被压缩了。你可以直接用自然语言描述问题,附上代码片段,AI 会基于你的具体上下文给出建议。

// 以前:Google "typescript generic constraint conditional type"
// 现在:直接问

Prompt: "我有一个泛型函数,需要根据传入类型是否包含 `id` 字段
来决定返回类型。怎么用 conditional type 实现?"

关键区别:搜索引擎不知道你的上下文,AI 知道

从写代码到审代码

另一个显著变化:我写的”原始代码”变少了,但我审的代码变多了。

AI 生成代码的速度远超人类手写,但它生成的代码需要被审查。这意味着开发者的核心能力从”写出正确的代码”转向了**“判断代码是否正确”**。

这其实要求更高——你得理解代码应该怎么写,才能判断 AI 写的对不对。


二、实际工作流:我用 AI 做什么

1. 代码生成:脚手架和样板代码

最直接的场景。重复性高、模式明确的代码交给 AI:

// Prompt: "生成一个 Express middleware,
// 验证 JWT token,失败返回 401,
// 成功把 decoded user 挂到 req.user 上"

// AI 生成:
import { Request, Response, NextFunction } from "express";
import jwt from "jsonwebtoken";

interface AuthRequest extends Request {
  user?: jwt.JwtPayload;
}

export function authMiddleware(
  req: AuthRequest,
  res: Response,
  next: NextFunction
) {
  const token = req.headers.authorization?.replace("Bearer ", "");

  if (!token) {
    return res.status(401).json({ error: "Token required" });
  }

  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET!);
    req.user = decoded as jwt.JwtPayload;
    next();
  } catch {
    return res.status(401).json({ error: "Invalid token" });
  }
}

这类代码我几乎不需要修改就能用。省下的时间花在业务逻辑上。

2. 调试:从症状到根因

AI 在调试场景的价值被严重低估。特别是那种”看起来应该没问题但就是不对”的 bug:

Prompt: "这段代码在并发场景下偶尔会返回错误结果。
同一个用户连续发两个请求,第二个请求有时候拿到的是第一个请求的数据。
代码如下..."

AI 通常能很快定位到 race condition 或者闭包引用问题。人眼看代码容易忽略时序问题,AI 不会。

3. Code Review:多一双眼睛

我会把 diff 丢给 AI 做第一轮 review:

Prompt: "Review 这个 PR diff,关注:
1. 是否有潜在的性能问题
2. 错误处理是否完整
3. 是否有安全风险
4. 代码风格是否一致"

AI 不会漏掉明显的问题(未处理的 null、缺失的 error boundary、硬编码的密钥),这些都是人在快速 review 时容易忽略的。

4. 文档:把代码意图翻译成人话

写文档是大部分开发者的痛点。AI 在这方面极其好用:

5. 架构设计:白板上的对话伙伴

这是我觉得最有价值但最容易被忽视的场景。

设计一个新系统时,我会把需求描述给 AI,让它列出可能的方案和 trade-off:

Prompt: "我需要设计一个消息队列消费者,要求:
- 支持重试,最多 3 次
- 失败消息进死信队列
- 消费幂等
- 单个 consumer 处理多种消息类型

给我 2-3 种设计方案,分析各自的 trade-off。"

AI 不会替你做决策,但它能快速展开选项空间,让你在更完整的信息下做判断。


三、边界和局限:AI 做不了什么

用了两年 AI 辅助开发,我对它的边界有比较清晰的认识。

幻觉(Hallucination)

这是最大的问题。AI 会非常自信地给出错误答案。

典型场景:

应对方式:永远验证。AI 的输出是”建议”,不是”答案”。特别是涉及第三方库的 API,一定要对照官方文档。

上下文窗口

即使是最先进的模型,上下文窗口也是有限的。当你的项目有几十个文件相互依赖时,AI 无法同时理解所有代码的关系。

应对方式

安全审计

AI 可以发现明显的安全问题(SQL 注入、XSS、硬编码密钥),但它无法替代专业的安全审计。

原因:

系统设计中的权衡

AI 能列出选项,但做不了最终决策。因为决策需要理解:

这些都是 AI 没有的上下文。


四、Prompt Engineering:开发者的新必修课

很多人觉得 Prompt Engineering 是玄学,是”和 AI 聊天的技巧”。

不是。它本质上是精确表达需求的能力

好 Prompt 的特征

// 差的 Prompt
"帮我写个排序"

// 好的 Prompt
"实现一个针对大数据量(100万+条记录)的排序函数:
- 输入:对象数组,按指定字段排序
- 要求:支持多字段排序,支持升降序
- 约束:内存敏感,不能一次性加载所有数据
- 语言:TypeScript,需要类型安全
- 测试:给出边界 case 的测试用例"

你看,好的 Prompt 其实就是好的需求文档。而写好需求文档,本来就是工程师应该具备的能力。

Prompt 即接口

换个角度看:Prompt 就是你和 AI 之间的接口(interface)。

接口设计的原则在这里同样适用:

System Prompt 是架构设计

如果你在搭建 AI 辅助工作流(比如用 Claude Code),System Prompt 的设计就是架构设计:

这跟设计一个微服务的接口契约没有本质区别。


五、实践建议:如何开始

如果你还没有把 AI 融入日常开发,以下是我的建议:

从低风险场景开始

建立验证习惯

投资你的 Prompt

保持独立思考


六、展望:不是取代,是进化

“AI 会取代程序员”这个说法,和”Excel 会取代会计”一样不准确。

更准确的表述是:会用 AI 的开发者,会取代不用 AI 的开发者

原因很简单:效率差距会越来越大。

一个用 AI 的开发者,能做到:

而”真正需要创造力的地方”才是开发者不可替代的价值:

最后

编程这件事,正在从”用代码实现需求”变成”用代码+AI 实现需求”。

工具在变,但核心能力没变:理解问题、设计方案、做出判断

AI 是有史以来最强大的编程工具。和任何工具一样,关键不在于工具本身,而在于使用它的人。


I ship code that thinks. 你呢?


Share this post on:

Previous Post
当 AI 成为你的 API 用户:Agent-Friendly API 设计指南
Next Post
为什么你的 Agent 跑不了长程任务?