前言:来自一个博主写的博文,个人认为是这几个月来,比较有价值的一篇,所以稍微翻译 分享在这(有能力建议 自己阅读下原文)
文章链接: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视为你自己的思考的替代品。 保持好奇心,不断学习。