1.3 阅读准备
由于书中的很多内容都和数学有关,因此你可能担心自己必须先具备丰富的数学知识,然后才能看懂这本书。其实你只要有逻辑思考能力就行(程序员应该很擅长逻辑思考),笔者并不会要求大家具备中学代数与中学几何之外的其他数学知识。某些章节可能会运用向量(vector)与矩阵(matrix)等线性代数(linear algebra)方面的概念,如果从前没有看过这方面的资料,那么把这些内容跳过去就可以了。若是对本书所用的记法不够熟悉,则请参考附录A。
数学中有一个很重要的部分就是对命题给出形式化证明。本书就包含了许多这样的证明过程。如果你在中学的几何课、计算机科学专业的自动机理论(automata theory)课以及逻辑课中做过一些证明,那么应该很容易就能理解本书所给出的证明。附录B描述了某些常用的证明技巧,并给出了范例。
笔者假设你已经是一名程序员了,而且对C、C++或Java等典型的命令式(imperative)编程语言相当熟悉。尽管书中的范例是用C++写的,但即便你原来没有用C++写过程序,也依然应该看得懂才对。附录C解释了一些C++特有的机制。虽说我们用的是C++语言,但笔者相信,书中所讲的原则能够适用于其他各种语言。
本书所谈的很多编程话题也同时出现在Stepanov与McJones所写的《编程原本》(Elements of Programming)一书中,而后者是从另外一种更加正式的角度来讲解这些话题的。想要深入研究这些话题的读者可以参考那本书,并将其与本书结合起来阅读。在本书里,我们偶尔也会提到《编程原本》中的相关章节。
时间: 2024-10-31 18:34:21