Rust-AI todo list 开发体验
之前用AI协助开发了一个Vue模块,感觉意犹未尽,所以决定再让AI 来协助我做一个todo list。
todo list对我来说真是一个刚需,从我决定做一件事情,到这件事情做完,我的todo list不但不会减少,反而会增加。
回来说说应用AI这件事情。我之前使用AI的量和现在比,相对要少很多,其中一个原因是我之前对那些技术细节很“熟悉”,使用AI帮忙写代码总是有隔靴搔痒的感觉。我对Vue的了解细节相对于React要少一些,因此,在应用AI上,感觉思想上的排斥要少很多。
这次,我打算在Rust上继续尝试使用AI,从1月29日开始,到2月7日,完成todo list的开发工作。
为什么是这段时间?因为这段时间是旅行时间,白天都在外拍照打卡,只有晚上才有时间来写代码,我要的就是要尽量压缩自己写代码的时间,更多让AI来下场写代码。
今天是2月7日,这个todo list应用的开发工作基本完成,此刻,我正在珠海金湾机场写这篇博客。
todo list的应用gitee 地址:https://gitee.com/hanshu_alan/todolist/tags
开始正文,来谈谈我的感受。首先,我发现我是比较适合这么干的。回想10多年前,我做tech lead时,我会将项目拆分成多个尽量简单的小任务,将这些小任务分配给组内的开发者。我记得我在做项目任务拆分时,不只是简单的拆分,还会考虑设计模式,并且还会经常先完成一些框架代码。因此,从接到项目到项目开始的这一小段时间里,我会非常忙碌。当任务分配出去之后,我又会感到轻松许多。
这段经历和我现在使用AI的体验特别像,最显著的区别是之前我是和人沟通,而现在我是同AI沟通。
在我让AI来帮忙写代码时,我也在体验另外一个大家的关注的问题,即AI能否代替程序员?对于这个问题的内省与体验,我目前的答案是“能”和”不能“。
说“能”,我想不用我说,很早就有人用AI生成正则表达式的相关功能代码,从这个角度来说,AI 已经替代了程序员的工作了。我也晒晒我在开发todo list使用到的prompt
帮我创建一个Rust的yew组件,这个组件包含一个多行文本框和一个按钮。按钮上显示的文本是“添加”,点击按钮时,会出发on_add_todo事件,on_add_todo事件传递的参数时文本框的当前值。在文本框上,当用户按下"ctrl+enter"组合健时,也要触法on_add_todo事件。
这个组件也包含一个属性,这个属性的值用于多行文本框的value值
使用Rust的sqlx框架,基于下面这个实体的定义,以owner_key为条件,返回所有满足该条件的实体,实现的代码中,要使用sqlx::query_as::<_, TodoItem>
#[derive(Debug, PartialEq)]
pub struct TodoItem {id: String,owner_key: String,title: String,description: Option<String>,finished: bool,created_at: DateTime<Utc>,updated_at: DateTime<Utc>,
}
这两个prompt比较有代表性,一个是前端的,一个是后端的。AI都能生成代码,或者从一个程序员的角度来说,AI都能把代码写出来。因此,说AI“能”代替程序员是有道理的,甚至可以激进一点说,AI已经能代替程序员了。
但是,这些代码并不能直接使用,就拿使用的yew框架来说。我现在使用的是yew 0.21版本。而AI生成的代码,应该是基于0.18的yew的版本。也就是说,AI帮我生成的前端代码几乎不能直接使用,还要我自己翻译一遍。另外,当我需要把代码组装时,这些地方还是需要我自己亲自下场。这倒不是说AI不能干,而是这里的业务逻辑比较复杂,它本身就是一个黑洞,需要开发者本身去探索,因此,自然也不知道该如何告诉AI了。因此, 从这个角度来说,AI是代替不了程序员的。嗯,不对,可能不能再用“程序员”这个称呼,我觉得“开发者”或者“创造者”更合适。
写到这里,我感觉到了一个更加宏伟的蓝图。
如果你稍微留意一下todo list v0.0.3的代码,你会发现它是比较臃肿的,因为,这个版本只是通过组装AI写出来的代码,完成了功能的开发。它的可维护性是比较低的,还需要继续迭代。而这个迭代的需求来源于我们对未来的探索。
最后,我说明一下文中提到的“AI”,我使用的是“文心一言”和“ChatGPT-3”。
欢迎大家留言区交流。
2024.2.7 珠海.金湾机场
这篇文章收录我的Rust-实战专栏。请关注我,不要错过更新哟。
相关文章:
Rust-AI todo list 开发体验
之前用AI协助开发了一个Vue模块,感觉意犹未尽,所以决定再让AI 来协助我做一个todo list。 todo list对我来说真是一个刚需,从我决定做一件事情,到这件事情做完,我的todo list不但不会减少,反而会增加。 回…...
2024-02-07(Sqoop,Flume)
1.Sqoop的增量导入 实际工作中,数据的导入很多时候只需要导入增量的数据,并不需要将表中的数据每次都全部导入到hive或者hdfs中,因为这样会造成数据重复问题。 增量导入就是仅导入新添加到表中的行的技术。 sqoop支持两种模式的增量导入&a…...
LDAR管理系统解决方案
1、密封点数量不准确 工业企业LDAR项目多委托第三方进行检测,由于前几年由于检测费较高,为减少开支,很多企业只安排检测公司检测了部分密封点,造成密封点遗漏。也有少数企业为了从中谋私利,虚增密封点。 2、密封点台账…...
[vscode]ssh报错: Resolver error: Error: XHR failedscode错误
场景问题:通过vscode ssh连接远程服务器失败,报错:Resolver error: Error: XHR failedscode: 问题原因:~/.vscode-server/bin/一串数字下的vscode-server-linux-x64.tar.gz由于某种原因无法正常下载 解决方式&#x…...
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 )
文章目录 Maven是什么?一、Maven安装和配置本地配置文件设置idea配置本地maven 二、基于IDEA的Maven工程创建2.1 Maven工程GAVP属性2.2 Idea构建Maven JavaEE工程 三、Maven工程项目结构说明四、Maven核心功能依赖和构建管理4.1 依赖管理和配置4.2 依赖传递和冲突4.…...
Flume安装部署
安装部署 安装包连接:链接:https://pan.baidu.com/s/1m0d5O3Q2eH14BpWsGGfbLw?pwd6666 (1)将apache-flume-1.10.1-bin.tar.gz上传到linux的/opt/software目录下 (2)解压apache-flume-1.10.1-bin.tar.gz…...
点云从入门到精通技术详解100篇-非结构化道路下无人平台路径规划与运动控制
目录 前言 路径规划方法研究现状 传统规划算法 智能规划算法 规划方法比较...
生成树技术华为ICT网络赛道
9.生成树 目录 9.生成树 9.1.生成树技术概述 9.2.STP的基本概念及工作原理 9.3.STP的基础配置 9.4.RSTP对STP的改进 9.5.生成树技术进阶 9.1.生成树技术概述 技术背景:二层交换机网络的冗余性与环路 典型问题1:广播风暴 典型问题2:MA…...
[HTTP协议]应用层的HTTP 协议介绍
目录 1.前言 2.使用fiddler抓包来观察HTTP协议格式 3.HTTP协议的基本格式 2.1请求 2,1.1首行 2.1.2请求头 2.1.3空行 2.2响应 2.2.1首行 2.2.2响应头 键值对 编辑2.2.3空行 2.2.4载荷(响应正文) 3.认识URL 3.1关于URL encode 1.前言 我们在前面的博客中,简单的…...
Linux 命令基础
Shell概述 Linux操作系统的Shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell是用户和Linux内核之间的接口程序,如果把硬件想象成一个球体的中心,内核围绕在硬件的外层管理着…...
【开源】JAVA+Vue+SpringBoot实现实验室耗材管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…...
集成开发环境 IntelliJ IDEA的基本使用
集成开发环境 IntelliJ IDEA 是由 JetBrains 开发的一个强大的 Java IDE,它也被广泛用于其他编程语言的开发,如 Kotlin、Scala 和 Groovy 等。IntelliJ IDEA 以其智能的代码补全、代码分析、重构工具和强大的调试功能而闻名。以下是 IntelliJ IDEA 的基本…...
【Flink入门修炼】1-2 Mac 搭建 Flink 源码阅读环境
在后面学习 Flink 相关知识时,会深入源码探究其实现机制。因此,需要现在本地配置好源码阅读环境。 本文搭建环境: Mac M1(Apple Silicon)Java 8IDEAFlink 官方源码 一、 下载 Flink 源码 github 地址:h…...
Spring IoC容器详解
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 基本概念 Spring IoC容器是Spring框架的核心组件,它实现了控制反转(Inversion of Control,IoC)的设计原则。IoC是一种编程思…...
06 MP之自动填充+SQL执行的语句和速度分析
1. 自动填充 在项目中有一些属性,比如常见的创建时间和更新时间可以设置为自动填充。 1.1 实例 需求: 将创建时间和更新时间设置为自动填充, 这样每次插入数据时可以不用理会这两个字段 1.1.1 在数据库增加字段 默认开启驼峰映射 createTime --> create_time…...
3 scala集合-Set
与 Java 的 Set 一样,scala 的 set 中,元素都是唯一的,而且遍历 set 中集合的顺序,跟元素插入的顺序是不一样的。 同样,Set 也包含可变和不可变两种。要实现可变 Set 集合,需要使用类 scala.collection.mu…...
Android应用图标微技巧,8.0系统中应用图标的适配
大家好,2018年的第一篇文章到的稍微有点迟,也是因为在上一个Glide系列结束之后一直还没想到什么好的新题材。 现在已经进入了2018年,Android 8.0系统也逐渐开始普及起来了。三星今年推出的最新旗舰机Galaxy S9已经搭载了Android 8.0系统,紧接着小米、华为、OV等国产手机厂…...
java学习(多态)
一、多态 含义:方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础上的。 多态的具体体现: 1)方法的多态 (例如重写和重载) 2)对象的多态 多态注意事项࿱…...
[UI5 常用控件] 07.SplitApp,SplitContainer
文章目录 前言1. SplitApp1.1 组件结构1.2 Demo1.3 mode属性 2. SplitContainer 前言 本章节记录常用控件SplitApp,SplitContainer。主要功能是在左侧显示Master页面,右侧显示Detail页面。 Master页面和Detail页面可以由多个Page组成,并支持…...
MyBatisPlus之分页查询及Service接口运用
一、分页查询 1.1 基本分页查询 配置分页查询拦截器 package com.fox.mp.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springfra…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
Gitlab + Jenkins 实现 CICD
CICD 是持续集成(Continuous Integration, CI)和持续交付/部署(Continuous Delivery/Deployment, CD)的缩写,是现代软件开发中的一种自动化流程实践。下面介绍 Web 项目如何在代码提交到 Gitlab 后,自动发布…...
