目前,AI在编程领域处于一个奇怪的状态。
有人声称你可以在三天内构建一个完整的SaaS(软件即服务),而另一些人则认为它比无用还要糟糕。
这两种说法可能都有些夸大其词,甚至是在撒谎。
我喜欢用Cursor编程,它彻底改变了我的编码方式,但很多时候它也表现得像一堆垃圾。
因此,作为一个对AI持怀疑态度的人,我将分享我所知道的一切,帮助你获得尽可能好的体验。
Cursor规则
让我们从一个简单的开始。
如果你没有一个.cursorrules文件,那你可真是错过了不少东西。
(最近这已经变成了一堆.mdc文件,只需按CMD+Shift+P,选择“新建Cursor规则”,它就会在正确的位置为你创建一个。)
你可以在大约10分钟内准备好一个,这将为你节省大量时间。
在这个cursorrules列表中查找你的技术栈,并提取出最好的部分。
但我的建议是保持它的简洁性,然后随着时间的推移逐步完善。
你不需要一个包含所有编程最佳实践的庞大文件。
AI输出糟糕的原因并不是因为它忘记了DRY(不要重复自己)或SOLID(面向对象设计的五大原则)。我发现,给它过多的输入,或进行过长的对话,反而会让它开始崩溃。所以,保持简洁。
这里有个小技巧:如果你发现同样的问题一再出现,只需添加一行简单的规则告诉它不要这样做。或者更好的是,在Cursor聊天中直接说:“请写一个cursorrule,不要再做这件事了。”然后把它加进去。
比如,我的AI总是忘记在JavaScript中使用空值合并操作符(??),即使我修复了它,它也会在未来的更改中恢复我的修改。所以我当然会添加这条规则,问题就不会再发生了。
然后,在文件的顶部,写一些关于项目的描述。如果你有特定的文件结构和代码组织方式,也可以加进去。
获得最佳输出
我发现,迄今为止,提高输出的最佳方法是明确告诉AI在何处找到代码,否则它可能会随意生成。
比如,如果你知道它需要某个函数,或者要创建一个与现有代码非常相似的过程,给它提供这些上下文。
你并不一定需要告诉它确切的函数——我们在这里是为了让生活更轻松,当然我还是希望这比我自己写代码更容易。
在我告诉它我想要什么之后,我通常会说“参见@schedule.ts @utils.ts @ScheduleHeader.tsx”,并包括任何有助于它完成任务的内容——即使是以一种更抽象的方式,比如“这是如何做类似事情的”。AI已经在一堆随机代码上进行了训练,所以如果你的项目有特别之处,你需要告诉它。
随机小贴士
好吧,让我们快速进入一些小贴士。
- 我喜欢用Composer(现在叫Agent)来进行简单、低影响的更改。而Chat(Ask)则用于其他一切。手动点击“应用”并多花一秒钟思考它所做的更改,以及这些更改发生在哪些文件中,而不是直接接受一大波绿色的修改。
- 不要盲目接受代码。它总是会回过头来咬你一口。
- 时不时确保你阅读并完全理解代码中最关键的部分,并手动重构它。你会发现很多漏洞,修复它们意味着未来由AI编写的代码会更好。
- 问“这是最好的方法吗?”或“你考虑过xyz吗?”
- 学会判断何时手动解决问题更好。
- 在使用AI修复bug时要格外小心。我认为它在修复除最愚蠢的bug之外的任何问题上都特别弱,而且在此过程中可能会造成很多损害。
- 如果这是一个重要且关键的任务,或者你正在为某个功能奠定基础,请让它先向你提问,以确保它完全理解你想要做什么,然后再编写代码。
结论
AI最棒的一点是,你现在可以在大脑疲惫时写代码,而通常解决这种问题是你力所不能及的。
它非常适合坐在沙发上快速写出一些还算不错的代码,但有些时候,你会花一个小时追逐“你是对的”“我现在看到问题了”,结果却发现自己比开始时的情况更糟。
但我建议你多尝试,并学习如何最好地与它交流。它不会消失,它只是你可以使用的又一个工具。
如果你是初级开发者,我当然会非常小心地使用它。实际上,对任何人来说都是如此。我认为我的编码技能确实有所退化。
我还认为,你在使用AI编程时的体验很大程度上取决于你在编写什么,以及你使用的是哪种技术栈。所以,如果你尝试了各种方法,但它仍然表现糟糕,并且你看到大家都在为它欢呼时感到自己快要疯了,那可能并不是你的错。