AI编程:[体验]从 0 到 1 开发一个项目的初体验

一、开发信息

  • 开发时间:1.5-2天
  • 工具使用:
    • 不熟练,开发本项目前1天,才简单使用了Cursor的功能
  • 功能复杂度:
    • 开发的功能相对简单。
    • 页面:2个,登录页面,个人中心页面
    • 功能:5个,登录注册、个人信息、修改密码、退出登录、弹窗提示
  • 技术复杂度:
    • 前后端分离,含前端(vue)和后端(Java)
  • 痛点问题:
    • 后端:生成的代码存在版本兼容性问题,需要花费大量时间去调试和修正
    • 前端:由于对vue仅限了解,所以在解决比较普通的问题时,若AI解决不了,于我而言也是一个痛点问题
    • 工具:AI工具在解决问题时,存在答非所问,张冠李戴的情况,导致耗费大量时间去调试错误
    • 提示词:输入的提示词可能不够好,导致生成的质量不达预期

二、开发模式

基于当前AI编程助手所具备的能力,从实践得出的如下内容。

全栈开发模式

  • 适用用户:
    • 全栈开发者:在意代码的有效性,也在意代码的优美和结构
    • 非技术人员:更在意代码的有效性,而非代码的优美和结构
  • 适用场景:
    • 团队维度:有全栈开发者的团队或初创公司;无技术人员的公司;
    • 项目维度:验证性项目的MVP版本;一次性项目,如可完整交付的项目。
  • 风险提示:
    • 技术盲区:单端能力缺失,将显著降低效率。如:一名前端,不懂后端,用Cursor开发,遇到错误反复调试不通时,过程很痛苦,效率也很低。

专业开发模式(现状)

  • 适用用户:
    • 专业开发者:前端、后端
  • 适用场景:
    • 团队维度:前端、后端、测试、运维等各岗位俱全,且分工明确的团队
    • 项目维度:长期运营迭代的复杂项目
  • 实施路径:
    • 第一步:基于脚手架搭建项目(1分钟生成+100%可用)
    • 第二步:基于模板生成代码(1分钟生成+100%可用)
    • 第三步:AI助手生成代码片段(使用AI的关键环节,目标:开发效率提升40%以上)
  • 实施说明:
    • 第一步和第二步,需要团队或开发者,沉淀脚手架和模板。若当前没有沉淀,也可借助AI来快速生成并沉淀脚手架和模板。
    • 第一步和第二步,若采用AI生成代码,需要花时间编写良好的提示词,且生成的代码需要大量调试,效率和质量,都不如基于脚手架和模板 生成的代码来的好。
    • 第三步,专业开发者,借助AI助手生成本技术栈的代码,效率会得到极大提升。
  • 最佳实践:
    • 复用:AI生成代码时,可询问AI有没有现成的组件或框架,避免用AI从0到1造轮子。
    • 质量:AI生成的每一行代码,都必须review,否则没办法保证质量。
    • 效率:开发者清楚的知道,要实现什么功能,要改哪里的代码,用AI辅助开发就会很快。
    • 熟练:对AI助手的熟练程度,对编码效率的影响很大,一定要多用,尽快熟练起来。

总结:综合对比

  • 如果你是一名非技术人员,无所谓代码不代码,只要开发项目就行,那么建议使用全栈开发模式。
  • 如果你是一名专业开发者,那肯定有自己熟悉的技术栈和沉淀,那么建议使用专业开发模式。
  • 如果你是一名全栈开发者,完全可以按照专业开发模式的实施路径来执行,速度会更快,效果会更好,因此建议将全栈开发模式和专业开发模式结合起来使用。
  • 最后,专业开发模式的实施路径,可以通过Agent串起来,形成一个工作流,进一步提升效率。

个人理解

  • 核心目的:使用AI是为了快速开发项目,而不是为用AI生成代码。因此不是所有代码都要通过AI来生成。
  • 未来已来:可预测未来AI会越来越强,开发门槛只会越来越低
  • 超级个体:懂产品+技术全栈(前端、后端、测试、运维)
  • 系统工程:从原型图开始,UI设计稿,到前端代码生成,后端代码生成,再到测试用例生成,测试用例执行,通过智能体平台全部自动化(Agent或工作流),但效果可能堪忧。
  • 提示词
    • 提示词写不好怎么办?
      • 采用Prompt模板的方式,来简化和加速提示词的编写
      • 通过调用大模型来优化Prompt,然后沉淀为Prompt模板

三、实践遇到的问题

Cursor后端:第三方Jar包的版本兼容性问题

Cursor错误分析:在cursor上提问如下错误,提示是spring-security的问题,但实际是springboot3与mybatis-plus集成的版本兼容问题

说明:本质是springboot 3,集成mybatis-plus的版本不兼容导致的问题。

  • 错误1:Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String
  • 解决:mybatis-plus 3.5.3.2 中mybatis-spring版本为2.1.2,升级为3.0.3
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.2</version><exclusions><exclusion><artifactId>mybatis-spring</artifactId><groupId>org.mybatis</groupId></exclusion></exclusions></dependency>
<dependency><artifactId>mybatis-spring</artifactId><groupId>org.mybatis</groupId><version>3.0.3</version></dependency>
  • 错误2:Bean named ‘ddlApplicationRunner’ is expected to be of type ‘org.springframework.boot.Runner’ but wa
  • 分析:因为使用的是springboot 3,应该使用mybatisplus3
  • 参考:https://blog.csdn.net/weixin_46211609/article/details/135552632
  • 解决:mybatis-plus 3.5.3.2 升级为 mybatis-plus 3.5.5
  • 最终方案:推荐基于脚手架做项目初始化

Cursor前端:弹窗一直展示,且无法关闭的问题

[图片]

  • 现象:生成的代码,连续报错,一个一个解决后,最后还是弹窗还是一直显示着,且无法关闭。
  • 原因:最终咨询前端同学,发现cursor一开始生成的弹窗组件代码就有问题,所以效果一直不达预期。
  • 方案:删除掉弹窗组件相关的代码,让cursor重新帮忙生成一个苹果样式的弹窗方法,效果达到预期。

Trae前端:生成代码失败,可新建会话,重新对话

[图片]

  • 分析:可能是我一直在一个 Builder 对话窗口中,进行提问并生成代码,累积的上下文太长,导致Trae生成失败。就像人类注意力会在阅读长文时逐渐分散一样,模型处理特长文本时的表现也会大打折扣。所以在实际应用中,短小精悍往往比冗长絮叨更有效。
  • 方案:在 Builder 中创建新对话,为每个不同的任务开启新的 Builder 对话,保持智能体对话简短。
  • 原则:
    1. 一次只处理一个任务,避免思维混乱;
    2. 将任务规模控制在上下文窗口范围内,确保模型能够充分理解;
    3. 对于大型项目,善用检索增强,让AI能够精准定位并利用关键信息。

Trae前端:在使用回退到本轮对话发起前功能时,导致代码被回滚

[图片]

  • 分析:没有将之前的代码提交到Git,导致回滚后找不回之前的代码,浪费了大量时间。
  • 方案:每个不同的任务或功能生成且调试完后,记得一定要提交代码,一定要通过Git来做版本管理。

Trace前端:与Trae多轮对话,问题仍然无法解决

  • 分析:可能被之前的信息给影响了,陷入到了一个死循环里面
  • 方案:
    • 遇到多轮对话,还解决不了的问题,可以让Trae详细分析并解释问题,再基于分析去解决
    • 更好的做法是,开启一个新的聊天(Chat)或编排(Builder)窗口,将新的问题单独提出来,然后观察新的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-392 判断子序列

给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一个子序列&#…

Linux 系统监控大师:Glances 工具详解助力自动化

看图猜诗&#xff0c;你有任何想法都可以在评论区留言哦~ 摘要 Glances 是一款基于 Python 开发的跨平台系统监控工具&#xff0c;集成了 CPU、内存、磁盘、网络、进程等核心指标的实时监控能力&#xff0c;并支持命令行、Web界面、客户端-服务器模式等多种使用场景。其轻量级…

Spring Boot 3.4.5 运行环境需求

&#x1f4dd; Spring Boot 3.4.5 运行环境要求 &#x1f33f; 1️⃣ 基本需求 ☑️ JDK版本&#xff1a;最低 Java 17 &#x1f517; https://www.java.com/ 最高兼容至 Java 24 ☑️ 依赖框架&#xff1a;需搭配 Spring Framework 6.2.6 &#x1f517; https://docs.sprin…

在KEIL里C51和MDK兼容以及添加ARM compiler5 version编译器

前言 我们想在一个keil里面可以打开32和51的文件&#xff0c;这样就不需要两个keil了 还有就是现在的keil&#xff0c;比如我用的是5.41的&#xff0c;就没有5版本的处理器&#xff0c;所以要安装 本篇文章我们来详细讲解如何实现上面说的两个内容 准备的东西 1.ARM5编译器 …

Flutter 弹窗队列管理:支持优先级的线程安全通用弹窗队列系统

在复杂的 Flutter 应用开发中&#xff0c;弹窗管理是一个常见难题。手动管理弹窗的显示顺序和条件判断不仅繁琐&#xff0c;还容易出错。为此&#xff0c;我们实现了一个支持优先级的线程安全通用弹窗队列管理系统。它能够自动管理弹窗的显示顺序&#xff0c;支持条件判断&…

鸿蒙NEXT开发剪贴板工具类(ArkTs)

import { pasteboard } from kit.BasicServicesKit; import { StrUtil } from ./StrUtil;/*** 剪贴板工具类* 需要权限&#xff1a;* ohos.permission.READ_PASTEBOARD // 允许应用读取剪贴板。* author CSDN-鸿蒙布道师* since 2025/04/25*/ export class PasteboardUtil {…

FastAPI 零基础入门指南:10 分钟搭建高性能 API

一、为什么选择 FastAPI&#xff1f; 想象一下&#xff0c;用 Python 写 API 可以像搭积木一样简单&#xff0c;同时还能拥有媲美 Go 语言的性能&#xff0c;这个框架凭借三大核心优势迅速风靡全球&#xff1a; 开发效率提升 3 倍&#xff1a;类型注解 自动文档&#xff0c;…

【算法】BFS-解决FloodFill问题

目录 FloodFill问题 图像渲染 岛屿数量 岛屿的最大面积 被围绕的区域 FloodFill问题 FloodFill就是洪水灌溉的意思&#xff0c;假设有下面的一块田地&#xff0c;负数代表是凹地&#xff0c;正数代表是凸地&#xff0c;数字的大小表示凹或者凸的程度。现在下一场大雨&…

代码随想录算法训练营第三十七天|动态规划part4

1049. 最后一块石头的重量 II 题目链接&#xff1a; 1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a; 代码随想录 思路&#xff1a; 理解为把石头分成两堆 使得两堆的差值尽可能小 求这个最小值1 理解为往背包里装物品 每个物品的…

(八)深入了解AVFoundation-采集:拍照功能的实现

引言 在上一篇文章中&#xff0c;我们初步完成了使用 AVFoundation 采集视频数据的流程&#xff0c;掌握了 AVCaptureSession 的搭建与视频流的预览显示。 本篇将继续深入 AVFoundation&#xff0c;聚焦于静态图片采集的实现。通过 AVCapturePhotoOutput&#xff0c;我们可以…

git tag使用场景和实践

背景 每次上线一个迭代&#xff0c;为了区分本次代码的分支是哪个迭代的commit&#xff0c;可以给分支打上tag&#xff0c;这样利于追踪分支所属迭代&#xff0c;如果devops没有自动给分支打tag&#xff0c;需要自己来打 操作 1.查看当前tag git tag2.给分支打tag git tag…

从零开始掌握Linux数据流:管道与重定向完全指南

全文目录 1 知识背景与核心概念1.1 操作系统的输入输出模型1.2 Shell 的中间人角色 2 重定向技术深度解析2.1 输出重定向2.1.1 覆盖写2.1.2 追加写2.1.3 错误重定向2.1.4 同时重定向 stdout 和 stderr 2.2 输入重定向2.2.1 文件作为输入源2.2.2 Here Document&#xff08;多行输…

aws(学习笔记第三十九课) iot-core

文章目录 aws(学习笔记第三十九课) iotcore(Internet Of Thing)学习内容:1. 整体架构1.1 代码链接1.2 整体架构(概要)1.3 整体架构(详细 )2. 代码解析2.1 创建`IOT thing`2.2 创建`AWS IOT certificate`证书2.2.1 创建`lambda`需要的`role`2.2.2 创建`lambda`2.2.3 `lambd…

国家新政鼓励游戏出海,全球化安全威胁如何解

本文作者&#xff1a;腾讯宙斯盾DDoS防护团队 01 政策红利释放&#xff1a;游戏出海升级为“国家战略工程” 01 4月21日&#xff0c;国务院新闻办公室发布《加快推进服务业扩大开放综合试点工作方案》&#xff0c;释放了一个信号&#xff1a;首次将“游戏出海”列为战略级工程&…

MobX 在 React 中的使用:状态管理的新选择

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

Idea 配置 Git

1、下载Git 下载地址&#xff1a; Git - Downloading Package 2、win 打开 git bash &#xff0c;配置邮箱和用户名 //配置邮箱 git config --global user.email "710419844qq.com" //配置全局用户名 git config --global user.name "smelodys" 3、ide…

Vue3 + OpenLayers 开发教程 (四) 样式配置与性能优化

1. 地图样式基础概念 1.1 什么是地图样式&#xff1f; 地图样式是决定地图要素&#xff08;点、线、面&#xff09;如何显示的重要配置。在 OpenLayers 中&#xff0c;样式主要包含以下几个核心组件&#xff1a; Fill&#xff08;填充&#xff09;&#xff1a;控制面状要素的…

【Nacos-安全与限流机制健全06 】

文章目录 Nacos安全机制介绍Nacos代码实现Nacos限流机制Nacos限流的代码实现 Nacos安全机制介绍 一、Nacos安全控制机制 Nacos 提供了多种安全控制机制&#xff0c;以保证服务和配置的访问安全&#xff1a; 身份验证 (Authentication) Nacos 支持用户身份验证来防止未授权的访…

自建开源远程协助服务RustDesk —— 筑梦之路

开源项目 # 服务端https://github.com/rustdesk/rustdesk-server.git# 客户端https://github.com/rustdesk/rustdesk.git 搭建服务端 需要使用的端口、协议 hbbs - RustDesk ID 注册服务器 hbbr - RustDesk 中继服务器默认情况下&#xff0c;hbbs 监听 21115(tcp) , 21…

Jmeter中同步定时器使用注意点

1.设置数量不可大于总线程数量&#xff0c;不然会一直等待 2.设置数量必须与总线程数量成整数倍数&#xff0c;不然还是要一直等。 3.当配置的数量小于线程数时&#xff0c;最好把循环打开&#xff0c;避免最后一次未准备好的线程数量达不到并发数。