随笔·阅读约 1 分钟·
读者用 AI 搭出自己看不懂的系统:Mark Seemann 谈 LLM 时代的编程学习

读者用 AI 搭出自己看不懂的系统:Mark Seemann 谈 LLM 时代的编程学习

一位没有 CS 背景的读者用一年时间靠 LLM 搭出包含 API、PostgreSQL、多模型流水线的大系统,真要变成产品时才发现自己看不懂它。他把问题写成信,作者的回答里有一句特别扎人:LLM 能让你更快地问到点子上,但没有人能让大脑吸收知识的速度显著变快。

原文来源:Mark Seemann — ploeh.dk — 一位读者来信问:AI 时代还该不该老老实实啃基础?三十年代码经验的作者给出的回答不轻松,也不装乐观。

Mark Seemann 收到了一封很长的读者来信,来回沟通几轮后,得到允许把信大量引用出来,公开作答。他自己先声明:这些回答都谈不上严谨,形势本身太不确定,他只能尽力而为。

来信:我可能建了一套超出自己理解水平的系统

写信人说自己像个历史学家——直接去问当事人,怎么理解一场正在亲身经历的技术变迁。

一年前,他对 AI 辅助编程着了迷。没有任何计算机科学背景,靠 LLM 做出了一个相当大的 TypeScript/JavaScript 系统,里面有 API、PostgreSQL、LLM 流水线、研究自动化和多模型工作流。「一开始几乎像魔法:AI 仿佛把『有想法』和『能把它做出来』之间的距离抹掉了。」

但现在他想把它变成真正的产品,卡住了。用 AI 修掉一个错误,另一个冒出来,接着某个模块的行为又变得他看不懂。重构几个月之后,他有了一个不太舒服的认识:他可能建了一套超出自己理解水平的系统。 一切正常运转时,这个差距几乎看不见;一出问题,它就变得非常真实。

「有时候我真的不知道该做什么,除非再问一次模型。这让我怀疑这一年是在做产品,还是在做产品的外观:足够精巧,能跑起来,但我还没有真正深入地理解它,因而还不算真正拥有它。」

他强调自己并不反 AI,对这些系统着迷,也想以此为业,只是不确定应该和它们保持什么关系。

—— 广告 ——

回信:我也不确定,但我先说清自己的立场

Seemann 说他在 AI 这件事上还没定论,但倾向不喜欢——同时很清楚它可能是挡不住的。他自己也在用、在试,常常被打动,也常常被惹烦;而且往往是在被打动的时候最讨厌它。它表现差的时候,至少还能剩一点幻觉,觉得自己学了三十多年的东西还有用;它表现最好的时候,他会想:巴特勒圣战在哪儿报名?

他的立场一部分来自自身处境:他年纪够大、也取得过一些成绩,就算失业也能活下来——但一个以知识为基础的社会未必能。他通常不提自己经济学出身,这次却觉得相关:在他看来,知识工作者若出现 30%–40% 的大规模失业,经济不可能不受重创。

他也知道那套「历史上也发生过」的论证:织袜机、蒸汽机、内燃机、计算机出现时都有岗位消失,也都有想象不到的新岗位出现。他认为这只说对了一半——新岗位确实出现了,但往往不给那些失去工作的人:煤矿工人不会一夜之间变成程序员。同样的论证在中国加入世贸组织时也用过,结果确实创造了新岗位,只是不在西方。所以他基于亲身经历和历史经验,对「最后一切都会好」这种说法保持怀疑。

「但我也真心希望我错了。我喜欢编程,不介意再写十年。也许更重要的是,我有刚成年的孩子,我希望那个世界也有他们的位置。」

如果今天从零开始,他还会学编程基础吗?

会,因为他早学的东西支撑了他三十年。但如果让他今天从头选择,他会认真考虑去学木工、金属加工、枪械修理,或者其他需要手眼协调的行当——机器人也在进步,但手工劳动的替代看上去离得更远。

至于现在,他本人正在大学课程里学数据结构和语言语义——出于好奇,而不是指望靠它赚多少钱。

那 AI 是不是能让人「先造出来,再慢慢理解」?他认为还有待观察,因为软件开发本来就长期建立在没弄懂的抽象之上:做 Web 的人不懂编译器,写编译器的人不懂集成电路设计,做芯片的人不了解上层的抽象。过去有一条好用的经验法则:理解你所在层级的上下各一层,就能排查绝大多数问题。

对「地基很弱」的处境,他承认自己给不出对等答案

Seemann 说这是两个完全不同的问题。他自己的软件开发地基不弱,哪怕面对完全陌生的环境,也能靠已有知识快速上手——比如被要求维护一个纯 RISC-V 汇编写的应用(这是他能想到的最陌生的环境),对他来说依然比一个编程新手要容易得多。

但地基本来就弱的人怎么办?他回到自己的经历:职业生涯刚开始那几年,他一直在走钢丝——边交付,边学。1999 年起,他用 C++ 写 COM 组件,其实并不太懂自己在干什么,居然也做成了,连明显的内存泄漏都清掉了。但他从不安于「能跑就行」,于是按信里提到的那条路——退回去,系统性地补基础。这条路对 1990 年代中期入行的人很有效。今天还有效吗?

他说不确定:要达到足够的能力水平,让你回头看出当年那份自信其实处在邓宁-克鲁格曲线的「无知者无畏」区间,花了几十年。你今天有那么多时间吗?

他承认 LLM 确实让学习更快,因为可以问更有针对性的问题——三十年前是买书,指望书里有能用的内容,然后啃掉一大堆当下用不上的材料。但他怀疑人的学习速度没法显著加快:瓶颈既不是老师也不是教材,而是人脑吸收新知识的速度。

他自己是怎么学的

短答:很慢,靠大量试错,偶尔靠书。

除了很早一次 COMAL 80 的失败尝试,他第一个编程项目是给经济学硕士论文重算分岔图(bifurcation diagram)和洛伦兹吸引子。手边有什么用什么,就用 QBasic 写,靠它自带的示例学,偶尔问朋友。1990 到 2000 年代,他主要靠示例和文档学习:买过一本 C++ 的书,估计从没读完;各种 Basic 方言和 C# 全靠文档加示例代码上手。不过书在学 F# 和 Haskell 时起了关键作用。

今天他怎么学一门全新的语言?他说自己的经验对 2026 年的新手没用:见过的语言太多了,遇到新语言通常翻翻现成代码、查几条不明白的地方就能上手——前提是这语言够「正常」。要是让他重学 APL,至少得先找份教程。

值得注意的一点:他并不太用 LLM 学习。「LLM 不是产生幻觉,它是在胡扯(bullshit),我对它说的东西高度不信任。」这不代表他不用——他倾向于问那些答案可验证的问题。比如「这个 Haskell 表达式能写得更简洁吗」:任何有用的回答都是一段代码,要么能跑要么不能,要么更短要么没更短,验证起来很容易。反过来,「我接下来该学什么」这种问题没有可验证的答案,他就不会去问。

用他的总结:他倾向于只问 LLM 可证伪的问题。

这封信真正难回答的地方

把整段对话抽干,剩下的其实是一个很尖锐的结构性问题:AI 让「做出来」和「理解它」这两件事第一次大规模解耦了。历史上这个差距也存在——每一代工程师都站在自己不懂的抽象之上——但过去的差距是有形状的:你做上层,就补上下各一层,问题基本能定位。

现在的情况不一样。LLM 生成的结构可能横跨整个栈,而人对它的理解只覆盖零散的几个点。信里那句「一切正常时差距几乎看不见」,说的就是这个:代码能跑,测试能过,系统看起来是完整的,只是没有人在脑子里装着它。等到需要改动、需要判断、需要在两个都「能跑」的方案里选一个的时候,缺失的那部分理解才会以「我不知道下一步该做什么,除非再问一次模型」的形式暴露出来。

Seemann 给出的答案没有安慰,只有两个可以被检验的判断:一是人的学习速度有硬上限,工具再快也换不来这个;二是他愿意只问那些答案能被验证的问题——这在 LLM 时代反而是最保值的一条习惯:不管理解来自文档、代码还是模型,你总得有办法判断它到底对不对。

分享到
微博Twitter

© 2026 四月

原文链接:https://www.aprilzz.com/ramble/learning-programming-age-of-llms