太长不看:
对于不熟悉的领域让 AI 提供建议,而非替你编码。
对于熟知的领域,提供明确的指令,并且永远 review 每一行 AI 生成的代码。
在编码过程中使用 AI 通常来讲有两种情况,对于想要得到的代码来说:
- 你还不够专业,或者还在学习
对于这种情况来说,永远不要让 AI 直接生成想要的代码,更不要复制粘贴。尝试自己完成,然后在需要帮助的时候让 AI 提供建议。不够专业是一个很委婉的说法,提醒我们在选择复制粘贴 AI 生成的代码时要三思。
不论你在学什么,只要它涉及编码,那么学习的最好方法就是自己试试,并且多试试。尽管也许所有东西都看起来很丑,也许代码与所谓“最佳实践”相距甚远,也许试了很久还是做不出来,只要你还想把他做出来,就多试试。你可以让 AI 提供建议,或者给你指条明路,但你一定要自己来写代码。
记住学任何技术的黄金准则:瞎几把写,能跑就行(F**k around until it works)。
在有编码 LLM 之前我们有 Google、Stack Overflow、各种博客教程,但我们看了这些东西之后代码总是要自己编码,自己 debug,花很多时间做调查和实验。然而现在只要跟 AI 说一声,它就能生成看着还不错,甚至可以复制粘贴直接拿来用的代码。但对你来说,对你的大脑来说,这和自己写一遍截然不同。
在老年间,我们花上十天半个月做一个小项目,从中得到自豪和成就感,就算代码看着很烂,也没有遵循“最佳实践”,但它是你自己写的,你可以回溯你的心路历程,然后写出更好的代码,这种编码带来的爽感会让你更想开始下一个项目。但现在,如果只是复制粘贴几段 AI 代码,然后就说我做了一个项目,实际上学不到任何东西,以及也得不到编码带来的爽感和满足感,所以大脑并不会得到正面反馈,然后慢慢失去编码的兴趣和动力。
- 你是专家,没有 AI 也能独立完成
这种情况下,可以将一些小任务分给 AI,但一定要 review 代码,并注意提供明确的指令。
像 GitHub Copilot 这样的 inline completion 是 AI 副主编吗最常见的应用,使用 inline completion 通常不需要额外小心,因为你会很自然地会马上 review 生成的代码、模型通常能猜对你的意图、linter 也会自动静态检查代码。但如果想要让 AI 生成一段代码、一个函数或类、一个甚至多个文件,就应该格外小心。
首先要足够明确,明确告诉 AI 想要的这段代码的上下文、参数和返回类型、以及想要用怎样的方法实现某些功能。同样应该有一个界限用来决定 AI 最多可以写多少代码,比如考虑到 SWE-bench 的表现,至少在 2024 年,最好不要让 AI 100% 自动完成一个 PR。
其次一定要肉眼 review AI 生成的每一行代码,哪怕只是生成了一段简单的脚本,哪怕复制粘贴后程序可以正常运行,这对于大多数开发者来说实际上应该非常自然,但在经历过积极的 AI 编码体验后,很容易在 review AI 代码时变得不够谨慎。这些原则实际上和更有经验的开发者在指导更初级的开发者一样,现在的代码生成 AI 实际上和初级开发者很像,都能比较好的完成小型简单的任务,但对大局缺乏经验和视野。
参考: