前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
返回 AI 情报前线
All News · 全部资讯8637
  • Claude 模拟网络栈:延迟和吞吐量测试
  • Swift 训练 LLM:从 Gflop/s 到 Tflop/s
  • Python GIL 工作原理及踩坑指南
  • Gemini API 文件搜索升级为多模态
  • AI Agent 框架深度对比——编排、工具、记忆、上下文的完整拆解
  • Claude Code 中 HTML 的惊人效果——超越 Markdown 的 AI 交互
  • Claude 推理能力突破:深度 Why 理解
  • AI 幻觉现象解析:为什么 AI 会说谎
  • AI Agent 版本控制:Git 融合框架
  • 自适应并行推理:LLM 推理新范式
  • 用 HTML 替代 Markdown:Claude Code 中的最佳实践
  • 大型代码库中编码 Agent 的 5 个常见失败模式
  • 用 Terraform 和 Cloud Run 部署多 Agent 系统
  • Claude 内部思路可视化:自然语言自编码器
  • 用 Claude 强化 Firefox 安全——AI 在浏览器防护中的应用
  • 设计高效的 AI Agent 协作团队
  • Unsloth 将 LLM 训练速度提升 40% 以上
  • 200 行代码的 LLM 智能路由:成本直降 41%
  • Cursor 新增并行审查和多 Agent 协作编程
  • vLLM V0→V1:强化学习中的正确性优先策略
  • 同一项目两次构建:AI vs 手工全面对比
  • Claude API 提速——Anthropic 宣布提升使用配额与计算合作
  • 打造自主运行的 AI 管家:定时 Agent 实战
  • 用 6502 汇编语言实现 AI 算法的复古实验
  • Google AlphaEvolve:Gemini 驱动的编码 Agent 应用案例
  • Cursor 新增 Agent Context 使用统计功能
  • Claude 限速之谜——Anthropic 创始人解密背后的权衡
  • AI 时代「我还算开发者吗」的职业身份讨论
  • Flutter 移动端自动化测试完整实战指南
  • 从零开始训练自己的大语言模型
  • 编程范式转变:从写代码到管理 Agent
  • OpenAI 语音 AI 的低延迟大规模部署方案
  • VR 界面同时监控多个 AI Agent 的新工作流
  • AI 时代开发者的四种认知原型分析
  • Cloud Run 上构建 AI 质量门控系统完全指南
  • 12年资深Web开发者,3天用AI写出移动应用
  • 构建企业级Slack Agent的UX、安全、扩展经验
  • Cursor企业版新增模型控制和成本管理
  • DeepClaude:多模型融合的 AI 编程 Agent
  • Wiki Builder:构建LLM知识库的开源工具
  • Astro 5升级到6的迁移实战指南
  • Kimi K2.6 编程能力超越 Claude 和 GPT-5.5
  • 企业 AI 落地的真实困局:流程和组织问题
  • AI编程不是工具差,是你的工作流不对
  • 代码库质量决定了AI Agent的能力上限
  • Uber 四个月烧完全年 Claude Code 预算
  • Apple 支持应用误泄 Claude 配置文件
  • Cursor团队市场支持不连接仓库直接创建
  • 别用剪贴板给AI Agent传代码,有更好办法
  • Claude Code 对特定项目标识的请求限制
  • 自建成本监控系统,发现OpenAI账单上的100倍差异
  • 已加载 51 / 8637
7.0
热点
AI SCORE
编程提效2026-05-07 01:33

同一项目两次构建:AI vs 手工全面对比

DEV Community · Fernando Fornieles#AI编程#实验分析#效率对比
Editor brief · 编辑速览

开发者用 AI 和传统方式各构建一个项目,通过真实案例展示 AI 编程对开发效率和代码质量的实际影响。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

速度提升与代码所有权焦虑之间的权衡

在实现气象站系统时,我问自己:如果再做一遍,但这次使用 AI,会怎么样?

我的想法是,对比用两种方式实现同一个项目。AI 开发真的像宣传中所说的那么快吗?代码质量如何?使用 AI 时,我会遇到同样的挑战吗?作为一名开发者,我的感受会更好还是更糟?

在本文中,我会尽可能坦诚地讲述使用 AI 重新构建气象监测系统的过程,以及我的真实感受。

Sensor Reader

一个 Python 程序,负责从传感器读取天气数据、显示当前读数,并将数据发送到 Web 应用。

Web App:Dashboard 与 API

一个使用 PHP + Symfony 构建的 Web 应用,负责接收气象站的数据,并将其展示在 Dashboard 中。

AI 配置

我不想花钱使用 AI,因此尝试了 Gemini 和 OpenRouter 的免费方案,也尝试在本地运行 Ollama。但 Gemini 和 OpenRouter 的 token 很快就用完了,而 Ollama 在我的电脑上也无法正常工作。

于是,在一位同事的推荐下,我最终选择了 OpenCode,以及它的默认模型 Big Pickle。

必须承认,无论最终结果如何,它整体上运行得相当不错。

源代码

你可以在这里查看两种实现方式的源代码:

Sensor Reader

Horrameteo

Horrameteo AI

Webapp

Horrameteo Web

Horrameteo Web AI

重写方式

诚然,重新构建一个项目时,你不再需要反复试验,因为你已经非常清楚自己想要什么。为了抵消这一优势,我尽量假装那些“手工编写”的项目并不存在,同时把自己当成一名“vibe coder”。也就是说,我只想让项目运行起来,不亲自编写任何一行代码,也不关心它具体是如何构建的。

我通过把每个提交过代码的日期按 2 小时计算,估算了投入的时间。

“哇!!使用 AI 快了四倍!!”

但实际情况是,在不使用 AI 的开发过程中,我必须学习 Python,以及 Pimoroni library 的工作方式。一开始,我也不清楚应该如何组织代码。随着逐渐了解如何在 Python 中应用最佳编程实践,我对代码进行了多次重构。

另一个需要考虑的因素,是我在两种开发方式下对版本控制系统的使用方式。使用 AI 时,我的 commit 比不使用 AI 时更少,原因如下:

  • 不使用 AI 时,每完成一个我认为没问题的小步骤,我就会 commit。

  • 使用 AI 时,我会等到一项完整功能能够正常工作后再 commit,因此 commit 更少,但每次包含的改动更大。

对于 Webapp 项目,我大约用了 16 小时就完成了主体开发。剩余时间一直持续到 28 小时,主要用于反复尝试:确定除了当前数值外,我还希望看到哪些天气统计数据,以及这些信息应该如何展示。使用 AI 时,我直接采用了自己最终在非 AI 方案中确定的解决方案。

考虑到这一点,再加上作为一名 vibe coder,我没有花时间审查代码,我的“蜘蛛感应”提醒我:这些数字可能并没有看上去那么惊人。

我使用 Sonarqube 获取了一些代码质量指标,包括可维护性、安全性、可靠性和代码重复率。使用 AI 到底会不会更好?让我们来看一看。

Sensor Reader

非 AI 项目存在 45 个可维护性问题,原因是没有遵循 snake_case 命名约定。我当时决定使用 Camel Case,这可能是因为我主要是一名 Java 和 PHP 开发者。对我来说,这并不算问题,因此我将它们标记为误报。

我还排除了 Weather Hat display class 中的一些问题,因为它只是 Pimoroni 示例代码的封装副本。我只做了少量修改,让它成为 DisplayInterface 的一个实现。

将这些因素考虑在内,下面是不使用 AI 时的结果:

下面是使用 AI 时的结果:

AI 项目中的可靠性问题来自 factory.py 文件里一个无用的赋值。

在我看来,不使用 AI 时的代码质量似乎更好,但两者之间确实没有太大差异。

至于复杂度和技术债,结果如下。

AI 代码更难理解,复杂度为 87,而非 AI 代码为 19;但非 AI 项目的技术债更高,这是因为我对 Python 缺乏了解。Python 中并不存在接口这一概念,而我的处理方式并不正确。

Webapp

两者的结果非常相似,但 AI 方案存在 3.6% 的重复代码。

复杂度和技术债的结果如下:

在这些指标上,AI 明显更差:技术债超过非 AI 方案的三倍,代码理解起来也稍微更加困难。

开发体验

使用 AI 时,我的感受很复杂。一方面,我惊讶于仅凭一组简单的需求就能完成如此多的工作;另一方面,我又感到不知所措,并且相当不信任最终结果。

AI 在几个关键问题上陷入了困境。最终,我不得不亲自指出问题出在哪里,因为它无法找到解决方案。

在 Sensor Reader 项目中,AI 错误地应用了温度偏移量。它没有在读取传感器之前把偏移值传给 Pimoroni library,而是在读取温度之后才应用偏移量。正因如此,相对湿度的数值出现了错误。在经历多轮迭代之后——我不断告诉 AI 结果有误,并要求它阅读 Pimoroni 的文档——最终还是不得不由我来告诉 AI 应该如何修复这个问题。

在 Web 应用中,我遇到了多个与身份验证有关的问题:

  • 第一次运行时,用户身份验证无法工作。AI 不得不一个接一个地修复多个问题,包括 404 和 500 错误、访问登录表单时陷入无限循环等。在其中一次迭代中,AI 甚至建议我移除登录表单里的 CSRF token!

  • 身份验证问题解决后,logout 仍然无法正常工作。由于 AI 始终无法让它运行起来,最终只能由我亲自实现。

  • 引入 JWT authentication 时,AI 删除了基于用户 session 的 authentication!

  • AI 无法让 JWT authentication 与基于 session 的 authentication 同时工作。它多次坚称问题出在 Apache web server 的配置上,但那其实只是项目为了在 Apache web server 上运行所必需的配置方式。再一次,我不得不亲自让它正常工作。

这个过程非常令人沮丧,我有好几次都被气得不轻。

SDD(Spec-Driven Development,规范驱动开发)的体验同样令人沮丧。

自然语言天生就不精确。真正的开发者可以运用自己的判断力和领域知识,补全 specification document 中缺失的信息,而 AI 只会产生幻觉。为了尽可能避免这种情况,编写 specification 时必须做到极其精确。而恕我直言,这比写代码复杂得多。

最终,我不再让 AI 直接使用 specification file,而是让它一步一步地完成任务。

AI 很适合解决范围有限的任务和问题,例如查找 bug、实现一个接口,或者连接某个 endpoint。根据一份 specification document 构建整个项目,则完全是另一回事。对于范围有限的任务,代码很容易审查,我也能或多或少地对结果负责。但面对大量需要审查的代码时,我会觉得自己对最终结果失去了掌控。

别误会,AI 是一个很好的工具,甚至可以说是一个了不起的工具,但你仍然需要知道如何编写代码。而我所知道的、唯一能让自己更擅长使用 AI 的方法,就是继续亲自面对并解决问题。

关键在于,我们需要弄清楚:哪些问题应该由自己解决,哪些问题可以交给 AI。

对于后续操作,你可以考虑屏蔽此人和/或举报滥用行为。

Original source

本文由 AI 翻译整理自 DEV Community · Fernando Fornieles,原文版权归原作者所有。

阅读英文原文
上一篇
vLLM V0→V1:强化学习中的正确性优先策略
下一篇
Claude API 提速——Anthropic 宣布提升使用配额与计算合作