同样是 AI 编程,为什么有人越用越快,有人越用越乱?

相信有人跟我一样,在使用 AI 辅助开发的过程中发现一个现象:

同样是向 AI 描述一个需求,不同人得到的结果可能会有很大差异。

有些人只需要简单说明目标,AI 就能给出比较接近预期的方案;而有些人即使不断补充描述,结果依然容易偏离。
这种差异,很多时候并不是因为谁更会写 prompt,而是因为双方对问题本身的理解程度不同。

下面两句话虽然描述的是同一个需求,但它们提供给 AI 的信息量并不在同一个层次。

我做了一个网站,现在想让用户登录,登录以后服务器要知道这个人是谁,你帮我写一下这个功能。

写一段代码用于实现后端鉴权,使用 JWT 作为认证,前端只负责从 LocalStorage 中读写。

第一句话只描述了目标:认证身份。
至于认证应该放在哪里、使用什么方案、前后端如何分工,全部没有说明。

第二句话则已经给出了几个关键概念:

  • 后端鉴权
  • JWT
  • LocalStorage

这些词看起来只是几个技术名词,但实际上每一个都压缩了大量信息。
例如说“使用 JWT”,就已经排除了大量其他认证方案;说“后端鉴权”,意味着认证逻辑的主要职责在哪里;说“前端只负责从 LocalStorage 中读写”,又进一步划定了前端的职责边界。

所以第二句话并不只是“描述得更详细”。
它实际上是在用几个概念,一次性告诉 AI 大量已经做出的判断。

这也是我认为的,AI 编程中一个很容易被忽视的问题:
真正决定 AI 能做什么的,不只是你告诉它多少,而是你有没有能力用正确的概念告诉它。

概念是一种信息压缩

很多人会把专业概念理解为需要记忆的术语。
但实际上,概念更像是对大量经验的压缩。

例如,一个不了解软件工程的人可能会说:

我希望这个程序以后方便添加功能。

这是一个合理的需求,但它并没有说明具体应该如何实现。

而一个有经验的开发者可能会说:

这里需要降低模块之间的耦合。

这句话看起来虽然抽象,但背后包含了很多信息。
“降低耦合”这个概念,并不是为了让表达听起来更加专业,而是因为它已经包含了一套经过验证的问题模型。

因此,概念的价值在于:用较少的信息,表达更多已经被整理过的经验。

找到正确的问题边界

之前我提过,我做过一个图片站的桌面客户端。

当时这个网站本身已经有官方移动端,但网页端和移动端或多或少都存在使用上的不便。
因此目标并不是简单复刻网页,而是实现一个更符合自己需求的桌面客户端。

如果按照表面理解,问题可能是:

如何把这个网站做成桌面应用?

这样思考,很容易进入网页层面:

  • 页面结构(DOM)
  • 页面布局(CSS)
  • 前端逻辑(JavaScript)
  • 浏览器环境(Cookie、LocalStorage)

但仔细分析后会发现:网页只是这个服务提供给用户的一种表现形式。
真正需要的是:服务中的数据,以及访问这些数据的方式。

因此,我选择从官方移动端入手,分析它与服务器之间的数据交互,理解 API 的请求方式和数据结构。
这样问题发生了变化。

不再是:

如何模拟一个网页?

而是:

如何基于已有 API 开发客户端?

这两个问题看起来相似,但复杂度完全不同。
前者需要处理大量和核心需求无关的内容;
后者只需要关注:

  • 数据如何获取
  • 数据如何解析
  • 数据如何展示

最终实现的,也不是一个网页复制品,而是一个基于已有接口重新设计的桌面客户端。

好的抽象,是减少无关复杂度

这个过程里,真正重要的并不是某个具体技术。抓包只是手段。
更重要的是意识到:问题本身可能被定义错了。

很多时候,经验丰富的人并不是知道更多解决方案,而是能够更快找到正确的问题边界。
面对一个网站,新手看到的可能是:

网站
├── 页面
├── HTML
├── CSS
├── JavaScript
├── 浏览器行为
├── 网络请求
└── 数据

而理解系统之后,关注点可能变成:

客户端
├── API请求
├── 数据处理
└── 用户界面

大量复杂度并不是消失了,而是被发现不应该考虑。
这就是抽象的作用。

AI 能展开问题,但不能替你定义问题

这也是为什么 AI 使用效果会产生明显差异。

如果只告诉 AI:

帮我做一个图片站的桌面客户端。

它只能根据已有经验猜测。

但如果能够说明:

这是一个已有服务,需要通过 API 获取数据,客户端负责本地展示和管理。

AI 得到的信息完全不同。因为后者已经完成了一部分分析工作。

在架构设计中,真正重要的也不是记住多少技术方案,而是知道:

  • 系统的核心对象是什么
  • 哪些部分应该被拆分
  • 哪些复杂度是必要的
  • 哪些复杂度可以避免

AI 可以帮助我们把一个想法快速实现出来。 但在实现之前,仍然需要先完成一次抽象:

找到正确的问题,选择合适的概念,再让 AI 帮助展开。

2 个赞

我很认同文章把「抽象」拉进视野。像「耦合」这样的词,确实能让 AI 很快进入一套成熟的概念框架。

但对非程序员来说,这里还差一个前提:如果我不知道「耦合」这个概念,怎么想到用它?

所以除了知道抽象,还要知道怎么应对自己的抽象/概念缺失。我想到一个办法,也许这件事可以交给 AI。在描述完问题后,问他:

先不要写代码。请分析我描述的问题:在软件工程里,这类问题通常叫什么?涉及哪些常见概念?一个有经验的程序员会怎样重新描述这个需求?请用外行能理解的话解释。

这样做我不需要事先知道「耦合」,也可以让 AI 把相关概念找出来。

如果这篇文章是写给非程序员的,我觉得这一层值得展开。

确实应该写一写这方面的。主要是我已经很难想象完全不懂的人是怎么思考的了,所以就没有主动展开。你提到的这个方法挺好的。

记得我之前看过一篇关于怎么做web界面的文章,大意是让AI先提供几个参考方案,然后根据预览排除掉不喜欢或者不适合的,确认了目标之后再开工。

这就是专业程序员和野生程序员的真实差距吧。AI 把这个差距放大了

所以在编程工具和人之间,需要一名编程经理 :laughing:

愿意用ai编程的 其实现在 大部分是 对概念有一定了解的 没概念的人 描述都做不到

我属于那种拿ai搭农民房的,不知道拿ai建摩天大楼是啥感觉。我觉得就现在token花费的意愿,我还是可以停留在非术语化的舒适圈的。

这个还真不好说,我是见过不咋懂的人用 Vibe Coding 用得飞起的,自己做着玩怎么折腾都无所谓

是啊,不考虑 Token 成本当然是想怎么蹬怎么蹬,但一旦把这个因素考虑进来就得做权衡了
穷玩车富玩表,顶富用顶尖模型发Hello

没额度了就只能干瞪眼的大有人在(绝无任何暗示,doge)

所以说虽然AI时代已经来临,但是该学的还是得学,不然啥玩意都不懂,只能说你做个这个,你做个那个,最后结果纯抽奖……

我在维护lertaro(类listary的文件搜索工具)时感觉就极其明显,之前从来没有系统地搞过c#,维护起来就很麻烦,尤其是涉及到性能优化的方面,那真的是纯抽奖……

  1. 市面上没看到比较成熟的开源类似实现(没地方抄)
  2. 我本人非计算机专业,也没系统学过(不了解性能瓶颈的发生位置与原因)
  3. 再叠加上exfat、ntfs的兼容……

综上所述整个人都是懵的。

唯一的好消息是电脑配置太低,一般能比较方便地本地复现。然后一点点抓dmp、来回debug……维护得极其勉强……

充分可见不懂专业知识的即便能通过AI的协助,借助已有的其他语言知识触类旁通,但也通不了太多,专业的事还得专业的人来干。我至今也没整明白怎么优化追踪exfat磁盘的文件变化的占用。哪怕用户的issue都开到我脸上来了,我也还是修不了……
虽然我知道原因,但我就是修不了,难受……


by the way,everything真是绝了,怎么做到搜得又快,占用又低的(相对其他同类搜索软件),这是什么神仙级别的优化,体积还那么小

1 个赞