cs61a结课感受
csdiy
最早接触到 cs61a 的课程,是在 csdiy 上面,大佬分享了自己学习 cs 网课的经历,强推 UCB 的 cs61a 和 cs61b 课程。我在大一上,学校开了 C 语言程序设计这门课程,我觉得自己掌握得还可以。于是自己在 edX 上找了 MIT 的 6.00.1.x,自己补了一点 python 的语法,然后直接开了 cs61b。现在看来是极其自大和愚蠢的决策,因为 61b 是用 java 授课的,而且我在 vscode 和 intellij 的环境配置上一筹莫展(说起来其实当时我连 c 的配置都没配好),加上全英的课本和课程,体验堪称地狱。然后数据结构就结课了,我什么都没学到,大二上又是分配给游戏的一学期,基本上没做什么,于是 cs61a 和 cs61b 的学习就一直拖到了这个学期。
61a
由于我很久都没有做 cs 相关的练习了,于是我决定先学 cs61a,这为我打开了新世界的大门。我跳过了 python 的语法学习,直接从 scheme 的讲解部分看起。cs61a 和我在国内本科见到的计算机入门课都不一样,它不是单纯的语法讲授,而是教你如何编辑和组织程序,我在 61a 的课上不仅学会了一门(其实一共是三门)编程语言,而且理解了迭代、递归、如何作数据抽象以及学习到了良好的代码规范。这里我还犯了一个小错误,就是我把课程和 discussion, hw, lab, project 分开做了,其实这几个部分都是有联系的,应该一起顺序着做。61a 为课程开发了一个自动的评分机 ok,即使是非伯克利的学生也可以在本地进行 Ok 的测试,这一点真的非常用心。61a 的 hw 质量也没得说,硬币找零问题直接震撼我一整年。四个 proj 也是神中神,爆杀我之前上过的所有计算机入门课。proj1 是做一个 Hog 游戏,方法、函数,你之前学过的东西全部都能用上;proj2 Cats 实现打字测试,也给我带来了优质的打字竞赛/练习网站 typeracer,我还专门写了一篇文章来记录自己的感受 仰望;Proj3 Ants 是实现一个类 PVZ 的网页游戏,做完这个 proj,我觉得自己对于 python 中的类和继承理解深了很多,看见自己实现的逻辑能应用到游戏当中,真的让我充满了成就感;proj4 是实现 scheme 的 Intepreter,堪称四个 projects 里实现逻辑最为复杂的一个,但是写这个解释器的过程让我明白了,如果你想要透彻了解一门语言或者一个软件,最好的方法就是自己手搓一个。从零开始实现全部逻辑,这简直太酷了!
61b
csdiy 的作者在网站中写:推荐时长 50h,我自己从 4.23 开始做到 5.16 结束,总耗时应该还是超过了这个限制。当然,我也不指望自己能够和大佬比肩,能够完成这个拖延许久的任务已经值得赞许。cs61a 为我后续的网课学习开了一个很好的头,我觉得自己找到了学习网课的范式,接下来的 61b 也要再接再厉,这门课更是重点中的重点,而 josh hug 老师也是非常 Nice,这让我对这门课有了更多的期待。
好工具的重要性
整个 cs61a 的任务周期中,我都在大量地使用番茄钟,配上 asmr 的轻柔按摩,我能够快速地集中注意力并且长时间地让自己保持专注。这一点很重要,因为短时间高强度的学习肯定是比不上长时间持续不断的前进的。下一步是 61b,而且我有点想要改变自己的编程模式,使用 Nvim,彻底投入 vim 神教,看看能不能提高我的编程速度。