我是一名程序员,写过很多类型的程序,比如操作系统的模块开发,Android/iOS App,网站前后台等。听说最近发布的Cursor能力很强,便按捺不住好奇心,想着试试看,看看它到底有多强。因为我一直对新事物都很感兴趣,尤其是软件行业的。
没想到这第一次和AI配合写代码的尝试,让我如此震惊,以至于这么多年从来没有写过任何文章的我,也来到了程序员大本营CSDN,感慨一番。希望这篇文章不仅能抚平我激动的情绪,也能向各位传递一些有用的信息。
先总结一下这次尝试的感受,八个字:一路狂飙,令人发指
话不多说,下面说说整个过程,本次是和Cursor配合开发一个简单的Android App:
1. 安装Cursor,这个过程就不赘叙了,主要是需要搞定账号和login。目前Cursor可以免费使用14天
2. 通过Android Studio创建一个空的app工程
3. 运行Cursor,打开第2步创建的app工程根目录。这个根目录就是Cursor的舞台了。过程中Cursor编辑器可能会提示装一些插件比如JDK什么的,我都是忽略了,因为我只想让Cursor写代码,不想让它编译运行,因为编译运行我还是回到Android Studio。相当于这两个工具配合完成整个App的开发
4. 在Cursor中通过Ctrl + L快捷键打开chat窗口,请开始你的表演
5. 我首先试图想通过描述一个总需求,让Cursor直接给出整个app,描述如下:
帮我写一个可以编译运行的Android app,使用Java语言。这个app可以帮助用户背单词,主要功能包括:新增,查看,修改,删除单词
6. 然后Cursor直接在工程根目录下生成了子目录以及相应的文件,但可惜的是无法直接编译通过。也可能是我没有熟练和它配合,需要更多指令,但我没有这样继续下去,决定拆分需求。重新建立了一个新的空的app工程
7. 以下是我拆分后的需求指令,全部自然语言描述:
- 这是一个java Android app,需要存储用户输入的单词,然后供用户查看,修改和删除。用数据库存储这些单词,每个单词包括:id,单词本身,单词的翻译,单词的例句。帮我实现这些数据库存储和操作功能,并能对应用层提供接口。这些文件在com.bell.crazyvocalbularies下创建。
- 帮我修复返回列的index时可能出现-1的问题
- 不要在代码中出现常量字符串,使用字符串资源文件代替,以后可以支持app多语言版本
- 编译时提示不认识R
- 接下来帮我完成主界面,主界面从单词表中读取单词,并以图标列表形式显示,每行两个图标。每个图标中包括单词的拼写,单词的翻译,一个例句。这个列表可以上下滑动,每页显示20个,往上滑动到最后时,松开加载下一页。这个显示列表的第一个图标永远是添加新单词的图标,用户点击这个图标可以添加一个新的单词。除了代码外,还帮我生成所有的资源文件
- 继续
手动在Android Studio中import SwipeRefreshLayout,其实这步也可以交给Cursor完成 - 编译提示找不到getWords方法
- 运行错误:AAPT: error: resource drawable/ic_add (aka com.bell.crazyvocalbularies:drawable/ic_add) not found
- 运行错误:符号: 变量 error_db_missing_columns
- 添加新单词的图标只能占一行中的一个位置,不能占据一整行
- 编译时报错R.id.main不认识
- 找不到initViews, setupSwipeRefresh, loadWords这几个函数 (出现这个问题估计是我apply时不小心覆盖了之前的内容,但这个对话后,AI帮我恢复了)
之后的过程一路狂飙,有几点要注意:1. 最好不要用apply all,因为你不知道修改或者添加了多少文件,这些文件要一个个确认,还不如在chat框里面一个个修改点apply然后马上accept该文件,这样不会漏。2. 你可以一直让AI继续,但它后来会不断补充UI上的提升,加动画,加提示等,等于是跑歪了,可以及时拉回来。3. 可以让AI检查一个功能是否完成。 - 接下来我们完成添加新单词的功能:当用户点击添加新单词的图标后,弹出添加新单词的对话框,用户可以在对话框中输入单词的拼写,单词的翻译,单词的例句。单词拼写不超过64个字符,单词的翻译不超过128个字符,单词的例句不超过256个字符,而且这几项缺一不可。用户点击确认后,将该单词加入单词表,并回到主界面刷新显示列表
- 继续
- 继续
- 继续
- 继续
- 继续
- 请帮我检查我刚才在apply时有没有遗漏或者出错 ---(这个地方是因为之前使用apply all,估计漏掉了一些代码)
- 不需要解释了,请检查一下添加新单词功能是否完成 ---(这个地方是因为之前使用了太多的继续,忘了到哪儿了)
- 需要
- 继续
- 继续
- 继续
- 继续
- 我觉得因为是本地数据库加载,加载时间应该很短,不需要加载状态和动画,你觉得呢? ---(这个地方是因为我觉得AI已经跑偏了,开始卷各种动画交互,纠偏了一下,AI回复我说的对)
- 请先看一下添加新单词的功能是否已经完成
- 继续完善这些部分,并给出完整的代码
- 请再次确认添加新单词的功能是否完成 ---(这个提示词后,AI又发现了一个小漏洞,然后就完成了)
8. 然后我就在Android Studio排除各种编译问题,也可以一直让AI解决各种编译问题。
下面的截图是生成的代码文件包括建立目录,我一行代码没有写
看着这一行行符合编码规范的代码,自叹不如。
还有资源文件,都是自动生成:
最后总结几点使用心得:
- 至少目前为止,使用Cursor编程,还是需要有编程基础的,比如写Android app,首先你得会用Android Studio,然后得有Android App的概念,有数据操作和编辑的概念,能解决一些编译问题,能针对代码的具体问题进行分析,尤其是复杂业务逻辑,需要分步骤描述时,更是需要有模块化思路
- 需求描述越准确越好,越详细越好,这很考验语言组织能力
- 每次chat过后,都需要apply和accept,否则下一次生成的代码可能不包含本次生成的代码
- 如果需求描述没有层次,颠来倒去,可能会覆盖之前生成的代码,所以apply和accept时要注意,不要太快点击,我就是好几次按捺不住激动的心情快速点击了apply,结果把之前的代码又覆盖了
- 可能我刚刚使用,还有些地方和Cursor配合的不好,需要继续摸索。但总体已经能非常高的提高效率了。