AI编程实践
AI编程实践,转自我的公众号,欢迎关注
大模型的浪潮滚滚而来,AI编程更是热度非凡。要么拥抱AI,要么被AI取代,在这个背景下,用AI来编程,探索AI编程的能力和边界,在实践中用AI提升编码效率。
仓库地址:https://github.com/qiweijie/stock.git
AI编程工具选择
刚好qwen coder出了新闻,本想体验一下qwen coder,被字节的trace的广告吸引了,简单对比了一下,qwen coder 是一个cli的工具,而trace是一个基于vs code改装的一套解决方案,这里选择trace来做AI编程实践。
选题
刚好最近有在股票交易,我想记录每一笔交易,所以我给agent的promote是
我想基于qt开发一个股票交易记录软件,软件主要是记录自己的交易记录,请帮我生产一个prd,用markdown格式
agent很快生成了prd,我快速看了一眼,感觉还可以,接下来的promote是
请基于prd生成一个基于c++ 和qt的Windows项目

代码生成的效率很高,但结构不是很合理,都是平铺的,让agent自动调节一下,虽然过程有点曲折,但不断能自己纠错,感觉还是可以的
把代码按照合适的结构调整一下

然后开始编译,有错误就扔给agent,然后居然发现,agent的代码居然一次性没有写完,三个小时,agent终于写完了所有代码。


意外的乱码问题
代码生成完后,编译问题的来源大头源自乱码问题,三个小时写了几千行代码,然后花了六个小时解决乱码和编译问题,虽然解决的速度有点慢,但至少解决了,有时候看着都抓急,忍不住自己动手了,但忍住了。
- 乱码把换行吃掉了
- 乱码把 { 放在行尾了
- 识别不了乱码,需要人为提醒
初版界面,不怎么漂亮,但还算能接受


漫长的功能可用性修复
初版的第一天花了三个小时修复了三个大类问题,第二天继续花了大概三小时继续修复其他可用性问题

然后界面大概这样,起码能用起来了

模拟需求变更:UI改版
做一次UI的改版:隐藏数据备份、用户设置,把股票信息、交易记录挪到左边,原本下面的操作放到上面
花了两个小时,完成了UI的改版,惊喜的是,交易记录增加了搜索功能,效率杠杠的,但肉眼可见的也有挺多问题,例如菜单栏重复、交易记录的表头有些是英文,列名和数据对不上等问题

接下来的三天优化了6个小时,功能基本可用了

打包成exe
整体可用之后,想着打包成exe可以给别人安装使用,promote是
为整个项目编写一个编译成exe安装包的sh脚本,可以在git bash中运行
这次是比较让我震惊的,脚本生成的速度很快,也很规范,甚至还有一个之前我都没有了解过的软件INNO_SETUP,我就让他帮我安装,但他不肯,我想起了Choco,就问agent
电脑上已经安装了Choco,如何用Choco安装Inno Setup
agent也给出了正确的答案
choco install -y innosetup
因为没有icon,折腾了许久,文本模型生成的icon格式不合法,最终我用别的工具生成了icon,但总的来说,在一个小时内完成了打包成exe脚本的工作,还是让人很震惊。
唯一出手的一次,dll加载失败
我感觉这个超出了模型的范围,所以我出手帮忙解决了

增加一个复杂需求:持仓股数
交易记录增加一个字段,持仓股数,计算方式是当前买入或者卖出后,计算操作后持仓的股数
持仓股数的复杂性在于
这是一个后增的需求
新增交易记录、更新交易记录、导入交易记录都需要修改
事实上这个需求模型折腾了三个小时才彻底写好,最后的成品如图所示,整体的可用性还是挺高的

整体回顾
- 从8.5号开始,到8.7号,花了三个小时写完了基本的代码(5000+行),效率完胜人类
- 8.8~8.9号花了六个小时解决乱码和编译问题,有了基本的样子
- 8.9~8.10周末花了六个小时解决各种可用性问题
- 8.12~8.15 每天1.5*4=6个小时 完成了一次大的ui改版和各种功能完善
- 8.16花了五个小时持续完善各种细节
- 8.16花了一个小时完成了打包的工作
- 8.17 花了三个小时做了最后的收尾工作
历时13天,约30小时,约4人天完成了最终的产品。这还是我第一次用AI编程,中途有各种需求变更、UI改版,如果熟练,速度会更快。
AI编程实践总结反思复盘
AI的优势
- AI写代码的速度非常快,非人力可以追赶
- AI精通搜索引擎能搜索到的内容,也就是知识广度接近无限,非人脑可以匹敌
- AI不畏繁琐,不知疲倦,能克服人性的懒惰
- AI agent目前普通具备纠错能力,理论上可以完全自我修正
结合具体的例子来讲解一下
- 写代码很快这个是肯定的,自动的肯定比手动快;
- 知识广度在写打包脚本的时候体现的比较明显,写出了我都不知道的组件和用法,还有代码里面的用到的数据库,我之前也没有用过,但AI写好了,能work;
- 基本所有的代码都会具备异常处理,正常的程序在明显不会有异常的地方,基本不会写if else的异常处理,但AI通常写的比较好看;
- 只要你把错误贴给agent,agent基本都能解决,整个实现过程我没有写过一行代码;
AI的短板
- AI的脑容量目前不太够,或者是免费的上下文或者缓存有限,给我的感觉就是记不住很多东西
- AI理解能力有限,需要得出足够没有歧义的promote
- AI本质是概率输出,也就是会一本正经的乱写代码,也会陷入死循环
- AI的能力强依赖agent的好坏,agent决定了AI编程的质量
这个也结合例子展开说下体感
- 一开始的代码每次写了不到一个小时就停了,感觉应该是有上下文或者输出的限制;这个项目文件不多,十三个cpp,五千来行代码,后面改需求的时候,agent基本要逐个文件的去查找,效率很低,跟人的记忆相比还是差一些
- 人交流的时候会有一个默认的语境,但AI没有,所以需要把语境告诉agent,例如我们一般写sh脚本,但agent默认会根据平台来判断,Windows会默认写ps或者bat;还有你让他改一个功能,例如交易记录,他会只改一个地方,例如新增交易记录,更新交易记录和导入交易记录就不会去改
- AI会写一些不存在的东西,因为本质上是概率输出,有概率写对,也有概率写错,例如一开始写的代码,还有很多没有定义就使用的case,因为是概率输出,在cpp里面要这么些,却没有去关联头文件有没有实现。甚至有时候改一个换行和空格,能把AI自己绕进去,一直在改换行和空格。
- agent的实现太重要了,有时候AI的想法很好,但agent没有实现,导致AI需要不断切换思路方法。agent对任务的拆解也很重要,拆解的太细,效率就会很低;拆解得太粗,任务可能实现不了
如何更好地使用AI编程:扬长避短
- 拆解成合适的任务适合AI做,例如写脚本,AI很强大,准确率也很高
- 需求要足够明确,AI擅长一次性写对代码,不擅长改代码,所以要把需求尽可能的拆分到明确,尽可能采用组合的方式
- promote要足够具体,要给agent传达足够的语境,避免跟agent之间有语境的隔阂;同时描述的足够清晰,例如都要改那些场景,最好能指定文件,虽然失去了AI编程的灵魂,但足够清晰具体的promote是能提升AI编程的效率
AI编程会替代程序员吗
我的答案是不会,但是会提升程序员的生产力,降低对程序员数量的需求,带来程序员的带来失业。
- 如果我告诉老板需求我用AI完成了,功能work,但是AI写的代码我还没有时间看,能直接上线吗?
- 如果是对确定性要求不高、没有复杂的交互逻辑,例如一个网站的静态、一个操作手册,简单来说就是这个成果对客户不会直接损失,老板可能说可以,然后程序员,然后公司的程序员从三个变成一个
- 但如果是对确定性要求很高,有复杂操作逻辑的,例如微信聊天的发送功能,我跟老板说,我用AI做了一个需求,自测通过,但AI写的代码我没看,能上线吗?老板要是说能上,我只能说这家公司在倒闭的边缘折腾。
程序员本质上提供的是更高的确定性以及承担责任的角色,而AI无法提供确定性,更无法承担责任,责任一定是使用AI的人,而使用AI编程的人就是程序员,或者叫AI程序员。
2. AI作为一种更高级的工具,价格本身不便宜,结合AI能做的事情,其性价比有一定的瓶颈,所以以后程序员要么很便宜,便宜到不配用AI,或者只能用最便宜的AI编程工具;要么程序员很贵,维护质量很高的业务,后者用一个人用AI维护很多个业务。
程序员要怎么拥抱AI编程时代
- AI编程一定会很普遍,成为AI编程时代卖铲子的人也许是个好生意,可惜大厂都下场了,普通人估计没什么机会了
- 如果还是做程序员,那一定要比多数人更早的拥抱AI编程,尽可能多的吃到AI编程的红利【红利期就是你会用但你同事不会用AI编程的时间段】,提高自己的效率
- 可以完成更多的工作,拿到更好的绩效【换钱】
- 可以让自己有更多的时间去做自己想做的事情【换时间】
- 不断探索先进的AI编程工具,保持自己对工具的掌握程度
- 往有复杂逻辑的业务去靠,复杂的业务通常意味着密集的沟通协同,这是AI编程作为单体【目前】不太擅长的
AI编程实践的更多相关文章
- Storm实时计算:流操作入门编程实践
转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践 Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比 ...
- 高性能javascript学习笔记系列(5) -快速响应的用户界面和编程实践
参考高性能javascript 理解浏览器UI线程 用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程 UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 ...
- 高性能JavaScript 编程实践
前言 最近在翻<高性能JavaScript>这本书(2010年版 丁琛译),感觉可能是因为浏览器引擎的改进或是其他原因,书中有些原本能提高性能的代码在最新的浏览器中已经失效.但是有些章节的 ...
- Method Swizzling和AOP(面向切面编程)实践
Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...
- 编程实践中C语言的一些常见细节
对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见, ...
- 第二章 C语言编程实践
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
- 试读《JavaScript语言精髓与编程实践》
有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖 ...
- Python GUI编程实践
看完了<python编程实践>对Python的基本语法有了一定的了解,加上认识到python在图形用户界面和数据库支持方面快捷,遂决定动手实践一番. 因为是刚接触Python,对于基本的数 ...
- [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍
阅读<Java并发编程实践>一书后整理的思维导图.
- 《编写可维护的JavaScript》之编程实践
最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...
随机推荐
- C++ 习惯RAII思想
什么是 RAII RAII(资源获取即初始化,Resource Acquisition Is Initialization),作为 C++ 的一个重要编程范式,已经被贯彻于标准库的各个角落.RAII ...
- C# winform 打开设计时,也会执行编写的代码,
if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")//判断是否为设计时 { re ...
- 前端开发系列133-进阶篇之脚手架Yue-cli的实现02-inquirer模块
这是系列文章 [前端脚手架实现]]() 的第二篇,本文将介绍脚手架中`Yue-cli create xxx`命令来初始化项目时内部的处理过程和实现方案. 安装axios模块,该模块用来发送网络请求获取 ...
- Codeforces Round #710 (Div. 3) ABCDE 题解
A. Strange Table 签到题,算出对应行列即可. view code #include<iostream> #include<string> #include< ...
- Codeforces Global Round 10 ABCD题解
A. Omkar and Password 题意:每次可以将相邻不相等的两项替换成他们的和(原来的两个数变成一个数),问最短能变成多短. 思路:其实会发现,如果这个序列里但凡存在一对a[i]!=a[i ...
- dpkg 安装 依赖不全的软件
sudo dpkg -i netease-cloud-music_1.0.0-2_amd64_ubuntu16.04.deb sudo apt-get -f -y install sudo dpkg ...
- Cannot mix incompatible Qt library (version ) with this library (version ) 解决方案
简介 应该是qt的头文件或者库有两个 Cannot mix incompatible Qt library (version ) with this library (version ) 解决方案 . ...
- python print 输出重定向
简介 print 重定向的功能,很实用,记录一下 参考链接 https://www.cnblogs.com/marsggbo/p/10293484.html code import sys impor ...
- RestCloud ETL数据交换平台,自带监控实时掌控数据
RestCloud ETL数据交换平台是基于微服务架构完全自主研发和创新的新一代数据集成平台,通过可视化的拖.拉.拽即可完成数据集成流程的构建并实现数据抽取.转换.清洗.脱敏.加载等功能,从架构.易用 ...
- SciTech-Mathmatics-Probability+Statistics: Statistical Inference统计推断- Estimation估计 + Testing Hypotheses假设检验
Stat 345(April 11, 2019) Chapter 7: Sampling Distributions and Point Estimation ofParameters Topics: ...