CS61A 食用指南
关于 CS61A
这是 CS 61A Fall 2022 的网站:
https://inst.eecs.berkeley.edu/~cs61a/fa22/
在这个目录下的文章上传的 pdf 基本都是英文的,还请做好准备。
在每个 disc、lab、hw 和 proj 下,都会有相对应的.zip 文件,文件里装的是在学习过程中所需要的代码。
在文章的最后会附上 sol。
当然,在没有头绪的时候,你可以选择参考 sol,也可以重新学习视频和教科书,也可以改变做题的顺序。
ps:哪怕是 cs61a 这样优秀的课程,给出的解决方案里也会有不是那么正确的代码(它并不能处理所有的情况)
pps:如果你找到了 sol 里不是那么正确的代码,请联系我们,我们将新建一个文档来记录 sol 中这些 “错误” 的代码
ppps:当然存在 “错误” 的代码的概率很小,你发现它们的概率就更小了
pppps:不只是在 sol 文件中,youtube 上的视频中的代码也可能会出现一些小问题
为什么要学 CS61A?
简单来说,学校的编程课只能教会你一些最基本的语法和代码逻辑,从学校的课程中,你很难学到一些实用的编程思想 (甚至一些老师自己也讲不明白)。一部分原因当然是老师上课完全没有想过如何渗透这些编程思想;还有一部分原因我认为是课后作业是在过于随意了,PTA 上的课后作业只是用来检测你是否掌握了一些最基础的语法,这样的题目是很难培养学生的编程思想的。
从 CS61A 中能学到什么?
分语言来看,cs61a 讲了这三种语言:
- Python
- Scheme
- SQL
分章节来看,cs61a 主要教了以下这些内容:
用函数构建抽象关系
- 函数与函数设计
- 控制
- 高级函数
- 递归函数
用数据构建抽象关系
- 数据抽象
- 可变数据
- 面向对象编程
解释计算机程序
- 函数式编程
- 异常
- 解释器的开发
数据处理
- 声明式编程
CS61A 好在哪里?
暂且不考虑由于是伯克利大学的课程所以视频资料和教科书全是英文
每一节课程都有完备的视频资料和相对应的教科书,还有精心设计的 lab、hw、disc、proj
所有题目都有完善的说明、例子、半自动的测试和批改,哪怕英语不是很好的同学也能理解到题目所要表达的意思
课程的设计目的是引导学生像计算机那样思考,在课程网站上有相当多的交互式页面来帮助你学习(不过因为我们没有伯克利大学的账号无法使用 🤪)
课程中还推荐了一个学习 python 很好的网站,可以用来绘制环境图:Python Tutor
(不像某些学校只会把学生丢进水池里,没淹死的都是学会游泳的好学生)
John Denero 教授的网课也是非常的有趣,如果你的英语够好,还能发现藏在视频里的一些小彩蛋 🤤
如何学习 CS61A?
cs61a 绝对是一个挑战,但是我们都希望你学习并且成功,所以这里有一些可能对你的旅程有所帮助的小贴士:
在 61A 中成功的方法有很多 ーー 我们发现下面的建议适用于几乎所有的学生,但是对不同的人最有效的方法是不同的,我们建议探索不同的学习和工作策略。
如果你想和助教谈谈你的方法,我们有专门的咨询办公时间做这些事情!问问题
- 如果你遇到一些你不知道或不确定的概念或问题,那就来问吧~~。我们是来帮助你们学习的,如果你们提出一个问题,我们会告诉你们在哪些方面我们可以帮助你们理解这些材料。~~ 提出问题的过程本身也有助于你自己弄清楚你特别想问什么,从而找出你认为你可以学到更多的概念。
小组学习
- 再次强调,这门课对于大多数学生来说都不是一门简单的课程,你可能会感到不知所措。给你的小伙伴们发送一个信息,并与班上的其他同学取得联系;一起完成作业或一起学习准备考试,只要你不违反课程大纲中规定的诚实学习的课程政策。
当遇到问题时,试着组织语言来解释你遇到困难的地方。
- 这并不需要一个找到懂得如何解决问题的人 (或者甚至是一个人 —— 这种做法通常被称为橡皮鸭,因为你可以把一只橡皮鸭当作你的练习对象) ,因为主要目标是让你弄清楚你自己的想法,弄清楚你的理解和代码到底在哪里卡住了。这样你可以知道应该专注于哪一部分,以便更好地理解。
做所有的 hw (或者至少认真地尝试)。我们没有给出很多 hw 问题,但那些我们给你的可能会发现是具有挑战性、耗时且有回报的。
做所有的 lab。其中大部分的设计更多的是作为一个课程材料的介绍,并可能需要半个小时左右的时间。这是一个熟悉新的知识点的好时机。
因为伯克利大学有着非常好的软硬件设施,所以在他们的课程体系中有助教和专门的论坛来辅助学习。杭电实在是没有这样的资源 🥲,所以在遇到问题的时候请先尝试独立解决,然后再和小伙伴们一起讨论,如果遇到实在解决不了的难题就来参考前人的 GitHub 吧
如何使用 ok 进行代码测试?
在 61a 中,我们使用一个名为 ok 的程序对 lab,hw 和 proj 进行自动评分。在你下载的每一份代码文件中,都应该找到 ok 程序。
确保在终端打开的路径下,包含 ok 和要测试的代码。
要使用 Ok 来运行指定函数的 doctests,请运行以下命令
python3 ok -q <specified function> #会和你要补充的代码一起给出
默认情况下,只有没有通过的测试才会出现。你可以使用 - v 选项来显示所有的测试,包括你已经通过的测试
python3 ok -v
有时我们会看到类似这样的 ok 指令
python3 ok -q control -u
在终端中输入后,需要按照要求回答问题,有些时候会做为某些函数测试的前置条件
一般情况下,执行上述 ok 指令后,都会在终端里提示输入 Berkeley 账号进行提交,这时候输入 Ctrl+C
退出即可;不过我们可以在代码后面加上 --local
进行本地测试;所有的测试都可以本地完成,不需要联网
关于使用 Ok 命令的更多信息,请在此处了解更多
在学习过程中,你可以能会遇到的问题和解决方法
在 CS61A 的学习过程中,你可能会找不到 61A 的每一个 lab、hw、disc、proj 的答案,这是因为 61A 是不断更新并进行授课的,所以每过一个季度 61A 是会进行换季的,所以为了避免这个问题,请尽早将 61A 主页的每一个答案保存下来。如果你已经遇到了这种问题,那么向已经学习了这门课的学长学姐求助是个不错的选择。
如果出现以下情况,这说明你的并没有在测试对象的目录进行测试,最简单解决办法就是在你对应位置的目录进行鼠标右键点击 “在终端中打开” 进行输入测试。
如果输入了命令后回车没有任何反应,请试试将测试代码的 python3 变为 python 或者 py 进行操作,如果还没有解决请仔细阅读 61A hw 部分的 Using ok,链接一般位于 HW 01 的开头。
如果在解决问题的过程中遇到了问题,那就多读几遍题目吧,题干中或许会给出
Hint
,这可能很有用
这是 cs61a 的官网 https://cs61a.org/
如果你觉得全英教学对你来说比较困难,可以参考 2.5 以理工科的方式阅读英语
也可以看看我们本地化之后的 cs61a 课程,我们尽可能准确和符合中文阅读习惯地翻译了 textbook,但我们保留了作业中的英语(绝对不是因为偷懒),来锻炼同学们的英语能力
英文学习的痛苦比不上接触国外优秀课程带来的快乐,请保持初心,砥砺前进,祝愿同学们都能有一个有趣的学习体验 🥰