SICP0:序,前沿的笔记

来源:互联网 发布:linux boot分区大小 编辑:程序博客网 时间:2024/05/16 11:53

昨天晚上花了一点时间,读了SICP的序和前言部分。做以下简单的纪录。这两天,我连续上了UCB的SICP课程的前两个Lecture,也花了点时间看了一下MIT的OCW的相关信息,并下载了所需要的资料。

发现很多学校,特别是MIT,UCB,Standford等这些名校都是采用SICP作为计算学科学低年级本科生的入门教材,他到底有什么特殊之处呢?所以我花了一点时间重读了SICP的序和前言,总结如下:

 

你需要读或者写计算机程序,而且需要大量的做。与程序重要的是,他们的性能如何,在用于构造更大的程序时,能否与其他程序平滑衔接。

 

程序设计所关注的是:程序的创建,执行,和研究。

 

三类关注的对象:人的大脑,计算机程序的集合,以及计算机本身。

 

程序应该不断的修改,直至这一模型最终达到一种亚稳定状态。

 

惯用法:因为大程序是从小东西成长起来的,开发出一个标准化的程序结构的武器库,并保证其中每种机构的正确性。再学会如何利用一些已经证明很有价值的组织技术,将这种结构组成更大的结构。

 

(最小的物理开关元件在量子力学里建模,量子力学又是一组微分方程描述,微分方程的细节行为可以由数值区近似,这种数据近似又由计算机程序所描述,计算机程序的组成...)

 

程序的最佳行为的两个参数:执行的时间,和对数据存储的需求。(算法和惯用法)

 

Pascal是为了建造金字塔:是由各就其位的沉重巨石筑起的静态结构。

 

Lisp是为了构造有机体:由各就其位但去永不停止的无数简单的有机体片断构成的动态结构。Lisp程序大大的抬高了函数库的地位。作为Lisp的重要数据结构:表对于这种可用性地提升其中重要的作用。

 

 

第二版前言:

计算模型里对于时间的处理所起的中心作用:带有状态的对象、并发程序设计、函数式程序设计、惰性求值、非确定性程序设计

 

第一版前言:

马文明斯基的小提琴比喻。

 

MIT的EECS的四门公共核心课程:SICP,两门电路和线性系统,数字系统设计。

 

为什么设立?

建立一个看法:一个计算机语言并不仅仅是让计算纸去执行操作的一种方式,各重要的是,它是一种表达有关方法学的思想的新颖的形式化媒介。因此程序必须写得能够供人们阅读,偶尔的去供计算机执行。

其次,我们相信,在这一层的课程里,最基本的材料并不是特定程序设计语言的语法,不是有效计算某种功能的巧妙的算法,也不是算法的数学分析和计算的本质基础,而是一些能够用于控制大型软件系统的智力

复杂性的技术。

 

通过创建抽象去控制性复杂性

创立约定的界面,以便能以一种混合和匹配的方式组合起一些标准的已经很好理解的片段,去控制复杂性。

建立一些新的语言去描述各种设计,每种语言强调设计中的一个特定方面并降低其他方面的重要性,以控制复杂性。

 

计算机科学并不是科学,而且其重要性也与计算机本身无太大关系。计算机革命是有关我们如何去思考,以及我们如何去表达自己的思考的一个革命。-----过程性认识论的现象。如何从一种命令式的观点去研究知识的结构。数学为精确处理是什么提供了一种框架,而计算则为精确处理怎么做的概念提供了一种框架。

 

Lisp的优点:

更多的能用于以模块化的方式分解程序的大规模战略,

我们可以做过程性抽象和数据抽象。

可以通过高阶函数抓住公公的使用模式。

可以用赋值和数据操作去模拟局部状态,

可以用流和延时求值连接七亿个程序里的各个部分

可以很容易的实现嵌入式语言。

 

Scheme从Lisp语言那里取得元语言的威力,简单的语法形式,程序和数据对象的统一表示,带有废料收集的堆分配数据。

从Algol取得词法作用域,和块结构。

 

致谢:

本课程是有关程序设计语言学和Lambda演算的一门美妙课程,MIT的EECS强调工程设计的原理。

 

"应该避免控制中的复杂性,将精力集中到数据的组织上,以反映所模拟世界的真实结构"

 

"计算是一种探索各种表达思想的表达方式和手段"

 

"程序设计有许多乐趣,应该认真的支持程序设计的趣味性。"