单位 3 / 12

代码阅读、解释以及与新代码库的兼容性

收益:

  • 能够利用人工智能逐层映射外部代码库并端到端跟踪功能
  • 能够逐步解释复杂的功能并监控数据流
  • 能够将人工智能描述视为假设并验证代码中的关键主张

开发人员阅读代码而不是编写代码。当你开始一份新工作、接管别人留下的服务或为开源库做出贡献时,你的第一个任务是“这里发生了什么?”就是找到问题的答案。人工智能可以将这一发现任务缩短为数小时而不是数周——但前提是提出正确的问题并进行验证反射。

在本单元中,我们学习像“代码指南”一样使用人工智能:映射外国代码库,将复杂的函数翻译成简单的语言,遵循数据流,并弄清楚如何使用库。这里的黄金法则是,对人工智能的解释是一个假设;你用代码本身来验证它。

为什么代码注释功能强大但有风险?

LLM非常擅长阅读一段代码并将其翻译成人类语言,例如“此函数刷新用户的会话令牌”;因为它从数百万个类似的例子中学习了模式。这可以节省大量时间,尤其是对于长函数和嵌套函数。

风险在于:模型有时会告诉我们代码看起来在做什么,而不是它实际上在做什么。如果变量名称是 isAdmin 但内部逻辑相反,则模型可能会查看名称并提取错误的摘要。因此,在将该声明作为您关键决策的基础之前,您应该目视检查相关行中所指控的行为。描述将您带到正确的地方;代码有最终决定权。

注意:在涉及安全或资金流的决策中,不要将人工智能的“此代码执行 X”摘要视为单独的证据。摘要是一张显示去哪里寻找的地图;您在代码中给出确认。

映射外部代码库的步骤

  1. 从顶层开始。首先,熟悉文件夹结构和入口点(主要、应用程序启动、家庭路由器)。问AI“基于这个目录结构,应用程序有哪几层?”问。
  2. 端到端跟踪功能。 “用户登录时哪些文件被激活以及按什么顺序激活?” ——观看单个流程比阅读整个架构更有启发性。
  3. 本地化术语。向 AI 询问特定于项目的概念(“租户”、“账本”、“作业运行者”),并在代码中找到它们的等效项。
  4. 您简化了复杂的功能。逐步解释一个很长的函数,然后在代码中标记这些步骤。
  5. 核实。做一个小的改变并运行测试来测试你的理解;如果您的理解有误,测试会立即告诉您。

三个迷你箱

案例 1 — 继承服务从 2 天减少到 3 小时。一名开发人员从一名离职同事手中接管了 4,000 行付款对账服务。让人工智能总结模块并端到端跟踪支付流程;他亲自验证了代码中的两个关键功能。如果采用传统的“盲读”方式,这一发现预计需要 2 天,而采用经过验证的 AI 方法,大约需要 3 个小时才能完成。

案例 2 — 误导性名称陷阱。一个函数被称为 validateAndSave 但 AI 摘要说“首先验证,然后保存”。当开发人员进入代码时,他看到保存是在验证之前完成的,而验证只是写入日志。这是生产中出现错误单的实际根本原因。如果代码中没有验证,错误的摘要就会隐藏错误。

案例 3 — 新图书馆学习加速。该团队将集成一个他们不熟悉的消息队列库。我问AI“如何在这个库中设置消费者,出错时如何重试?”他们询问并制作了样品;然后他们将示例与官方文档进行了比较并修复了差异(旧版本 API)。学习时间减少一半。

四个可复制模板

代码库映射:

以下是项目的目录/文件列表。 1) 提取应用程序的各层(输入、业务逻辑、数据访问等)。 2) 列出“{{example property}}”请求的可能文件旅程。 3) 将您不确定的区域标记为“必须验证”。 {{目录列表}}

功能说明(逐步):

将此函数分成行组,并用简单的土耳其语解释每个组的作用。最后:列出输入、输出、副作用(数据库/文件/网络)和可能的边缘情况。将您不确定的行为收集在单独的“必须验证”标题下。{{function}}

数据流跟踪:

值“{{variable/data}}”从哪里来,它经过什么转换,写在哪里?使用代码中的函数名称创建流链。相关代码:{{code_segments}}

学习如何使用图书馆:

我想用 {{library}} 制作 {{ Purpose}} 。给出一个最小的、可行的例子。确保你使用的每个函数实际上都属于这个库;如果您不确定,请勾选“从官方文档验证”。版本:{{版本}}。

弱提示/强提示

弱:“解释一下这段代码。” (你想知道什么?在什么级别?你会做什么?)
Strong:“我接管这个功能,我会改变里面的重试逻辑。一步一步解释这个功能,特别是在出现错误的情况下,明确说明重试的次数和间隔;将你不确定的部分标记为‘必须验证’。[代码]”

强版本给出了你的意图(我将更改重试逻辑)和焦点;因此,该解释不是一般性总结,而是有用的指南。

任务

人工智能做得很好

一定要核实

总体架构总结

删除图层

实际调用顺序

复杂函数

逐步解释

逆逻辑,副作用

数据流

起草链条

条件分支、跳过路径

图书馆使用

样本生成

API的真实性和版本

人类理解无可替代

AI描述不能替代学习;它加快了速度。要真正“拥有”一个代码库,意味着要为其建立一个心理模型,而该模型只有在您阅读代码、进行微小更改并查看结果时才适合。使用人工智能就像导师会告诉你“看这里,这很重要”——但是用你自己的眼睛阅读你看到的地方。

提示:当你认为你理解了一个函数时,请AI“用一句话概括它”;然后将其与自己的句子进行比较。如果两个句子相互矛盾,那么你或模型就错过了一些东西——你可以在代码中解决它。

常见错误

  • 将摘要视为证据。在不验证描述的情况下做出关于代码的决定意味着陷入误导性名称的陷阱。
  • 粘合太大的碎片。一次总结 2,000 行会得出肤浅且容易出错的结果;分成几块。
  • 没有说明目的。如果您不说“您将做什么”,则描述仍然是笼统的,不会关注您的业务。
  • 不验证库实例。模型可能调用过时的或不存在的API;与官方文档对比。
  • 放弃所有的学习。仅使用摘要而不阅读代码库会让您在第一个真正的错误时束手无策。

综上所述

人工智能是探索外国代码库的强大指南:映射架构、简化复杂功能、跟踪数据流、教授库的使用。但每一种解释都是假设。明确你的观点,分解它,并在代码中验证并测试模型说(和没有)“必须验证”的每个关键断言。引导是AI;你是看地图的人,也是承担责任的人。

应用任务

选择一个您不熟悉或刚刚继承的模块。首先,使用“代码库映射”模板提取功能的图层和文件旅程。然后通过“功能说明”模板逐步说明该功能中最关键的功能。最后,亲自在代码中检查至少两个模型标记为“必须验证”的断言,并注意它们是真是假。

清单

  • [ ] 我把AI的说法当作一个假设,并用代码来验证。
  • [ ] 在解释代码时,我将我的目的和重点添加到提示中。
  • [ ] 我通过将大型代码库分为几个部分来对其进行总结。
  • [ ] 我在线检查关键声明是否存在误导性名称/反向逻辑陷阱。
  • [ ] 我将库示例与官方文档和版本进行了比较。
  • [ ] 我使用人工智能作为加速学习的指导,而不是替代学习。