0%

Galaxy Brain 编程秘史

参考资料

视频:

[银河脑暴] 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

启发的原因

​ 在计算机发展历史中,出现过很多的编程语言,新奇的思想层出不穷。语言能够改变人的思维方式。

image-20220902085417587

01 Four Languages From Forty Years Ago

引入

演讲的结构:

image-20220902090544611

首先, 总览了编程语言发展史,从1960s至1980年之间,各种新奇的语言层出不穷。重要的编程范式在1980s逐渐稳定,如下图总结:

image-20220902085718191

一个暴论:我们一直在用一种工具去做所有的事情,当下熟知的编程语言本质都是一种语言。

image-20220902085853147

image-20220902085800745

评价:有可能出于老年人的怀旧心理,但是在上述提到的语言中一通百通是事实,建立的编程模型确实非常相似。一方面,说明这种模型足够优秀,另一方面,也说明当前的通用模型不能满足编程需求了。崇古贬今不可取,但是认为今人胜古人倒也不必,思想应该兼收并蓄。

SQL

image-20220902090843638

一致性的模型,基于表达式,注重做什么而不是怎么做,分割关注点,交互性。

一致模型是良好的编程语言的基础。SQL认为所有东西都是关系集合

基于表达式可以做到嵌套,想搭积木一样构筑整个项目,也容易减少bug。

注重做什么,而不是怎么做,将底层实现与上层逻辑分隔开来,更加直观,健壮。

分隔重点,SQL的查询,数据操作,创建表都是不同的部分,同样可以做到清晰明了。

交互性,例如:jupyter(python),可以直接获得结果,而不需要通过编译等无关过程。

Prolog

第一种逻辑编程语言。

image-20220902091606521

一致模型:所有东西要么是事实要么是规则。具有可预测性。

陈述性的:描述做什么,而不是怎么做

统一性的,可判断,可作答。

交互性:同上

ML

收获最多的部分,因为最近在学习Rust。ML则是函数式编程的鼻祖,Ocaml(Rust 诞生的源头之一) 深受其启发。

image-20220902091938630

基于表达式

类型推断

一些默认的设定: 重要需要扩展

参数多态

代数类型系统:重要需要扩展

image-20220902092141250

一些默认设定: 不变性,没有null,强制初始化,结构相等(没有懂)

image-20220902092358590

最重要的一点:代数组合类型系统

image-20220902092458529

在Rust中以 sturct 和 enum 为代表。 前者为AND,或者为OR。在构建新类型时十分强大而有力。

Smalltalk

image-20220902092702254

许多东西都是首创:OOP,IDE,VM,GC等等

image-20220902092836697

一致性模型,最小化语法增强语言的表达能力,以及足够迷人。

之后,有机会可以尝试smalltalk,也许永远没有机会。

VisiCalc

类似于excel的东西。或者说excel模仿了visicalc。但是我却是第一次知道这个语言。

image-20220902093217613

集上述语言之长,满足了非专业人士的编程序需要。

image-20220902093249611

专用编程语言比通用语言更加有用,使用合适的工作做工作。

总结

image-20220902093450745

扩展视野,增加可用的工具集,不要局限在C风格的编程语言之中。

02 why isn’t Functional Programming the norm?

这部分乏善可陈,是对当前现象的一些总结和逆推,结论也不够强有力。

top 10 语言的流行原因

image-20220902105120478

image-20220902104832960

缺少杀手级应用

没有排他性的平台

快速升级,并且有重大的变化

没有营销

但是可以缓慢但是稳定的发展

image-20220902104904193

封装与继承并不是OOP的核心

image-20220902120622071

也许函数式编程成只是时间问题

03 Programming across Paradigms

开篇讲述了科学哲学相关的东西。

给出范式是什么东西

image-20220902170312544

image-20220902164650498

科学认知的发展过程:

image-20220902170339648

几个经典的范式:

命令式编程: 注意细节

image-20220902170502456

面向对象编程:重点是消息传递

image-20220902170608799

函数式编程: 只关注输入输出

image-20220902170649064

声明式编程: 高度抽象

image-20220902170738963

以及其他范式分类:有一篇文章可以读:

https://www.info.ucl.ac.be/~pvr/paradigms.html

image-20220902123226168

范式和范式之间的差距 比我们想象得要小很多。

image-20220902170917647

image-20220902164755484

不需要争个好坏胜负,范式是为了更好地解决问题。

04 The next Paradigm Shift in Programming

总览

一种范式包含了特性与风格。

procedural programming

image-20220902215233322

structured programming

image-20220902215341781

语言级不支持的特性可以通过风格实现。

而且编程范式可以兼具。

OO Programming

top10 的编程语言除了C都支持OOP,分析了C++之父 Bjarne Stroustrup 和smalltalk之父Alan Kay的观点后发现:

OOP的特性可以被非OOP的全面替代

image-20220902212131596

OOP的本质是消息传递协作,类似分布式系统:

image-20220902212341093

image-20220902212617037

当前OO已经peaks,之后将会出现什么呢?

functional programming

image-20220902214738242

函数式编程:避免变化与副作用

在风格上,functional programming 和 OO programming 采用了完全相反的方法,去解决同样的问题,尽管两者在某些方面有很多共同点。

image-20220902215812792

函数式编程的特点是:

image-20220902225832052

和大多数人想象得不一样,FP 已经在学术象牙塔中待了几十年

image-20220902220713737

image-20220902220932590

函数式编程可以减少复杂性,有两种处理方法

image-20220902225249660

尝试兼顾OO-FP,如Scala,Ocaml,F#

而Elm,Haskell,purescript完全不同。

image-20220902225456845

关于副作用并不是很懂。

转向已经开始:

image-20220902225200928