范畴论

1 认识范畴论

1.1 起因

写这个系列起源于自己学习编程语言时遇到的问题,研究编程语言不可避免要与数学打交道,自己大学只学过数学分析和高等代数等数学系一年级课程,PLT (Programming Language Theroy) 需要的数学基础大致为:抽象代数(Abstract Algebra) 、拓扑(Topology) 、范畴(Category Theory)等代数 知识,在阅读相关 PL 书籍时,深感自己的无力。我又是一个” 死磕” 的人,万事都要问个为什么,遇到不懂之处模糊跳过总觉得” 不舒服”,于是乎,数学基础的补足是” 迫在眉睫”。有人可能会” 杠精” 一下:你说得这些我也不懂啊,代码照样写得好好地,不妨碍我升职加薪。关于程序员编程语言理论学习 的重要性,我是这么理解得:编程语言发展这么多年,从大家熟悉的汇编,到 C 语言、C#、C++、JAVA、GO、Dart、Javascript、Python、Dart、Rust⋯(大家以为我在报菜名)几乎每过个几年,就会有一次编程语言的” 大浪潮”。如果你无法快速学习,可能就会被无情” 内卷” 到死。为了生存下去, 掌握一套编程语言方法论至关重要:任何具体的编程语言知识都要内化到自己建立的抽象框架之内,我所找到的就是数学。这有点类似于编译器里中间语言的概念,数学是中间语言,PLT 是编译器前端,具体的编程语言就是我们需要理解的对象。OK,言归正传,让我们开始范畴论的学习之旅吧!