因为工作的关系,我经常和各企业的技术负责人交流。话题谈着谈着常常会转到他们目前共同的难题——技术人员招聘。这时不少人都会感慨,中国能做系统软件开发的技术人员太少,这方面的人太难找了。随着中国企业的发展,做系统和平台的需求不断增加,这种供需矛盾将越来越明显。
究其原因,很容易想到的是我们的高校教育、课程设置。美国顶尖大学计算机系基础课程教学里都非常重视项目实践,操作系统课往往要真的开发一个像模像样的操作系统原型,编译器课也真的要自己设计并实现一门有创新性的小语言……
在计算机科学的各门课程中,编译器的设计实践有着特殊的重要性。“龙书”的主要作者、哥伦比亚大学教授Alfred V. Aho曾经列举过编译器实践有诸多好处[1]:
能让学生领悟到理论与实践的完美结合。比如编译原理所涵盖的正则表达式和自动机,在各种场合的应用是极其广泛的,对正则的掌握程度,从某种意义上讲甚至可以作为技术人员水平的一种尺度。
深入探索计算思维的多样性。与人类语言一样,不同类型的编程语言其实代表了不同的思维方式。只用过命令式语言的人可能没有想到,开启了大数据领域的Map与Reduce,其实在函数式语言是一种非常常见的东西。
的确,深入了解编译器和编译原理,对于技术人员更好地理解和掌握自己最常用的语言和系统,从而提升自己的内力是有极大好处的。另一方面,随着DSL(领域特定语言)的流行,需要技术人员开发自己语言的机会也越来越多。
然而,编译原理是计算机科学里公认比较难的一门课。虽然目前国外比较重要的编译理论教材(比如龙书的《编译原理》、虎书《现代编译原理》的C语言和Java版本、鲸书《高级编译器设计与实现》)基本上都有了中文版和英文影印版,但这些书往往更偏重理论,而且门槛较高,不太适合指导一线技术人员实践和自学。我认识的一位美籍华人技术专家Ronald Mak在Wiley出版过一本基于Java的“Writing Compilers and Interpreters”,比较贴近实践,但部头较大,而且没有看到中文版。
偶然的机会,我得知王博俊在工作之余,写了一本以简化的C语言为例子讲述编译器和链接器实践的书。浏览了初稿之后,感觉全书内容简明,容易上手,又不失全面和系统,正好弥补了这方面的空白。特向大家推荐。
[1] http://www.cs.columbia.edu/~aho/Talks/10-03-12_SIGCSE.pdf
CSDN暨《程序员》杂志总编刘江