参考资料
视频:
[银河脑暴] Galaxy Brain 编程秘史 ——B站up主 清华邓博士
Four Languages From Forty Years Ago——Scott Wlaschin
网站:
Classification of the principal programming paradigms Print this figure as a poster!
文章:
Programming Paradigms for Dummies: What Every Programmer Should Know
启发的原因
在计算机发展历史中,出现过很多的编程语言,新奇的思想层出不穷。语言能够改变人的思维方式。
01 Four Languages From Forty Years Ago
引入
演讲的结构:
首先, 总览了编程语言发展史,从1960s至1980年之间,各种新奇的语言层出不穷。重要的编程范式在1980s逐渐稳定,如下图总结:
一个暴论:我们一直在用一种工具去做所有的事情,当下熟知的编程语言本质都是一种语言。
评价:有可能出于老年人的怀旧心理,但是在上述提到的语言中一通百通是事实,建立的编程模型确实非常相似。一方面,说明这种模型足够优秀,另一方面,也说明当前的通用模型不能满足编程需求了。崇古贬今不可取,但是认为今人胜古人倒也不必,思想应该兼收并蓄。
SQL
一致性的模型,基于表达式,注重做什么而不是怎么做,分割关注点,交互性。
一致模型是良好的编程语言的基础。SQL认为所有东西都是关系集合
基于表达式可以做到嵌套,想搭积木一样构筑整个项目,也容易减少bug。
注重做什么,而不是怎么做,将底层实现与上层逻辑分隔开来,更加直观,健壮。
分隔重点,SQL的查询,数据操作,创建表都是不同的部分,同样可以做到清晰明了。
交互性,例如:jupyter(python),可以直接获得结果,而不需要通过编译等无关过程。
Prolog
第一种逻辑编程语言。
一致模型:所有东西要么是事实要么是规则。具有可预测性。
陈述性的:描述做什么,而不是怎么做
统一性的,可判断,可作答。
交互性:同上
ML
收获最多的部分,因为最近在学习Rust。ML则是函数式编程的鼻祖,Ocaml(Rust 诞生的源头之一) 深受其启发。
基于表达式
类型推断
一些默认的设定: 重要需要扩展
参数多态
代数类型系统:重要需要扩展
一些默认设定: 不变性,没有null,强制初始化,结构相等(没有懂)
最重要的一点:代数组合类型系统
在Rust中以 sturct 和 enum 为代表。 前者为AND,或者为OR。在构建新类型时十分强大而有力。
Smalltalk
许多东西都是首创:OOP,IDE,VM,GC等等
一致性模型,最小化语法增强语言的表达能力,以及足够迷人。
之后,有机会可以尝试smalltalk,也许永远没有机会。
VisiCalc
类似于excel的东西。或者说excel模仿了visicalc。但是我却是第一次知道这个语言。
集上述语言之长,满足了非专业人士的编程序需要。
专用编程语言比通用语言更加有用,使用合适的工作做工作。
总结
扩展视野,增加可用的工具集,不要局限在C风格的编程语言之中。
02 why isn’t Functional Programming the norm?
这部分乏善可陈,是对当前现象的一些总结和逆推,结论也不够强有力。
top 10 语言的流行原因:
缺少杀手级应用
没有排他性的平台
快速升级,并且有重大的变化
没有营销
但是可以缓慢但是稳定的发展
封装与继承并不是OOP的核心
也许函数式编程成只是时间问题
03 Programming across Paradigms
开篇讲述了科学哲学相关的东西。
给出范式是什么东西
科学认知的发展过程:
几个经典的范式:
命令式编程: 注意细节
面向对象编程:重点是消息传递
函数式编程: 只关注输入输出
声明式编程: 高度抽象
以及其他范式分类:有一篇文章可以读:
https://www.info.ucl.ac.be/~pvr/paradigms.html
范式和范式之间的差距 比我们想象得要小很多。
不需要争个好坏胜负,范式是为了更好地解决问题。
04 The next Paradigm Shift in Programming
总览
一种范式包含了特性与风格。
procedural programming
structured programming
语言级不支持的特性可以通过风格实现。
而且编程范式可以兼具。
OO Programming
top10 的编程语言除了C都支持OOP,分析了C++之父 Bjarne Stroustrup 和smalltalk之父Alan Kay的观点后发现:
OOP的特性可以被非OOP的全面替代
OOP的本质是消息传递协作,类似分布式系统:
当前OO已经peaks,之后将会出现什么呢?
functional programming
函数式编程:避免变化与副作用
在风格上,functional programming 和 OO programming 采用了完全相反的方法,去解决同样的问题,尽管两者在某些方面有很多共同点。
函数式编程的特点是:
和大多数人想象得不一样,FP 已经在学术象牙塔中待了几十年
函数式编程可以减少复杂性,有两种处理方法
尝试兼顾OO-FP,如Scala,Ocaml,F#
而Elm,Haskell,purescript完全不同。
关于副作用并不是很懂。
转向已经开始: