龙书全名Complilers Principles,Techniques&Tools,国内译名《编译原理》由机械工业出版社出版,是三个编译领域的专家编写的一本教材。它的名字非常响亮,中文版龙书黑漆漆的封面上,出版者用醒目的红字写着:“编译领域的里程碑式的经典教材——龙书,20年后再出新版!”,下方还有白字所写的龙书各版的出版故事。可以看出,出版者对龙书的定位是一本传奇教材,而且在着力在传奇二字上。
然而,豪不客气地说,中文版的龙书是一本糟糕的教材。每个使用过它的人都深有体会。网上推荐用中文版龙书作为编译器教材的言论甚多,大多都承认它很难。但是还会告诉你它难的原因是因为内容详实,覆盖面广,既有理论又有实践,比什么国内的教材不知要高到哪里去了。经过一些事情,我意识到推荐这本书的人可能有三种,一种是根本没读过的在人云亦云的人,第二种是读完后再也没接触过别的教材的人,第三种是真心推荐但是没告诉你他读的是英文原版的人。
确实,英文版的龙书尚算一本合格的教材。即便如此,英文原版也同样存在着逻辑路线不够清晰,读者不容易把握到大的主干的问题。举例来说,它在语义分析的相关内容里加入了很多实现上的知识,帮助读者理解如何实现这些简化的迭代算法。然而,这就导致了每章每节的知识以一种奇怪的方式变得冗长,一个技术的各个重点被实现的细节切碎,难以形成整体的知识组块。或许作者认为掌握算法细节后这些都是不言自明的事(确实如此),但是零散的知识也让掌握理解算法的难度变高了不少。
另外,英文原版书中对用到的一些数据结构和离散数学的知识提供了简要的解释,然而这些解释是完全不够用的,达不到使用这些知识的水平。也就是说,这是一本偏向有基础的同学的教材。相比之下,另一本编译原理的书Engineering a Compiler要好上不少,基础不好的同学可以读读。
如果说英文版是差强人意,中文版完全就是不堪入目了,这是因为翻译得实在太差了。中文版是南大的三位老师翻译的,不知为何质量奇差。数字、下标、图像上的小毛病屡见不鲜,词不达意到处都是。读者读它要付两份心力,一份用来猜测这些错综复杂的语句到底想表达什么意思,一份用来验证猜测并接收新的知识。在原书已经有这些那些问题的情况下,这样的翻译质量造成的结果是毁灭性的。
如果读者对此有些疑问,不如试读一下它的第一章到第二章。即使你是个经验丰富的专业人员,第一次读可能还是揣测不出它到底想说些什么——是的,它的文风就是似乎有什么话没说完,需要你细细品味方能知晓,你并不是在听它讲课,而是在想办法猜测。
有些浸淫此领域的人对此不屑一顾,认为只要水平高,这些文字上的充其量只是瑕疵;然而这是一本教材,只有使用者才有话语权。编译原理是一门简单的课,而龙书却是一本让人根本读不下去的书,各个教授编译原理的老师应该对此深有体会。
那么为什么会这样呢?真实的原因可能只有译者和出版商才知道。不过我们仍然可以窥见中国翻译市场的种种乱像。在知乎上有个问题,为什么有些翻译作品的水平如此之差。回答观点不尽不同,但都指向一个词:不赚钱。有个知乎大v说,“翻译报酬标准仍然是1998年的标准,但是物价不是”。我不是很清楚其中缘由。然而我在本科时,有个老师也曾说过,评价绩效时,好好上课,好好译书远远不如拉项目写论文的回报多,以致译书的老师们水平不足,他们这些“真正明白”的老师才有资格写书,言语之间,颇多不屑。我是不明白他为什么不去写。
然而,我们能够看到的是,龙书在编译原理课上的影响依然十分深远。或者说在很长的一段时间里仍然会有一些学生用着龙书或者盗版的龙书上课或自学。究其原因可能有三
- 由于各种各样的原因,目前还是需要用中文教材,所以英文原版最多当个参考
- 由于另外的原因,国产的教材质量不行,甚至不如中文的龙书
- 由于一些原因其他国外教材不如龙书出名
理论上说,任何一个有计算机系的大学的图书馆里,编译原理那几个书架上总能看到各种各样的中文教材和参考书。如果你也觉得龙书不行,不如去转转,也许会有别的收获。