聊聊我最近折腾的AI编程工具到底哪个能打

日志观察员
2026-07-04 03:04
阅读 291

腾讯客户端搬砖三年,微信小程序业务线,入组快两年了。平时Mac写代码,Windows只配当测试机。最近在研究Rust,被所有权机制折磨得死去活来,但也确实觉得挺有意思。这篇文章算是我最近一段"技术探索"的总结,聊聊几个AI编程工具的真实体验。


事情是这样的

上周五晚上,产品跑过来说要加个小程序活动页,deadline是下周三。我当时正在看Rust的async/await,脑子还没切回来,一听这话血压就上来了。

"这需求上周不是评审过了吗?怎么又加?"

"老板说的,加个分享裂变功能,很简单的。"

简单个锤子。

我叹了口气,打开VSCode(别问为什么不用WebStorm,问就是习惯了),准备开干。但说实话,这种活动页的CRUD代码我写了快两年了,闭着眼睛都能写,但就是觉得累。不是身体累,是心累。

就在这个时候,我刷到了几个AI编程工具的消息:Bolt.new、OpenCode、还有JetBrains搞的Junie。

"要不试试?反正也是写搬砖代码。"

于是这个周末,我花了大概两天时间,把这三个东西都折腾了一遍。今天就来聊聊真实感受,不吹不黑,纯个人体验。

Bolt.new:说好的全栈神器呢

先说Bolt.new。这玩意儿在推特上被吹得神乎其神,说什么"一句话生成全栈应用"。我当时想,要是真这么猛,我以后还写个锤子代码。

打开浏览器,输入网址,界面确实挺清爽。我试着输入:

帮我做一个微信小程序的签到活动页面,需要有日历组件,
用户点击日期可以签到,签到后显示积分变化,
底部有一个排行榜展示前10名用户。

啪,大概等了十几秒,它真的给我生成了一个看起来还不错的页面。React写的,用了Tailwind CSS,日历组件也有,排行榜也有。

我当时心想:卧槽,这也行?

但高兴了不到三分钟,问题就来了。

第一个坑:它不懂小程序。

我忘了说是要做微信小程序,它给我生成的是个Web应用。虽然UI看着差不多,但小程序有自己的组件体系、API调用方式、路由机制,这些它完全没考虑。

第二个坑:状态管理一塌糊涂。

签到状态用的是最基础的useState,但我们的业务场景需要跟后端交互,需要处理并发签到、防重复提交、积分计算等等。它生成的代码完全没有这些考虑,就是一个纯前端demo。

第三个坑:改不动。

我想让它加个防抖逻辑,它加了。再让它改改接口调用方式,它改了。但改着改着,之前的功能就坏了。典型的"按下葫芦浮起瓢"。

我折腾了大概一个小时,最后放弃了。

说实话,Bolt.new适合什么场景呢?快速原型验证。如果你只是想给老板或者客户看一眼效果,它确实能帮你省不少时间。但如果要上生产环境,至少目前还不行。

| 维度 | Bolt.new 评价 |
|------|--------------|
| 上手难度 | ⭐⭐⭐⭐⭐ 零门槛 |
| 代码质量 | ⭐⭐ 能跑就行 |
| 业务理解 | ⭐ 基本不懂 |
| 可维护性 | ⭐ 改着改着就崩了 |
| 适合场景 | 原型、Demo、汇报 |

OpenCode:终端党的福音

说完Bolt.new,再聊聊OpenCode。

这玩意儿跟Bolt.new完全不是一个路子。它是一个终端里的AI编程助手,纯命令行操作。作为一个常年在Mac终端里摸爬滚打的人,我对这种工具天然有好感。

安装很简单:

npm install -g opencode

然后在项目目录里执行opencode,就进入了一个交互式的终端界面。

我试了一下,让它帮我写一个小程序的签到接口:

帮我用Node.js写一个签到接口,需要:
1. 校验用户是否今天已经签到
2. 计算连续签到天数
3. 根据连续天数计算积分奖励
4. 使用Redis做缓存,MySQL做持久化

它生成的代码让我有点惊喜:

const checkIn = async (ctx) => {
  const { userId } = ctx.state.user;
  const today = dayjs().format('YYYY-MM-DD');
  const redisKey = `checkin:${userId}:${today}`;

  // 先查Redis,防重复提交
  const exists = await ctx.redis.get(redisKey);
  if (exists) {
    ctx.body = { code: -1, msg: '今天已经签到过了' };
    return;
  }

  // 获取连续签到天数
  const yesterday = dayjs().subtract(1, 'day').format('YYYY-MM-DD');
  const yesterdayKey = `checkin:${userId}:${yesterday}`;
  const hadYesterday = await ctx.redis.get(yesterdayKey);

  const consecutiveDays = hadYesterday
    ? parseInt(await ctx.redis.get(`checkin:${userId}:consecutive`)) + 1
    : 1;

  // 计算积分,连续签到奖励递增
  const points = calculatePoints(consecutiveDays);

  // 写Redis
  await ctx.redis.set(redisKey, '1', 'EX', 86400);
  await ctx.redis.set(`checkin:${userId}:consecutive`, consecutiveDays);

  // 写MySQL,异步就行
  ctx.state.asyncTasks.push(() =>
    ctx.mysql.query(
      'INSERT INTO checkin_log (user_id, checkin_date, consecutive_days, points) VALUES (?, ?, ?, ?)',
      [userId, today, consecutiveDays, points]
    )
  );

  ctx.body = {
    code: 0,
    data: { consecutiveDays, points, totalPoints: await getUserTotalPoints(userId) }
  };
};

说实话,这段代码质量比Bolt.new强太多了。它考虑了防重复提交、连续签到逻辑、Redis缓存策略,甚至连异步写数据库都想到了。

但是,也有问题。

OpenCode的上下文理解能力有限。它不知道我们项目的具体架构,不知道我们用的是Koa还是Express,不知道我们的数据库表结构是什么样的。所以生成的代码虽然逻辑没问题,但要真正跑起来,还需要大量的修改和适配。

另外,它对项目整体的理解不够。我问它"我们项目的路由是怎么组织的",它一脸懵逼。它只能看到当前文件或者你手动喂给它的代码片段。

| 维度 | OpenCode 评价 |
|------|--------------|
| 上手难度 | ⭐⭐⭐ 需要会用终端 |
| 代码质量 | ⭐⭐⭐⭐ 逻辑清晰 |
| 业务理解 | ⭐⭐ 需要手动喂上下文 |
| 可维护性 | ⭐⭐⭐ 改起来还行 |
| 适合场景 | 写具体函数、工具类 |

JetBrains Junie:IDE里长出来的AI

最后说说Junie。

说实话,我对JetBrains家的AI工具一直抱有期待。毕竟IntelliJ IDEA我用了好几年了,它家的代码补全、重构功能确实做得好。如果AI能力也能融入进去,那体验应该会很丝滑。

Junie目前还在早期阶段,我是通过JetBrains Toolbox安装的。装完之后在IDE里多了一个侧边栏,可以跟AI对话,也可以直接让它在当前文件里生成代码。

我试了几个场景:

场景一:重构一段屎山代码

我们项目里有一段老代码,是之前离职的同事写的,嵌套了五六层if-else,看着就头疼。我把代码选中,让Junie帮我重构。

它给出的方案是用策略模式+工厂模式来重构,代码确实清爽了不少。而且因为它在IDE里,能感知到项目的其他文件,所以重构后的代码引用关系基本是对的。

这一点比OpenCode强,OpenCode根本不知道你的项目里有哪些类、哪些接口。

场景二:写单元测试

这个是我觉得Junie最实用的功能。选中一个函数,右键"Generate Test",它就能帮你生成单元测试。而且它会分析你函数的分支逻辑,尽量覆盖各种边界情况。

虽然生成的测试不能直接跑(总有些mock不到位的地方),但作为基础框架已经很不错了,改改就能用。以前写单测我最烦的就是搭框架、写mock,现在这部分工作基本可以交给它了。

场景三:理解项目架构

我问Junie:"帮我分析一下这个项目的整体架构"。它真的能扫一遍项目结构,然后给你一个大概的架构图。虽然细节上有些出入,但大方向是对的。

这对于新同事入职来说应该很有用。我们组之前来个新人,花了两周才搞清楚项目结构,要是有Junie,估计两三天就能上手。

| 维度 | JetBrains Junie 评价 |
|------|---------------------|
| 上手难度 | ⭐⭐⭐⭐ JB用户零门槛 |
| 代码质量 | ⭐⭐⭐⭐ 懂项目上下文 |
| 业务理解 | ⭐⭐⭐⭐ 能感知项目结构 |
| 可维护性 | ⭐⭐⭐⭐ 重构建议靠谱 |
| 适合场景 | 重构、单测、项目理解 |

三个工具横向对比

折腾了一大圈,做个总结对比:

| 对比维度 | Bolt.new | OpenCode | JetBrains Junie |
|---------|----------|----------|-----------------|
| 定位 | 全栈应用生成 | 终端AI助手 | IDE内AI集成 |
| 交互方式 | 浏览器 | 命令行 | IDE插件 |
| 项目感知 | 无 | 弱 | 强 |
| 代码质量 | 一般 | 较好 | 好 |
| 学习成本 | 低 | 中 | 低(JB用户) |
| 最佳场景 | 快速原型 | 写函数/脚本 | 重构/测试/理解项目 |
| 价格 | 有免费额度 | 开源免费 | 需要订阅 |
| 我的推荐度 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |

我的最佳实践

经过这一轮折腾,我总结了一套自己的用法:

1. 需求评审阶段用Bolt.new

产品过来聊需求的时候,我直接打开Bolt.new,一边聊一边生成页面原型。"你看,这个效果大概是这样,你觉得行不行?"

这招特别好用,以前产品总说"我想象不出来",现在直接看效果,沟通效率翻倍。

2. 写具体逻辑用OpenCode

比如要写个工具函数、数据处理脚本什么的,直接在终端里用OpenCode搞定。不用切IDE,不用开浏览器,纯键盘操作,效率很高。

特别是最近在学Rust,经常有些语法记不住,直接问OpenCode,它还能帮你解释原理。比翻文档快多了。

# 比如我在学Rust的时候,直接问
$ opencode "Rust中Box和Rc有什么区别?给我举个例子"

3. 日常开发用Junie

这才是主力。写代码的时候,Junie就在旁边待命。需要重构就重构,需要写测试就写测试,需要理解某段老代码就问它。

而且因为它在IDE里,上下文感知做得最好。它知道你当前文件引用了哪些东西,知道你的项目用了什么框架,生成的代码基本能直接用。

一些真心话

说实话,作为一个写了快三年客户端的人,我对AI编程工具的心态是复杂的。

一方面,这些工具确实能提高效率。以前写个活动页要两天,现在可能半天就搞定了。省下来的时间可以研究Rust,可以看看源码,可以早点下班。

另一方面,我也担心。如果AI越来越强,我们这些"搬砖程序员"还有存在的必要吗?

但转念一想,工具就是工具。锤子再好,也得有人知道往哪钉。AI能帮你写代码,但它不知道这个签到功能为什么要做、做了之后对业务有什么影响、用户真正需要的是什么。

这些判断力,才是我们真正的价值所在。

所以我的建议是:别抗拒,但也别依赖。 把AI当成一个效率工具,用它来加速你的工作,但不要让它替代你的思考。

就像我最近学Rust,虽然AI能帮我写代码,但所有权机制、生命周期这些东西,还是得自己理解透。不然出了Bug,AI可帮不了你debug。


好了,就聊这么多。那个签到活动页最后还是按时上线了,虽然中间加了两次需求(产品你懂的)。不过有这些工具帮忙,确实轻松了不少。

如果你也在折腾AI编程工具,欢迎评论区交流。特别是用Junie的同学,有什么骚操作分享一下。

不说了,leader叫我开会了,又要对需求了,头疼。

溜了溜了。

评论 0

最热最新
暂无评论
日志观察员Lv.1
0
影响力
0
文章
0
粉丝