一万小时 / 编译原理系列之开篇
编译原理系列之开篇
编译原理是各个CS专业的必修之课,无论是欧美,还是我们中国的大学生,可是 如果此刻回想时,对于编译的理解和相关技术的掌握又能够有多少?以自己为例, CS专业的我,在本科三年级学习了《编译原理》课程,但只限于当时对于相关技术 的粗略了解,达到能够应付考试的水平;准备考研时,由于《编译原理》是必考, 又将这个课程认真学习以一遍;后来到了研究生阶段,又学习了所谓的《高级编译原理》, 但又只是过去的重复。回顾这个过程,我缺少的是什么?想了想,大致罗列如下:
- 深层原因的探究:例如KMP算法,状态机,语法树等
- 基本原理的理解:编译原理能够让我们更加了解计算机,知道其工作原理
- 实际的锻炼:纸上学来终觉浅,只有实际的基于现有技术实现完整的编译器,这才能够 对于编译的过程和原理有更深的理解
- 最新编译技术的了解:iOS的火热,苹果弃GCC而选择Clang和LLVM,其中原因又是为何?
当然,毕业已经3年多的今天,再次学习,不为那考试,也不为考研,只是想达成上面的4条, 以及提高自身的编程能力,当然少不了前辈们的鞭策,如Steve Yegge的Rich Programmer Food。
计划
编译的学习是个不算轻松的过程,特别是数学不好的我,但是就像大多数人一样,我们看不起的不是 你的无能,而是你的不努力。克服困难的过程也当然是很有意义的。
- 通过Dragon Book, Tiger Book以及Whale Book的阅读,互为印证,互相参考,来达成对于重要技术和算法的理解
- 跟随Coursera中的Compiler课程学习,基于语言COOL的编译器实现
- 记录学习过程与此blog(学习过程中的总结应该用自己的语言来描述,并且有相关的扩充材料的总结)
- 将代码置于此代码库来管理
就像Yegge文中所言,编译中蕴含的技术与理论不止有益于编译器的实现,同样适用于日常的编程与项目,如 正则表达式、状态机、优化等。
作为鞭策自己记录和学习的文字,倘若能够帮助到别的同学,那也自是非常欣慰的。