📌 项目地址:PKUFlyingPig/cs-self-learning | ⭐ 74,125 颗星 | 🔧 HTML | 📜 未标注
为什么这份指南值得你花时间
我在大一买过一本《深入理解计算机系统》,封面崭新地放在书架第三年。不是不想读,而是不知道从哪一章开始、需要什么前置知识、作业做到什么程度算及格。这种“收藏从未停止,学习从未开始”的状态,一直到我在GitHub上刷到PKUFlyingPig的cs-self-learning仓库才终结。
仓库74125颗星,是中文区最活跃的CS自学路线之一。作者是北大计算机学生,把自己四年自学踩过的坑、筛选出的40+门课、每门课的作业量、前置要求、最佳学习顺序,全写进了这本在线书。
不是那种“推荐10门必读书”的列表,它是一张完整的地图:告诉你哪些课必须学透、哪些可以跳过、每门课需要多少时间、作业代码量大概多少行。比如MIT 6.S081操作系统,它标注“建议先修:C语言、数据结构;每周投入15-20小时;Lab约3000行C代码”。这个信息比课程官网的评价还有用。
它和TeachYourselfCS有什么本质不同
很多人知道TeachYourselfCS,那是国外开发者维护的9门核心课路线。cs-self-learning的不同在于:
-
覆盖范围更广。除了算法、操统、网络、编译这些核心,它把CV、NLP、强化学习、密码学、博弈论、分布式、图形学、Web开发、云服务全塞进去了。目标不是打好基础就收工,而是让你“什么都会一点”。
-
更贴合国内现实。每个课程链接都是可以直接访问的官网,不需要科学上网才能看。每门课都说清楚“英文授课,是否有中文字幕”,避免你打开MIT OCW才发现全是生肉。
-
有学习规划文件。仓库里
docs/CS学习规划.md按学期拆解了路线:第一学期学什么、第二学期学什么,直到大四。这对完全没方向的新手特别友好——直接照着排课,不用自己琢磨顺序。
但我也要说个实话:它的野心太大。目标里提到“2-3年内成为掌握C/C++/Java/JS/Python/Go/Rust等主流语言,对十几门领域均有所涉猎的全能程序员”。我觉得这个目标对大多数人是不现实的。书中规划每周至少要投入30小时以上,这意味着你基本没时间干别的。更现实的做法是:拿它当菜单,从中挑出你自己方向需要的6-8门课学扎实,其余作为拓展阅读。
你能从这本书里拿到什么
它不是一本你要从头读到尾的教材,而是按需查阅的参考索引。比如你要学操作系统,打开对应章节,它会推荐MIT 6.S081、Stanford CS140、Berkeley CS162三门课,每门都附了:
- 官网链接(直接能打开)
- 教材/视频/作业链接
- 前置知识清单(比如6.S081需要先修C和数据结构)
- 个人评价:“作业量大,但做完后对OS理解会质变”
- 建议的替代课程(如果某一门太难,可以用XX作为平替)
这种颗粒度的信息,比在知乎上搜“操作系统怎么学”要精准得多。
还有一个容易忽略的功能:页面评论。你可以在每门课页面下面留言,建立学习群(QQ/微信)。作者说已经有几十个群在跑,群友互相讨论lab、踩坑交流。我手动翻了几门课的评论区,看到有人在6.S081群里互相debug,有人分享Stanford CS144的实验环境配置脚本。
如何开始(没有任何命令行)
在线阅读:打开 https://csdiy.wiki ,左侧是目录树,点击任意章节展开。我推荐先看“CS学习规划”那一章的推荐路线,然后对照自己已有的基础,从第一章“计算导论”开始。
如果你想参与贡献(比如添加一门新课程),流程是:
- fork 仓库。
- 参考
template.md写课程页面,包含课程名称、官网、前置、评价等。 - 修改
mkdocs.yml添加导航条目。 - 提交Pull Request。
要求比较多:需要遵守中英混排规范(参考sparanoid那个仓库),并且新内容要附带英文翻译(参见issue #222)。这是为了支持英文版。我个人觉得这个门槛有点高,但反过来也让Contributor的质量有保证。
你需要知道的两个现实问题
英文授课是常态。 书中90%的课程都是英文原版,虽然部分有中文字幕,但建议直接啃英文。编程社区里英文资料占绝对主流,越早适应越轻松。如果你英语四级刚过,可以先拿Harvard CS50练手——它的语速慢、发音清晰,而且有完整中文翻译。
这不是速成路线。 书里列出的课,每一门都要2-4个月。MIT 6.006算法课需要完成8次编程作业和一场考试,Stanford CS143编译原理要做完5个逐渐凑出编译器的Lab。如果你只想“一个月学会Python做爬虫”,这本书会让你失望。它强调的是系统性基础,不是快速上手。
这个项目最大的价值在哪儿
我觉得不是课程列表本身——那些课程链接你自己也能搜到。它的价值在于给出了每门课的“真实难度”和“时间成本”,以及一门课学完之后,下一门该学什么。这解决了自学最大的痛点:担心自己选的课太难导致放弃,或者学了A之后不知道B该不该接上。
比如它明确告诉你:不要先学MIT 6.824分布式,因为它默认你做过6.S081和6.004。如果非要提前学,你会被Raft协议和Golang并发搞崩溃。这种“学习依赖图”在官方课程介绍里是看不到的。
另外它把课程按领域分成了基础必修(算法、OS、网络、编译)和前沿选修(ML、CV、NLP、密码学)两个层级。如果你只有一年时间,可以只看前六章。如果你有三年,可以跟着规划文件里的顺序慢慢啃。
贡献者是唯一能让它持续有价值的人
一个人维护40多门课的链接、评价、作业链接,迟早会失效。作者在README里专门写了贡献指南:你可以修正常见的笔误、更新过期的课程链接、补充新的优质课程。目前已经有超过100人提交过PR。我也提过一次:添加了UCSD的CSE 141L计算机体系结构课程,作者两天内合并并更新了英文翻译。
贡献的具体流程上面说过,但我觉得更重要的是心态:这不是给作者帮忙,是给所有后来者铺路。我当时填的那门课,不到两个月就有7个人在评论区问问题,我还能顺手回答几个。
谁适合直接用它
- 大二大三CS本科生:觉得学校课程太水,想用名校资源补足,但不知道从哪下手。
- 转专业或自学转行的人:需要一份系统化的、有依赖顺序的路线图,而不是零散的教程收藏。
- 已经有工作经验的程序员:想补CS基础,比如没学过操统、没做过Lab,直接去看6.S081的评价和前置要求,可以判断自己是否能跟。
如果你只想要“30天精通XX”,这本书不适合。如果你愿意花半年啃一门课、写几千行代码、在Lab里debug到凌晨,它会是你最好的导航仪。