文/王垠
我不做程序语言(PL)的工作已经半年了。在这半年里,我变得快乐了很多,对世界也有了新的观点。现在我想来讲一讲,我为什么不想再做 PL 的工作和研究。我只希望这些观点可以给正在做 PL,或者考虑进入这个领域的人们,作为一份参考。
学校里的 PL 人
PL 看似计算机科学最精髓的部分,事实确实也是这样的。没有任何一个其它领域,可以让你对程序的本质形成如此深入的领悟,然而这并不等于你就应该进入 PL 的博士班。这是为什么呢?
炒冷饭
PL 这个领域几十年来,已经发展到了非常成熟的阶段。这里面的问题,要么在 20 年前已经被人解决掉了,要么就是类似“停机问题”一样,不可能解决的问题。然而,博士毕业却要求你发表“创新”的论文,那怎么办呢?于是你就只有扯淡,把别人已经解决的问题换个名字,或者制造一些看似新鲜却不管用的概念,在大会上煞有介事的宣讲。俗话说就是“炒冷饭”。
最开头进入这个领域的时候,你可能不觉得是这样,因为似乎有那么多的东西可以学习,那么多的大牛可以瞻仰,那么多的新鲜名词,什么“lambda calculus”啊,“语义”啊,各种各样的“类型系统”啊,这样那样的“逻辑”…… 可是时间久了,看透了,你就发现一些这个圈子里的规律。
崇拜古人
几乎每篇 PL 领域的论文,里面必有一页弯弯曲曲,让人看花眼的逻辑公式。程序语言的论文,不是用程序来描述,而是用一些老古董的逻辑符号,像这样:
图1:PL 论文里的公式
绝大部分 PL 领域的专家们,似乎都酷爱逻辑符号,视逻辑学家高人一等。这种崇尚古人的倾向,使得 PL 专家们看不见这些符号背后,类似电路一样的直觉。他们看不见逻辑学的历史局限,所以他们也许能够发展和扩充一个理论,却无法创造一个新的。
说到古人,却并不是所有古人都这么晦涩。如果你考古一下就会发现,其实现代逻辑学的鼻祖 Gottlob Frege 最初的论文里,是没有这些稀奇古怪的符号的。他整篇论文都在画图,一些像电路一样的东西。比如下图,就是 Frege 的创始论文《Begriffsschrift》里最复杂的“公式”之一:
图2:Frege 的“公式”
你可以把这里的每根线理解成一根电线。图 1 里那些诡异的逻辑符号,都是一些好事的后人(比如 Gentzen)加进去的,最后搞得乌七八糟,失去