继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

编程的未来与AI

呼如林
关注TA
已关注
手记 486
粉丝 102
获赞 363
Cursor AI代码编辑器评测

编码的未来前景看起来非常光明

ChatGPT 引领了编码的新纪元。不再需要指望 Stackoverflow 能解决编码问题。相反,只需向 ChatGPT 提出问题,几秒钟内就能得到答案。这对我和我们在 Eppo 的团队来说,是一个颠覆性的改变,尤其是在我们接触不熟悉的领域时。

Cursor AI 代码编辑器 是一个几乎可以与 ChatGPT 比肩的游戏规则的颠覆者。它就像是知道你代码库的 ChatGPT。有几种方法可以与 Cursor 互动,以增强你的开发效率。

  1. Copilot++。正如名字所示,Cursor 提供了一个改进版本的 GitHub Copilot,除了标准 Copilot 提供的新代码建议外,它还能提出多行代码编辑建议。
  2. 代码库聊天(Command + L 与代码库)。这使您能够“与代码库聊天”,并询问问题。Cursor 会智能地将相关文件引入对话,然后 ChatGPT 会做出适当的回应。这对于导航您不熟悉的代码库部分非常有帮助。
  3. 代码生成的代码库聊天(Command + L 与代码库并正确提示)。与正常的代码库聊天非常相似,您可以在其中询问 Cursor 关于您的代码的问题,您还可以与 Cursor 聊天并提示它为您生成新的代码。这在您的更改需要跨越多个文件的更改时特别强大。
  4. 新代码生成(Command + K)。提示 Cursor 为您当前文件生成新代码。您可以标记文件或文档以提供 Cursor 执行您的指令所需的所需信息。
  5. 代码编辑(首先突出显示代码部分,然后使用 Command + K)。您可以突出显示代码的一部分并提示 Cursor 对其进行编辑。同样,您可以标记文件或文档以提供正确的上下文。
  6. 代码问题(首先突出显示代码部分,然后使用 Command + L)。您可以突出显示代码的一部分并对其进行提问,无论是否有代码上下文。如果您试图理解几行代码或某个函数的具体作用,这非常有帮助。

我将跳过对Copilot++的详细讲解,因为这很难在当下完整呈现。我将在下面展示Cursor的其他四种互动方式的示例。

2. 代码库聊天区

代码库聊天是我第一次使用Cursor时的“啊哈”时刻。一位来自客户的数据科学家在我们的工程技术Slack频道里提出了一个疑问,询问我们公共指标同步API中一个未记录部分的操作符是什么。该API允许公司通过传递一个JSON文件来同步数百或数千个指标到我们的系统。在此之前,我从未看过任何指标同步的代码。不过,因为我刚加入Cursor不久,想借此机会测试一下Cursor的能力。哇哦,真的让我印象深刻!具体来说,我问了

对于度量 API 同步过程中,在根据事实属性筛选时,你应该传递哪个运算符给 API 来表示不等于?

客户试过“not in”和“not equals”,但两者都不起作用。Cursor特别回复并显示正确的运算符是“不等于”。

在没有 Cursor 的情况下,找到答案至少需要我花费 5 分钟的时间来查找代码。相比之下,不到 30 秒。

另一个相对直接了当的例子。我想知道我们定义全局提升比率的地方。进行一个简单的查询。

全局提升比率的定义在哪里?

立即回应说,给出了我们计算全局提升值的具体计算函数。

好的,挺好的,所以Cursor可以搞定那些简单直接的问题。它能应对更棘手的问题吗?

在查看Eppo网页应用性能的时候,我在Datadog追踪中发现了以下内容(如下)。

许多数据库查询都在查找连接到同一个数据仓库的信息

我从Datadog那里发现,这发生在加载实验的“诊断”时。虽然我相对容易地找到了加载诊断的地方(我们使用GraphQL),但我无法找出查询仓库数据的来源。所以我决定看看Cursor能不能帮帮我。我从Datadog那里得到了查询,知道我们在加载诊断信息后,我问了Cursor。

这个查询可能在哪种加载诊断的场景中出现?
请在此插入查询内容

它的回复相当令人惊讶。它准确指出了获取仓库信息的代码位置。花了一些时间找到了触发它的解析触发字段,但Cursor基本上解决了我的问题,并为我节省了几个小时的代码查找时间。

我被这个回复惊呆了

3. 代码生成聊天(Cmd + L)

这个非常强大。目前Cursor的Command + K功能还不支持生成多个文件的代码,但你可以让Cursor误以为你需要生成多个文件的代码,然后将生成的代码复制粘贴到相应的位置。

这是我很喜欢的一个例子。我正在尝试使用简单的装饰器和守卫来为我们的Nest.js控制器实现公共API的速率限制。我的提示内容如下:

有没有办法用装饰器来实现速率限制?我希望使用路由和API密钥作为速率限制标识。希望能在装饰器里设置速率限制的时间窗口。

看看回来的是什么!是个完美的解决方案!

它展示了 (1) 装饰器,(2) 限流拦截器,以及 (3) 装饰器的使用。太酷了!

我并没有完全复制粘贴这段文字,但非常接近。在讨论Cursor的Command + K新代码生成功能时,下面会进一步举例说明。

4. 生成新代码(Cmd + K)

代码生成工具很擅长在特定文件中从零开始生成新代码,特别是在使用@符号添加相关文件或文档来提供所需上下文时。

在继续限流的话题上,我在实际编写核心代码逻辑的过程中,利用了新的代码生成功能。我创建了相应的防护文件来,并进行了相应的提示。

基于API密钥哈希、请求方法和路径,编写一个速率限制器保护程序。使用Redis作为存储。

这就是它的结果!

另外一次我需要生成一个条形图,显示我们实验流程中每一步的总运行时间。我们使用了Recharts,但我并不想阅读文档来生成正确代码。所以我请Cursor帮忙。

请使用@Recharts生成一个条形图,采用堆叠方式。

这里的 @ 很重要。我实际上从 Recharts 的文档中引入了这些内容。它生成的内容如下:

这大概为我节省了一个小时去查找Recharts文档以确保所有属性都正确的过程。而且生成的图表看起来很棒!它甚至为每个类别选择了合理的颜色。

从数学的角度来说,一个稍微复杂的例子是用于计算比率度量全局提升的代码。大概的提示是

写一个计算比率指标整体提升的函数。

回复太棒了,虽然我重新核对了数学,结果还是对的。

又一个例子是生成给定数据输入的HTML表格的指令。大致意思是

请根据提供的数据创建一个HTML表格。

这就是它搞出来的。

其实我不应该用直接的HTML代码,这引出了下一部分的内容。

5. 代码编辑(高亮显示,快捷键 'K')

Cursor工具在编辑现有代码方面非常擅长。你只需高亮需要修改的代码,让Cursor处理,然后使用 Command + Y/N 来接受或拒绝更改。

我收到了對上述PR的非常好的反饋,收到建議使用DataTable.tsx組件而非純HTML(我主要是後端開發者,所以當時並不知道這個組件)。所以我標出了100行HTML然後提示:

请使用这个 @DataTable.tsx 组件

这次我导入了特定文件的上下文,即DataTable组件的文件。30秒后,我成功创建了一个可以工作的表格,使用的是DataTable组件而不是纯HTML。简直不敢相信!

这里就是DataTable的显示效果,比如:

6. 代码相关问题(按下 'Command + L')

Cursor的另一个很棒的功能是能够在代码库聊天功能中轻松分享代码。你高亮代码,按下Command + L键,就可以轻松询问关于代码的问题。

这里是我第一次使用此功能的一个例子,当时在浏览我们代码库中的配置设置。首先,我高亮了schedulableWindowISOIntervals设置,然后触发了一个提示。

zh: > 这个设置干嘛的?

我甚至还问了一个后续问题。

如果时间段没有覆盖一整天呢?

收到了这两个问题的绝佳回答。

另一个例子。我在调试我们公共API的默认分页为何在没有传递分页参数时不起作用。代码看起来没问题,但我就是无法找出原因。于是我决定试一下Cursor。我高亮了相应的代码并开始操作。

不知道为什么,在某些情况下默认限制没有被应用。怎么会这样呢?

准确地,Cursor 发现问题的所在是我们直接检查了 null,而参数可能是未定义的。BOOM!

一个真的很酷的最终例子。我们有一些有问题的代码,将所有实验加载到内存中进行计数。我想通过SQL来修复它,并通过SQL进行计数,以增强句子的流畅度。所以我高亮了那行代码,并提示代码编辑器Cursor,这样更符合口语表达。

有没有办法通过在查询中计算计数,而不是将所有实验数据放入内存中,来提高效率?

果然,Cursor 想出了我们需要的 TypeORM 查询,解决了问题。

结尾

就这样结束了!希望你们喜欢我给你们分享的具体例子,说明Cursor如何彻底改变了我们在这里(在Eppo)搜索、编写和调试代码的方式。Cursor定义了未来一段时间内人工智能和软件工程师之间的互动方式。你也赶快跟上这个潮流吧!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP