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终于写完了所有代码。

意外的乱码问题

代码生成完后,编译问题的来源大头源自乱码问题,三个小时写了几千行代码,然后花了六个小时解决乱码和编译问题,虽然解决的速度有点慢,但至少解决了,有时候看着都抓急,忍不住自己动手了,但忍住了。

  1. 乱码把换行吃掉了
  2. 乱码把 { 放在行尾了
  3. 识别不了乱码,需要人为提醒

初版界面,不怎么漂亮,但还算能接受

漫长的功能可用性修复

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

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

模拟需求变更: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加载失败

我感觉这个超出了模型的范围,所以我出手帮忙解决了

增加一个复杂需求:持仓股数

交易记录增加一个字段,持仓股数,计算方式是当前买入或者卖出后,计算操作后持仓的股数

持仓股数的复杂性在于

  1. 这是一个后增的需求

  2. 新增交易记录、更新交易记录、导入交易记录都需要修改

事实上这个需求模型折腾了三个小时才彻底写好,最后的成品如图所示,整体的可用性还是挺高的

整体回顾

  1. 从8.5号开始,到8.7号,花了三个小时写完了基本的代码(5000+行),效率完胜人类
  2. 8.8~8.9号花了六个小时解决乱码和编译问题,有了基本的样子
  3. 8.9~8.10周末花了六个小时解决各种可用性问题
  4. 8.12~8.15 每天1.5*4=6个小时 完成了一次大的ui改版和各种功能完善
  5. 8.16花了五个小时持续完善各种细节
  6. 8.16花了一个小时完成了打包的工作
  7. 8.17 花了三个小时做了最后的收尾工作

历时13天,约30小时,约4人天完成了最终的产品。这还是我第一次用AI编程,中途有各种需求变更、UI改版,如果熟练,速度会更快。

AI编程实践总结反思复盘

AI的优势

  1. AI写代码的速度非常快,非人力可以追赶
  2. AI精通搜索引擎能搜索到的内容,也就是知识广度接近无限,非人脑可以匹敌
  3. AI不畏繁琐,不知疲倦,能克服人性的懒惰
  4. AI agent目前普通具备纠错能力,理论上可以完全自我修正

结合具体的例子来讲解一下

  1. 写代码很快这个是肯定的,自动的肯定比手动快;
  2. 知识广度在写打包脚本的时候体现的比较明显,写出了我都不知道的组件和用法,还有代码里面的用到的数据库,我之前也没有用过,但AI写好了,能work;
  3. 基本所有的代码都会具备异常处理,正常的程序在明显不会有异常的地方,基本不会写if else的异常处理,但AI通常写的比较好看;
  4. 只要你把错误贴给agent,agent基本都能解决,整个实现过程我没有写过一行代码;

AI的短板

  1. AI的脑容量目前不太够,或者是免费的上下文或者缓存有限,给我的感觉就是记不住很多东西
  2. AI理解能力有限,需要得出足够没有歧义的promote
  3. AI本质是概率输出,也就是会一本正经的乱写代码,也会陷入死循环
  4. AI的能力强依赖agent的好坏,agent决定了AI编程的质量

这个也结合例子展开说下体感

  1. 一开始的代码每次写了不到一个小时就停了,感觉应该是有上下文或者输出的限制;这个项目文件不多,十三个cpp,五千来行代码,后面改需求的时候,agent基本要逐个文件的去查找,效率很低,跟人的记忆相比还是差一些
  2. 人交流的时候会有一个默认的语境,但AI没有,所以需要把语境告诉agent,例如我们一般写sh脚本,但agent默认会根据平台来判断,Windows会默认写ps或者bat;还有你让他改一个功能,例如交易记录,他会只改一个地方,例如新增交易记录,更新交易记录和导入交易记录就不会去改
  3. AI会写一些不存在的东西,因为本质上是概率输出,有概率写对,也有概率写错,例如一开始写的代码,还有很多没有定义就使用的case,因为是概率输出,在cpp里面要这么些,却没有去关联头文件有没有实现。甚至有时候改一个换行和空格,能把AI自己绕进去,一直在改换行和空格。
  4. agent的实现太重要了,有时候AI的想法很好,但agent没有实现,导致AI需要不断切换思路方法。agent对任务的拆解也很重要,拆解的太细,效率就会很低;拆解得太粗,任务可能实现不了

如何更好地使用AI编程:扬长避短

  1. 拆解成合适的任务适合AI做,例如写脚本,AI很强大,准确率也很高
  2. 需求要足够明确,AI擅长一次性写对代码,不擅长改代码,所以要把需求尽可能的拆分到明确,尽可能采用组合的方式
  3. promote要足够具体,要给agent传达足够的语境,避免跟agent之间有语境的隔阂;同时描述的足够清晰,例如都要改那些场景,最好能指定文件,虽然失去了AI编程的灵魂,但足够清晰具体的promote是能提升AI编程的效率

AI编程会替代程序员吗

我的答案是不会,但是会提升程序员的生产力,降低对程序员数量的需求,带来程序员的带来失业。

  1. 如果我告诉老板需求我用AI完成了,功能work,但是AI写的代码我还没有时间看,能直接上线吗?
    • 如果是对确定性要求不高、没有复杂的交互逻辑,例如一个网站的静态、一个操作手册,简单来说就是这个成果对客户不会直接损失,老板可能说可以,然后程序员,然后公司的程序员从三个变成一个
    • 但如果是对确定性要求很高,有复杂操作逻辑的,例如微信聊天的发送功能,我跟老板说,我用AI做了一个需求,自测通过,但AI写的代码我没看,能上线吗?老板要是说能上,我只能说这家公司在倒闭的边缘折腾。

   程序员本质上提供的是更高的确定性以及承担责任的角色,而AI无法提供确定性,更无法承担责任,责任一定是使用AI的人,而使用AI编程的人就是程序员,或者叫AI程序员。

  2. AI作为一种更高级的工具,价格本身不便宜,结合AI能做的事情,其性价比有一定的瓶颈,所以以后程序员要么很便宜,便宜到不配用AI,或者只能用最便宜的AI编程工具;要么程序员很贵,维护质量很高的业务,后者用一个人用AI维护很多个业务。

程序员要怎么拥抱AI编程时代

  1. AI编程一定会很普遍,成为AI编程时代卖铲子的人也许是个好生意,可惜大厂都下场了,普通人估计没什么机会了
  2. 如果还是做程序员,那一定要比多数人更早的拥抱AI编程,尽可能多的吃到AI编程的红利【红利期就是你会用但你同事不会用AI编程的时间段】,提高自己的效率
    1. 可以完成更多的工作,拿到更好的绩效【换钱】
    2. 可以让自己有更多的时间去做自己想做的事情【换时间】
  3. 不断探索先进的AI编程工具,保持自己对工具的掌握程度
  4. 往有复杂逻辑的业务去靠,复杂的业务通常意味着密集的沟通协同,这是AI编程作为单体【目前】不太擅长的

AI编程实践的更多相关文章

  1. Storm实时计算:流操作入门编程实践

    转自:http://shiyanjun.cn/archives/977.html Storm实时计算:流操作入门编程实践   Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比 ...

  2. 高性能javascript学习笔记系列(5) -快速响应的用户界面和编程实践

    参考高性能javascript 理解浏览器UI线程  用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程  UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 ...

  3. 高性能JavaScript 编程实践

    前言 最近在翻<高性能JavaScript>这本书(2010年版 丁琛译),感觉可能是因为浏览器引擎的改进或是其他原因,书中有些原本能提高性能的代码在最新的浏览器中已经失效.但是有些章节的 ...

  4. Method Swizzling和AOP(面向切面编程)实践

    Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...

  5. 编程实践中C语言的一些常见细节

    对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见, ...

  6. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  7. 试读《JavaScript语言精髓与编程实践》

    有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖 ...

  8. Python GUI编程实践

    看完了<python编程实践>对Python的基本语法有了一定的了解,加上认识到python在图形用户界面和数据库支持方面快捷,遂决定动手实践一番. 因为是刚接触Python,对于基本的数 ...

  9. [Java 并发] Java并发编程实践 思维导图 - 第一章 简单介绍

    阅读<Java并发编程实践>一书后整理的思维导图.

  10. 《编写可维护的JavaScript》之编程实践

    最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...

随机推荐

  1. TreeMap实现类和SortMap接口

    注意:Map与Set集合的关系非常密切.java源码就是先实现了HashMap,TreeMap,再包装了一个value都为null的Map集合实现Set集合类. 因此:TreeSet可以和TreeMa ...

  2. wifi转串口的模块

    wifi转串口的模块ZLSN7046T是上海卓岚生产的一款多功能wifi转串口模块.它能够将wifi信号转化为串口信号,且支持多种功能,邮票孔封装,体积小巧可以外置天线或者内置天线.ZLAN7046T ...

  3. 二、trackingjs人脸捕获 vue3

    <template> <div class="wrapp"> <video id="myVideo" width="80 ...

  4. iOS开发网络篇—实现一个视频播放客户端小应用(一)

    iOS开发网络篇-实现一个视频播放客户端小应用(一) 一.初步实现(完成tableview的基本数据展示) 1.前提说明 已经搭建了本地服务器,在本地服务器中存放了视频信息等资源. 服务器的资源 2. ...

  5. [记录]Typescript中的url跳转拼接

    最近遇到个奇葩项目:一部分是Vue+Typescript,一部分是AMIS: 发现一个有趣的现象: 原生的JS三目运算符在Typescript和AMIS中都是不行的: 问题来了,怎么实现功能: 毛主席 ...

  6. char和varchar的区别?VARCHAR(100)和 VARCHAR(10)的区别?Mysql字段类型20连问

    整数类型的 UNSIGNED 属性有什么用? MySQL 中的整数类型可以使用可选的 UNSIGNED 属性来表示不允许负值的无符号整数.使用 UNSIGNED 属性可以将正整数的上限提高一倍,因为它 ...

  7. Debian安装数据库

    Debian安装数据库 本来用的MySQL,但是安装MySQL很麻烦,MariaDB作为MySQL的替代品可以直接使用以前用MySQL的方式使用 参考链接: 如何在 Debian 10 上安装 Mar ...

  8. 关于.netcore即时生成缩略图踩的坑

    最近在开发一套系统,很多地方用到了缩略图,然而不同的地方用到的尺寸又不一样,上传的时候生成缩略图就没有意义了,因为你不知道会使用到哪些尺寸,于是想到即时生成的办法,前端判断图片是否存在,如果不存在则调 ...

  9. 深度剖析:HR 人力资源软件排名背后的考量与推荐

    在数字化浪潮席卷企业管理的当下,HR 人力资源软件已成为企业提升管理效率.优化人才运营的关键工具.市场上软件琳琅满目,各类 "排名" 也层出不穷,但这些排名往往因评判标准不一而让人 ...

  10. 第二章 创建第一个Web API项目

    2.1 项目模板选择 控制器型Web API与最小API ASP.NET Core提供了两种主要的Web API开发方式: 控制器型Web API (Controller-based Web API) ...