FOREWORD
推荐序
我是通过一个朋友极力推荐的《算法新解》一书而知道作者刘新宇的。后来有幸和作者进入了同一个微信群,在其中相互有了些交流。之后有一天,刘新宇发消息说他写了一本新书《同构:编程中的数学》,可以发纸质的书稿给感兴趣的人看。于是我就要了一本,同时对照着电子版书稿一起看。
这本书我前后看了几遍,对作者在编程和数学相关部分的渊博知识,他对编程和数学关系的深入思考,以及想把这些东西清晰地呈现给大家的意图,深有感触。作者以一个有趣的故事作为引子,引入了同构的概念,将同构贯穿于书中的各个概念主题。从最简单的数开始,逐渐引入递归、群和对称,再到范畴论,最后到无穷和悖论,作者让我们看到了从古至今数学抽象层次的发展脉络、抽象在数学中的作用,以及数学的抽象思维在编程中的应用。有了同构,我们可以在不同的实体中应用相同的抽象,用同样的方法解决不同的问题,这在编程中是非常有用的。在最后的无穷和悖论中,对于复杂系统的复杂度边界,作者介绍了几位先哲的探索,给我们留下了开放性的思考空间。另外,作者也给出了一个很好的观点:人类的力量是有限的,需要对自然有敬畏之心。
近年来随着人工智能、大规模分布式计算、多核CPU和异构计算等的发展,计算机中的各种编程技术在编程语言、软件架构、编译器、硬件体系结构、集成电路设计等方面都有着剧烈的变化。编程语言方面,越来越多的主流语言引入函数式编程的概念。软件架构方面则有了更多并行计算的东西、各种分布式并发的模型,以充分利用多核CPU。编译器方面则有了更多领域应用方面的发展,比如MLIR、TVM等,充分利用异构计算中的硬件加速单元。硬件体系结构方面则随着各种硬件加速单元的兴起,改变了原来以CPU为计算中心的格局,计算更多地依赖各种硬件加速单元。集成电路设计方面则为了实现各种硬件加速单元,需要缩短电路设计的周期,以更快速地应对各种频繁变化的需求,近年来有不少公司使用Bluespec、Chisel、SpinalHDL等具有函数式特性的语言来设计集成电路。
作为程序员,如何应对这些变化呢?如果每出现一种新的技术都去学习,那将会让我们疲于奔命,会有学不动的感觉——需要学习的东西太多了。但实际上这些新技术的基础变化并不大,有些甚至是在原有基础上的重新组合。所以,我们应该更多地学习基础的技术,提升抽象思维能力,善于发现各种不同技术的本质、不同技术之间的相似关系(更好的是同构关系)。这样我们就能够以不变应万变,对各种技术融会贯通,以较小的代价掌握新的技术。
作者在这本书中非常详细、清晰地阐述了与编程相关的一些基本数学概念和抽象方式,并将这些概念在实际的编程中展示出来,使用函数式编程语言在实际编程中展示良好的抽象是如何做的。读者通过阅读本书,将会得到一个全新的编程思维方式、良好的抽象能力,对编程中的数学概念有更清晰的理解(特别是对近年来关注度越来越高的函数式编程的一些基础概念,比如lambda演算、递归、代数数据类型、函子、自然变换等)。本书对后续学习函数式编程语言或者理解主流语言中的函数式特性会非常有帮助。
看完这本书,可以感受到作者是倾尽心力来写这本书的。本书文字生动朴实,内容严谨翔实,论证细腻缜密。用心读之,受益良多。
《Haskell函数式编程入门》作者 刘长生