先说一组今天(8 月 20 日)从 B 站检索到的数据,挺说明问题的。
搜"编译原理",收藏量最高的一批视频全是期末速成:《混子速成期末保过》4.15 万收藏、《期末复习零基础自学》3.34 万收藏、《零基础期末速成》9899 收藏,三个加起来 8.4 万。而那些本来用来"好好学"的名课呢?哈工大公开课 3.0 万收藏,国防科大国家级精品课 1.66 万,斯坦福 CS143 两个搬运版本合计约 2 万——名课加一块,没打过速成课。
这意味着两件事:第一,大多数人的编译原理最后都是突击过的;第二,如果你秋季学期要上这门课,现在到开学前这两周,是唯一能用极低成本提前布局的窗口。今天就把这门课该怎么备课说透。
它为什么"索命":不是背得多,是换了一种语言
先看社区里的真实声音。小红书上最流行的说法是"文法+自动机+LL/LR 三座大山",有学生直接喊"编译原理是来索命的吧"。小红书也有同学被折磨到吐槽"第一次因为学习大脑缺氧,竟然是因为破编译原理的期末考"。微博知乎上则常年挂着几个月经帖:编译原理是不是计算机基础课里最难的?知乎但把吐槽拆开看,难点其实很集中:这门课会突然从"写代码"模式切换到"形式化"模式。文法是第一道坎,它用几条规则描述"合法句子长什么样"——汉语句子可以按主谓宾一层层拆成语法树。

编程语言里的算式也一样:把 3+2*5 按文法解析成树,乘法节点比加法节点更深一层,运算优先级就靠树的结构表达。

再往后,递归、归纳、集合运算、状态机,这些你在离散数学里见过的词,会组合成 FIRST/FOLLOW 集、LR(1) 分析表——绝大多数人是第一次真正用它们做题。卡住人的不是知识量,是这道形式化门槛。
反过来也有个好消息:正因为考试主要考"算"——画有限自动机、构造项目集、填分析表——它本质是一种程序性技能,程序性技能是可以练出来的。这就解释了 B 站那组数据:摸清考法之后,三小时速成确实能救个及格分。问题是,速成救得了绩点,救不了理解。
三种流行的备课方式,恰好都是贵的
坑一:上来就买龙书啃。 知乎一个 32 赞的荐书回答把这个路径写得明明白白:一开始只想看看编译器怎么生成代码,结果买了龙书翻开几页就想睡,硬看硬练,大部分人在前端部分就放弃了。知乎龙书当然是权威,但有知乎专栏作者说得更直白:它"也许是一本非常专业的书,但作为教材是非常糟糕的,基本上不是写给人类看的"。知乎它其实是哈工大公开课的指定教材,权威性和可读性是两回事,开学前抱着最厚的书去预习最劝退的章节,属于典型的高投入低回报。哔哩哔哩
坑二:收藏速成课,心里就有底了。 速成课是事后药,不是事前针。3 小时版本能覆盖的题型有限,万一你们学校出题偏深,兜底就会失效。
坑三:挑最有名的网课从头刷到尾。 微博上有位同学记录了真实错配:跟着哈工大网课学,感觉是难但是能看懂,结果期末考试题居然出得很浅,开始怀疑自己看了那么久网课有什么意义。微博网课的深度和你校考试的深度是两回事,备课前先找直系学长学姐问清楚本校考法,比选哪门网课更重要。
开学前两周,真正值得做的三件事
动作一:2 小时建立流水线全貌(0 元)。 词法分析→语法分析→语义分析→中间代码→优化→目标代码,先把这张地图刻进脑子里。现代编译器通常把这六步归成三大块:前端负责把代码读懂,中端负责优化,后端负责生成目标机器码,同一份源码在低优化和高优化两档下产出的目标代码会有明显差别。

B 站上就有现成的免费入口:8 月中旬新发的《编译器到底做了什么?7 分钟搞懂源码到机器码的完整流水线》是动画版速览,把编译器完整拆开讲。哔哩哔哩想动手的话,《十分钟看懂编译器》用 Python 把每一道工序拆开讲一遍,最后给你一个 30 行能跑的小编译器。哔哩哔哩这一步不追求看懂每一步,只追求"知道有哪几步"。
动作二:补两块前置工具,总共 10 小时左右。 一是集合与归纳——文法章节的证明几乎全靠数学归纳法;二是树、栈、哈希表——语法树、符号表全建立在这几个结构上。不需要碰高数,也不需要线代。
动作三:定一套"主教材+主网课",其余全部降级为参考。 按目标分三档:
目标 | 教材 | 课程搭配 |
|---|---|---|
稳过型 | 学校指定教材即可 | 跟紧老师,考前两周再看速成视频兜底 |
扎实型 | 国内经典教材为主线(国防科大精品课的主教材即陈火旺版《程序设计语言编译原理》) | 用哈工大或国防科大公开课补缺薄弱章节,不要从头刷 |
动手型 | 虎书(Appel《现代编译器实现》)或实践向讲义 | B 站《从头开始开发一个 C 语言编译器》《硬核开课》系列,边学边写迷你编译器 |
龙书对三档人都适合当字典查,不适合开学前逐页读。表里扎实型一栏的陈火旺版教材,正是国防科大精品课的主教材,编委会就是授课团队,书和课天然配套。哔哩哔哩知乎上一个 128 赞的自学帖也给了类似建议:先以一本书为主立起知识框架,掌握全局后再细读别的材料,他点名推荐的是自底向下、以问题驱动的《编译器设计》。知乎另外提一句时间线:今年 7 月中下旬,斯坦福 CS143 中英双语全套、哈佛 CS153 中文配音版相继出现在 B 站,暑期预习内容供给明显在涨。哔哩哔哩但供给涨了不等于你得全看,选定一套,其余先关掉。如果你选了动手型,起点几乎一定是语法树:把每条文法规则变成一步建树操作,在节点上标注语义信息,一句源代码对应树的哪些位置,写着写着就清楚了。

最后:这门课到底"保值"吗
7 月知乎有个问题问:"为什么编译原理看起来与现实距离这么远,在高校里面还要花这么大的功夫教和学呢?"一个回答的看法反而很乐观:放在过去这个质疑有点道理,结果到了 AI 时代,只剩下编译原理、操作系统、微机原理、计算机网络,成了整个码农技术栈中为数不多算得上"保值"的东西。知乎小红书上也有笔记讨论同样的反差:编译原理、近世代数、集合论与图论,这些科班生都头疼的课,为什么反而最该补?小红书我的看法更实际:保不保值,取决于你学到哪一层。60 分的知识够你拿学分;分层抽象和形式化建模这套设计思维,要学到 85 分才真正长在身上。知乎上还有个 143 赞的说法——“编译原理本身其实不难,难的是和写一个编译器的差别就好像设计浏阳花炮和设计东风火箭”——知道原理和做出来之间隔着工程,而开学前想清楚自己要哪一层,恰恰是最便宜的决定。知乎
两个继续观察的信号
开学第一周,看老师课上习题里计算题和理论题的比例,计算题占大头就"多练少看";如果你们是自考路线,代码 13007 的《编译原理》是常考科目,8 月已经进入考前资料密集期,该开始刷真题了。小红书