Andrej Karpathy 在访谈中分享了许多自己在编程方面深刻的建议和方法。他的核心观点围绕着通过亲手实践来加深理解,以及在当前的 AI 辅助编码环境中最有效的编程方式,他自己倾向于以Tab自动补全为主,获得对程序框架的掌控,对自己不熟悉的语言也会采用Agent辅助。

Andrej Karpathy — “We’re summoning ghosts, not building animals”

编程与学习的哲学和建议

Andrej 认为,如果他不能构建它,他就不能理解它,他将此视为一条坚定的信念(他认为这是费曼的名言)。

他的建议是:

  1. 从头开始构建代码以获得深度理解: 学习不应该只是写博客或做幻灯片。构建代码、安排代码、使其运行起来,是获取知识的唯一途径。从头开始构建东西(“build the stuff yourself”)能够迫使你正视自己不了解的地方,从而实现更深层次的理解。
  2. 避免复制粘贴: 如果想要学习如何构建一个大型的代码库(例如他的 Nanochat 仓库有 8,000 行代码),他建议将参考代码放在一个显示器上,然后在另一个显示器上从头开始构建。你可以参考代码,但不允许复制粘贴
  3. 找到核心概念(第一近似项): 他推崇物理学背景中构建模型和抽象的理念。在编程和教育中,他试图找到系统的第一近似项认知核心。例如,他用 100 行 Python 代码的 Micrograd 仓库来展示神经网络训练的核心知识,即通过链式法则递归应用来计算梯度,而其他所有内容都只是关于效率
  4. 构建知识的“坡道”(Ramps to Knowledge): 他将教育(包括编写代码以解释概念)视为构建“知识坡道”(ramps to knowledge)的工程技术过程。
  5. 先提出问题,再给出解决方案: 他认为,优秀的教育应该让学生经历一个循序渐进的过程,先提出“痛点”(问题),然后才给出解决方案。在呈现解决方案之前,应该给学生自己尝试思考解决办法的机会,以最大限度地提高知识获取量。

Andrej 自己的编程方式(以及他对 LLM 编码助手的看法)

Andrej 将当前人们与代码的互动分为三类:完全拒绝 LLM;使用自动完成辅助;以及“代工式编程”(vibe coding,让模型实现大部分功能)。

他本人处于中间阶段,以下是他如何使用 AI 辅助编程:

  1. 偏好使用自动完成(Autocomplete): 这是他认为的最佳切入点。他仍然从头开始编写大量代码,但会使用模型提供的自动完成功能。他认为这种方式信息带宽很高:他只需将光标定位到需要代码出现的位置,输入前几个字母,模型就会完成代码。
  2. 他仍然是架构师: 即使使用自动完成,他仍然是代码的架构师
  3. 代工式编程(Vibe Coding)的适用场景: 他认为,让模型代工编写代码(agent-style coding)在特定情况下有用:

对编码模型(Agents)的局限性批判

Andrej 在组装 Nanochat 仓库时发现,编码模型提供的帮助微乎其微。他认为行业内存在“过度吹嘘”(over-prediction)的现象,模型输出的代码常常是“烂泥”(slop)。

编码模型的主要问题包括: