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自动调节一下,虽然过程有点曲折,但不断能自己纠错,感觉还是可以的<br>
复制代码 然后开始编译,有错误就扔给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编程作为单体【目前】不太擅长的
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |