我尝试用 Cursor 完成一个完整项目,选择了自己完全不擅长的 Electron,开发了一款跨平台的 Steam 外部截图导入工具。
SnapSteam
开发的工具名为 SnapSteam,参考了相同功能的古早软件 SteaScree,但是做了一些改进。
更现代化的外观
以游戏库形式展示用户的所有游戏,除了已安装的游戏之外,还展示最近游玩的三个游戏方便快速上传截图,同时还支持把游戏添加到收藏列表中。支持多用户切换,每个用户展示不同的游戏库、最近游玩列表和收藏列表。
能够展示本地已有的截图。
提供亮暗主题和中英文支持。
功能改进
支持拖拽上传。
相比 SteaScree,它不会直接修改 VDF(Valve Data Format,Steam 用来存储配置的文件格式)文件,而是通过 Steam 重启时自动生成,降低损坏数据的风险。同时提供一键重启 Steam 的功能。
Vibe Coding
整个开发过程中,我没有输入过哪怕一行代码(除了些许 Markdown),全程都是 OpenAI(生成 Logo)+ Cursor(编码)实现。体验了一把产品经理的感觉。
这是我第一次用 Cursor 完整开发一个项目,既感受到 AI 编程的无限潜力,也偶尔因它反复尝试却无法解决某些问题而感到烦躁。
整个过程做的最多的四个事情:
提需求
想办法把自己的需求用尽可能明确的自然语言描述起来。对于一个常年使用 LLM 辅助开发的人来说不是难事,也能耐下心来打字,Claude-3.5-Sonnet 很聪明,90% 的情况都能接住我想表达的事情。
评审代码
这个过程就是看,虽然我没用 Electron 写过哪怕一个应用,也没看过文档,但是作为一个程序员,只要能理解代码的逻辑,基本都能看出代码改动是否能满足需求。Cursor 也能帮你在命令行执行命令(我经常让它读取 Steam 的 VDF 文件或者检查某个本地目录来验证功能是否生效),让 Cursor 在 macOS 跑 shell 命令非常顺利,在 Windows 跑 Powershell 命令则很糟糕,动不动就报错重写命令或者命令结束了但是 Cursor 完全不理会。
合并修改
Command + Enter 接受代码修改或者执行命令,Command + Shift + Enter 打断命令行执行。这就是我最常按的两个按键了。
运行与测试
让 Cursor 把应用跑起来(方便让它观察命令行的日志输出),亲手测试,有问题的话 Command + Option + I 打开调试窗口,截图,打断运行,再把截图丢给 Cursor,让它进一步分析。多模态模型就是巴适。
当然也并不是都是一帆风顺,磕磕绊绊还是有的。
Cusor 的快速请求限制
Cursor 个人用户每个月有 500 次快速请求,超过之后会转为慢速请求,我在前期用得多豪迈,后期就有多怂。慢速请求应该是换了模型,个人体感不管是生成代码质量还是解决问题的能力都下降明显。
Cursor 允许额外付费使用快速请求,我设置了 $5,用起来感觉就是…花钱如流水。
项目规模增长
随着代码量的增加,LLM 的上下文长度瓶颈越来越严重,调用 Cursor Agent 的时候你能感觉到它漏掉的东西越来越多,比如我的本地化文件都放在一个单独文件里面,前面 Cursor 还会帮我自动生成翻译,但是后面经常忘记这个事,需要我显式提醒。
总结
整体来说,使用 Cursor 是个很愉悦的过程,LLM 很聪明,审美也比我好一大截,如果让我自己从头学 Electron,我根本不可能在一天左右的时间就开发出来一个完整的应用的。
我其实不会因 AI 编程的出现和进步而感到过于焦虑。
一方面 Cursor 做出来的完整项目,我只敢拿来当做玩具来对待,而不可能用在生产环境,我如果没有相关领域的开发经验,Cursor 给的代码质量究竟是好是坏,是否有隐藏的坑,业界主流实现是怎么样的,完全不清楚,而这些工作在目前依旧还是需要一个资深程序员来做的。
再者模型上下文的瓶颈还是很严重的,我不觉得短期的未来能有很大突破,虽然比如 Gemini 有百万级别的上下文长度,但是支持并不等于好用,做一个代码量不大的项目可能还好,如果你做一个私有领域的大型软件,你不可能指望模型能把整个代码仓都给你吞进去的。
不用太焦虑,拥抱 AI 提高自己的效率才是目前程序员最应该做的事情。