cs-self-learning 使用指南:面向三类读者的计算机自学路径规划与核心课程清单
本篇基于 cs-self-learning(CS 自学指南)仓库中的 使用指南 一文展开,系统讲解这本开源自学手册的定位与使用方法:针对初入校园的本科生、时间有限的研究生与职场人、以及已确定深耕方向的高级读者三条差异化路径,给出可落地的选课策略、生产力工具清单与 11 门核心专业课的取舍依据。读完后,你可以按自身情况定制一份与 CS学习规划 衔接的自学方案,并知道如何在该仓库中检索、验证每一门课程的先修要求与预计学时。
为什么需要一份"使用指南"
随着贡献者增多,本书收录的课程持续扩展,覆盖数学、编程入门、体系结构、操作系统、编译、网络、数据库、机器学习、深度学习、深度生成模型等二十余个分支。正如 使用指南 开宗明义:想把书中所有课程全部学完是不切实际也没有必要的,甚至会事倍功半。因此本书按读者需求将读者分为三类,帮助每个人精准规划属于自己的自学方案,而不是把整份目录当任务清单。
从仓库结构可以印证这一设计:mkdocs.yml 的 nav 字段定义了整本书的目录树(从"前言""如何使用这本书"到各课程分支与"后记"),docs/ 目录下每个分支(如 docs/操作系统/、docs/机器学习系统/)对应一组同类课程,且每门课都提供中文(.md)与英文(.en.md)两个版本。换句话说,这本"书"本身就是一个可导航的课程搜索引擎,而使用指南是它的入口索引。
以下三节完整继承 使用指南 的三大章节骨架,并结合仓库中的课程文档补充先修要求、难度与学时等信息。
路径一:初入校园——低年级本科生的全面打基础方案
如果你刚进入大学或仍处低年级,且就读(或想转入)计算机方向,学习就是你的本业,有充足的时间与自由,不必过早纠结"学了有没有用"。这一节的核心结论是:打破高中式的被动学习,在课内之外补齐实践能力的短板。
1. 先破除"按部就班"的学习心态
原文指出,国内大部分高中把一天每一分钟都排满,学生只需被动跟着课表完成任务;而大学自由度骤然变大——课外时间自由支配、没人整理知识点与提纲、考试也不像高中那样模式化。如果还抱着"乖学生"心态老实按部就班,结果未必如愿:专业培养方案未必合理,教学未必负责,认真出勤未必能听懂,考试内容未必与授课内容挂钩。因此,想改变现状,得先"活过去",并具备质疑现状的能力。低年级阶段,打好基础是全方面的事:课内知识固然重要,但计算机强调实践,很多课本外的能力恰恰是国内本科教育的欠缺之处。
2. 其一:学会写"优雅"的代码
原文提醒:国内很多大一编程入门课会讲成极其无聊的语法课,效果不如直接看官方文档。刚接触编程时,就应去了解什么样的代码是优雅的、什么样的代码 "have bad taste"。即便面向过程编程(例如 C 语言),模块化和封装的思想也极其重要。如果你只想着在 OJ(如 OpenJudge)上通过题目,图省事用大段复制粘贴和臃肿的 main 函数,长此以往代码质量将一直如此,一旦接触稍大的项目,无尽的 debug 与沟通维护成本将把你吞没。写代码时应不断自问:
- 是否有大量重复的代码?
- 当前函数是否过于复杂(Linux 提倡每个函数只需要做好一件事)?
- 这段代码能抽象成一个函数吗?
学完面向过程编程后,大一下学期一般会讲面向对象(C++ 或 Java)。这里非常推荐阅读 MIT 6.031: Software Construction 的 Notes:它以 Java 为例(2022 年改用 TypeScript)非常详细地讲解如何写出"优雅"的代码,涵盖 Test-Driven 开发、函数 Specification 设计、异常处理等内容。从该课程文档看,其先修要求仅为"掌握至少一门编程语言",预计学时 100 小时,难度 5 只"🐶"——与原文的推荐定位一致。此外,接触面向对象后了解常见设计模式也是必要的(原文推荐《大话设计模式》一书,浅显易懂)。面向对象的精髓在于把实际问题抽象成若干类及其关系,而设计模式是前人总结的精髓抽象方法,避免课程沦为纠结继承语法与脑筋急转弯题目的语法课。
3. 其二:学习能提高生产力的工具和技能
原文推荐 Git、Shell、Vim 三类工具,并强烈推荐 MIT Missing Semester 这门课。该课程文档(难度仅 2 只"🐶"、预计 10 小时)覆盖 Shell 编程、命令行配置、Git、Vim、tmux、ssh 等内容,基本涉及本书"必学工具"分支中的绝大部分。CS学习规划 中的"必学工具"一节还给出了更完整的工具矩阵:Git、GitHub、Vim、Emacs、GNU Make、CMake、LaTeX、Docker、实用工具箱 等,每篇都有独立的使用指导。
原文还给出了一条生产力定律:一切需要让手离开键盘的操作,都应该想办法去除。切换应用、打开文件、浏览网页等高频操作都有插件可以快捷化;如果某个操作每天用到且耗时超过 1 秒,就应想办法把它压缩到 0.1 秒——毕竟以后数十年你都要和电脑打交道,形成顺滑的工作流是事半功倍的。最后一条建议:学会盲打,如果还需要看着键盘打字,应尽快找教程学会。
4. 其三:平衡课内与自学
"质疑现状,但也得遵守规则",绩点在保研中仍相当重要。因此大一应尽量按课表学习,辅以优质课外资源:
- 微积分与线代可参考 MIT 18.01/18.02 Calculus 与 MIT 18.06 Linear Algebra 的课程 Notes;
- 假期可通过 UCB CS61A 学习 Python。从课程文档看,CS61A 无先修要求、预计 50 小时,且不止是语言课——它深入程序构造与运行原理,最后一个 Project 会要求用 Python 实现一个 Scheme 解释器,并掌握函数式编程、数据抽象、面向对象等抽象手段。
个人经验层面的提醒:大一数学课学分占比大,且不同学校、不同老师的考试风格迥异,自学也许能帮你领悟数学本质,但不一定能直接换来好成绩,考前最好有针对性地刷往年题、充分应试。
5. 大二之后:进入自学的殿堂
升入大二后专业课居多,此时可以对照 一份仅供参考的CS学习规划 彻底进入自学。这是作者根据三年自学经历提炼的全套指南,每门课的特点与选课理由都有介绍。其核心策略(原文原意):
- 对你课表上的每个课程,规划中基本都有对应的国外课程,且在质量上具有显著优势;
- 只要考前将老师念了一学期的 PPT 拿来突击复习两天,取得不错的卷面分数并不困难;
- 如果有课程大作业,可以尽量把国外课程的 Lab 或 Project 修改一番以应付课内需要。作者举了一个真实案例:上操作系统课时发现老师还在用早已被国外学校淘汰的课程实验,便发邮件将实验换成自己正在学习的 MIT 6.S081 的 xv6 Project——该课程文档显示其先修要求为"体系结构 + 扎实的 C 语言功底 + RISC-V 汇编",整学期共 11 个 lab,在 xv6(基于 RISC-V 的教学用操作系统)上逐个添加新机制,自学同时还无意间推动了课程改革。
总之,灵活变通是第一要义:目标是用最方便、效率最高的方式掌握知识。原文最后提醒:少点浮躁和功利,多一些耐心和追求——自制力并非自学的先决条件,关键看你想从自学中得到什么;抱着"会一门语言就能月薪过万"的幻想,说再多也是废话。
路径二:删繁就简——研究生与职场人的核心课程精简方案
如果本科毕业读研、在职,或是其他领域想利用业余时间转码,你也许没有足够时间系统学完 CS学习规划 的全部内容,但又想弥补本科时期欠下的基础。这一节的取舍原则是:这部分读者通常已有编程经验,入门课程不必重复;工作方向大体已定,也没有必要对每个计算机分支做特别深入的研究,更应该侧重通用性的原则和技能。作者由此选取了自认为最重要、质量最高的 11 门核心专业课,完整继承如下表(先修、语言、难度与学时等列依据仓库中各课程文档的"课程简介"补充):
| 课程方向 | 课程名 | 先修要求 | 主要语言 | 难度 | 预计学时 |
|---|---|---|---|---|---|
| 离散数学和概率论 | UCB CS70: discrete Math and probability theory | 无 | 无 | 🐶🐶🐶 | 60 小时 |
| 数据结构与算法 | Coursera: Algorithms I & II | CS61A | Java | 🐶🐶🐶 | 60 小时 |
| 软件工程 | MIT 6.031: Software Construction | 掌握至少一门编程语言 | Java | 🐶🐶🐶🐶🐶 | 100 小时 |
| 全栈开发 | MIT web development course | 掌握至少一门编程语言 | JavaScript/HTML/CSS/NoSQL | 🐶🐶🐶🐶 | 因人而异 |
| 计算机系统导论 | CMU CS15213: CSAPP | CS61A, CS61B | C | 🐶🐶🐶🐶🐶🐶🐶 | 150 小时 |
| 体系结构入门 | Coursera: Nand2Tetris | 无 | 任选一门编程语言 | 🐶🐶🐶🐶 | 40 小时 |
| 体系结构进阶 | CS61C: Great Ideas in Computer Architecture | CS61A, CS61B | C | 🐶🐶🐶🐶🐶 | 100 小时 |
| 数据库原理 | CMU 15-445: Introduction to Database System | C++、数据结构与算法、CSAPP | C++ | 🐶🐶🐶🐶🐶🐶 | 100 小时 |
| 计算机网络 | Computer Networking: A Top-Down Approach | 有一定的计算机基础 | 无 | 🐶🐶🐶🐶 | 40 小时 |
| 人工智能 | Harvard CS50: Introduction to AI with Python | 基本概率论 + Python 基础 | Python | 🐶🐶🐶🐶 | 30 小时 |
| 深度学习 | Coursera: Deep Learning | 机器学习基础 + Python | Python | 🐶🐶🐶🐶🐶 | 80 小时 |
学完这些课程,无论你具体从事什么工作,原文的判断是:你都不可能沦为一个普通的调包侠,而是对计算机的底层运行逻辑有更深入的了解。从各课程文档的内容看,这套组合的覆盖面可以概括为:
- 数学与算法地基:CS70 把逻辑证明、图论、数论、多项式环、概率论与稳定匹配、网络拓扑、RSA、纠错码、哈希表等算法应用一一对应,Algorithms I & II 则强调"为什么这么做、如何实现它、用它解决实际问题"三步走法,并配有 10 个高质量 Project;
- 系统主线:CSAPP 覆盖汇编、体系结构、操作系统、编译链接、并行、网络,共 11 个 Project(代码框架全部开源);Nand2Tetris 从与非门开始造出一台计算机并运行俄罗斯方块(硬件部分搭 CPU 跑简单汇编,软件部分写编译器与简单 OS);CS61C 沿 CS61 序列深入 C 语言如何一步步转化为 RISC-V 汇编并在 CPU 上执行,四个 Project 分别覆盖 C 程序设计、RISC-V 神经网络、Logisim 搭建流水线 CPU、OpenMP/SIMD 并行优化;
- 应用与 AI 主线:15-445 要求你在教学数据库 Bustub 中实现 Buffer Pool Manager、B+ Tree、Query Executor/Optimizer、Concurrency Control 四个组件;Top-Down 网络课 提供作者自录的网课视频、交互式在线章节测试与 Wireshark 抓包 lab(编程作业偏少,可用 Stanford CS144 补充);CS50 AI 提供 12 个设计精巧的编程作业(如强化学习训练 Nim 游戏 AI、alpha-beta 剪枝扫雷),适合入门或休闲;Deep Learning 从神经网络讲到 CNN、RNN 与 Transformer。
需要说明的适用前提:表中先修关系(如 CSAPP 要求 CS61A/CS61B、15-445 要求 CSAPP)是各课程文档的原始设定,零基础读者可参照 CS学习规划 的"课程地图"补齐先修,不必拘泥于表的顺序。
路径三:心有所属——确定方向后的深耕与多视角学习
如果你对核心专业课已掌握得相当扎实,并且确定了自己的工作或研究方向,那么书中还有大量未在 CS学习规划 中提到的课程可供探索。原文指出两点机制,均可以从仓库导航中得到验证:
- 课程分支持续新增。从 mkdocs.yml 的
nav看,除主流分支外,已新增机器学习进阶(如 学习路线图、CMU 10-708、Columbia STAT 8201 等)与机器学习系统(CMU 15-442、10-414、EML 等)等分支,同时还有深度生成模型、大语言模型、计算机图形学、系统安全等方向。 - 同一分支下的多校同类课程提供不同视角。原文以"操作系统"分支为例,它包含四所学校的课程,这在本仓库中一一对应:MIT 6.S081、UCB CS162、NJU OS、HIT OS。如果你想深耕一个领域,学习这些同类课程会给你看待同一知识的不同视角、不同的侧重点与课程实验。此外,本书作者还计划联系相关领域的科研工作者,分享细分领域的科研学习路径,让 CS 自学指南在追求广度的同时实现深度上的提高。
如果你希望贡献这类内容(例如分享某个领域的自学经历与资源),使用指南 给出的途径是与作者邮件联系(zhongyinmin@pku.edu.cn)。结合 README.md 的说明,标准贡献流程是:参考仓库中的 template.md 作为课程文档模板,在 mkdocs.yml 的 nav 中添加入口,并同步提供英文翻译(docs/**/*.en.md),通过 Pull Request 提交;中英混合排版需遵循中英文混排的要点规范。
仓库结构与延伸阅读:如何高效使用这份指南
基于仓库结构,可以归纳出阅读与检索本书的几条实用路径:
- 入口与骨架:index.md 是前言,介绍本书的由来、自学的利与弊、适合人群与交流群的建立方式;使用指南 负责按读者分流;CS学习规划 提供完整的课程地图,包含"必学工具""好书推荐""环境配置"(PC 端与服务器端)与分方向课程四大部分;后记 与 好书推荐 是补充读物。
- 课程文档的统一模板:每门课程文档(由 template.md 规范)都包含"课程简介"(所属大学、先修要求、编程语言、课程难度、预计学时)、"课程资源"(课程网站、视频、教材、作业)与"资源汇总"三部分。因此上文表格中的先修、语言、难度、学时列并非主观估计,而是直接取自各课程文档,可逐篇核验。
- 中英双语:通过 mkdocs.yml 的
i18n插件,每个中文文档旁都有对应的.en.md英文版,站点同时构建两种语言版本。 - 环境配置:CS学习规划 的"环境配置"一节区分 PC 端(Windows 用户可用 Scoop 获得类 Unix 体验)与服务器端(Linux 基础、Docker、CI/CD 等),可与 MIT-Missing-Semester 配合使用。
最后重申 使用指南 的主旨:本书的价值不在"全部学完",而在于让每一类读者都能按自身的时间、基础与目标,精准地取用其中资源——初入校园者全面打基础,删繁就简者补核心短板,心有所属者沿多校课程深耕方向。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00