跳转至

CS61A: Structure and Interpretation of Computer Programs

  • 开设学校:UC Berkeley
  • 涉及语言:Python, Scheme, (SQL)
  • 课程页面:cs61a.org

看之前强烈推荐阅读飞猪写的前言以及关于CS61A的推荐部分,为了防止文章内容过于繁杂,飞猪写了的部分,本文不会进行赘述。

内容介绍

个人认为,CS61A最最最鲜明的特点就是,他是一门基于编程语言本身的入门课,这门课,有很多基于编程语言本身的骚操作(比如程序也是数据)抽象是这门课的最重要的特点。与其说是教你某种语言,不如说是以某种语言为载体,教你编程语言中的通性与设计逻辑。

教的东西非常非常多也比较有趣,比如他在课上教你,为什么不存在一个程序,他可以判断出任何一个程序是死循环或者是可执行完毕的,从而引出没有完美的杀毒软件,~~蛮有趣的问题,可惜和语言没啥关系。 ~~这就是编程语言的问题。(停机问题)

这里直接贴一段别人对CS61A的介绍,非常的简练。

CS61A介绍了编程和计算机科学,重点是抽象技术作为管理程序复杂性的手段。技术包括过程抽象;使用递归、高阶函数、生成器和流控制抽象;使用接口、对象、类和泛型操作符进行数据抽象;以及使用解释器和宏进行语言抽象。该课程向学生提供编程范例,包括函数式、面向对象和声明式方法。它包括对算法的渐近分析的介绍。有几个重要的编程项目。

在课程的project4你会写一个scheme语言的解释器(这个项目吹爆)可以说是对教学内容的一个最好总结了。

再次强调,这门课不是一门单纯的语言课,如果你想当程序员的话,学61A是非常有必要的(可能也不是那么有必要,个人意见),但如果你只想学习一门语言课,不想以后在这个方面有所进展的话,那么61A是没有必要学的。

时间开销

飞猪给出的课时估计是50个小时(此乃神人也.jpg)

但实际上的时间花销应该是200小时比较合理一点,大部分群友也都认为50个小时收掉CS61A是比较不大可能的。

就我个人而言,我花了2个月的时间来学这门课,最终的用时大概在200小时左右。

所以这门课如果你是纯新手的话,200h是比较正常的。

学习建议

不要慌 -- jyy

实践是非常重要的,我上课和做练习的时间大概是1:5,lab和project才是这门课的灵魂。

总而言之一句话,千万不要只刷课不谢作业,UCB的配套作业,只要你跟着写完并且尽量不去参考答案,一定是可以收获一个非常宝贵的经历的。

CS61A是一门有深度的入门课,其中介绍的大部分概念都是一个很深的巨坑,建议记一点笔记,许多概念我现在都没有完全的理解,有时还会回去翻翻 0.0

没有完全理解的话,可以尝试去理解一下,要是实在理解不了就算了吧。

部分零碎的建议点放到最后提。

个人心路历程

稍微分享一下自己的心路历程,希望可以帮到你。

高中的某人,不知天高地厚,觉得编程非常简单,在高考考完的那个暑假他直接想干CMU-213,收掉CSAPP,然后去开蒋炎岩老师的OSlab(因为他只知道这些东西),后来学CSAPP的时候。他发现自己看不懂代码,而且

全英文界面着实可怕。(是这个样子的)

不要慌 -- jyy

于是接下来他就按着他人的建议参考飞猪的前言开始了CS61A的学习。

现在回过头来不由得感叹一句,外国顶尖大学的教学体系真的比国内大学要好太多了,而CS61A就是这个这个感叹的最好体现。

老实说,我一开始学的时候一直在怀疑,CS61A有这么好吗?(我看的版本是sp21(21年春季学期) 由Paul Hilfinger教授,老教授的知识十分渊博,但上课上的真的是有点无聊....以至于我差点弃课)

但到了上课上到中期,我觉得他真的是一门好课。看到后期,我深深的被他折服。

所以请相信CS61A,请相信大家的口碑。所有的神课只要你上到后面,你一定会发现他厉害的地方的。

建议完全没有编程基础的人,而且跟不上的人,去上CS50,CS50的内容大概占到了CS61A的50%~60% -- Paul Hilfinger

评价

  1. 课程质量非常高,这个高主要体现在练习以及project,教sp21的老教授确实有点老了,看的出来知识很渊博?(听说61A John教的版本经典一点)
  2. 对于我们这些新手而言,作业难度比较大,但是不是做不到!难度梯度的设置是非常合理的,UCB在这个方面做的一直非常非常的出色。
  3. 作业建议完成所有能完成的,而且不要忽略disc

零碎的学习建议与比较重要的资源

评论