《Scala编程》译者序

最初接触 Scala 是在 2008 年的 9 月。当时刚刚换了公司,工作上 出现了一段“空档期”,因此非常想找一些有技术含量的事情来做。而编程语言的设计开发,或者更确切地说只是对于“银弹”的幻想,这始终是我的爱好之一。那 时总会感觉自己应该为这么多年的开发工作总结一些什么,让它们变成之后工作的基础,或者即使没有那么基础也可以是一种参考,即便连参考都不算,至少也是一 种思考和总结吧!

然后我重新审视了自己曾做过的项目,分析了项目中使用过的编程语言( Delphi / C++ / C# / Java ),总结其中的优缺点,想象着 如果是我做的话会有什么样的改善,甚至开始着手策划语言的语法结构,希望能够自圆其说,从只言片语中建立起完整的逻辑体系。在这样的过程中,我时常会发现 自己钻进了死胡同,似乎不断地修改只是在不断地重复,甚至唯一的改进也只是“语法糖”而已。没有发现与其他语言间的标志性差异,不能建立独有的思维方式。

于是我在互联网上寻找有没有什么现成的、别出一格的新观点或想法,能够启发我步出自己的圈子,带给我一种“啊哈,原来是这样!”的感觉。不过真没想到,很快,我就找到了。而且是这么彻底,甚至让我打消了“从轮子造起”的念头。

不得不说, Scala 语言的确具有很新颖的创意。这在之前所用的语言中是不多见的。

相信大多数商业软件的程序员都是从 Fortran Pascal C/C++/Java COBOL 语言一路学起的。本书中,这一大类的语言被称为是指令式语言,意指以变量和过程语句构造指令的方式对需要实现的目的进行编码的语言。与之相对的是被称为函数式语言的另一个大类,这种语言把程序的目的转换为函数和函数应用,是以函数计算这种不同的视角来处理一般问题的。

直到现在, Lisp Scheme 或者 Haskell 这样的函数式语言也仅仅还是“小众”语言。这在 TIOBE 语言排行榜上也可见一斑。上榜的前 20 位几乎被面向对象的或者面向过程的指令式语言占满。尤其是前三甲则几乎始终被 Java C 、和 C++ 所把持。反观函数式语言, Lisp 在第 13 位,是最靠前的了, Scheme 在第 25 位, Haskell 在第 40 位左右。但并不是说函数式语言对于指令式语言就不具有可比性,相反,在很多地方函数式语言都体现了它们独到的优势,如:代码的简洁性、值的不可改变、函数的无副作用、值和函数替换的指称透明等。

但 函数式语言与指令式语言总显得有点儿“格格不入”。一个被指令式语言锻炼出来的头脑很难理解函数式语言的精髓,已经用惯了循环语句的方式解决问题,想要把 它转换为递归语句也不是很容易的事情。莫非,函数式语言始终只能作为学术派的思维游戏,而不能适应于现代商业软件开发的需要,因此无缘商业软件开发浪潮的 洗礼吗?

所以说, Scala 语言的确具有很新颖的创意。因为它能很巧妙地把指令式语言与函数式语言结合在一起。用 Martin Odersky 的话说,就是:指令式语言与函数式语言本就是一枚硬币的两面,它们不应是互相排斥、非此即彼的,而是可以互相协调,共同发挥出更大力量的。

Scala 语言还从许多其他的语言中汲取了长处,构造出了自己完整而优雅的思想体系。从语言的各个方面来看,似乎都存在一些有别于其他语言的特点,但从语言的整体性来看,它的每个特点都不是孤立的,而是作为一个有机的整体自然而然生发出来的功能。你可以发现, Scala 语言中的基本概念并不多,甚至与其他的语言相比,原生数据类型和语法结构还“显得”颇为不足。但 Scala 具有强大的自发展能力,能够构建出“乱真”的自定义语法库,这使得 Scala 语言成为了一种可以依赖于有限的构件创造出几乎无限可能的语言。

(写到这里我眼前总能立刻浮现出 DNA 结构的四个基本构成部分,谁能想到几乎所有复杂生命体的程序都仅仅使用 4 个单词就能够拼装出来呢?)

不过本书还不止是一部编程语言的教材,它还是一部编程方法论的说明。由于本书三位作者同时也是 Scala 语言的设计和开发者,所以想要 了解个中秘密真是再也找不到更好的透露者了。通过本书你不但能够学习到这种语言的语义语法结构、应用场景、用法、实例,还能够发现语言作者在这些结构之后 的考量、动机、权衡和折中,从中可以领悟到许多编程专家的思维模式,学习到他们处理问题的方法,从而开拓你的眼界,让你不仅在软件代码开发方面,而且还在 软件的架构设计思想上面有新的感悟。

我必须承认,在接触 Scala 之前,我只是一个普通的 Java 开发人员,是完全“指令式”的软件从业者。是 Scala 语言开始让我领略到了函数式编程思想的奥妙。因此,借此机会想向语言的创造者表示自己的敬意,是你们非凡的工作给了我另一种全新的思考问题的方式,同时也“断送”了我“制造轮子”的梦想(笑)。

本书的翻译工作分为两部分,其中,前 27 章由本人完成,第 28 33 章由高宇翔翻译。

另外,还要感谢电子工业出版社不遗余力地引进国外优秀 IT 类书籍,感谢博文视点的徐定翔 编辑在本书筹划阶段给予我参与的机会;感谢卢鸫翔编辑为译者在本书翻译阶段提供的大力支持;感谢刘唯一编辑和杨绣国编辑为本书的统稿和排版不辞辛劳的工 作。翻译本书的过程中,译者虽已尽最大努力确保专业术语的统一和准确,也尽最大努力将原作者的意境用朴实的中文展现给读者,但囿于个人的水平,书中的问题 和疏漏之处在所难免,敬请读者朋友给予批评指正。

黄海旭

2010 10 月于上海浦东

posted @ 2010-12-03 09:01  博文视点  阅读(528)  评论(0编辑  收藏  举报