《计算机程序的构造和解释》这本书的目标并不是讲解一门编程语言的语法等,它是一种方法。不是在向你陈述知识,而是在教你如何做到想要做的东西。它是一个过程,一个精神。这些引导过程的东西就是所谓的程序规则的模式。
书中用了许多的例子来诠释书名,我才疏学浅就不再举例往博客上推了,仅仅归纳一点总结而已。
如果说程序是一种法术,那么控制神奇的法术就是过程。因此我们需要一门叫做Lisp的语言来唤醒这种精神。从书中的讲解中我们发现,Lisp语言的语法并不多,要记住这些语法并不难,但要理解这些规则的含义以及如何使用这些规则,则是要上很长的时间去修炼。深入理解了这些规则便会使你成为更优秀的程序员。
在计算机科学中,这并不是要告诉人们该如何算平方根,作者也说了如果这是计算机科学的全部,那么便没什么了不起的。真正的问题是,当我们试图建立非常大的系统时,这通常是几千页长的计算机程序。
之所以能完成这种庞大的工程,是因为有一些技术,用于控制这些大型系统的复杂性。而如果控制复杂性也是这门课的重点,某种意义上来说,这也解释了什么是真正的计算机科学。
作者举了一个例子,当一名工程师正在设计一个由很多实体构成的物理系统时。担心这个系统的工程师不得不去解决容许误差和噪音的问题。而我是一个电气工程师,我可以去很容易的建立起一级或二级的放大器,你也可以设想建造一百万个放大器的级联。但是去建造这样一种东西是非常荒唐的事情,因为在建造这一百万个放大器的很长时间之前,这些组件的噪音会得到放大,以至于这整个工程没有了意义。
计算机科学负责处理理想化的组件,我们很清楚的知道我们在将这些小程序和数据块放到一起。我们不必担心误差。那意味着在建立一个庞大的程序时,这和我能建立和我能想象的没有什么不同。因为这些部分是我知道我想要的抽象的实体。
很显然工程师是非常准确的,因此相对于其他类型的工程,你可以建立约束物理系统的限制,建立噪音和近视的限制,实行建设大型软件系统的限制是我们的思想局限。所以从这一点来看,计算机科学就像是工程的一个抽象形式。用在所有的工程中的一种技术,叫做黑盒抽象。
如果说求出X的平方根可能是一个复杂的整体的一套规则,那么最终会有,比如36的平方根,得出6。而真正重要的是,如果我想计算A的平方根加上B的平方根,那么你便可以用这个规则,并且将其看作一个无需知道内容的模块。因为从我们的角度来看,黑箱内有什么并不重要,因为我们只是想要知道他们的平方根的和。这在C等各种语言中都有体现。比如给一个函数传入一个参数,我们并不需要知道这个函数的具体操作,只是需要它们的代码,当然了,这里所说的函数是别人写好的库。
书中有一个求平方根的例子,为了去做些什么,我们需要去做一个猜想,并且不断的去改进它。这里我们可以做一个黑盒,上面写着“平方根”。这里是一个