[转载]- 我为什么停止使用 AI 代码编辑器

前言:来自一个博主写的博文,个人认为是这几个月来,比较有价值的一篇,所以稍微翻译 分享在这(有能力建议 自己阅读下原文)

文章链接:link


我为什么停止使用 AI 代码编辑器

我决定把使用 AI 变成一个手动操作,因为感觉,当我依赖上 AI,自己的能力会慢慢地退化。所以,我建议大家在把 AI 作为工作流程 关键一部分时,一定要谨慎。

早在2022年末,我就开始尝试使用 AI 工具了,甚至比 ChatGPT 的第一个版本还要早。 2023年,我开始在开发工作中使用基于AI的工具。 刚开始,我对这些大型语言模型(LLMs)的能力印象超级深刻。 以前,遇到晦涩难懂的编译器报错,我只能一行一行地啃代码。现在,直接把报错信息和C++源代码复制粘贴给AI,它就能告诉你错误的原因,简直就像魔法一样。

后来,GitHub Copilot变得越来越强大,我也就用的越加频繁。我还尝试了各种其他的LLM集成工具,直接在代码编辑器(editor)里用。 那段时间,使用 AI 成了我工作流程的一部分。

到了2024年末,然而,我把所有LLM集成工具都从 代码编辑器 里卸载了。 当然,偶尔还是会用LLM, 我还是认为 AI 确实能给很多程序员带来帮助。 那么,我为什么不用AI代码编辑工具了呢?


特斯拉的完全自动驾驶(FSD)

从2019年到2021年,我开的是特斯拉。 虽然我再也不会买特斯拉了(这跟政治立场无关,主要是因为车质量太差,价格虚高,而且维修保养起来简直是噩梦)。

刚拿到特斯拉的时候,只要有机会我就用完全自动驾驶(FSD)功能。 在高速公路上开启FSD,然后稍微放松一下,感觉真是太棒了。 变道也简单,打个转向灯,车自己就变过去了。 那时候,对我来说,开车就是开上高速,打开FSD,偶尔让车变个道,然后听听音乐/播客(podcast),放松放松。

经常开车的朋友都知道,在高速公路上开车,很多事情都是自动完成的。 把车保持在车道中间,以合适的速度行驶,这些都变成了被动行为,不需要像读书那样集中注意力,只需要像走路一样,在脑海里下意识地进行就可以。

2019年到2021年期间,我跑长途几乎只开特斯拉。 2021年之后,我又开回了普通的汽车。 这种转变给我的冲击,完全超出了我的预期。 开车的第一个月左右,我必须全神贯注地盯着路面,重新学习如何在不思考的情况下把车保持在车道中间

过度依赖特斯拉的FSD,让我失去了“自我自动驾驶”的能力。


我使用AI代码编辑器的经历

使用AI代码编辑器,也有点类似。 一开始,我觉得在 AI 的辅助下,工作效率提高了很多。 我做的很多工作,都不是特别复杂。 AI 就像特斯拉的FSD一样,我只需要引导它,它就能帮我完成工作。

后来,我开始在工作用的电脑上,用个人账号做一个业余项目。 这个账号没有Copilot和其他炫酷的AI工具。 这时候,使用 AI 的感觉开始变得像我使用 特斯拉FSD 的经历一样了。

我感觉自己做一些很基础的软件开发工作,都比一年前吃力了。 突然就变得清晰的是 ,自己已经变得多么依赖AI工具了。 每次定义一个函数,我都会停下来,等着AI工具帮我写实现。 甚至要费点力气,才能想起来手写单元测试的语法。

而且,随着时间的推移,AI对我的工作帮助也越来越小。 它不仅让我觉得工作没意思,而且我对自己做一些实现决策也开始有点不自信了。 把决策外包给 AI 似乎更容易。 但是,有时候,即使给AI最好的提示,它也搞不定。 很明显,因为我平时不练习基本功,所以遇到难题时,能力就下降了。

“Fingerspitzengefühl”(指尖感觉)的丧失

“Fingerspitzengefühl”[ˈfɪŋɐˌʃpɪtsənɡəˌfyːl] 是一个德语词汇,字面意思是“指尖感觉”,指的是一种直觉或本能。 这个词已经被英语吸收,成为了一个外来语。 它指的是一种出色的情境感知能力,以及以最恰当和巧妙的方式做出反应的能力。

要定义资深程序员(senior)是一件非常困难的事情。 虽然我认为“资深”很大程度上体现在软技能上,但就技术硬技能而言,很多都归结为“Fingerspitzengefühl”。 使用一种语言、框架或代码库的时间越长,你就越能培养出这种直觉,知道什么是正确的方法。 “感觉有点不对劲”的直觉,会慢慢变成“我们应该这样做”的感觉。

这种培养出来的直觉,不仅仅体现在架构层面。 一个重要的组成部分是底层细节:什么时候使用指针(或者什么类型的指针),是否使用断言或检查,当有多个选项可用时,从标准库中选择哪个(尽管资深的C++程序员似乎仍然无法就此达成一致)。

这种直觉,就是我在大量依赖AI工具时,慢慢失去的东西。 而我还是一个技术负责人(lead developer)。 当我看到很多人热衷于“感觉编程”(vibe coding)时,我不禁会想:你到底打算怎么靠“感觉编程”成为资深程序员呢? 当AI工具宕机,或者变得过于昂贵时,你从哪里获得维护和扩展这些“氛围代码”的技能呢?

即使有更大的上下文窗口,更强大的计算能力,推理模型或代理(agents),仍然会有AI无法做到的事情。 随着时间的推移,AI工具肯定会越来越强大。 但是,当你收到一条Slack消息,说“网站运行正常,但APP在生产环境中崩溃了;我在本地试了一下,没问题,Sentry里也没有任何报错”,祝你好运,希望你能用AI代理帮你解决这个问题。 也许可以,也许不行。 如果AI代理搞不定,你的回复是“抱歉,Cursor搞不定,明天再多给它一些提示词”吗?


即使没有这些工具,你也能过得去

有时候,你可能会觉得,你必须使用AI,否则6个月内就会失业。 我们已经听了两年多的“3-6个月后”的故事了。 我也早就听腻了 CEO 关于“3-6个月后”功能的承诺了。 2019年买特斯拉的时候,我花了6400欧元购买了一些本应在“3-6个月后”实现的功能,但五年多过去了,这些功能仍然没有按照承诺的方式实现。

现在,如果你的项目大于大学项目,那么让 AI 来帮你写代码,很可能行不通。 在处理遗留系统或大型企业项目时,或者当你需要处理和参考大量的依赖内部结构(就像我使用虚幻引擎(Unreal Engine)时一样)时,AI工具通常无法正常工作。 当你需要使用内部领域特定语言(DSLs)、工具或框架时,祝你好运,希望大型语言模型(LLMs)能生成有用的输出。 在某些行业,由于种种原因,你甚至根本不能使用AI工具。

有些事情,你真的不应该依赖AI。 在实现身份验证系统(authentication system)(例如JWT2签名或基于角色的访问控制(RBAC3))时,在提示词中添加“并且它应该是安全的”并不能保证它的安全性,因为AI可能是在包含漏洞(CVEs4)的GitHub代码上训练的。 在涉及到安全问题时,你应该自己负责,并且完全理解其中的原理。 关键系统应该由人类编写和审查。 如果我们走向这样一种情况:一个AI代理编写代码,另一个AI审查自动生成的PR,然后另一个AI代理部署代码,那么我们很快就会看到安全问题的大爆发。

我的底线

我仍然会使用AI,偶尔用一下。 我认为,如果使用得当,AI可以是一个很棒的工具。 我的底线是:不要集成。 (I draw the line at integration.)
把AI完全从我的代码编辑器中隔离出来。 所有的上下文,我都手动添加。 我故意提高所需的工作量,以降低我使用AI的积极性。

我在工作中用AI的例子包括:“把这些Go测试中的结构体(structs)转换为map中的测试”,“把这个计算转换为SIMD”,或者“当内容类型是application/zlib时,解码body”。 我设置了一些自定义指令,只给我修改过的代码,并给我添加代码的说明。 这样,我仍然是实际修改代码库的人。 仅仅批准一个Git差异是不够的,我想自己手动添加代码,只有这样,我才能放心地签字,并承担责任。

AI的另一个很好的用例是学习。 我经常有一些非常不常见的问题,因为我有一些非常小众的兴趣。 事实证明,在自定义游戏引擎中使用实体组件系统(ECS)添加网络代码,并没有太多的学习资源。 对我来说,有效的方法是让AI解释代码片段,比如“解释这段汇编代码”,“解释这段shader的作用”,“哪些书深入讲解了游戏引擎中客户端/服务器反同步的解决方法”。 AI有时似乎很难搞定这些问题,我得到的结果好坏参半,但仍然比搜索引擎的结果好得多。 我甚至会用它来检查这篇文章(虽然不是用来写内容,而是用来检查)。

以这种方式使用AI的另一个好处是成本。 没有不必要的API调用,手动管理上下文,并且可以更好地控制LLM设置。 我使用一个桌面应用程序,连接了一堆不同的LLM。 我在过去的3个月里每天都使用它,总共花费了大约4美元的积分。

我想补充一点,在某些事情上,我更加严格。 在我的个人网站上,我不想有任何AI生成的内容,无论是文本还是图像。 我个人不喜欢AI生成的图像或“艺术”,原因有很多。 我认为,与AI创造的东西相比,人类创造的东西更有价值。

做你喜欢做的事

同样值得注意的是,除了效率和生产力之外,还有更多需要考虑的事情。 还有关于做你喜欢做的事。 如果你喜欢编程,那就继续自己编程吧,即使计算机可能比你更擅长。

1997年,“深蓝”(Deep Blue)赢得了与当时的世界象棋冠军加里·卡斯帕罗夫(Garry Kasparov)的比赛,但人们仍然下象棋。 在编程方面,我想说,我编程的原因和人们仍然下象棋的原因是一样的。 虽然象棋和软件开发非常不同,象棋的范围要小得多,但我认为,记住这一点是好的:有时候,我们做一些事情只是为了享受它们。

我对新程序员的建议

不要成为一个永远让AI做所有工作的“永远的初级程序员”。 如果你想成为一名程序员,那就学会自己编程。 保持好奇心,投入时间和精力去学习事物是如何真正运作的,以及在底层是如何运作的。 这真的会有回报。 学习底层的一切是如何运作的,并利用这些知识是非常棒的。 只要不断学习,就不要成为一个提示工程师(如果你甚至能称之为工程的话)。 相信我,有能力更有趣。

即使AI可能比你聪明,也永远不要盲目相信AI的输出。 不要围绕它构建你的整个工作流程。 有时试着在没有它的情况下工作几天。 你编程能力越强,AI就越会在更复杂的工作中妨碍你。

如果你现在开始学习编程,那就不断提高你的技能,而不是让AI做所有的繁重工作。 你将能够修复那些“氛围编程”现在造成的混乱。 我不想听起来像个精英主义者,但如果你不想学习超越“感觉编程”,那么也许编程不适合你。 因为那些所有工作都可以通过感觉编程(“vibe coding”)完成的职位,将在AI变得更强大时,最先被淘汰。

记住:如果你不能在没有AI的情况下编程,你就不会编程。

结论

当你在使用AI时,你是在用知识换取速度。 有时,做出这种权衡是值得的。 但重要的是要记住,即使是世界上最好的运动员,仍然会做他们的基本功。 软件开发也是如此:你需要练习基本功,才能做高级工作。 你需要保持你的斧头锋利。

距离AI接管我们的工作,还有很长的路要走。 很多公司都在制造“害怕错过”(FOMO10)效应,作为一种销售策略,以获得更多的客户,向他们的投资者展示业绩,以获得下一轮融资,以生成下一个肯定会彻底改变一切的模型。

AI是一种工具,它本身没有好坏之分,重要的是你如何使用它。 我认为,它可以是一个很棒的工具,只要你不依赖它来完成你的工作流程。 确保你仍然可以在没有它的情况下高效工作,确保你不会将你不完全理解的代码推送到生产环境,并且不要将AI视为你自己的思考的替代品。 保持好奇心,不断学习。

137 Likes

说的很好 但是用过了就回不去了 :rofl:

不过对本身不怎么懂编程的好像也没太大影响 可以搞点小玩意

22 Likes

公司只看效率

29 Likes

很有深度的文章,有点在快节奏中慢下来的感觉,靠自己亲手完成的代码回看更亲切

8 Likes

能完成工作内容就行了,喜欢学就多学一点,不喜欢学就少学一点。不可否认,AI在编程领域可以提升我们的工作效率

11 Likes

就像很多科幻片那种,后世纪的人类智商会严重退化,AI不需要做任何事就可以统治地球 :bili_040:

长视频 长文本 很多人都看不下去了 感觉已经开始丧失主动获取知识的能力了

15 Likes

写得很好,用多了copilot、cursor我也觉得基本功下降了一点,想关掉自动提示一段时间

6 Likes

自己写出来的才叫成就w

5 Likes

已经成只会点鼠标的猴子了 :smiling_face_with_tear:

4 Likes

我一直都是这个观点,ai只是作为辅助,主要还是自己要在过程中学东西,也体验过纯靠cursor做个小游戏,快是快,没有学到东西。

4 Likes

当年用上IDE不也一样没退化?AI不过是把效率又提高了一步。别纠结基本功,现在核心是解决问题的思维。

5 Likes

实际上是ai编辑器的出现会让学习门槛大大降低,在coding的时候你检查代码过程中,真的学到好多

2 Likes

我感觉这是两个维度的升级
编辑器 => IDE,加快了编程速度,最大的影响就是 API 记不住了,但对整体思维没有影响;
但是 IDE + AI,在遇到问题时,我现在会更加依赖 AI 的思路,总想先看看 AI 有没有更好的解法,
对于简单重复性劳动倒是无所谓,但是遇到一些自己本来就不懂的问题,可能就有些不好了,毕竟在工作 push 下很多时候就有种【实现了 = 我会了】的错觉,后续也不会回来看,现在确实有些懒得动脑了,当然这是我个人的情况,如果能合理使用我觉得是可以做到健康辅助思维成长的

5 Likes

大量的重复性的工作交给ai,核心部分代码自己写,主要是ai写不了太深入的东西,或者只能完成90%,剩10%自己写和debug要用200%的时间

1 Like

那我还是喜欢用ai的。。

1 Like

我喜欢用ai,比我写的代码好多了,并且可以学习不少代码风格

在审查/调优 AI 编写的代码的过程中,是不是也能在一定程度上继续保持自己的编程能力。

不用拥抱时代 不接受时代 自会抛弃你 也就是我们说的没苦硬吃 没罪硬受

11 Likes

计算器发明出来不要用 不然不会口算了?ai发明出来不要用不然不会写代码了

3 Likes

这篇帖子讲的很有深意,对于一个刚接触ai
的小萌新,真的很有意义