五一家里蹲,翻翻《Programming Paradigms for Dummies: What Every Programmer Should Know》,学习学习,读后笔记准备写三篇:炼气、筑基、飞升,下面是炼气篇 ^^。


我们都知道编程语言是怎么一步步过来的,从最开始的穿孔机到汇编再到各种高级语言,现在常见于眼前的都是些高级语言,老牌强者如 C、Java、SQL、JavaScript、C++,新秀如 Python、Go、Kotlin、Rust、Julia。TIBOE 2021 5月的编程语言排行榜前十是这样的:

程序员经常说的一个梗是——PHP是世界上最好的语言,大致反映出大家普遍认同一个观点——没有最好的语言,只有最适配需求场景的语言,好比瑞士军刀和斩马刀,各有适用场景。

平时大家都是用设计好的语言,如同生活在各个语言创造好的世界里,如果抬头想想语言也是由人创造的,那么语言的水面下必然有一些数量相对少的指导原则,这些指导原则指导建设了这门语言,另一些指导原则则指导建设了另一门语言,甚至从前两者的指导原则中抽取出部分再指导建设第3门语言。具体语言的语法细节各异,而指导原则则可能存在共通之处。如果把注意力聚焦到编程语言这个层面,这些指导原则就是要了解的核心所在。这些指导原则可以称为 programming concept,解决某类问题最佳的一组概念(concept)组成了一个 范式(programming paradigm,CTM:paradigm 这个说法太暧昧了,我用 computation model)。规范一些可以说一个编程范式是指基于一种数学理论或者一套相关的准则进行编程的方法。

一个编程语言(language)由多个(一般1到2个)范式(paradigm)组成,一个范式由多个概念(concept)组成。

常用的范式有:面向对象(Java)、面向过程(C)、函数式(haskell)、逻辑式等。而面向对象、面向过程又可以归类到命令式编程(imperative programming)范式下,命令式编程会告诉计算机怎么执行,与命令式相对的是声明式编程(declarative programming)范式,声明式编程只告诉计算机我需要这个结果,具体怎么执行由计算机推导。编程范式非常多,放到筑基篇里再说,说说最重要最通用的编程概念:

  • records,一个数据结构,包含一组数据项的引用,可以索引到每一个包含的数据项。可以引申出 arrays、lists、strings、trees、hash tables 等。
  • (lexically scoped) closures,(词法范围的)闭包,一个执行过程+外部引用,在程序员视角就是一个工作块,过程、方法、对象、类,都属于闭包。
  • independence (concurrency),并发,两个部分有各自独立的执行时间线,在执行时序上没有既定的先后顺序,如 同一个网络系统中不同的主机、同一个操作系统中不同的进程、同一个进程中不同的线程、同一个时空下的个体。
  • named state,随着时间变化的一个命名值序列,直观上就对应编程语言里的变量,抽象含义就是实体记住了随着时间推移在自身留下的影响,使得实体的行为会随着时间发展而发生变化,举例就是现实世界中所有的生物个体都会随时间发生变化。

References

Programming Paradigms for Dummies: What Every Programmer Should Know

https://en.wikipedia.org/wiki/Programming_paradigm

Concepts, Techniques, and Models of Computer Programming

分类: CODE

2 条评论

Linmu · 2022年6月28日 下午8:01

Next 呢?

    顽石 · 2022年8月14日 下午8:32

    年底再填坑,希望今年可以回家填

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注