My learning experience of CS61A
这门课是UCB面向大一新生的第一门计算机课程,适合于计算机初学者或是从未接触过相关知识的学生学习,主要使用Python进行教学,此外还会使用LISP的方言Scheme的语法和非常基础的SQL用法,教授内容以abstraction为核心,还包括高阶函数、递归、迭代器和生成器、面向对象编程(OOP),模块化处理等,涉及的知识范围较广,但总体上来说还是一门计算机导论课程,不会对这些内容进行深挖,因此难度不会过高,也不必带有畏难心理。
-
课程设计优秀。如同其他国外优质网课一样,CS61A同样有自己的网站,为学生提供了丰富而优质的学习资源,playlist, lecture, reading, lab, discussion, homework, project 等等,能够帮助学生从了解知识逐步过来检测渡到真正掌握知识。
-
使用ok本地测试。许多国外课程使用gradescope在线测评提交的答案,但我们作为国内学生难以通过此方式自己做的作业,没有反馈的学习是相当考验学习者自驱力的,而CS61A单独开发了一个名为ok的测评系统,无论是homework, lab还是project,都可以在本地对自己的代码进行测评(如python3 ok --local),从而知晓哪些测试点没有通过,极大便利了我们的学习。
-
教导良好且规范的代码风格。课程会对关于代码规范的问题进行指导,在lab和project中也会处处体现这些细节,比如使用空格分隔计算符和变量名,为函数书写简介且明确的注释(简要说明接受的参数、函数的作用、返回结果等),采用合理的函数名(好的函数名也可以起到注释的作用),笔者认为这都是十分重要但不少人会忽略的细节,
至少能有效防止我这样的学习者写出一坨乱七八糟的代码。 -
网络上各种资源丰富。作为国内外都享有一定知名度的优质课程,Google,Stack Overflow,GitHub等都可以找到相关的学习资源和问题回答,在学习过程中遇到困难时也不妨通过以上方式解决疑惑。对于lab,homework,project的具体问题也大多可以在GitHub上找到对应的代码实现,因此基本不会出现有疑惑却始终找不到地方答疑的情况。
-
课程选择: 笔者最开始学习的是2020sunmmer的版本,但在做了几个lab和homework之后发觉部分题目存在表述不太清晰的情况(也可能与我个人的理解有误有关),于是便改为了学习2023fall的版本https://inst.eecs.berkeley.edu/~cs61a/fa23/(如果要学习其他版本的课程只需修改后缀即可,如fa23改为sp23)。近几年fall的讲师似乎都是John DeNero,他的语速偏慢,发音标准,吐字清晰,不需要太过担心听不懂的问题,课程的视频也会同步更新在他油管的个人账号上,英语较弱的可以打开中文字幕(但翻译效果见仁见智,如有必要也可以给浏览器装一个翻译插件)。
-
相关配置: 笔者使用的是WSL,Ubuntu22.04,IDE为vscode。关于各种配置,无论是Windows,Mac还是Linux,课程的lab0都会有非常详细的指导让初学者从零开始逐步配好61A所需的环境。
- 顺带一提,笔者最开始图方便想用Windows直接学习,但出现了urllib3错误的情况,查阅了各种资料,尝试过重装urllib3等方法也无法解决。据说把高版本的python删除换成较低版本可以解决,但笔者觉得有些愚蠢索性直接用WSL了。
-
学习顺序: 笔者大体上是按照reading - lecture - disc & lab & hw - project 的顺序学习,每天按照自己的安排学习。
-
学习时间: 笔者从1.22正式开始课程的学习,到2.14完成所有的lab,hw,project正式结束课程,历时三周半,每天都会花比较多的时间学习(因此似乎也算是耗时比较短的?)。原计划是两周半左右结束课程,但中途因为考了个驾照以及过年和家里人团聚,稍微耽误了一些时间。时间安排这方面因人而异,没必要都像笔者一样每天都花大量时间学习这门课程,劳逸结合才是正道。
-
reading和lecture的内容有些重叠但也互为补充,个人建议还是两者都要一起学习,以加深对知识的理解。
-
lab,homework,discussion,project个人建议还是都要做完,其中disc部分有在线提交的方式检测,但似乎需要Beckeley的学生账号。 而project是课程中最能检测学生是否掌握知识的部分,数百上千行代码以及十几个子问题能有效地让学生在实际运用中巩固所学。
-
官方的solutions会在作业截止后公布在网站上,但在本学期课程结束后会全部下架,如果是跟着最新的课程学习,还是建议及时把solutions保存下来方便查看。如果是学习以前课程,可以尝试在网上寻找相应的答案或者其他人的implement(话虽如此,笔者在网上寻找官方solutions的时候也遇到了不少困难)。总的来说官方的答案还是非常推荐看的,官方答案都很简洁优美,对我们很有启发作用。
-
虽然作为一门计算机入门课,但CS61A还是有一定难度的(至少对于笔者来说是这样),建议在学习时留出整块的时间以保证思路的连贯,尤其是做project时后边的问题往往依托于前面已经解决的内容,中途打断很可能因记忆模糊导致长时间的卡顿。
-
在进行本地ok测试的时候,最好都要加上--local,否则会要求使用Berkeley账号登陆。
-
笔者起初是受到csdiy.wiki的影响想要尝试学习一些国外的优质课程,再加上曾听学长感慨过一些人除了课内教的那点东西之外,对cs的了解几乎为零,于是便下定了决心在寒假学习CS61A。
-
其实原本打算课程结束之后就开始写这篇文章,但是当时满脑子摆烂,再加上本人刻在骨子里的拖延症,于是乎就
理所当然的拖到现在了。 -
在这里贴一下笔者自己的implementCS61A-23fall,假如对你有所帮助,也不妨点一下star~
-
CS61A的学习实实在在的给了我很大震撼和启发,能以这样的优秀课程作为计算机初学者的入门课,对我而言也是一件幸事,然而多说无益,唯有埋首学习,未来学习之路还很长,还望与诸君共勉。