程序语言理论的学习对于程序员教育的作用
by 王垠
推荐 Dan Friedman 的这篇文章 “”。它介绍的是对程序语言理论的学习会对程序员的教育产生什么样的作用。这是一篇很长的英语文章,到后面会非常技术性,所以一般人只需要看前10页的小故事就行了。
其中的几个要点是:
-
在一个实际的工程项目中,当需要数据库的时候,人们召唤数据库专家;当需要网络方案的时候,人们召唤网络专家;当需要操作系统的时候,人们召唤操作系统专家。但是所有这些事情都离不开的一个东西是程序语言,所以程序语言专家往往能够起到总览全局的构架和协调作用。但是人们往往不知道程序语言专家是什么,以及如何找到他们。
-
这里的 “study of programming languages” 并不是指学习某一种特定的程序语言(比如 C, Java 或者 Scheme),而是指学习如何实现程序语言的一些概念,也就是写一些解释器。
-
学习任何知识的最好方法,就是对它进行建模。所以学习程序语言最好的办法,就是实现程序语言。对于普通的程序员(不打算成为程序语言专家的),这不需要特别专业高效的实现,一个大概的实现也行。
-
这样的学习能够让人掌握编程语言的一些“精髓”(essentials)。之后学用一种新的语言,不过是把这些已经学到的精髓筛选组合一下。
-
Friedman 指出,对程序语言理论的学习最重要的两个作用是:1)它教会你如何避免程序语言中的不好的思想。2)它教会你如何在任何语言里使用好的思想(包括本身没有这种好的设计的语言)。文中提到的例子包括动态作用域 (dynamic scoping),Java 的缺少尾递归优化等为什么是坏主意,以及为什么程序语言的理论知识可以教会你如何在没法改变语言的情况下绕过这些问题,达到好的设计。
-
这个文章里面提到的人 Jon Rossie 和 Anurag Mendhekar 都是 Friedman 的学生。他们用亲身经历讲述程序语言的理论知识如何在他们的现实工程中起到重大的作用。Jon Rossie 现在是 Cisco 的 Principle Engineer。Anurag Mendhekar 是 Online Anywhere 的总设计师和创始人,后来被 Yahoo! 收购,现在是另一家公司的 CEO。Friedman 还有很多其他学术后裔都在世界上最好的工作职位。比如 Google 的 V8 JavaScript 编译器的构架师,Cython 的设计师,Cisco 的另一个 Principle Engineer,还有一些是创业家,终身教授等等。
This article was posted on yinwang’s sina blog, on 2012-06-13.
Though it’s not available now.