本书概要介绍、内容主线、阅读目标
这本书名为 Understanding Computation: From Simple Machines to Impossible Programs
,作者是 Tom Stuart
,即《理解计算过程:从简单计算机到不可解程序》,不过翻译时改成了《计算的本质:深入剖析程序和计算机》。
内容提要中说,本书将以使用简单的Ruby代码,深入介绍计算理论和编程语言设计,阐述形式语义、自动机理论、lambda演算和函数式编程等计算问题。啊,听起来就很晦涩的样子,不愧是“深入剖析”加上“程序和计算机”!
不过结合目录内容,个人认为,从英文名的角度来看,这本书的主线实际上是很明晰的:
- 首先简单介绍Ruby语言(第1章),这是不太重要的一部分;
- 然后使用Ruby阐明计算机科学,分为两个部分:
- 第一个部分讲解 程序(第2章)和 (理论)机器(第3、4、5章),程序一章介绍了语法和语义,(理论)机器部分则从最简单的计算机
DFA, NDFA
与正则表达式(第3章),深入到确定性下推自动机、非确定性下推自动机(第4章),最终建立目标机器图灵机,同样包括确定型图灵机和非确定型图灵机; - 有了终极机器模型,第二部分则在其基础上介绍 计算 的概念,引入lambda演算,进入函数式编程的世界;之后则简单介绍了可计算性理论,包括可判定性、停机问题、不可判定问题等等。
- 第一个部分讲解 程序(第2章)和 (理论)机器(第3、4、5章),程序一章介绍了语法和语义,(理论)机器部分则从最简单的计算机
这样,从(理论)机器(简单机器到复杂机器)到不可解程序(从计算概念、lambda演算到可计算性、不可解程序),就清楚的概括了本书的全部内容,这些内容不仅深入介绍了计算成立的(理论)基础,还阐明了计算的能力,以及计算本身的局限性,从而让我们真正 Understanding Computation
。
个人愚见,狭义的计算仅仅指的是不包括输入和输出的实际运算过程,而广义的计算则指的是输入->计算->输出的全过程,比如 1 + 2
就有输入 1
和 2
、计算 +
、输出 3
。从这样一个角度来看,计算的物理基础或者说物理机器建立在逻辑门与时序电路的组合之上,理论基础或者说理论机器则有正则、DFA、NFA、下推自动机、图灵机等状态机,它们既是计算成立的基础,其自身也是一个计算过程。更高级的抽象又形成了lambda演算、Monad等等,同样是计算过程。因此,计算二字就足以囊括机器与程序的全部,也是本书的全部。理解了计算,就理解了机器、程序乃至整个计算机。
这里列出本人阅读本书要达成的目标:
- 搭建Ruby语言的学习环境:下载对应的编译器或解释器,建立语言文件夹,在VSCode上安装相关插件,书写配置文件; 掌握Ruby语言的基本功能和基础知识——这一个目标整体上,可以和【读书笔记】七周七语言:理解多种编程范型中的Ruby一章相合并,我会全部总结在一篇文章中,然后以超链接的形式记录在这两篇读书笔记中。
- 将书上的程序范例全部实现一遍:包括程序部分的语法解析器、机器部分的DFA/NDFA、确定性/非确定性下推自动机、确定型/非确定型图灵机,然后是计算部分的lambda演算相关程序……统统实现一遍,初步把编译原理这个梦魇击溃。
第一章 刚好够用的Ruby基础——阅读笔记
1.1 VS Code配置Ruby语言环境
首先看一下这篇文章,配置好学习Ruby的语言环境。
1.2 Ruby学习笔记
见这篇文章。