Skip to content

CS61A 通关感想 #2

Description

@mancuoj

想刷 CS61A 已经很久了。记得考研前就想着做一下这个课,仓库 csfive/CS61A 第一次提交是在 2023 年 8 月 25 日,但真正开始认真学,其实已经是 2026 年过年前了。中间零零散散拖了三四年,到工作几年以后才把它完成,说起来还是有点羞愧。

网上对这门课的评价一直很高。很多人说 CS61A 不是单纯的 Python 课,而是借 Python、Scheme 来讲抽象、递归、函数式编程和解释器这些底层概念。CS 自学社区里也有人提到,它的重点是“以语言为载体,教编程语言中的通性和设计逻辑”,而 Scheme Interpreter 项目是对课程内容的总结。官方的前学生建议里也反复强调,这门课对零基础的人很有挑战,也相当耗时。就我个人而言,感受没有那么传奇,但确实能理解它为什么被推荐。

AI 普及之后,我的工作强度又下降了不少。无聊的时候,我开始用 GitHub Codespaces 重新捡起这门课。看提交记录:2023 年开了个头,2024 年偶尔动一下,2025 年又断了一次,真正密集推进是在 2026 年 1 月。1 月做了 Hog 和 Cats,4 月重新开始 Ants,5 月补了一些后面的内容,6 月 3 日、4 日集中推进 Scheme 前置内容和 Lab/Homework,最后 6 月 8 日提交了 finish all。从“想学”到“学完”跨度很长;从重新启动到完成,也拖了差不多半年。

这次学习比较功利。课程视频和教材我基本没怎么看,通常是打开题目,理解需求,然后奔着过测试写代码。Python 语法我本来就熟,所以前半部分没怎么卡壳。Hog、Cats、Ants 做起来还算顺利,更多是需要耐心,而不是理解障碍。对我而言,最大的困难是拖延,不是题目本身。

所以如果有人问我学习成果有没有别人吹得那么厉害,我的回答是没有那么夸张。至少以我这种刷题式的学法来看,并没有带来什么“程序员世界观重塑”的体验。很多知识我以前已经接触过,很多题也只是把递归、抽象、状态、对象这些概念重新练了一遍。但它确实让我对递归的理解加深了一些。以前写递归更多凭经验,现在会更自然地想 base case、recursive call 以及当前层要承担什么责任。网上也有人把递归理解总结成这几步,做完之后我更能体会这种思路。

Scheme 是我卡得最久的地方。括号很多,一开始很不适应。更麻烦的是最后的 Scheme Interpreter 项目。代码量不大,但要读的框架代码不少,需要搞清楚 reader、eval、apply、environment、special form、lambda、macro 这些模块如何串联。网上很多人说这个项目“吹爆”,能把前面的抽象全部收束起来。客观上我认可这个评价,但它也踩中了我个人的痛点:我不太喜欢 debug,也不太喜欢读别人的代码,而这个项目偏偏要求耐心读框架、理解控制流、在已有结构里补逻辑。最后我完成了,但完成得比较匆忙,更多是“终于结束了”的感觉。

回头看,CS61A 的课程设计确实扎实。它不是按“教会一门语言”来组织的,而是不断把人往更抽象的层次推:先用 Python 写函数和递归,再讲数据抽象、对象、可变状态,然后切换到 Scheme 和解释器。它的厉害之处不在于某一题有多难,而在于它始终让你看到:语言只是表面,真正核心是程序如何表达计算、如何组织复杂度、如何把问题拆解成可组合的抽象。

对我来说,这门课最大的意义不是学会了 Python,也不是掌握了 Scheme,而是终于把一个拖了几年的坑填上了。它没有改变我的人生,也没让我突然变成更高级的程序员,但它给了我一次比较完整的编程基本功复健。尤其是递归、解释器、抽象这几块,即使是用功利的方式刷过去,也还是留下了一些东西。

如果有人问我 CS61A 值不值得刷,我会说值得,但不必神化。它对新手可能很难,对有经验的人可能没那么震撼;认真看视频和教材的人,收获肯定比我这种只写题过测试的人大。如果只是为“刷完一门名课”,它不会自动带来质变;但如果愿意认真跟着教材、视频和项目走一遍,它确实是一门适合打基础的课,尤其对递归、抽象、解释器还比较陌生的人,CS61A 的训练密度和设计都很扎实。

我的完成方式不太值得推荐:视频没怎么看,教材也跳了不少,基本是靠题目和测试驱动。这样效率高,但也会错过课程真正想传递的内容。所以这篇感想与其说是“CS61A 学习心得”,不如说是一个拖延症老程序员终于把坑填完了的记录。

注:本文主体内容由本人撰写,AI 辅助进行了结构整理和措辞优化。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions