在从2月下旬到现在,我用课余时间里学习了sicp的第一章和熟悉了最基本的一点scheme
编程。写几句关于这些天学习和做题的体会。
1。进度
现在的进度是完成了第一章和作业。按照具体的页数和题数所占的比例,大概完成量分别
是全部的内容的15%和13%(全书5章,300-400多题)。但如果考虑前面都是一些基础的
预备知识,难度很低,而有难度的内容应该是在后面,那么整体工作的完成量实际很少,
应该还不到10%。
2。难度
第一章的内容基本上都是预备知识,倒没遇到什么很难的问题。昨天遇到一个高手,请教
了一下。他对于sicp的评价是这样的,他说第一章是本来就是很简单很基础的,而第二、
三章则开始有趣了,第四章不仅有趣而且涵盖面很广,第五章则在智力上有相当的挑战性。
大概是内容相对简单的原因,我在学习第一章的时候,总是觉得不太能钻进去,定不下心,
很容易分心,效率实际上很低。所幸是给了自己硬指标--完成所有习题,所以总算还有
点约束,能够凑合着往前学。
3。速度
最麻烦的就是这个问题。一方面觉得内容不是很难,一方面速度又提不上去,效率极其低下。
很多时候,眼睛看着屏幕,脑子什么都没进去。大概可能有几个方面的原因:
(1) 如上所说,第一章内容相对简单,容易造成走神
(2) 英文水平不行,看英文书没什么耐性
(3) 盯着屏幕效率低,不像看纸板书。但这里也有个问题,sicp的习题很多,往往做题
的时候需要在机器上测试。即使我有纸板书,也可能还是要坐在计算机前面,所以好像有
纸板书也没办法。总的来说,没耐性大概是低效的主要问题,而上述原因都是造成没耐性
的各种外界因素。速度之慢,远超出我的估计。本来以为第一章是基础内容应该很快搞定的,
没想到拖了这么久。如果算目前的进度是不到10%的话(这两天还算闲),那全部搞定岂不
是要一年?必须在后面的学习中有意识地提高效率!
4。材料
惭愧,目前我学的内容还只是课本和习题,左边链接里的课程录像和课件一点都没看。要是
再看这些东西,不知道我的第一章要什么时候才能完成。不过我还是很想看那个作者的授课
录像的,因为上课的时候,老师总会带这讲到一些书上没有而很重要很精彩的内容。以后有
时间的吧。
5。内容
根据我学习第一章的感受,sicp确实是非常适合初学者,MIT把它作为入学新生的第一门课
确有道理。按照定位,sicp主要是关于programming language的,而在第一章里,它
用了相当篇幅来分析算法复杂度,尽管这个内容会在以后的算法课上讲,但在刚开始学习
程序设计的时候就给你复杂度的概念,不仅有利于今后的算法课学习,而且有助于帮助
你在一开始就确立关于程序设计的正确意识,明白不是程序写出来能工作就行了,有很多
其他的因素也很重要,这对初学者很有帮助。而且在第一章里,举的例子居然大部分用的
是数值算法(比如如何算pi,如何算方程的根等等,如何用计算机求导),这是给初学者明
确数值计算的概念,这相当于告诉初学者,计算机的某些算法,不一定是用来计算确切值的。
与此同时,舍入误差等相关的观念也就顺便讲了。而往往我们的计算机教学,甚至是计算机
科班,往往在开始一段时间都用的例子100%都是用确切的算法在离散对象上工作(包括数据
结构的操作,树、表这些,结果都是确切的,百分之百的等于关系)。Clean是够clean,
但以至于很多学计算机的同学很久以后才有数值计算的概念,不知道如何求pi,以为它们都
是系统提供的常数;不知道如何用计算机求导数,以为方法是像人手工计算那样先找到导数
函数是什么再代入。而反倒是常用计算机进行数值计算的电子系/数学系/物理系等其他系
的同学对这些的认识清楚的多。从这些方面确实可以看出sicp的作者是非常有意识地在为
一些刚刚开始学习计算机的初学者写的,一方面确立对于程序设计语言的认识,另一方面也
在用心为很多后面的其他课程打一些概念基础。第一章没有用到高中以上的数学知识,估
计后面也是,也就是说高中理科生和大学新生中的计算机初学者完全可以学习这本书。另外,
scheme的交互式解释器要比C之类语言的编译器对于新手容易上手得多,定义一个函数了,
当场就可以代入不同的参数测试结果,不需要存盘编译、不需要用printf打印测试值,随时
编写,随时evaluation,完全交互。
6。习题
大概就是做完了,如果发现什么问题,请给我留言,我还会修订。习题解答保留版权,但在
全文不变的前提下允许任意转载。
7。交互
目前很少有人来,更少人留言或者对题目内容进行讨论。或许是刚开始的原因,希望能在这
里认识更多的朋友。
--
code17