我们应该比模型更累。

最近,我总觉得在与代理式代码生成协作时,自己对所编写的代码逐渐失去了掌控力。

当我完成一次代理式编程会话后,虽然表面上看起来像是写出了代码,却完全忽略了那些在我们手工编写代码时才会发生的内在过程——比如那些由手写代码所带来的种种细节与流程。

简单来说,人类大脑拥有多种记忆类型:短期记忆、工作记忆和长期记忆。 短期记忆能够暂时储存信息并快速处理这些信息,就像RAM一样。 而长期记忆则包括你之前学过、早已深藏于心底的知识,比如数据库中的数据存储。 工作记忆则从短期记忆和长期记忆中提取信息,并将它们加以整合、加工,从而综合出解决方案或对信息进行深入分析与处理。

当我们着手编写代码时(这里的“着手”指的是大多数情况下阅读他人的代码),这些过程都会在我们的大脑中同时展开,以帮助我们更好地理解并适应编程环境。

这其实并不令人意外:默认模式下的代码生成,往往与技能的持续积累背道而驰——尤其是因为它的用户体验设计, 与老虎机如出一辙:你拉一下杠杆,就能获得一份奖励(即解决你的编程问题的方案)。 某种程度上,我们已经用一串串标记取代了社交媒体的动态流; 而我期待着十年后的某一天,能再次研读那些论文。

要真正从单纯地生成答案,转变为有意识地运用工具,需要付出额外的努力。 有一次我在X平台上发帖,有人建议我:“如果你觉得在一次代理式编程会话后头脑一片昏沉, 那很可能是因为你自己动手改写了部分代码。 ”

受到这一建议的启发,我撰写了论文《思考如何放慢速度》(Oz 提议),并结合了AI 以更缓慢的速度撰写更好代码的实践方法(使用 AI 更慢地写出更好的代码),以及Mitchell 的采用之路(Mitchell 的采用之旅),我开始更加有意识地运用这个工具,并在开发过程中重新增加了更多“阻力”。

到目前为止,以下方法对我效果显著:

• 我亲自编写初始实现,并请代理对代码进行审阅,随后逐行逐句地进行修改与调整。

• 我利用代理不断向我提出关于代码中我不懂的部分的问题,同时查阅相关的文档和 PR 代码。

• 我会请代理思考两种不同的实现方案,并在两者之间做出选择,然后对另一种方案进行批判性评估。

• 我还会与他人讨论代理提出的实施方案。

• 在解决问题上花费了至少 20 分钟之后,我才开始使用代理。

• 我会回过头来阅读书籍和学术论文。

• 我会重新实现一些基础的数据结构。

这些方法通过增加“阻力”,抵消了 LLM 生成代码在短期内带来的“提速”效应; 然而,从长远来看,它们反而让我更擅长运用这个工具——因为它们不仅巩固了我的自身基础, 而非依赖于预训练模型的基础。

我们理应比模型更疲惫。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论