我的lisp学习心得和体会第二篇

虽然只学习sicp其中非常少的篇章,但是大概可以看见一些程序设计过程中非常深邃的思想,其中之一就是降低智力复杂度,复杂度提升的元凶就是数据和状态的更改,不过实际上计算机所做的工作就是给定输入得到输出,这个说法并不是那么地哲学,比如人们玩一个游戏的时候,不会去思考游戏背后的cpu计算过程,只需要将开发者暴露出来的操作方式和对应的画面改变作为输入输出就可以,这个思想贯穿了整本书的结构。
那么从这个意义上说,抽象无疑是程序设计中最值得思考的几个问题之一,所以在这本书中介绍的也都是目前为止最强大的抽象方法论,第一章讲述了过程抽象,将函数作为参数和值进行传递,组合和构造的技巧,高阶函数使用值代替了具体的运行过程,不断复用和组合的过程中,调用者完全可以不去考虑底层的实现细节,只需要确定会得到确切的值或者过程,就可以在基础之上构建及其复杂的运算过程,而不会增加太多的智力负担。
第二章描述了数据抽象,实际上这一部分可以作为对编程范式这个话题的参考,不同的编程方式,过程化,面向对象,函数式都是由对数据抽象的方式的不同而分类的,而数据抽象的核心也是隐藏内部细节,包括数据和行为,内部数据的相互组合带来的行为和输入输出的变化对于外部都是完全不可见的,是一个彻底黑色的盒子,而这些拥有不同组合的数据和行为的内部作用将为开发者带来非常丰厚的报酬,这通常意味着可以使用简单的思维处理及其复杂的程序行为,它强大的威力对于不理解这个抽象过程的人来说是无法想象的,无论一个程序的代码是十万行还是100万行,假如每一层封装都是合理设计的,那么对于使用者来说,这些代码提供的复杂度会变得更小,封装和抽象的本质是为了更简单,而在简单的基础上就可以继续向上封装来构建更加复杂的程序,直到一个程序变得无比复杂和完善,而每一个层次都是基于上一个复杂度被降低之后的层次,这就像魔法一样,一个表面意义上简单而强大的功能依赖于及其复杂的内部细节,合理分层和组合处理这些内部细节的方法,就达到了抽象的目的。
第三章则回归了传统的和正常意义上的人类理解世界的思维上,描述了状态,赋值,在这个层面也说到了关于降低复杂度的另一个思路,分而治之,模块化的思想,每一个模块依赖它的内部状态和求值环境实现具体的功能,这是一种符合人类普遍思维习惯的程序设计模型,最后一节则再次回到了函数本身,惰性计算给数据的描述带来了了非常大的便利,把数据和过程糅合到一起,会产生非常多的神奇力量。
第四章则是到了抽象环节中核心的部分,为某一个特定的领域编写一个解释器,也叫元语言抽象,最底层的抽象就是从语言方面,因为已经将使用者和开发者彻底隔离,使用一门语言更像是在跟计算机对话,而不是和语言的设计者对话,假如这门语言的设计是优秀的,那么使用者不必知道任何除了关于语言实现层面的任何细节 ,在此之上构建新世界与之前的世界是完全隔离的。

你可能感兴趣的:(我的lisp学习心得和体会第二篇)