收藏了一堆CS仓库,却连第一课都没学完?——来自cs-self-learning的计算机自学路径选课逻辑
【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning
GitHub上搜“CS自学”,几万个结果,一周收藏20个仓库,然后就不动了。缺的从来不是资源,是选课顺序。cs-self-learning这条计算机自学路径把上百门课程笔记拆成几个决策点,专门给零基础和转码的人定取舍。
先做一道选择题
- 如果你还在高中、对计算机方向毫无概念,可以直接跳过——下面的内容默认你“能学写代码”。
- 如果你是CS转码,目标只是“赶紧做出一个东西写进简历”,可以跳过——这里的选课逻辑优先讲“为什么”的基础课,不是速成捷径。
- 如果你已经会一点代码,但说不清CS转码选课该按什么顺序、或者CS专业的自学一直无从下手,看下去。
计算机自学路径的选课逻辑,不是选课清单
自学圈被问得最多的问题是:先学数学还是先写代码。答案不唯一,取决于你想站到计算机的哪一侧。
先回答一个问题:你要造东西,还是要理解东西
应用向是“造”:想做出用户能用的东西。系统向是“理解”:想知道机器里面到底在发生什么。两条路径并行,在数据结构与算法处汇合,之后随时可以串线。
应用向(造东西):
- CS50P — 练出“读题并把它变成代码”的基本功 — 无前置
- CS61A — 学会拆复杂逻辑,回答“程序到底是个什么东西” — 会一点Python
- CS142 — 做出真正跑起来的Web应用,学会处理状态 — 会一门语言
系统向(理解东西):
- CS106B/X — 建立指针与内存的心智模型 — 会C
- CSAPP — 看懂代码到执行之间的二进制、缓存、进程三层 — 会C
- Nand2Tetris — 从逻辑门搭出一台计算机,回答“计算机从哪来” — 初等数学
- MIT 6.S081 — 动手写半个操作系统,理解内核如何管内存 — C + CSAPP
如果你纠结的正是计算机系统入门课程怎么选,上面四门就是主线:C → CSAPP → 组成原理 → 操作系统,一环扣一环,不建议跳。网络和编译器接在操作系统后面:
- CS144 — 从零实现一个TCP协议栈 — 会C
- PKU编译原理实践 — 写出一个类C到汇编的编译器 — 数据结构 + 组成原理概念
两条路径的汇合点只有一个:数据结构与算法这一段谁都要过。
计算机自学路径里哪几门绕不开,哪几门可以等
判断标准只有一个:这门课的知识是“别的课的前置”,还是“某个方向的工具”。是前置就必选,是工具就按方向取、可以等。
必选(4-6门,谁都逃不掉):
- MIT Calculus — 理解极限与积分的本质,否则任何推导都读不动 — 高中数学
- MIT 18.06 Linear Algebra — 看懂矩阵的几何意义,一切AI课的公共底座 — 微积分
- CS70 — 离散数学与概率,所有算法课的前置 — 高中数学
- 6.006 — 复杂度分析与算法设计范式的入口 — 编程入门
- CSAPP — 两条路径的枢纽课,前面说的系统主线从它分叉 — 会C
可以等(按方向取,先后随意):
- 15445 — 从零写一个教学数据库,做后端才需要 — C + 数据结构
- CS161 — 计算机系统安全,走安全方向才需要 — 操作系统 + 网络基础
- CS229 — 带完整数学推导的机器学习,走AI方向才需要 — 线代 + 微积分
- MIT 6.824 — 分布式系统,学完操作系统后的下一个问题常是“操作系统学完学什么”,它就是答案 — 操作系统 + 网络
- CS170 — NP难与近似算法,想深耕算法才需要 — 6.006
数学到底要学多深:按方向划一条线
仓库里数学分两层:数学基础(微积分、线代、信息论)和数学进阶(离散、概率)。两层不用全刷,按方向划线:
| 方向 | 数学线 | 卡在这条线会发生什么 |
|---|---|---|
| 后端/系统 | 离散数学 + 线性代数基础够用 | 概率部分可以跳过,课程本身照常能学完 |
| 数据 | 加概率统计,吃透贝叶斯与常见分布 | Data100能做,但讲不清模型为什么“work” |
| AI | 线代 + 多元微积分 + 概率都要 | CS229读不动,反向传播变成背公式 |
三条补充分量的课(都可选):
- 6.042J — MIT版离散数学,证明写得比CS70更狠 — 高中数学
- CS126 — 用Python做概率,机器学习前最实用的一门 — 线性代数
- 信息论 — 信息论入门,深入ML研究才用得上 — CS126
动手的最低门槛
“看完”不算数。每个方向的最小可交付成果,具体到能验收:
- 学完CS61A,你应该能独立写出一个表达式求值器(递归下降,不引库)。
- 学完数据结构与算法,你应该能独立写出图的单源最短路实现,并说清Dijkstra为什么怕负权边。
- 学完Nand2Tetris,你应该能独立画出一个16位CPU的数据通路并讲清每个部件的作用。
- 学完CSAPP,你应该能用Valgrind这类工具定位一个内存bug,并解释段错误的成因。
- 学完MIT 6.S081,你应该能给xv6加一个新系统调用,并让测试通过。
- 学完15445,你应该能在教学数据库里写出B+树索引并通过测试集。
- 学完CS229,你应该能从零实现逻辑回归,并用有限差分验证梯度。
做不到Y,说明X没学完,回去补,别急着开下一门。
容易踩的三个坑
把看视频当成学习
高清课件加一本记满的笔记,会给你一种“学过”的错觉。但视频一关、题做不出来,知识就不在你身上;CS是手艺,不是观赏项目。
- 💡 替代做法:每门课配着一份lab做,没有lab的课,至少手推三道作业题。
把收藏当成完成
存了20个仓库,收藏的动作本身不提供任何进展,书签不等于上过课。收集行为只是把“不知道学什么”改成了“没学”,弯路没有消失,只是延后了。
- 📌 替代做法:一次只开一门课,做完它的作业集,再开下一门。
基础没打底就冲AI
先学框架调API、数学和系统以后再补,结果往往是只会用不会改,报错都定位不了——因为你不清楚底层在干什么。
- 替代做法:想做AI,至少先补线性代数、数据结构与算法和CS229,再碰框架。
资源索引
- CS学习规划 — 完整课程地图,每门课一句“为什么上”
- 使用指南 — 按三类读者给的自学方案
- 好书推荐 — 各课程对应的教材清单
- 实用工具箱 — Git、Vim、Docker等工具的笔记
课程清单年年会变,逻辑不变;想补一门课或改一处笔记,直接去仓库提PR。
【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考