在 LLM 时代学习编程——来自资深开发者与 Hacker News 讨论的见解

TL;DR

  • 核心编程基础(数据结构、语言语义、系统抽象)依然至关重要;它们使你能够验证并引导 LLM 的输出。
  • LLM 可以极大地加快原型设计速度,但也会造成知识鸿沟,在需要维护或调试时可能会带来痛苦。
  • 有效的学习现在将传统的动手实践与针对性的 AI 辅助相结合,将模型视为一种可验证的工具,而不是建议的来源。

1. 为什么基础依然重要

结论: 理解当前抽象层之下的层级是防止隐藏 Bug 的最佳保障。

原博文作者 Seemann 强调了软件工程中一条长期存在的规则:“理解你所工作层级之下以及之上的抽象层。” 这条规则让你无需依赖 LLM 来解释为什么某事失败,就能解决大多数问题。作者本人的职业生涯——从 1999 年使用 C++ 的 COM 组件开始,到后来编写 RISC-V 编译器——证明了深厚的知识储备能让开发者适应完全陌生的环境。

"即使我被指派维护一个完全用 RISC-V 汇编编写的应用程序,我之前的经验也能让我比那些没有编程背景的人更快上手。" – Mark Seemann

2. AI 是否让人们构建速度超过了学习速度?

结论: AI 可以加速构建,但不能加速理解;速度差距可能会扩大。

Seemann 和几位 HN 评论者都认为 LLM 能够实现快速的 MVP 构建。japhyr 指出:“如果你能很好地引导 LLM,你可以快速构建一个远超你自身实现理解能力的 MVP。” 然而,同样的速度可能会掩盖日益扩大的能力差距。当系统正常工作时,差距是不可见的;当它崩溃时,开发者被迫在实践中学习。

"我用 AI 构建了一个东西,但我并不理解它。我想进行修改和修复,却完全没有能力推断它为什么失败或如何修复它。" – agentultra (HN)

3. 选择何时使用 LLM 与手动解决问题

结论: 将 LLM 用于可证伪的问题(例如可以编译或运行的代码),并亲自解决开放式的学习问题。

Seemann 区分了可验证的提示(“我能让这个 Haskell 表达式更简洁吗?”)和推测性的提示(“我接下来应该学什么?”)。他建议仅在答案可以直接在代码中检查时才询问 LLM。这反映了更广泛的社区共识:将模型视为一个在已知数据结构和算法上运行的编译器。

"将 AI 视为一个在数据结构、算法和架构需求上运行的编译器,而不是源代码。" – aethertap (HN)

4. LLM 丰富环境下的实用学习策略

结论: 将基于项目的学习与对底层概念的刻意深入研究相结合。

  • 项目优先,好奇心驱动: dack 建议在 LLM 的帮助下构建真实系统,然后审视生成的代码以填补空白。
  • 手工制作的副项目: aethertap 建议在没有 AI 的情况下维护一个手工制作的项目,以保持底层技能。
  • 苏格拉底式提示: rgbrgb 描述了使用模型来询问新技术为什么以某种方式运行,迫使学习者追踪推理过程。
  • 迭代抽象: corti 指出 AI 可以帮助将子程序折叠成可读的层级,但开发者必须仍然定义清晰的抽象。

5. 过度依赖 LLM 的风险

结论: 过度依赖会侵蚀专业知识并增加技术债务。

  • 技能退化: duendefm 警告说,持续的 AI 查询会随着时间的推移使专家和初级人员的能力都下降。
  • 不透明的代码库: bborud 讲述了一个团队在 Claude 生成部署后无法修改代码的案例,因为没有人理解输出的内容。
  • 经济不确定性: Seemann 提出了关于知识工作者大规模失业的宏观层面担忧,并将此与历史上的技术颠覆进行了类比。

6. 传统学习材料的作用

结论: 书籍和文档对于深层概念仍然很有价值,即使它们的使用频率降低了。

Seemann 承认他早期的学习大部分来自示例和文档,书籍对于 F# 和 Haskell 等语言起到了至关重要的作用。虽然 LLM 可以即时呈现相关的代码片段,但它们无法取代类型理论、编译器设计或操作系统内部原理等概念所需的严谨学习。

"瓶颈不在于老师或材料,而在于人类大脑吸收新知识的速度。" – ferguess_k (HN)

7. 给今天开始的新学习者的建议

结论: 专注于基础,将 AI 视为一种工具,并保持一条平行的“手动”学习轨道。

  • 学习核心概念: 数据结构、算法、网络、操作系统基础和调试技术。
  • 构建真实项目: 使用 LLM 进行脚手架搭建,然后逐行深入研究生成的代码。
  • 提出可验证的问题: 将提示限制在你可以测试的事情上(例如,这个函数能编译吗?)。
  • 维护一个非 AI 副项目: 确保你保留从零开始编写代码的能力。
  • 记录假设: 像 aethertap 那样,在向模型寻求解决方案之前写下潜在的原因。

关键要点

  1. 基础是不可妥协的 —— 它们让你能够验证并指导 AI 的输出。
  2. AI 加速了原型设计,但扩大了学习差距 —— 计划进行有意识的深入研究环节。
  3. 将 LLM 视为可验证查询的编译器 —— 避免询问开放式、不可测试的问题。
  4. 将基于项目的工作与严谨的学习相结合 —— 现实世界的代码加上专注的阅读会产生最好的结果。
  5. 警惕技能退化 —— 保持手工实践以保持核心能力敏锐。

本文综合了 Mark Seemann 的原始博客文章以及 Hacker News 讨论中点赞数最高的评论(2026 年 9 月)。所有引文均为逐字引用,并归属于其原始评论者。

Sources

相关