极客时间已完结课程限时免费阅读

40 | 编程范式游记(11)- 程序世界里的编程范式

40 | 编程范式游记(11)- 程序世界里的编程范式-极客时间

40 | 编程范式游记(11)- 程序世界里的编程范式

讲述:杨超

时长04:03大小3.71M

你好,我是陈皓,网名左耳朵耗子。
这个世界到今天已经有很多很多的编程范式,相当复杂。下面这个图比较好地描绘了这些各式各样的编程范式,这个图越往左边就越是“声明式的”,越往右边就越不是“声明式的”(指令式的),我们可以看到,函数式编程和逻辑编程,都在左边,而右边是指令式的,有状态的,有类型的。
上面这个图有点乱,不过总体说来,我们可以简单地把这世界上纷乱的编程范式,分成这几类:声明式命令式逻辑的函数式面向对象的面向过程的
于是我们归纳一下,就可以得到下面这个简单的图。简单描述一下:
中间两个声明式编程范式(函数式和逻辑式)偏向于你定义要什么,而不是怎么做。
而两边的命令式编程范式和面向对象编程范式,偏向于怎么做,而不是要做什么。
我们再归纳一下,基本上来说,就是两大分支,一边是在解决数据和算法,一边是在解决逻辑和控制。
下面再结合一张表格说明一下这世界上四大编程范式的类别,以及它们的特性和主要的编程语言。
程序编程范式。一个是左脑,一个是右脑。我们程序员基本上是在用左脑,左脑是理性分析,喜欢数据证据,线性思维,陷入细节,具体化的,不抽象。但是,实际上玩儿出这些东西的都在右脑,函数式,还有像逻辑式的抽象能力都在右脑。所以我们非线性的想象力都在这边,而标准化教育把我们这边已经全部干掉了,我们只剩左边。我们陷入细节,我一说 Java 是最好的程序设计语言,一堆人就来了,找各种各样的细节问题跟你纠缠。
离我们最近的是函数式编程,但既然函数式编程这么好,为什么函数式编程火不起来呢?首先,这里有个逻辑上的问题,并不是用的人越多的东西就越好。因为还要看是不是大多数人都能理解的东西。函数式编程或是声明式编程,需要的是用我们的右脑,而指令式的则需要用我们的左脑。
参看下图:
我们可以看到,
人的左脑的特性是
理性分析型
喜欢数据证据
线性思维
陷入细节
具体化的
人的右脑的特性是
直觉型
想象力
非线性
宏观思维
抽象化的
人类社会中,绝大多数人都是左脑型的人,而只有少数人是右脑型的人,比如那些哲学家、艺术家,以及能够创造理论知识的人。这些人在这个世界上太少了。
这是为什么很多人理解和使用声明式的编程范式比较有困难,因为这要用你的右脑,但是我们习惯于用我们的左脑,左脑用多了以后右脑就有点跟不上了。
说到人类的大脑了,已经到了不是我专长的地方了,这个话题太大了,所以,也是时候结束《编程范式游记》这一系列文章了。希望你能从这一系列文章中有所收获。如果有什么疑问或是我有什么没有讲对的,还希望得到你的批评和指正。先谢谢了。
以下是《编程范式游记》系列文章的目录,方便你了解这一系列内容的全貌。
分享给需要的人,Ta购买本课程,你将得29
生成海报并分享

赞 31

提建议

上一篇
39 | 编程范式游记(10)- 逻辑编程范式
下一篇
41 | 弹力设计篇之“认识故障和弹力设计”
unpreview
 写留言

精选留言(26)

  • 倪必荣
    2018-06-13
    左右脑理论是迷思,是错误的...
    共 7 条评论
    15
  • songyy
    2018-02-17
    当时在上 编程语言介绍的一门课的时候,是要用prolog写作业。花了一整个周末看完了prolog的一本小册子,用三行写出来了个quicksort,感觉对recursion有了更加深入的理解 😁
    13
  • 灯火可亲
    2019-03-28
    从编程范式上升到左右脑思考模式 感觉有点勉强
    5
  • 许庆晗
    2018-04-07
    文章都同意,唯独左右脑的图文解释不服。左脑图上明明写了mathematician和logic control order,这才更符合本系列讲的函数式和logic control分离。从图像上看,左脑才像是函数式,声明式的程序嘛。右脑的图更像混杂了logic和control,充满了side effects的代码呀,或者,甲方,投资方脑子里的项目(=゚Д゚=)。。。我觉得这个世界上,还是左脑函数式思维的人更少吧。也许国外高端圈子不是这样?
    共 1 条评论
    5
  • ky
    2020-11-08
    指令->函数->对象->声明 ,似乎是从细节走向了抽象,处于了不同层次,是复杂现实到简单理想的过度
    共 1 条评论
    4
  • 难得自然萌
    2020-09-01
    左手画圆右手画方, 小时候就发现自己如果玩一项活动开始时选择左右手就会固定下来,譬如打篮球抓石子玩手机我是左手,打乒乓球羽毛球用筷子用笔写字我是右手,我哥和我一样我想这应该是遗传吧
    2
  • 假面
    2019-08-15
    php是最好的编程语言!
    共 2 条评论
    2
  • edisonhuang
    2019-06-28
    编程范式总结起来分为两种,一种是申明式的,一种是指令式的,申明式的编程在解决数据和算法的问题,指令式编程是在解决逻辑和控制。 算法和抽象更多要我们利用自己的右脑,也就是更具艺术思维,抽象和感性认知的大脑。 逻辑和控制,涉及到更多细节,更多的利我们的左脑,也就是更熟悉概念和理性的半边。 其实有整个大脑自然好于只有一边,但是我们的教育体系一直在锻炼我们的左脑,而弱化右脑,大家从小到大都沉浸在灌输概念,讲究理性的推理,从而使得右脑荒废,这也是为什么很多成年人画画甚至不如幼儿园小孩的原因。因为小时候我们的世界还是两边大脑一起发展的。 现在深度学习的推理框架中,MXNet就是一个很好的结合了申明式和指令式编程的算法框架,这也让它在深度学习领悟大受欢迎
    展开
    共 2 条评论
    2
  • Treasure
    2020-10-08
    「我们再归纳一下,基本上来说,就是两大分支,一边是在解决数据和算法,一边是在解决逻辑和控制。」 这个说错了吧。本来 逻辑 和控制就不是号很好理解,你这里的归纳怎么又成了 一边 数据和算法,一边逻辑和控制了? 逻辑 + 控制不是 等于算法么… 我认为是命令式 多是控制流转,解决的是控制,像迭代就是最典型的命令式思维。 而 声明式 是do what,而不是how to do 而且,其实分割没有那么明显,就像过程式的函数名 不就是 do what 么,里面的实现是 how to do
    展开
    共 1 条评论
    2
  • 未来小娃
    2020-04-28
    高阶程序员拼的事认知,善于讲复杂得问题模型化抽象化,这点需要在日常工作的积极思考和探索。祝进步
    1
  • 刘清斌
    2020-04-25
    编程范式的内容确实很少接触,平常也基本没有注意到。如果了解到编程范式是什么,是怎么分类,到底为什么要这么做,这样做带来什么好处?如果知晓了,学习新的语言会更加快速,而且不在只是停留在语法表面的使用。
    1
  • 简单点儿、
    2020-03-16
    那函数是编程描述做什么,但是我感觉只是语法层面,但实现底层 还是怎么做的,比如map方法,看似没有for,但是底层不一样得循环遍历?
    共 3 条评论
    1
  • macworks
    2018-02-15
    有些公司是强制用函数式编程的。不习惯的话还是要逼一逼自己,慢慢也就习惯了。
    共 1 条评论
    1
  • 2022-02-09
    这里举的声明式编程语言的例子,似乎都是DSL,有没有图灵完备的
  • seedjyh
    2021-10-20
    声明式、函数式语言对于编译器(解释器?)的要求很高,不然会导致程序效率下降。 执行sql语句的数据库内核是多么复杂啊。
  • 笑忘日月星辰
    2021-05-13
    java 也有函数式了
    1
  • 笑忘日月星辰
    2021-03-05
    java8之后也有了函数式编程,表格里的函数式部分是否应该加上java
  • 爱学习的大叔
    2020-12-02
    收官编程范式,欧耶。
  • 你为啥那么牛
    2020-09-19
    从我的使用经历来看,java是我用过的最不喜欢的语言。研而不发,困于研发
  • 高科
    2020-04-27
    左脑思维的人是不是适合做数据分析类的工作