oracle编程工具(oracle编程语言)

oracle编程工具(oracle编程语言)p class f center img src http dingyue ws 126 net 2024 1031 70f86f48g00s gif br p

大家好,我是讯享网,很高兴认识大家。




讯享网

                <p class="f_center"><img src="http://dingyue.ws.126.net/2024/1031/70f86f48g00sm7ulr000dd200hs0028g00g20020.gif"/><br/></p><p id="34QVPLJ6">在 AI 编程工具引领潮流的当下,许多开发者仍在观望,疑惑这些“AI 辅助编码”工具究竟有多大实用价值,是否值得为高昂的订阅费用买单。本篇文章中,从事编程工作已有 36 年的开发者 Tom Yedwab 将以 Cursor 为例,分享他对这款工具的实际体验与见解,希望能为仍在犹豫的读者提供有价值的参考。</p><p id="34QVPLJ7">原文链接:https://www.arguingwithalgorithms.com/posts/cursor-review.html</p><p id="34QVPLJB">作者 | Tom Yedwab       责编 | 苏宓<br/></p><p id="34QVPLJC">出品 | CSDN(ID:CSDNnews)</p><p id="34QVPLJD">在 AI 编程的论坛中,我经常会看到有软件开发人员提出一个常见的问题:有人从 Cursor 这样的工具中获得价值吗?为此付费订阅是否值得?</p><p id="34QVPLJE">于是,在将 Cursor 作为我个人和工作项目中日常工具使用了几个月后,我有一些观点想和大家分享,以此来讨论这究竟是一个“必备”工具,还是仅仅昙花一现的流行产品。同时,我还会介绍一些快速获得最大化收益的策略,希望能帮助那些想尝试它的人。可能有些人试过 Cursor,觉得效果不尽人意,而这些建议也许能激励你再给它一个机会。</p><p id="34QVPLJF">我没有受到 Cursor 的赞助,也不是产品评测者。我既不是要推崇它,也不是要贬低它,只是想分享我个人的使用体验。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1031%2Fc1c3a165p00sm7uls0009d200jg0028g00id0023.png&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="34QVPLJI"><strong>我是谁?</strong></p><p id="34QVPLJJ">首先,先向大家介绍一下我自己。我是有一名有着 36 年编程经验的开发者,熟练掌握多种语言,主要专注于 C 语言为主的游戏引擎开发,以及 Go、Python、JavaScript 的网页开发。我假设这篇文章的读者同样能够在大型代码库中自如地工作,能用自己擅长的语言编写和调试代码等。对于那些希望借助 AI 学习编程概念或想让 AI 替他们写超出自身水平的代码的初学者,我会提供完全不同的建议!</p><p id="34QVPLJK">对我来说,AI 助手的吸引力在于帮我<strong>处理模板化和重复性的工作,这样我可以集中精力在每个问题的核心逻辑上。</strong>我对自动生成大量代码并不特别感兴趣,对“写了多少行代码”作为效率指标持高度怀疑态度。我更希望在花费更少时间写同样多代码的情况下,有更多时间去思考边界情况、可维护性等问题。</p><p id="34QVPLJL">那么,言归正传:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1031%2Fae8ab68ep00sm7uls0009d200jg0028g00id0023.png&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="34QVPLJO"><strong>什么是 Cursor?</strong></p><p id="34QVPLJP">Cursor 是基于 Visual Studio Code(VS Code)开发的一个分支版本,内置了大模型(LLM)支持的功能,集成在核心界面中。这是一个专有产品,开发商提供了免费和订阅两种方案;不过,价格表并没有明确说明订阅用户的具体权益,以及与其他竞品的区别。我会结合自己的理解,在后续功能介绍中尽量说明这一点,以下是简要总结:</p><p><ul><li id="34QVPLLG"></p><p id="34QVPLJQ"><strong>Tab 补全</strong>:这是一组专有的微调模型,提供代码补全功能,并可以通过 Tab 键跳转到下一个推荐操作。该功能仅对订阅用户开放。</p><p></li><li id="34QVPLLH"></p><p id="34QVPLJR"><strong>内联编辑(Inline editing)</strong>:这是一个基于聊天界面的编辑工具,可以对选定代码进行修改,并通过简单的差异视图显示更改,采用基础模型如 GPT 或 Claude。此功能对免费和付费用户均开放。</p><p></li><li id="34QVPLLI"></p><p id="34QVPLJS"><strong>聊天侧边栏:</strong>同样是基于聊天的编辑界面,允许在侧边栏进行更大范围的修改,支持更长的讨论、多文件代码建议等,采用基础模型如 GPT 或 Claude。此功能对免费和付费用户均开放。</p><p></li><li id="34QVPLLJ"></p><p id="34QVPLJT"><strong>Composer:</strong>这是专门用于跨代码库大规模重构的聊天界面,生成多个文件的差异视图供用户逐一查看和批准,使用基础模型如 GPT 或 Claude。此功能对免费和付费用户均开放。</p><p></li></ul></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1031%2F890f8332p00sm7uls000ad200jg0028g00id0023.png&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="34QVPLK0"><strong>Tab 补全</strong></p><p id="34QVPLK1">虽然其他由 LLM 驱动的编码工具更侧重于聊天体验,但在我使用 Cursor 的过程中,Tab 补全功能才是最符合我日常编码习惯并能节省最多时间的功能。显然,这个功能背后投入了大量的思考和技术研究,因此它不仅可以建议一行、多行,甚至整个函数的代码补全,还可以建议下一个需要编辑的行。这样一来,只需不断按下 Tab 键,就能在整个文件中自动完成相关的修改。</p><p id="34QVPLK2">使用它的一种用法是将它当作一个“增强版”代码重构工具。例如,假设我有一段代码块,其中的变量名是 under_score,而我希望将它们改为 camelCase。我只需重命名一个变量的一个实例,然后逐行按 Tab 键,就能更新所有需要更改的行,包括其他相关变量。许多繁琐、容易出错的任务都可以通过这种方式自动完成,而无需额外编写脚本:</p><p id="34QVPLK3"><strong data-type="dy"><video src="https://removemp4" data-video="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42b5d281d7533f4983978eac9fabc02347d040f840d90c61f38798a09aa482b3307939d845987ca352618f735faeb5755ec409c30f2e0bf30f1432fb51a68b5a6a476a81281250ce65e316eccebcd2ba19ca938bcafb7fce49b5491c69328840560e9b941abf290f75d.m3u8,https://removemp4" data-img="http://videoimg.ws.126.net/cover/20241031/TMg4YEZ5l_cover.jpg" data-topicid="1000" data-commentid data-commentboard="" data-vid="VFETT1DBT" alt=" 36年开发老兵试用AI编程工具:真香还是交智商税? " data-m3u8="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42b5d281d7533f4983978eac9fabc02347d040f840d90c61f38798a09aa482b3307939d845987ca352618f735faeb5755ec409c30f2e0bf30f1432fb51a68b5a6a476a81281250ce65e316eccebcd2ba19ca938bcafb7fce49b5491c69328840560e9b941abf290f75d.m3u8" preload="none" controls /></strong></p><p id="34QVPLK4">有时 Tab 补全甚至会独立发现并提出修复 bug 的建议。很多时候,当我在 Python 或 Go 中添加依赖项时,它会自动建议导入相应的模块。如果我将字符串用引号给括起来,它会适当地转义内容。与其他工具类似,它还可以根据函数签名和可选的文档字符串生成整个函数代码:</p><p id="34QVPLK5"><strong data-type="dy"><video src="https://removemp4" data-video="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42b34b9bba4b2ab1425690044fb1e574e10b8e05cae7977bbbe131c40badd086b549f7f305ad0fde380438088b41cb59898ac0e80a5e27403a54c3c61e52da12e3b32ea88c979447a760c547ae2c00df776e584da1995f1029a8f5c861692cf789ea05cdca77b623dc0.m3u8,https://removemp4" data-img="http://videoimg.ws.126.net/cover/20241031/m32zEoVZ6_cover.jpg" data-topicid="1000" data-commentid data-commentboard="" data-vid="VFETT1I2M" alt=" 36年开发老兵试用AI编程工具:真香还是交智商税? " data-m3u8="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42b34b9bba4b2ab1425690044fb1e574e10b8e05cae7977bbbe131c40badd086b549f7f305ad0fde380438088b41cb59898ac0e80a5e27403a54c3c61e52da12e3b32ea88c979447a760c547ae2c00df776e584da1995f1029a8f5c861692cf789ea05cdca77b623dc0.m3u8" preload="none" controls /></strong></p><p id="34QVPLK6">总体而言,这个工具感觉就像在读我的心思,能预测我接下来的操作,让我能更少关注代码细节,而更多专注于构建的整体架构。</p><p id="34QVPLK7">值得一提的是,补全速度极快,几乎是在我停止输入的瞬间,代码建议就弹出来了,完全没有等待的感觉。如果这个过程拖延太久,那对我来说肯定会是个大缺点。</p><p id="34QVPLK8">那么,我对 Tab 补全的抱怨是什么呢?第一个问题比较小:有时候我没及时看到补全建议就继续输入了,结果建议消失了。而一旦消失,似乎没办法让它重新出现,只有重新输入一部分再试。</p><p id="34QVPLK9">另一个问题刚好相反:有时补全的建议完全不合适,我会故意忽略它。然而,偶尔我选择了一个不同的补全,但之前忽略的建议却被悄悄应用了。这种情况虽然不多,但已经引发了一些难以察觉的 bug,因为我并未意识到不对的逻辑被误用。这虽然不至于影响 Tab 补全带来的效率提升,但确实稍微影响了体验。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1031%2Fdf5ff7f2p00sm7ult0009d200jg0028g00id0023.png&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="34QVPLKB"><strong>内联编辑、聊天侧边栏和 Composer</strong></p><p id="34QVPLKC">据我所知,这些功能在与基础模型的交互上非常相似——我几乎只用 Claude 3.5 Sonnet——主要区别在于用户界面。</p><p id="34QVPLKD">内联编辑可以通过选中代码并按下 Ctrl-K/Cmd-K 启动。我输入想要的更改后,文件里会显示一个清晰的差异视图,让我选择接受或拒绝。我主要用它来添加小段代码或做些小范围的重构。</p><p id="34QVPLKE">一个典型的用法是,当我有一个任务循环并想把它并行化时,就可以用这个功能来处理:</p><p id="34QVPLKF"><strong data-type="dy"><video src="https://removemp4" data-video="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42bcfaae740daa25881a1ca2e55eacac8e6c0d4adb12e1c2c908e0f8769a010013fff15cc3e0f91b1edc0e3ad06020244d09fe1d6414a01c5d773145dbfb878409015a0807c4311edae455c5fac171a70ea04b74af0579d6b75ea8b87fe690217721f7b618927da23c3.m3u8,https://removemp4" data-img="http://videoimg.ws.126.net/cover/20241031/mXh69pBHW_cover.jpg" data-topicid="1000" data-commentid data-commentboard="" data-vid="VFETT0J0S" alt=" 36年开发老兵试用AI编程工具:真香还是交智商税? " data-m3u8="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42bcfaae740daa25881a1ca2e55eacac8e6c0d4adb12e1c2c908e0f8769a010013fff15cc3e0f91b1edc0e3ad06020244d09fe1d6414a01c5d773145dbfb878409015a0807c4311edae455c5fac171a70ea04b74af0579d6b75ea8b87fe690217721f7b618927da23c3.m3u8" preload="none" controls /></strong></p><p id="34QVPLKG">然后,你可以通过 Ctrl+L/Cmd+L 来打开聊天侧边栏,它为多轮对话提供了更大的操作空间。不过,我对当前测试过的 LLM 模型有个小抱怨:它<strong>们总是先返回代码,而不是在遇到歧义时先询问澄清。</strong>建议的代码会有一个“应用”按钮,点击后可以在当前选中的文件中生成差异视图。这对于单文件的大规模重构,或基于当前打开的文件创建新文件非常有用。如果涉及其他文件,它们可以手动添加到上下文中,不过 Cursor 会根据查询和后台生成的索引来猜测相关文件。</p><p id="34QVPLKH">这里有一个示例:将应用程序的数据库 API 转换为 REST API,并提供参数验证和正确的 HTTP 状态码,然后再编写一个客户端库来访问这个 REST API:</p><p id="34QVPLKI"><strong data-type="dy"><video src="https://removemp4" data-video="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42bf3a687633c6262b8eed52ec377bcdb09e5c61f3ac37629267d3ff0d7bb66a4395f2a5e2181ffd2c9af8030e53fd21be0c96de8a627c7985b393101866fefcfcb526df7dc02c4a9659625582e94aadb06548eb387ce651df15b5618944e847d4d3e4e63a975a478e0.m3u8,https://removemp4" data-img="http://videoimg.ws.126.net/cover/20241031/YlpXqiHgQ_cover.jpg" data-topicid="1000" data-commentid data-commentboard="" data-vid="VFETT1GSH" alt=" 36年开发老兵试用AI编程工具:真香还是交智商税? " data-m3u8="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42bf3a687633c6262b8eed52ec377bcdb09e5c61f3ac37629267d3ff0d7bb66a4395f2a5e2181ffd2c9af8030e53fd21be0c96de8a627c7985b393101866fefcfcb526df7dc02c4a9659625582e94aadb06548eb387ce651df15b5618944e847d4d3e4e63a975a478e0.m3u8" preload="none" controls /></strong></p><p id="34QVPLKJ">另一个示例是将这个客户端库从 Python 转换为 Go 语言,注意松散类型的 Python 代码如何被转换为结构明确的结构体类型,且符合 Go 惯用的错误处理风格!这并非简单的 1:1 重写。</p><p id="34QVPLKK"><strong data-type="dy"><video src="https://removemp4" data-video="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42bd7b61889e9be3e866037bb038cfad5b9a74b4767a7d838faf1baf51006bd2c6d73ce4bc424341ac6ddacdf8aa6cd746217d42899e8e7a543954da04eb50e7f795c7343ededaa3f9298e03d057fd76422e2d7788ee75f5a77d51edf4d36207082386953d300a3687b.m3u8,https://removemp4" data-img="http://videoimg.ws.126.net/cover/20241031/W8tLU6RKi_cover.jpg" data-topicid="1000" data-commentid data-commentboard="" data-vid="VFETT0LQR" alt=" 36年开发老兵试用AI编程工具:真香还是交智商税? " data-m3u8="https://flv0.bn.netease.com/dc157d7dfe7a0f706e743313ff31c42bd7b61889e9be3e866037bb038cfad5b9a74b4767a7d838faf1baf51006bd2c6d73ce4bc424341ac6ddacdf8aa6cd746217d42899e8e7a543954da04eb50e7f795c7343ededaa3f9298e03d057fd76422e2d7788ee75f5a77d51edf4d36207082386953d300a3687b.m3u8" preload="none" controls /></strong></p><p id="34QVPLKL">最后,Composer 专门用于跨文件的重构,这是我最少使用的功能,但它提供了一次性查看多个文件差异的良好体验。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1031%2Fd1b67d23p00sm7ult0009d200jg0028g00id0023.png&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="34QVPLKO"><strong>.cursorrules 文件</strong></p><p id="34QVPLKP">我最初并不知道这个功能的存在,直到在(我认为过于简略的)文档中偶然发现它,那时我看到各种聊天模式始终会包含位于工作区根目录的 .cursorrules 文件的内容,以提供额外的上下文。我目前在尝试利用它来告知 LLM 有关代码库的编码规范、常用包和其他文档信息。</p><p id="34QVPLKQ">这个功能可能有助于解决我在使用 Cursor 时遇到的一个大难题:它无法遵循代码风格和模式,除非这些风格已经存在于你正在编辑的文件中。例如,在 Khan Academy,我们使用一个专有的 Go 库来在函数间传递上下文,用于日志记录、HTTP 请求等场景,所以 LLM 需要能够使用这个库。过去这一直很困难,但或许一个写得好的 .cursorrules 文件可以作为改进的第一步。</p><p id="34QVPLKR">目前的限制是每个工作区只能有一个 .cursorrules 文件,因此像我们这样包含多种语言代码的 monorepo 将比包含一个小型代码库(代码风格一致)要复杂得多且更难设置。</p><p id="34QVPLKS">另外,文档提到 .cursorrules 文件仅在聊天模式中使用,而不适用于 Tab 补全。不过,我尝试将该文件固定在工作区的一个标签页中,确认可以让它至少部分参与到 Tab 补全的上下文中。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1031%2F955b2de7p00sm7ulu0009d200jg0028g00id0023.png&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="34QVPLKV"><strong>对我的工作流程的改变</strong></p><p id="34QVPLL0">像 Cursor 这样的工具最令人兴奋的地方并不是我可以更快地编写代码,毕竟写代码本身并不是瓶颈;事实上,我常常需要放慢速度,以免过分关注代码本身而忽视要解决的高层次问题。<strong>真正的价值在于它改变了我的编码方式。</strong></p><p id="34QVPLL1">虽然这种技术还处于早期阶段,但到目前为止,我的工作方式已经发生了以下变化,我也期待在不久的将来看到更多改变:</p><p><ul><li id="34QVPLLK"></p><p id="34QVPLL2">我现在在编码时不太倾向于引入新的库或框架。并不是说我自己会去写加密库,而是对于小型工具而言,直接让 LLM 按我的需求生成定制代码比引入一个通用库更简单。这些通用库通常在刚推出时小巧且轻便,但因为是开放的并且被越来越多的人使用,所以它们慢慢会积累我不需要的功能和选项。</p><p id="34QVPLL3">很多库存在的意义只是为了减少样板代码,过去我会觉得这很值,因为有了这些库可以帮我省下了写和维护代码的时间。可现在,LLM 可以帮我完成这些重复性的工作,所以我觉得使用库的成本就显得有些不划算了。而且,这个成本可能更高——你试过让一个写了一年甚至更久的 Node.js 项目重新跑起来吗?不过借助 LLM 干脆从头再写一遍。</p><p></li><li id="34QVPLLL"></p><p id="34QVPLL4">我也不再担心在自己的代码中是否遵循 DRY(不要重复自己)。过早地定义抽象会导致后期的技术债增加,因此能够参考其他代码快速生成相似代码,而不将其抽象为函数或类,为我提供了更大的灵活性。如果需要在未来将重复的逻辑重构出来,LLM 也能提供帮助。</p><p></li><li id="34QVPLLM"></p><p id="34QVPLL5">我对不熟悉的语言或框架的接受度也更高了。例如,多年来我一直在使用 R 语言,尤其是将它用于数据可视化。但说实话,我对它并不熟练,我对 dplyr 的理解不深,总觉得有很多不同的方法可以完成同样的任务。现在我只需描述想要的可视化效果,LLM 就会自动生成相应的数据操作和 ggplot 可视化。以前花一小时的任务,现在五分钟就能完成,所以我更不容易放弃转而用 Python 来做了。</p><p id="34QVPLL6">也许有一天我甚至会用 Rust 写点什么。或许吧。</p><p></li><li id="34QVPLLN"></p><p id="34QVPLL7">我现在会先对一些小模块做快速调整,然后再把它们整合到大项目里面。这样做的部分原因是因为 LLM 处理大项目有些吃力,另一方面也让我发现了一些以前没想到的工作方法。比如,我可以先用 Python 这种灵活的语言来做原型,解决好技术细节后,再迅速转成类型严格的 Go 代码,直接在 Web 应用中。我还可以让 LLM 自动生成测试数据,或者模拟一个后端来对前端进行开发。既然一个想法还没完全确定下来,为什么要一下子投入在成熟的大项目里付出高昂的成本呢?</p><p></li></ul><br/></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F1031%2Fa2fd4e70p00sm7ulu0009d200jg0028g00id0023.png&thumbnail=660x2147483647&quality=80&type=jpg"/><br/></p><p id="34QVPLL9"><strong>总结</strong></p><p id="34QVPLLA">我不确定几年后我是否还会继续使用 Cursor,亦或者转向其他工具。但可以肯定的是,在我撰写本文时,我觉得 Cursor 是 LLM 编程助手的**工具。如果你想探索这类工具可能带来的价值,我建议你试试 Cursor。</p>

讯享网
小讯
上一篇 2025-04-24 12:37
下一篇 2025-04-17 11:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/137078.html