Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1090191
  • 博文数量: 104
  • 博客积分: 3715
  • 博客等级: 中校
  • 技术积分: 1868
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-30 08:38
文章分类

全部博文(104)

文章存档

2013年(1)

2012年(9)

2011年(41)

2010年(3)

2009年(3)

2008年(47)

分类: Python/Ruby

2011-09-25 14:20:36

什么是计算机科学?在看了SCIP的vedio lecture1A之后,真是有了新的认识。就像Hal Abelson所说,计算机科学是个很”糟糕“的名字:
        首先,”它“不是科学(science),它更接近是一种工程学(engineering);
        其次,”它“和计算机没有那么大的关系,计算机只是”它“使用的一个工具,就好像物理学不是学习怎么使用粒子加速器,或者几何学不是学习怎么使用测量工具一样。

        以几何学类比。它最初确实是在做测量,尤其是土地的测量。但是,随着后续的发展,测量与测量工具逐渐变成了辅助的,不那么紧要的东西。几何学更重要的是在研究”空间(space)“和”时间(time)“。几何学精确的定义、说明了什么是空间。使用几何学的术语,人们可以准确地针对空间进行交流。几何学提供的是一种”声明式(declarative)“的知识,即,它在说明”什么是XXX(what is)“,例如,”什么是X的平方根“。

        那么我们口中的计算机科学到底是什么?我们可以从两个角度来理解它。
        第一,它研究的是”处理过程(Process)“。在这方面,它在精确的定义、说明怎么样完成一件事情。使用计算机的术语,人们可以准确的针对做一件事情的过程进行交流。计算机科学提供的是一种”命令式(imperative)“的知识,即,它在说明”怎么做XXX(how to)“,例如,”怎么计算x的平方根“。这也是我们对算法的定义。计算机科学使用程序设计语言来精确地描述这些命令式的知识。任何一个程序设计语言,我们都可以从以下三个方面来考察它:
  • 它提供了哪些原子(primitive,包括数据和procedure);
  • 它提供了哪些组合这些原子的方式;
  • 它提供了哪些抽象方式,使得复杂的“组合”可以被方便的命名、使用,就像内置的原子一样。

        第二,计算机是一种工程技术,我们在用这个技术建造及其复杂的系统。这些系统是思想(ideas)的系统,而不是实际的某个物理系统,它们仅仅受到思想的制约。计算机科学关注的第二个方面,就是”控制复杂度的技术(Techniques of Controlling Complexity)“。在计算机里面,常用的控制复杂度的技术包括以下三个:
  • 抽象(black-box abstraction):我们不断地将系统的一个部分做抽象,将它抽象成一个有确定行为的实体,通过抽象掩盖实现它的细节。例如,我们可以把求x平方根的算法抽象成一个实体。在建造更大的系统的时候,你不需要知道这个实体是如何实现的,只要知道它能求平方根就可以了。我们通过一层层的抽象,来控制每一层的复杂度。
  • 公约的接口(conventional interfaces):这一层主要的思想是模块化,每个模块通过确定的接口与其它部分进行交互。面向对象思想和逻辑编程的思想是两种重要的接口公约的形式。
  • 语言(metalinguist abstraction):通过为问题抽象、定义新的语言,来达到掩盖不重要的方面,突出另一些重点关注的方面的目的。    

        强烈推荐一下SICP及其vedio lectures。假如能够在刚刚开始学习计算机的时候,接触到这种课程,那是多么幸运。只可惜,7年前我错过了,我只是学习了一个讲C语言的计算机入门课程。
阅读(1641) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

firocu2012-12-17 13:54:04

赞,我喜欢这些对于本质的研究。同勉未能早遇SCIP,我也是c语言入门的。学校老师也没有用心教,都在走形式。。。。。恨死自己了。