首页
/ cs-self-learning 使用指南:面向三类读者的计算机自学路径规划与核心课程清单

cs-self-learning 使用指南:面向三类读者的计算机自学路径规划与核心课程清单

2026-09-04 19:46:45作者:明树来

本篇基于 cs-self-learning(CS 自学指南)仓库中的 使用指南 一文展开,系统讲解这本开源自学手册的定位与使用方法:针对初入校园的本科生、时间有限的研究生与职场人、以及已确定深耕方向的高级读者三条差异化路径,给出可落地的选课策略、生产力工具清单与 11 门核心专业课的取舍依据。读完后,你可以按自身情况定制一份与 CS学习规划 衔接的自学方案,并知道如何在该仓库中检索、验证每一门课程的先修要求与预计学时。

为什么需要一份"使用指南"

随着贡献者增多,本书收录的课程持续扩展,覆盖数学、编程入门、体系结构、操作系统、编译、网络、数据库、机器学习、深度学习、深度生成模型等二十余个分支。正如 使用指南 开宗明义:想把书中所有课程全部学完是不切实际也没有必要的,甚至会事倍功半。因此本书按读者需求将读者分为三类,帮助每个人精准规划属于自己的自学方案,而不是把整份目录当任务清单。

从仓库结构可以印证这一设计:mkdocs.ymlnav 字段定义了整本书的目录树(从"前言""如何使用这本书"到各课程分支与"后记"),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、tmuxssh 等内容,基本涉及本书"必学工具"分支中的绝大部分。CS学习规划 中的"必学工具"一节还给出了更完整的工具矩阵:GitGitHubVimEmacsGNU MakeCMakeLaTeXDocker实用工具箱 等,每篇都有独立的使用指导。

原文还给出了一条生产力定律:一切需要让手离开键盘的操作,都应该想办法去除。切换应用、打开文件、浏览网页等高频操作都有插件可以快捷化;如果某个操作每天用到且耗时超过 1 秒,就应想办法把它压缩到 0.1 秒——毕竟以后数十年你都要和电脑打交道,形成顺滑的工作流是事半功倍的。最后一条建议:学会盲打,如果还需要看着键盘打字,应尽快找教程学会。

4. 其三:平衡课内与自学

"质疑现状,但也得遵守规则",绩点在保研中仍相当重要。因此大一应尽量按课表学习,辅以优质课外资源:

  • 微积分与线代可参考 MIT 18.01/18.02 CalculusMIT 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学习规划 中提到的课程可供探索。原文指出两点机制,均可以从仓库导航中得到验证:

  1. 课程分支持续新增。从 mkdocs.ymlnav 看,除主流分支外,已新增机器学习进阶(如 学习路线图、CMU 10-708、Columbia STAT 8201 等)与机器学习系统(CMU 15-442、10-414、EML 等)等分支,同时还有深度生成模型、大语言模型、计算机图形学、系统安全等方向。
  2. 同一分支下的多校同类课程提供不同视角。原文以"操作系统"分支为例,它包含四所学校的课程,这在本仓库中一一对应:MIT 6.S081UCB CS162NJU OSHIT OS。如果你想深耕一个领域,学习这些同类课程会给你看待同一知识的不同视角、不同的侧重点与课程实验。此外,本书作者还计划联系相关领域的科研工作者,分享细分领域的科研学习路径,让 CS 自学指南在追求广度的同时实现深度上的提高。

如果你希望贡献这类内容(例如分享某个领域的自学经历与资源),使用指南 给出的途径是与作者邮件联系(zhongyinmin@pku.edu.cn)。结合 README.md 的说明,标准贡献流程是:参考仓库中的 template.md 作为课程文档模板,在 mkdocs.ymlnav 中添加入口,并同步提供英文翻译(docs/**/*.en.md),通过 Pull Request 提交;中英混合排版需遵循中英文混排的要点规范。

仓库结构与延伸阅读:如何高效使用这份指南

基于仓库结构,可以归纳出阅读与检索本书的几条实用路径:

  • 入口与骨架index.md 是前言,介绍本书的由来、自学的利与弊、适合人群与交流群的建立方式;使用指南 负责按读者分流;CS学习规划 提供完整的课程地图,包含"必学工具""好书推荐""环境配置"(PC 端与服务器端)与分方向课程四大部分;后记好书推荐 是补充读物。
  • 课程文档的统一模板:每门课程文档(由 template.md 规范)都包含"课程简介"(所属大学、先修要求、编程语言、课程难度、预计学时)、"课程资源"(课程网站、视频、教材、作业)与"资源汇总"三部分。因此上文表格中的先修、语言、难度、学时列并非主观估计,而是直接取自各课程文档,可逐篇核验。
  • 中英双语:通过 mkdocs.ymli18n 插件,每个中文文档旁都有对应的 .en.md 英文版,站点同时构建两种语言版本。
  • 环境配置CS学习规划 的"环境配置"一节区分 PC 端(Windows 用户可用 Scoop 获得类 Unix 体验)与服务器端(Linux 基础、Docker、CI/CD 等),可与 MIT-Missing-Semester 配合使用。

最后重申 使用指南 的主旨:本书的价值不在"全部学完",而在于让每一类读者都能按自身的时间、基础与目标,精准地取用其中资源——初入校园者全面打基础,删繁就简者补核心短板,心有所属者沿多校课程深耕方向。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
982
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384