内容提要
文章探讨LLM时代编程角色的转变:代码不仅是给机器的指令,也是理解问题域的概念模型。随着LLM降低代码生成成本,机械编写变得次要,明确概念模型、发现并迭代词汇更重要。
延伸解读
从“建造”到“培育”:LLM带来的范式转变
文章指出,传统软件如同建造桥梁,行为确定且可修复;而LLM更像培育植物或孩子,具有不可预测性。当出现问题时,传统系统可以修复或禁用组件,但LLM没有简单的修复或禁用方法。这种差异要求我们重新思考开发流程,不能简单套用确定性工程的思路。
代码的双重角色:指令与概念模型
Unmesh Joshi提出代码有两个交织的目的:给机器的指令和问题域的概念模型。LLM降低了代码生成成本,机械编写变得次要,但概念模型、词汇发现和迭代变得更加重要。编程语言仍然关键,因为写代码本身是思考的一部分,我们不应只是被动审查生成的代码。
表示形式与抽象层次:Sam Ruby的洞见
Sam Ruby以Rails为例,说明即使没有人类阅读,用高级语言表示程序仍有意义:Ruby/Rails约6万token,编译成C则达400万token,会超出LLM上下文窗口。因此,保持顶层符号的紧凑和精确至关重要,让底层编译尽可能深入,但顶层表示应作为可信来源。
幻觉率与实用性:Gemini 4 Argon的权衡
文章提到Gemini 4 Argon在Artificial Analysis上幻觉率仅15%,远低于其他模型(如Opus 5.5的59%)。虽然它回答正确率较低(50% vs 66%),但不知道时会明确说不知道,而非编造。这种更诚实的表现,对于需要可靠信息的任务可能更有价值。
Q&A
LLM时代,编程的角色发生了哪些变化?
编程的角色没有消失,而是在改变。随着LLM降低代码生成成本,机械编写指令变得次要,更重要的是明确概念模型、发现并迭代正确的词汇,并通过迭代、领域专长和反馈来精炼词汇。
为什么说代码既是给机器的指令,也是理解问题的模型?
代码有两个交织的目的:一是给机器的指令,二是问题域的概念模型。在LLM时代,第二个角色变得更加重要,因为编写代码本身就是思考的一部分,我们需要构建更好的概念模型和词汇。
从构建确定性系统到培育推断性系统,挑战是什么?
挑战在于理解这种转变:构建确定性系统(如桥梁)时,我们可以修复bug或禁用组件;但推断性LLM没有简单的修复或禁用方法,可能导致不可预料的后果。
为什么在LLM时代,编程语言仍然重要?
因为编程语言是表达概念模型和词汇的工具。即使LLM生成代码,我们仍需要高级语言来保持程序的紧凑、精确和常规,以便人类和LLM都能有效工作。
Sam Ruby对代码表示和LLM上下文窗口有什么观点?
Sam Ruby指出,将Rails代码编译成C会大幅增加token数量(从6万到400万),这会妨碍LLM的上下文窗口和注意力。因此,即使没有人类阅读,用高级语言表示程序也是合理的。
关于AI代理的能力,Sam Ruby提出了什么比喻?
Sam Ruby将人们对AI代理能力的讨论比作盲人摸象,我们只能看到这个对象的部分视图。实际的问题不是代理是否好,而是对于手头的任务,信息来自哪里,以及什么会检查结果。