像人类一样编写代码以便维护
大型语言模型(LLMs)最好的一个特点就是它们可以为你编写代码,整天都在工作。谁还在乎DRY(不要重复自己)?你不必在四个不同的文件中更新相同的复杂条件——人工智能会为你完成这项工作!对吧?我最近注意到自己在一个与AI合作构建的项目中放松了要求。我需要在几个地方进行相同的访问检查:路由处理程序、后台作业、API端点、Webhook等。每次,我描述我需要的功能,模型会生成可以工作的代码,我就合并它。每个版本大致看起来都是这样的:if (user.isActive && user.hasPermission('read') && !user.isSuspended && account.status === 'open') { // 执行某个操作 } 基本上每次的条件是相同的。四个条件,可能只是变量名稍微不同,逻辑是复制粘贴的,只是改了几个字。其实有一个更简洁的方法可以做到——例如,像我自己写的时候提取出来的一个共享助手。但我没有这么做。代码可以运行!测试通过了,我也不需要再碰这段代码。这就是懒惰:如果它不遵循最佳实践,或者我知道某段代码将来会难以维护,这有什么关系呢?当我需要更改某些内容时,LLM处理,而不是我。只不过LLM并不是在真空中编写代码。它会读取你的代码库。你打开的文件、已经存在的模式以及你最近所做的更改。每一个合并到代码库中的快捷方式都是关于这里的做法的信号。下次你向LLM请求另一个具有相同访问规则的端点时,模型不会从头开始。它会从你代码库中已经存在的另外四个副本开始。所以你请求第五个端点,就会得到第五个条件,代码也是复制的。你请求重构,模型会保留所有五个条件,因为这就是你代码的样子。这个坏模式不再是一次性的,它被视为你的风格。如果你就这样让事情继续下去,你真的能相信LLM能在你尝试修复它时捕捉到每一个实例吗?当然,其中一些并不是灾难性的。事情总是这样开始,但代码的味道确实会累积起来。每一个重复的条件,每一个“上帝”函数,每一个“我以后会整理的”合并,都为下一个提示增加了一层信号。最终,你无法轻易通过提示来摆脱它。至少没有弄脏你的双手和卷起袖子。最令人沮丧的是:我以为我是在将维护任务外包给LLM,但我发现自己滑入的坡道实际上是在训练它越来越糟糕的习惯。像人类一样编写代码以便维护。LLMs是会吸收你所做的一切并复述给你听的海绵。所以,确保它是好的。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡