转码记录 Vol.02 | 25 Winter:校内三门 + 自学四门,这学期开始有了层次感
· 11 min read
上学期(24 Fall)用三门课完成热身。这学期开始不一样了:校内三门课 + 自学四门课同步推进,工作量直接翻倍。CS 61A、CS 61B、CS 61C、Nand2Tetris——技术知识开始有了层次感,从 NAND 门到高级语言的完整链路第一次在脑子里贯通。
上学期(24 Fall)用三门课完成了热身——离散数学建立了形式化推理的思维方式,微积分稳住数学基础,EECS 1012 给了第一次写出可运行程序的感受。
但那个学期结束时,有 一种感觉:框架有了,还很空。知道命题逻辑是什么,能写简单的 JavaScript,但还停留在"知道是什么"而不是"理解为什么"的阶段。
这学期开始不一样了。校内三门课 + 自学四门课同步推进——其中 CS 61A 实际在 24 Fall 期间并行完成,放在这里一起说。工作量直接翻倍,但收获也是。
24 Fall 同期自学:CS 61A – Structure and Interpretation of Computer Programs(UC Berkeley)
这门课用 Python 和 Scheme 讲,但重点不是语言语法,而是计算的基本思想:抽象、递归、解释器、高阶函数。
对我影响最大的是"函数是一等公民"这个概念——函数可以作为参数传入另一个函数,可以作为返回值返回。这和命令式编程(先做 A 再做 B)是不同的范式。Lambda、闭包、尾递归优化,在这门课里都有系统讲解,而不是在某个框架文档的角落里顺带提一句。
课程还要求用 Python 实现一个简化的 Scheme 解释器。解释器的工作是:源代码字符串 → 词法分析(Tokenizer)→ 语法分析(Parser)→ 求值(Eval)。每一步都自己实现。做完这个之后,对后来 Nand2Tetris 里实现编译器的过程有了直接的认知基础——两者的结构几乎一样,只是输出目标不同。
