当LLM吃掉代码:程序员最后的堡垒是理解问题本身
当Karpathy展示一个完全由LLM生成,无需一行传统代码的应用时,我们面对的不仅是效率提升,而是整个软件工程范式的地层断裂。
核心观点:LLM正在从“辅助编程工具”演变为“直接解决问题的主体”,迫使程序员从实现者转型为问题定义者,但这一转型并非线性进化,而是伴随着不确定性和认知断层。
上周,Andrej Karpathy在Sequoia Ascent 2026炉边谈话中抛出了一个让很多开发者后背发凉的观点:我们已经能看到一些完全由LLM吞噬的应用——输入一张图片,输出一张图片,整个流程不需要一行传统代码。这不是一个渐进式的改进,而是对“编程”这一概念本身的一次釜底抽薪。长期以来,我们习惯于把LLM看作是一个更好的代码补全工具,一个能加速现有流程的协作者。但Karpathy提到的menugen应用示范了一种完全不同的可能性:在某些场景下,LLM本身就是应用,传统的指令式代码反而成了多余的外壳。
这绝非夸大其词。让我们仔细审视这个变化意味着什么。传统软件工程的核心技能一直围绕着将人类意图转化为精确的、机器可执行的指令序列。我们学习算法、数据结构、设计模式,本质上是在学习如何与机器对话的语法和修辞。当LLM能够直接理解自然语言描述的目标,并自行推导出达成目标的步骤时,整个“翻译”环节就变得不再必要。这就像在印刷术普及后,抄写员的角色迅速式微一样,不是因为他们不够熟练,而是因为技术绕过了他们的核心功能。
但这里有一个关键的反直觉之处:LLM的“理解”和我们人类的“理解”存在本质差异。Karpathy自己也不得不承认这一点,他一直在努力解释LLM能力的“锯齿状模式”——同一个模型既能完美重构一个10万行的代码库,又会建议你“走路去洗车场洗车”。这种能力分布的不均匀性揭示了一个残酷的事实:我们并没有创造出一个全能的智能体,而是创造了一个在特定数据分布上极其强大的模式匹配引擎。这个引擎在“轨道上”时表现惊艳,但一旦脱离训练数据覆盖的领域,它就会变得笨拙甚至荒谬。
所以,程序员的新价值不在于和LLM竞赛写出更优雅的算法,而在于判断哪些问题是“在轨道上”的,哪些是需要人类引导的“丛林越野”。这要求的能力不再是纯粹的技术实现,而是对问题本质的深刻理解、对业务逻辑的精准建模、以及对不确定性边界的敏锐感知。未来的程序员更像是一个产品策略师和系统架构师的结合体,他需要知道什么时候信任LLM的输出,什么时候需要人工介入,以及如何将复杂问题分解为LLM能够可靠处理的小块。
然而,这种转型并非一帆风顺。最大的不确定性在于,我们尚未建立一个足够好的模型来预测LLM的能力边界。Karpathy的“数据分布/RL电路”理论是一个有希望的起点,但他自己也承认“仍然不100%满意”。这意味着,即使是最前沿的研究者,也在摸索中。对于一线开发者而言,这意味着每一次使用LLM都是一次赌博——你可能会得到完美的代码,也可能得到一个看似完美但潜伏着灾难性逻辑错误的结果。这种不确定性催生了一整套新的工程实践和工具链,例如最近出现的大量用于调试LLM内部过程的DevTools,它们试图将LLM的“黑箱”决策过程变得可见、可审计。
更深远的影响在于,这种转型正在重塑整个软件产业的经济结构。当实现成本趋近于零时,价值的重心必然向上游移动。过去,一个优秀的程序员之所以值钱,是因为他能高效地写出高质量的代码。未来,一个优秀的程序员之所以值钱,是因为他能清晰地定义什么样的代码值得写。这才是真正稀缺的能力——对问题的洞察力和对解决方案的决策力。Karpathy提到的“install .md skills”而非“install .sh scripts”的类比非常精妙:如果安装软件只需要告诉LLM你的环境和需求,那么那些复杂的shell脚本就失去了存在的意义,但前提是你必须准确地描述你的环境和需求。
与此同时,我们也要警惕另一种风险:过度信任可能导致技能的全面退化。当程序员习惯了让LLM处理所有实现细节,他们自己构建心智模型和理解系统深度连接的能力可能会萎缩。这并非杞人忧天,历史已经给了我们足够的教训——从汇编语言到高级语言,从手动内存管理到垃圾回收,每一次抽象层次的提升都伴随着对底层控制感的丧失。但这次的不同在于,LLM带来的不是结构性的抽象,而是行为性的替代。你不再仅仅是把一个循环优化成一个map函数,你是把整个功能的实现外包给了一个你无法完全理解的实体。
那么,回到最初的问题:当LLM吃掉代码后,程序员的价值何在?我的答案可能会让一些人失望:程序员的价值不在于固守那些即将被自动化取代的技能,而在于拥抱和驾驭这种不确定性。未来的开发者将是那些能够与不确定性共舞的人——他们理解LLM的局限和长处,知道如何设计提示词和流程来放大其优势、规避其弱点,并最终将技术选择权牢牢掌握在自己手中。这种能力不是天生的,它来自于对问题域的深入钻研、对系统思维的持续训练、以及对技术本质的不懈追问。
软件工程的范式正在经历一场深刻的地层断裂。新的岩层正在形成,而旧的化石则逐渐沉没。对于身处这场变革中的每一位开发者而言,选择其实只有一个:要么成为地质学家,理解并利用这种断裂;要么成为化石,被新的地层永远掩埋。
如果把这个判断再往前推一步,真正重要的不是 Fireside chat at Se…、[Workflow] Enhance…、Mitchell's post her… 本身,而是它们共同暴露出的分配逻辑。 x、reddit 在同一轮里把注意力推向同一问题,通常意味着这个主题正在从圈层内部经验,转向更可共享的公共议题。 这也是为什么这种内容值得写成长文:短帖只负责提醒你“这里有事发生”,但只有长文才能把背景、代价、误判空间和后续影响放到同一张桌面上。 换句话说,LLM正在从“辅助编程工具”演变为“直接解决问题的主体”,迫使程序员从实现者转型为问题定义者,但这一转型并非线性进化,而是伴随着不确定性和认知断层。 之所以重要,不是因为它看上去新,而是因为它会重新定义用户接下来应该如何理解这一类内容。
参考来源
- Fireside chat at Sequoia Ascent 2026 from a ~week ago. Some highlights:
- The first theme I tried to push on is that LLMs are about a lot more than just speeding up what existed before (e.g. coding). Three examples of new horizons:
- 1. menugen: an app that can be fully engulfed by LLMs, with no classical code needed: input an image, output an image and an LLM can natively do the thing.
- 2. install .md skills instead of install .sh scripts. Why create a complex Software 1.0 bash script for e.g. installing a piece of software if you can write the installation out in words and say "just show this to your LLM". The LLM is an advanced interpreter of English and can intelligently target installation to your setup, debug everything inline, etc.
- 3. LLM knowledge bases as an example of something that was *impossible* with classical code because it's computation over unstructured data (knowledge) from arbitrary sources and in arbitrary formats, including simply text articles etc.
- I pushed on these because in every new paradigm change, the obvious things are always in the realm of speeding up or somehow improving what existed, but here we have examples of functionality that either suddenly perhaps shouldn't even exist (1,2), or was fundamentally not possible before (3).
- The second (ongoing) theme is trying to explain the pattern of jaggedness in LLMs. How it can be true that a single artifact will simultaneously 1) coherently refactor a 100,000-line code base *and* 2) tell you to walk to the car wash to wash your car. I previously wrote about the source of this as having to do with verifiability of a domain, here I expand on this as having to also do with economics because revenue/TAM dictates what the frontier labs choose to package into training data distributions during RL. You're either in the data distribution (on the rails of the RL circuits) and flying or you're off-roading in the jungle with a machete, in relative terms. Still not 100% satisfied with this, but it's an ongoing struggle to build an accurate model of LLM capabilities if you wish to practically take advantage of their power while avoiding their pitfalls, which brings me to...
- Last theme is the agent-native economy. The decomposition of products and services into sensors, actuators and logic (split up across all of 1.0/2.0/3.0 computing paradigms), how we can make information maximally legible to LLMs, some words on the quickly emerging agentic engineering and its skill set, related hiring practices, etc., possibly even hints/dreams of fully neural computing handling the vast majority of computation with some help from (classical) CPU coprocessors. - https://nitter.net/karpathy/status/2049903821095354523#m
- [Workflow] Enhance Claude Code Visibility and Control with `claude-devtools` for Debugging and Memory Management - https://www.reddit.com/r/ClaudeWorkflows/comments/1td3bdu/workflow_enhance_claude_code_visibility_and/
- Mitchell's post here reminded me of a similar conversation I had recently about how cheap it can be to port native mobile apps to React Native using coding agents... and then port them back again later if it turns out not to work out https://simonwillison.net/2026/May/14/not-so-locked-in/ - https://nitter.net/simonw/status/2055060328048885788#m