
这个世界到今天已经有很多很多的编程范式，相当复杂。下面这个图比较好地描绘了这些各式各样的编程范式，这个图越往左边就越是“声明式的”，越往右边就越不是“声明式的”（指令式的），我们可以看到，函数式编程和逻辑编程，都在左边，而右边是指令式的，有状态的，有类型的。

<img src="https://static001.geekbang.org/resource/image/9d/8d/9d6ac4820cc070a6b567d3f514d9ea8d.png" alt="" />

上面这个图有点乱，不过总体说来，我们可以简单地把这世界上纷乱的编程范式，分成这几类：**声明式**、**命令式**、**逻辑的**、**函数式**、**面向对象的**、**面向过程的**。

于是我们归纳一下，就可以得到下面这个简单的图。简单描述一下：

- 中间两个声明式编程范式（函数式和逻辑式）偏向于你定义要什么，而不是怎么做。
- 而两边的命令式编程范式和面向对象编程范式，偏向于怎么做，而不是要做什么。

<img src="https://static001.geekbang.org/resource/image/d6/50/d64bf8275ee9e0eac3112dcd342d9350.png" alt="" />

我们再归纳一下，基本上来说，就是两大分支，一边是在解决数据和算法，一边是在解决逻辑和控制。

<img src="https://static001.geekbang.org/resource/image/bf/ef/bf6945c2ca2ec5564ecbbf1c81503eef.png" alt="" />

下面再结合一张表格说明一下这世界上四大编程范式的类别，以及它们的特性和主要的编程语言。

<img src="https://static001.geekbang.org/resource/image/fc/ab/fcd2780bcb35c17e475eedb94b1f66ab.png" alt="" />

程序编程范式。一个是左脑，一个右脑。我们程序员基本上是在用左脑，左脑是理性分析，喜欢数据证据，线性思维，陷入细节，具体化的，不抽象。但是，实际上玩儿出这些东西的都在右脑，函数式，还有像逻辑式的抽象能力都在右脑。所以我们非线性的想象力都在这边，而标准化教育把我们这边已经全部干掉了，我们只剩左边。我们陷入细节，我一说Java是最好的程序设计语言，一堆人就来了，找各种各样的细节问题跟你纠缠。

离我们最近的是函数式编程，但既然函数式编程这么好，为什么函数式编程火不起来呢？首先，这里有个逻辑上的问题，并不是用的人越多的东西就越好。因为还要看是不是大多数人都能理解的东西。函数式编程或是声明式编程，需要的是用我们的右脑，而指令式的则需要用我们的左脑。

参看下图：

<img src="https://static001.geekbang.org/resource/image/11/c7/11f63d119d5954724b42024f9d6a64c7.png" alt="" />

我们可以看到，

**人的左脑的特性是**：

- 理性分析型
- 喜欢数据证据
- 线性思维
- 陷入细节
- 具体化的

**人的右脑的特性是**：

- 直觉型
- 想象力
- 非线性
- 宏观思维
- 抽象化的

人类社会中，绝大多数人都是左脑型的人，而只有少数人是右脑型的人，比如那些哲学家、艺术家，以及能够创造理论知识的人。这些人在这个世界上太少了。

这是为什么很多人理解和使用声明式的编程范式比较有困难，因为这要用你的右脑，但是我们习惯于用我们的左脑，左脑用多了以后右脑就有点跟不上了。

说到人类的大脑了，已经到了不是我专长的地方了，这个话题太大了，所以，也是时候结束《编程范式游记》这一系列文章了。希望你能从这一系列文章中有所收获。如果有什么疑问或是我有什么没有讲对的，还希望得到你的批评和指正。先谢谢了。

以下是《编程范式游记》系列文章的目录，方便你了解这一系列内容的全貌。**这一系列文章中代码量很大，很难用音频体现出来，所以没有录制音频，还望谅解。**

- [01 | 编程范式游记：起源](https://time.geekbang.org/column/article/301)
- [02 | 编程范式游记：泛型编程](https://time.geekbang.org/column/article/303)
- [03 | 编程范式游记：类型系统和泛型的本质](https://time.geekbang.org/column/article/2017)
- [04 | 编程范式游记：函数式编程](https://time.geekbang.org/column/article/2711)
- [05 | 编程范式游记：修饰器模式](https://time.geekbang.org/column/article/2723)
- [06 | 编程范式游记：面向对象编程](https://time.geekbang.org/column/article/2729)
- [07 | 编程范式游记：基于原型的编程范式](https://time.geekbang.org/column/article/2741)
- [08 | 编程范式游记：Go 语言的委托模式](https://time.geekbang.org/column/article/2748)
- [09 | 编程范式游记：编程的本质](https://time.geekbang.org/column/article/2751)
- [10 | 编程范式游记：逻辑编程范式](https://time.geekbang.org/column/article/2752)
- [11 | 编程范式游记：程序世界里的编程范式](https://time.geekbang.org/column/article/2754)
