计算机程序的关键要素,计算机程序的构造和解释之笔记(一)

缘起

这是一本MIT的本科教材,回想自己读本科的时候一直想读这本书,大概读了10页左右就放弃了。后面读研了读了第一章,做了一定习题,但是仍旧放弃了。其中,原因就不说,看来我也是拖延症患者。后面工作了,深感自己对事物抽象能力的弱,以及对自己没能够坚持做一件事情而痛恨自己。所以开始看SICP一书。

关于本书的书评

关于这本书的评论,这里就不多说了,再着不管什么样的书,只有自己去读去用才知道。总之,对于本书的评论两极分化,至于是哪一级,各位自行判断,我这里仅仅提供一些其他相关的评论,如下:

构造过程抽象概述

开始的时候就引用了John Locke的《有关人类理解的随笔》中的一段话,话语十分简洁而且让人受益,现在摘抄如下:

心智的活动,除了尽力产生各种简单地认识之外,主要表现在如下三个方面:

将若干简单认识组合为一个复合认识,由此产生出各种复杂的认识;

将两个认识放在一起对照,不管它们如何简单或复杂,在这样做时并不将它们合二为一。由此得到有关它们的相互关系的认识;

将有关认识与那些在实际中和它们同在的所有其他认识隔离开,这就是抽象,所有具有普遍性的认识都是这样得到的。

从上面这句话至少可以看出,我们认识事物或者对某件事情的理解可以通过组合、对照(比对)、抽象隔离等思维手段搞定。而第一章中关于《构造过程抽象》一章就是基本就是围绕上面这段话写。

基本要素

当我们需要解决工作上、学习上还是生活上问题时,往往需要知道一些基本的步骤,除非特别简单的问题可以一步搞定,否则需要将很多措施组合一步一步的解决。在程序设计的世界,需要处理两样东西:数据和过程。与现实世界中得问题和措施很像吧。想想我们在解决问题时候是不是运用了同John Locke描述的心智活动。在用程序解决问题也是一样的,如何去描述数据和对其操作的过程呢,毕竟计算机不懂我们所说的中文,它们之间沟通也有这一套语言,而这些语言必需有着三个基本元素:

基本表达式:用于表示语言所关系的最简单的个体;

组合的方法:通过它们可以从较简单地东西出发构造出复合的元素;

抽象的方法:通过它们可以为符合对象命名,并将它们当作单元去操作。

过程抽象

在有了基本要素之后,就相当于我们有了一些基本的工具了。在我们面对比较难或者大问题时,自然而然会采取分解的动作来解决,就如同“大事化小,小事化了”。如何将大事变成小事,作者使用了求某个数的平方根问题来说明,将解决此问题的步骤进行分解,并且每一个过程完成了一件可以清楚标明的工作。这就是过程的抽象。

当我们采用方案去解决问题的时候,就需要评估方法的时效性了。现实世界考虑的比较多,比如时间、人力、资金等等。一旦涉及到人的活动就会变得复杂起来。而计算机的世界里,简化了很多,考虑时间和空间。毕竟人们关注机器啥时候给我干完活,啥时候出结果,我们需要投入什么硬件啥的。在我们学习数据结构或者算法的时候都会使用一个叫大O的方法来描述。而书中都是直接根据步骤或者分析程序来来推导,极为繁琐。而本书的作者却采用先描述过程的计算过程,也就是过程是怎么执行的,执行的形状是啥,比如,线性、递归(先展开后缩)、树型来描述,这一点超级棒,让人看着舒坦。

知道时效之后,我们就会想能不能将解决问题的技巧推广,就会去抽象、概括。后面作者求函数的零点、不动点一步一步介绍如何将过程作为参数(如同生活中的条件)、返回值(如同其他的帮助)。

结束

总之,我挺喜欢这本书,现在一直在看,最近刚把第一章看完,书上的demo也罢还是课后习题都写在我们电脑里面测试一番了。具体可以参考我的sicp项目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值