`
kidneyball
  • 浏览: 328987 次
  • 性别: Icon_minigender_1
  • 来自: 南太平洋
社区版块
存档分类
最新评论

SICP读书笔记 (1)

阅读更多
关于SICP

SICP,Structure and Interpretation of Computer Programs,计算机程序的构造和解释,是美国麻省理工学院(MIT)的计算机科学(CS)与电子工程(EE)本科的一门必修课。这本书在1984年出版,而自从1980年开始,20多年来此书的内容一直是MIT的计算机编程入门课程,并且被世界各地百余所大学效仿。SICP是基于LISP语言展开论述的,直到2008年,才被另一门基于python语言,但原理相同的课程(MIT 6.00 Introduction to Computer Science and Programming)取代( http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/ )。

许多人,特别是已经有命令式风格编程基础的人,在第一次拿起这本书随便翻翻时,第一印象是觉得这本书是讲述一种语法怪异,包含大量括号的新奇语言和算法与数学原理的书。08年初,师傅强烈推荐我看这本书时,这就是我对此书的全部感觉。焦头烂额地看完前三章后(师傅说重点看前三章),总有一种似懂非懂的感觉。虽然,书中的知识对我后来学习和使用函数式编程,以及JavaScirpt、Python时起到了很大作用,网上有很多童鞋把此书作为函数式编程和LISP的经典读物,如果你说自己是搞函数式编程的而又没看过SICP,你都不好意思跟人打招呼。但总觉得此书的精粹不在于此,作为计算机系必修的导论课程,不应该把视角放在某种固定的编程范式和某种特定的语言上。试想一下,20多年来,世界各地的本科生冲上来劈头盖脸就是函数式编程和LISP。学这门课前,他们中很多人还是用两个手指头打键盘的菜鸟,却要面对一本有多年编程经验的人都看得焦头烂额的的课本。学这门课后,他们很多在实际工作中再不会使用函数式编程和LISP。那么MIT要求学生们必修这样一门课意义何在?20年后,MIT用python替换了lisp,却认为新课程与原来的课程能达到同样的效果,那么这两门课程的共性是什么?

最近跟师傅喝酒,他再一次建议我好好再看一次SICP。三年前他说,你现在还是看山是山,看云是云的阶段,等哪一天你看山不是山了,看云不是云了,就算是看懂了。正好,最近看了一本《软件随想录》,其中“Java语言学校的危险性”一章说道:

“对于许多计算机系的青年学生来说,另一门有难度的课程是有关函数式编程(functional programming)的课程,其中就包括递归程序设计(recursive programming)。MIT将这些课程的标准提得很高,还专门设立了一门必修课(课程代号6.001[2]),它的教材(Structure and Interpretation of Computer Programs,作者为Harold Abelson和Gerald Jay Sussman Abelson,MIT出版社1996年版)被几十所、甚至几百所著名高校的计算系机采用,充当事实上的计算机科学导论课程。(你能在网上找到这本教材的旧版本,应该读一下。)

“这些课程难得惊人。在第一堂课,你就要学完Scheme语言的几乎所有内容,你还会遇到一个不动点函数(fixed-point function),它的自变量本身就是另一个函数。我读的这门导论课,是宾夕法尼亚大学的CSE 121课程,真是读得苦不堪言。我注意到很多学生,也许是大部分的学生,都无法完成这门课。课程的内容实在太难了。我给教授写了一封长长的声泪俱下的Email,控诉这门课不是给人学的。宾夕法尼亚大学里一定有人听到了我的呼声(或者听到了其他抱怨者的呼声),因为如今这门课讲授的计算机语言是Java。

“我现在觉得,他们还不如没有听见呢。

......

“除了上面那些直接就能想到的重要性,指针和递归的真正价值,在于那种你在学习它们的过程中,所得到的思维深度,以及你因为害怕在这些课程中被淘汰,所产生的心理抗压能力,它们都是在建造大型系统的过程中必不可少的。指针和递归要求一定水平的推理能力、抽象思考能力,以及最重要的,在若干个不同的抽象层次上,同时审视同一个问题的能力。因此,是否真正理解指针和递归,与是否是一个优秀程序员直接相关。

“...Java语言学校的教学也还是失败的,因为学校没有成功训练好学生的头脑,没有使他们变得足够熟练、敏捷、灵活,能够做出高质量的软件设计(我不是指面向对象式的"设计",那种编程只不过是要求你花上无数个小时,重写你的代码,使它们能够满足面向对象编程的等级制继承式结构,或者说要求你思考到底对象之间是"has-a"从属关系,还是"is-a"继承关系,这种"伪问题"将你搞得烦躁不安)。你需要的是那种能够在多个抽象层次上,同时思考问题的训练。这种思考能力正是设计出优秀软件架构所必需的。

( http://www.ruanyifeng.com/blog/2008/12/the_perils_of_javaschools.html )

原来如此,SICP的目的,并不是教会我们如何去用LISP实现具体的算法,而是指导那些具有基本数学能力的学生,如何对“计算过程”(Computational Process)进行抽象,而具体的算法和LISP语言,只是作为一种示例,一种展开论述的工具而已。并且,SICP的内容设置,采用了从无到有的思路来阐述编程语言的设计。换句话说,它不像其他教授具体编程语言的书籍那样,先假定某种语言已经合理存在,冲上来就开讲数据类型,关键字,语法。而是从数学算法与程序设计的原始需求出发,逐步讲述为了实现这样的需求,编程语言应该提供什么样的特性。只要抓住这些具有普遍性的关键需求,在学习任何一种新的语言时,就有一个基本的脉络可循。反过来,在设计任何程序、开发框架,或新的语言时,也可以从这些计算过程的基本要素上去展开思考。从这种思路出发再去读SICP,果然觉得原本一些淹没在具体算法和语言特性中的文字,会更加清晰起来。

相关资料
在线全文(英文): http://mitpress.mit.edu/sicp/full-text/book/book.html
chm全文(英文): http://chanson.iteye.com/blog/287235
pdf中文版全文:http://ishare.iask.sina.com.cn/f/5595185.html
中文版翻译一般,一些关键语句翻译不到位,最好结合英文版一起看。

MIT 6-001课程主页(含SICP在线文本,讲授视频):http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/
优酷在线视频:http://www.youku.com/playlist_show/id_4307703.html
由原书作者讲授,视频比较模糊,有一节(4b)课前半段音频录得不清。目前网上没有完整的字幕(只有第一集)

MIT 6.00课程主页(2008年新课程,基于python,含教学视频):http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/
优酷在线视频:http://www.youku.com/playlist_show/id_4209207.html
视频和语音都很清晰,但课堂上操作演示的投影比较难看,课程主页上有完整视频语音文本。讲师很有趣,学生答对题目了会扔给他一颗糖。

加利福尼亚大学SICP讲课视频(很长):http://webcast.berkeley.edu/course_details_new.php?seriesid=2008-D-26263&semesterid=2008-D

一个以色列人的读书笔记:http://eli.thegreenplace.net/category/programming/lisp/sicp/

编程环境
Racket:http://www.racket-lang.org/   (一个工业级的LISP环境,对于SICP书中的一些高级例子可能不兼容)
MIT Scheme:http://mitpress.mit.edu/sicp/scheme/index.html  (MIT的教学环境,可以完美运行书中的例子)
分享到:
评论
1 楼 whg333 2011-07-12  
多谢提供这么完全的资料~

相关推荐

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh

    SICP中文第二版

    SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版

    SICP.part1.rar

    SICP.part1.rar SICP.part1.rar SICP.part1.rar

    sicp_notes:SICP笔记和练习

    《SICP笔记和练习》是一份详尽的资源,主要涵盖了由MIT教授们编写的经典计算机科学教材《Structure and Interpretation of Computer Programs》(简称SICP)的学习笔记和练习解答。这份资料以HTML格式呈现,便于在线...

    sicp 2.2.4节图形语言

    《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...

    SICP-Python版本

    SICP-Python版本

    SICP(python中文带书签)

    《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)是一本备受推崇的经典计算机科学教材,由Harold Abelson和Gerald Jay Sussman撰写,并由MIT出版社出版。这本书以其深入...

    SICP 使用的scheme解释器

    SICP 使用的scheme解释器 以前叫DrScheme

    SICP 解题集

    1. **函数式编程**:SICP强调使用函数而不是改变状态来解决问题,这使得代码更易于理解、测试和维护。函数式编程的关键概念如高阶函数、闭包、惰性求值和柯里化在解题集中会被广泛应用。 2. **Lisp语言**:SICP主要...

    北京大学,计算机程序构造和解释(SICP)课件,裘宗燕老师主讲

    1. **基本编程概念**:包括变量、数据结构(如列表、树)、控制结构(条件语句、循环)、函数定义与应用等。 2. **过程和数据抽象**:讨论如何使用函数来封装复杂操作,以及如何通过数据结构表示复杂数据,从而实现...

    SICP 习题答案

    《计算机程序的构造和解释》(SICP)是一本极具影响力的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,MIT出版社出版。这本书以其深入探讨编程概念、程序设计方法以及计算机系统的工作原理而闻名。1-3...

    Python SICP epub版本

    Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用

    SICP习题解答,主要第一章的内容习题答案

    1. **1.6.ss**: 这部分可能涉及到函数定义、递归和过程抽象。SICP的第一章通常会介绍Lisp语言的基础,包括如何创建基本的函数,如何使用递归来处理数学问题,以及如何通过过程抽象将重复代码封装起来,提高代码的...

    SICP LISP AI

    1. **过程和数据**:书中首先介绍了过程(函数)作为基本的抽象机制,以及如何将数据结构视为可组合的过程。这种观点改变了我们看待计算问题的方式,强调了将复杂问题分解为简单过程的重要性。 2. **环境模型**:...

    a_book_sicp_py

    1. 编程语言的重要性:在计算机科学的宽泛领域中,编程语言扮演着至关重要的角色。它不仅用于定义计算过程,还用于指导计算机执行特定的任务。优秀的编程语言能够使复杂的逻辑变得简洁明了,易于理解和实施。 2. ...

    sicp-memo-ans:SICP笔记和答案

    笔记 如果你想在 gauch 中使用随机函数 (use math.mt-random) (define m (make <mersenne> :seed (sys-time))) (mt-random-integer m 1000) (define (random n) (mt-random-integer m n)) 使用。 另外,如果你想...

    PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz

    标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...

    sicp-Structure and Interpretation of Computer Programs

    ### SICP——《计算机程序的结构与解释》 #### 一、概述 《计算机程序的结构与解释》(Structure and Interpretation of Computer Programs, 简称SICP)是一本由MIT电气工程与计算机科学系教授Harold Abelson和...

    sicp in python 中文版 sicp

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh

Global site tag (gtag.js) - Google Analytics