现在的位置: 首页 > 综合 > 正文

SICP—-课程预备知识

2019年03月02日 ⁄ 综合 ⁄ 共 1895字 ⁄ 字号 评论关闭

这本书要关注的三类对象是:人的大脑,计算机程序的集合,计算机本身。这也是我们进行大规模问题规划要关注的三样东西。

每个计算机程序都是人的大脑中的某个思维模型的体现。但是却几乎从来都不是完美的体现,因为在从思维向计算机程序的转化过程中,总是有些无法实现的地方或者在这个过程中我们会自己发现一些不够完美的地方。而这也正是计算机程序设计领域令人兴奋和着迷的地方:在这个从思维向程序的转化中总是伴随着绵绵不绝的发现和进步,有些进步和发现让我们惊叹和敬仰,这就是程序设计的魅力所在吧。

如果说艺术解释了我们的梦想,那么计算机就是以程序的名义执行他们。

关于编程语言,一条有用的组织原则就是通过发明新的语言,去控制和隔离作业模块之间的信息流动。这些语言趋向于变得愈来愈不基本,逐渐逼近系统的边界,逼近我们作为人最经常与之交互的地方,作为这一情况的结果,在这种系统里包含着大量重复的复杂的语言处理功能。计算机语言的发展趋势是越来越脱离硬件的基本控制,而变得越来越抽象,即是越来越接近人的语言,但是这也会引发很多的问题,同硬件的脱离,意味着什么呢?


就像这门课的开始所说的,计算机科学并不是一门科学,而且其重要性和计算机也并无太大的关系。计算机革命是有关我们如何去思考的方式以及我们如何去表达自己的思考的一个革命。在这个变化里面最基本的东西,就是出现了这样一种或许最好是称为过程性认识论的现象----这就是如何从一种命令式的观点去研究只是的结构,这一观点与经典数学领域中所采用的更具说明性的观点完全不同。

即是下面所说的过程性知识和说明性知识。


说明性知识和过程性知识

说明式知识(是什么)
有关事实和情况的说明
实例:即是解释做什么的,问题是什么
过程式知识(怎么做)
有关完成某件工作的一系列步骤(操作)的描述
实例:问题的解决方法,具体的怎么做

而随着计算机科学技术的发展,过程式知识变得越来越重要, 其中算法:过程式知识的精确化,与适当信息表示形式结合解决问题以及二进制编码的普适性,与过程式知识结合,借助于电子计算机作为
基本工具,形成了一套具有普适性的全新的问题解决模式而软件开发工作就在说明式与过程式知识的结合点上,
从说明式知识出发,开发过程式知识

程序设计的主流是命令式 (imperative) 程序设计,计算基于一组基本操作,在一个环境里进行。操作效果是改变环境的状态,体现在所创建和修改的状态中:

函数式和命令式程序设计

函数式 (functional) 程序设计中计算过程被看成是数据的变换,程序的行为就是对数据的一系列变换:可称为程序(和程序设计)的命令式观点和函数式观点

(常规)程序以命令方式描述计算优点是:‰ 层次较低,接近(容易有效利用)实际硬件(计算机),可能高效‰但是编程时需要关注更多细节,复杂,很容易出错
„而函数式程序设计层次较高,优点是更抽象,屏蔽计算的更多实现细节,程序可能更清晰但是同时意味着与实际硬件距离较远,需要复杂的运行时支持,可能效率较低

不过在编程中命令式思维和函数式思维都有价值,在不同抽象层次,需灵活使用对程序的命令式思维和函数式思维,程序的工作常可分解为一些阶段,每个阶段是对整体数据空间的某种变换(函数式的),„ 而每个变换又是通过复杂的状态操作实现(命令式的)。

Scheme语言

关于课程的Scheme语言,他是Lisp语言的一种方言,而Lisp 是函数式语言之祖,许多新语言从中汲取营养具体可以参见这篇文章,http://www.suool.net/index.php/startup_lisp/,而了解
Scheme 有利于理解今天和明天的编程语言,Scheme 可以很好表现程序和程序设计中的许多问题。

Scheme 能自然地支持许多威力强大的编程技术,许多技术有一般性,可能在其他语言中使用或模拟,Scheme 不是纯函数式语言,为了效率和对计算的控制,提供了命令式特征(状态操作)。

学习它有助于理解另一种编程思维,及在两种思维和编程方式间权衡和转换,在这里学到的技术可能用到其他地方。课程中将讨论一些技术在常规语言和编程中的应用可能性,相互关系主流语言已经并将继续从函数式语言中汲取大量营养:基于运行栈的实现技术,递归,动态存储分配,废料回收(垃圾回收) 表处理的问题和技术(Lisp 的核心数据结构)动态操作指派(方法的动态约束,面向对象语言的基础)虚拟机、字节码、动态编译(Java, C# 等)lambda 表达式,……
学习函数式程序设计(包括 Lisp 类语言程序设计),有助于掌握如何在较高抽象层次上思考计算问题和程序问题,丰富看程序和程序设计的角度和观点,可能把程序设计中的一些基本问题看得更清楚。

抱歉!评论已关闭.