<audio id="audio" title="期中考试 |  来赴一场100分的约定吧！" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/8a/44/8a983ff106f53b8886320525255b9544.mp3"></audio>

你好，我是宫文学。

时间过得真快，从8月14日课程上线，到现在已经有一个半月的时间了。这一个半月里，有很多同学反馈说，自己学了这个课程特别有收获，而运行同学们写的编译器，我也觉得很有成就感，当然了，有的时候，我也会比较焦虑，因为一遍遍改文稿和写示例程序都需要投入大量的精力，不夸张地说，有几次晚上做梦的内容，都与咱们的课程有关……

但是，我觉得把编译原理中，看似高不可攀的一个个知识点，变成一篇篇得到你们肯定的文章是一件十分有趣的事情。动手写示例程序时，也往往让我废寝忘食，比如，报表系统的示例程序就是在飞机和火车上写出来的，一边写，一边灵感不断涌现，那时，我先写了一个版本，后来又改成了基于向量计算的版本，因为总是想给你们呈现最优质的内容，所以一直在不断地思考，优化。

在准备算法篇的示例程序时，我也有了很多新的灵感，比如对于元编程的理念，我又有了一些创新的想法。这些内容，我会在课程的第三部分与你分享。

**在互联网时代，廉价的快乐随处可得，而努力拼搏才能获得的乐趣，从来都只属于少数人。**这门课的目标是让尽可能多的人，有机会享受这种乐趣，当我看到你们进入编译技术的美丽花园中徜徉流连，我的内心是十分欣慰的。

我相信你们是真心喜欢计算机技术，所以想要努力搞懂这个学科的基础原理。而且，你们还能够静下心来，真正坐下来动手尝试。

有的同学会跟“这个推导过程我看过去怎么不会无限递归啊？”这样的问题较劲，而我是很感动的，因为他知道**不把手弄脏（get hands dirty），是学不会手艺的。**

在别人觉得没有问题的地方提问，本身就需要一定的勇气。其实，那个问题不像表面上那么简单。我在[19讲](https://time.geekbang.org/column/article/140740)里花了很大的篇幅解答了这个问题。而从这个问题，可以引出很多问题，比如，有多个产生式的时候，到底该如何选择？深度优先和广度优先有什么区别？等等。

你可以把在学习过程中发现的这些问题看做是花园的入口，而不是障碍。对于在学习编译原理时遇到了困难的同学，我要说，你至少找到了一个入口。

从这个角度来说，通过这次期中考试的20道题目，你又获得了20个新的入口。我亲自出的这20道题目，可以让你对之前学过的内容查漏补缺。你有一周的时间去回顾内容，弥补不足。在你答题的过程中，分值其实是不重要的，能引起你的思考最为重要，**这可能是你又一轮的认知迭代！**

接下来，我们聊一个轻松的话题，国庆将至，如果你想趁机好好休息一下，不妨找一个小众的城市，远离人群。而且还可以尝试带着电脑，在古镇上，在流水边，在星空下，在一切美景的围绕下，安安静静地写个编译器。这种尝试，难道不是一件美事吗？

当然了，也欢迎你在留言区，将你去过的城市美景分享给大家，给我们的课程增添不一样的色彩。

**最后，来挑战一下，开启你的期中考试之旅吧！**<br>
[<img src="https://static001.geekbang.org/resource/image/28/a4/28d1be62669b4f3cc01c36466bf811a4.png" alt="">](http://time.geekbang.org/quiz/intro?act_id=52&amp;exam_id=57)

编辑角：答题不限次数，但分值以第一次为准，答题前三名，有惊喜哦。
