假如我想新学一门编程语言或一种编程框架,一般会找一篇速成互动教程看看。因为这类教程中,先做什么、后做什么都已精心设计好。通过它们,我们可以更容易体会语言的妙处所在。当然,扔掉教程,直接动手实践也未尝不可,但说白了,我就是想尽快发现语言的动人心弦之处,尽快对它的语法糖 和核心概念有个大体印象。

然而多数情况下,我找不到称心如意的教程。受到篇幅限制,那些教程往往只介绍各门语言间相去无几的皮毛。而这些皮毛,我又早已熟知。若想领会一门语言的精髓,它可就无能为力了。我想要的是那种痛快淋漓、深入探索语言本质的感觉。

本书就将给你这种感觉。不是一次,而是七次。你将从书中找到以下问题的答案。

  • 语言的类型模型是什么?强类型(Java)或弱类型(C语言),静态类型(Java)或动态类型(Ruby)。本书侧重于介绍强类型语言,但各种静态类型和动态类型语言也都有所涉及。你将看到,语言在类型模型间的权衡会对开发者产生何种影响。语言的类型模型会改变你对问题的处理方式,还会控制语言的运行方式。就类型模型而言,书中的每门语言都堪称独树一帜。
  • 语言的编程范型是什么?是面向对象(object-oriented,OO)、函数式、过程式,还是它们的综合体?本书介绍的语言涵盖了4种编程范型,有些语言还由几种范型组合而成。你将看到一门基于逻辑的编程语言(Prolog)、两门完全支持面向对象思想的语言(Ruby和Scala)、四门带有函数式特性的语言(Scala、Erlang、Clojure和Haskell)及一门原型语言(Io)。这里有Scala这样的多范型(multiparadigm)语言,也有Clojure这种多方法(multimethod)语言,后者甚至允许你实现自定义范型。本书最重要的任务之一,就是学习新的编程范型。
  • 怎样和语言交互?语言可编译也可解释,可以有虚拟机也可以没有。在本书中,如果某门语言带交互命令行,将先通过交互命令行探索这门语言,当我们处理规模较大的项目时,还会转而采用文件编程。我们接触的项目不会特别大,因此无需深入研究打包(packaging)模型。
  • 语言的判断结构(decision construct)和核心数据结构是什么?或许你会惊讶,在作判断时,居然如此多的语言都用到了与if和while的各种变型都不相同的结构。你会见识到Erlang的模式匹配,还有Prolog的合一(unification) 。至于数据结构,集合(collection)在任何语言中都扮演着至关重要的角色。对Smalltalk和Lisp这类语言,集合刻画了语言特征,而在C++和Java等语言中,集合更可谓无所不在,它们决定着用户体验,若没了它们,语言势必成为一盘散沙。因此,无论用哪一类语言,都必须全面、透彻地理解集合。
  • 哪些核心特性让这门语言与众不同?有些语言支持并发编程的高级特性,有些语言提供独一无二的高级结构,比如Clojure的宏(marco)和Io的消息解释(message interpretation);有些语言包含性能强劲的虚拟机,如Erlang的BEAM,它能让 Erlang构建的容错分布式系统远远快于其他语言;有些语言提供专门针对特定问题的编程模型,比如利用逻辑规则解决约束问题。 就算把这些问题全弄个一清二楚,你也不会成为哪怕一门语言的专家。但你会明白,这几门语言各自拥有哪些独门绝技。下面,我们先看看本书介绍了哪几门语言。 摘自:《七周七语言》