master 3ec310016852 cached
279 files
555.1 KB
193.3k tokens
2 requests
Download .txt
Showing preview only (613K chars total). Download the full file or copy to clipboard to get everything.
Repository: PKUFlyingPig/cs-self-learning
Branch: master
Commit: 3ec310016852
Files: 279
Total size: 555.1 KB

Directory structure:
gitextract_rr3ofv8w/

├── .editorconfig
├── .github/
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── LICENSE
├── README.md
├── docs/
│   ├── CNAME
│   ├── CS学习规划.en.md
│   ├── CS学习规划.md
│   ├── Web开发/
│   │   ├── CS142.en.md
│   │   ├── CS142.md
│   │   ├── CS571.en.md
│   │   ├── CS571.md
│   │   ├── fullstackopen.en.md
│   │   ├── fullstackopen.md
│   │   ├── mitweb.en.md
│   │   └── mitweb.md
│   ├── index.en.md
│   ├── index.md
│   ├── 人工智能/
│   │   ├── CS188.en.md
│   │   ├── CS188.md
│   │   ├── CS50.en.md
│   │   ├── CS50.md
│   │   ├── Neural Networks:Zero to Hero.en.md
│   │   └── Neural Networks:Zero to Hero.md
│   ├── 体系结构/
│   │   ├── CA.en.md
│   │   ├── CA.md
│   │   ├── CS61C.en.md
│   │   ├── CS61C.md
│   │   ├── DDCA.en.md
│   │   ├── DDCA.md
│   │   ├── N2T.en.md
│   │   └── N2T.md
│   ├── 使用指南.en.md
│   ├── 使用指南.md
│   ├── 后记.md
│   ├── 好书推荐.md
│   ├── 并行与分布式系统/
│   │   ├── CS149.en.md
│   │   ├── CS149.md
│   │   ├── MIT6.824.en.md
│   │   └── MIT6.824.md
│   ├── 必学工具/
│   │   ├── CMake.en.md
│   │   ├── CMake.md
│   │   ├── Docker.en.md
│   │   ├── Docker.md
│   │   ├── Emacs.en.md
│   │   ├── Emacs.md
│   │   ├── GNU_Make.en.md
│   │   ├── GNU_Make.md
│   │   ├── Git.en.md
│   │   ├── Git.md
│   │   ├── GitHub.en.md
│   │   ├── GitHub.md
│   │   ├── LaTeX.en.md
│   │   ├── LaTeX.md
│   │   ├── Scoop.en.md
│   │   ├── Scoop.md
│   │   ├── Vim.en.md
│   │   ├── Vim.md
│   │   ├── thesis.en.md
│   │   ├── thesis.md
│   │   ├── tools.en.md
│   │   ├── tools.md
│   │   ├── workflow.en.md
│   │   ├── workflow.md
│   │   ├── 信息检索.en.md
│   │   ├── 信息检索.md
│   │   ├── 翻墙.en.md
│   │   └── 翻墙.md
│   ├── 操作系统/
│   │   ├── CS162.en.md
│   │   ├── CS162.md
│   │   ├── HITOS.en.md
│   │   ├── HITOS.md
│   │   ├── MIT6.S081.en.md
│   │   ├── MIT6.S081.md
│   │   ├── NJUOS.en.md
│   │   └── NJUOS.md
│   ├── 数学基础/
│   │   ├── MITLA.en.md
│   │   ├── MITLA.md
│   │   ├── MITmaths.en.md
│   │   ├── MITmaths.md
│   │   ├── information.en.md
│   │   └── information.md
│   ├── 数学进阶/
│   │   ├── 6.042J.en.md
│   │   ├── 6.042J.md
│   │   ├── CS126.en.md
│   │   ├── CS126.md
│   │   ├── CS70.en.md
│   │   ├── CS70.md
│   │   ├── The_Information_Theory_Pattern_Recognition_and_Neural_Networks.en.md
│   │   ├── The_Information_Theory_Pattern_Recognition_and_Neural_Networks.md
│   │   ├── convex.en.md
│   │   ├── convex.md
│   │   ├── numerical.en.md
│   │   └── numerical.md
│   ├── 数据库系统/
│   │   ├── 15445.en.md
│   │   ├── 15445.md
│   │   ├── 15799.en.md
│   │   ├── 15799.md
│   │   ├── CS122.en.md
│   │   ├── CS122.md
│   │   ├── CS186.en.md
│   │   ├── CS186.md
│   │   ├── CS346.en.md
│   │   └── CS346.md
│   ├── 数据科学/
│   │   ├── Data100.en.md
│   │   └── Data100.md
│   ├── 数据结构与算法/
│   │   ├── 6.006.en.md
│   │   ├── 6.006.md
│   │   ├── 6.046.en.md
│   │   ├── 6.046.md
│   │   ├── Algo.en.md
│   │   ├── Algo.md
│   │   ├── CS170.en.md
│   │   ├── CS170.md
│   │   ├── CS61B.en.md
│   │   └── CS61B.md
│   ├── 机器学习/
│   │   ├── CS189.en.md
│   │   ├── CS189.md
│   │   ├── CS229.en.md
│   │   ├── CS229.md
│   │   ├── ML.en.md
│   │   └── ML.md
│   ├── 机器学习系统/
│   │   ├── AICS.en.md
│   │   ├── AICS.md
│   │   ├── CMU10-414.en.md
│   │   ├── CMU10-414.md
│   │   ├── CSE234.en.md
│   │   ├── CSE234.md
│   │   ├── EML.en.md
│   │   ├── EML.md
│   │   ├── MLC.en.md
│   │   └── MLC.md
│   ├── 机器学习进阶/
│   │   ├── CMU10-708.en.md
│   │   ├── CMU10-708.md
│   │   ├── CS229M.en.md
│   │   ├── CS229M.md
│   │   ├── STA4273.en.md
│   │   ├── STA4273.md
│   │   ├── STAT8201.en.md
│   │   ├── STAT8201.md
│   │   ├── roadmap.en.md
│   │   └── roadmap.md
│   ├── 深度学习/
│   │   ├── CMU11-785.en.md
│   │   ├── CMU11-785.md
│   │   ├── CS224n.en.md
│   │   ├── CS224n.md
│   │   ├── CS224w.en.md
│   │   ├── CS224w.md
│   │   ├── CS230.en.md
│   │   ├── CS230.md
│   │   ├── CS231.en.md
│   │   ├── CS231.md
│   │   ├── CS285.en.md
│   │   ├── CS285.md
│   │   ├── EECS498-007.en.md
│   │   ├── EECS498-007.md
│   │   ├── LHY.en.md
│   │   ├── LHY.md
│   │   ├── MIT6-7960.en.md
│   │   ├── MIT6-7960.md
│   │   ├── NYU-DLSP21.en.md
│   │   └── NYU-DLSP21.md
│   ├── 深度生成模型/
│   │   ├── MIT6.S184.en.md
│   │   ├── MIT6.S184.md
│   │   ├── roadmap.en.md
│   │   ├── roadmap.md
│   │   └── 大语言模型/
│   │       ├── CMU11-667.en.md
│   │       ├── CMU11-667.md
│   │       ├── CMU11-711.en.md
│   │       ├── CMU11-711.md
│   │       ├── CMU11-868.en.md
│   │       ├── CMU11-868.md
│   │       ├── CMU15-779.en.md
│   │       └── CMU15-779.md
│   ├── 电子基础/
│   │   ├── EE16.en.md
│   │   ├── EE16.md
│   │   ├── Signals_and_Systems_AVO.en.md
│   │   ├── Signals_and_Systems_AVO.md
│   │   ├── signal.en.md
│   │   └── signal.md
│   ├── 系统安全/
│   │   ├── CS161.en.md
│   │   ├── CS161.md
│   │   ├── CSE365.en.md
│   │   ├── CSE365.md
│   │   ├── CSE466.en.md
│   │   ├── CSE466.md
│   │   ├── MIT6.1600.en.md
│   │   ├── MIT6.1600.md
│   │   ├── MIT6.858.en.md
│   │   ├── MIT6.858.md
│   │   ├── SEEDLabs.en.md
│   │   └── SEEDLabs.md
│   ├── 编程入门/
│   │   ├── C/
│   │   │   ├── CS50.en.md
│   │   │   ├── CS50.md
│   │   │   ├── Duke-Coursera-Intro-C.en.md
│   │   │   └── Duke-Coursera-Intro-C.md
│   │   ├── DeCal.en.md
│   │   ├── DeCal.md
│   │   ├── Functional/
│   │   │   ├── CS3110.en.md
│   │   │   ├── CS3110.md
│   │   │   ├── Haskell-MOOC.en.md
│   │   │   └── Haskell-MOOC.md
│   │   ├── Java/
│   │   │   ├── MIT 6.092.en.md
│   │   │   └── MIT 6.092.md
│   │   ├── MIT-Missing-Semester.en.md
│   │   ├── MIT-Missing-Semester.md
│   │   ├── Python/
│   │   │   ├── CS50P.en.md
│   │   │   ├── CS50P.md
│   │   │   ├── CS61A.en.md
│   │   │   ├── CS61A.md
│   │   │   ├── MIT6.100L.en.md
│   │   │   └── MIT6.100L.md
│   │   ├── Rust/
│   │   │   ├── CS110L.en.md
│   │   │   ├── CS110L.md
│   │   │   ├── cs220.en.md
│   │   │   ├── cs220.md
│   │   │   ├── cs431.en.md
│   │   │   └── cs431.md
│   │   └── cpp/
│   │       ├── AUT1400.en.md
│   │       ├── AUT1400.md
│   │       ├── CS106B_CS106X.en.md
│   │       ├── CS106B_CS106X.md
│   │       ├── CS106L.en.md
│   │       └── CS106L.md
│   ├── 编程语言设计与分析/
│   │   ├── CS242.en.md
│   │   ├── CS242.md
│   │   ├── Cambridge-Semantics.en.md
│   │   ├── Cambridge-Semantics.md
│   │   ├── NJU-SoftwareAnalysis.en.md
│   │   ├── NJU-SoftwareAnalysis.md
│   │   ├── PKU-SoftwareAnalysis.en.md
│   │   └── PKU-SoftwareAnalysis.md
│   ├── 编译原理/
│   │   ├── CS143.en.md
│   │   ├── CS143.md
│   │   ├── CS420.en.md
│   │   ├── CS420.md
│   │   ├── NJU-Compilers.en.md
│   │   ├── NJU-Compilers.md
│   │   ├── PKU-Compilers.en.md
│   │   ├── PKU-Compilers.md
│   │   ├── SJTU-Compilers.en.md
│   │   ├── SJTU-Compilers.md
│   │   ├── USTC-Compilers.en.md
│   │   └── USTC-Compilers.md
│   ├── 计算机图形学/
│   │   ├── 15462.en.md
│   │   ├── 15462.md
│   │   ├── CS148.en.md
│   │   ├── CS148.md
│   │   ├── GAMES101.en.md
│   │   ├── GAMES101.md
│   │   ├── GAMES103.en.md
│   │   ├── GAMES103.md
│   │   ├── GAMES202.en.md
│   │   ├── GAMES202.md
│   │   ├── USTC ComputerGraphics.en.md
│   │   └── USTC ComputerGraphics.md
│   ├── 计算机系统基础/
│   │   ├── CS110.en.md
│   │   ├── CS110.md
│   │   ├── CSAPP.en.md
│   │   └── CSAPP.md
│   ├── 计算机网络/
│   │   ├── CS144.en.md
│   │   ├── CS144.md
│   │   ├── CS168.en.md
│   │   ├── CS168.md
│   │   ├── topdown.en.md
│   │   ├── topdown.md
│   │   ├── topdown_ustc.en.md
│   │   └── topdown_ustc.md
│   └── 软件工程/
│       ├── 17803.en.md
│       ├── 17803.md
│       ├── 6031.en.md
│       ├── 6031.md
│       ├── CS169.en.md
│       └── CS169.md
├── mkdocs.yml
├── overrides/
│   └── partials/
│       └── comments.html
├── requirements.txt
├── template.en.md
└── template.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# http://editorconfig.org
root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.yml]
indent_size = 2


================================================
FILE: .github/workflows/ci.yml
================================================
name: ci

on:
  push:
    branches:
      - master
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - uses: actions/setup-python@v2
        with:
          python-version: 3.x

      - run: pip3 install -U -r requirements.txt
      - run: mkdocs gh-deploy --force


================================================
FILE: .gitignore
================================================
.DS_Store
.vscode/

/venv
/site


================================================
FILE: LICENSE
================================================
MIT License

Copyright © <2021> <copyright Yinmin Zhong>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

================================================
FILE: README.md
================================================
<div align="center">
  <img src=./docs/images/title.png >
</div>

# CS 自学指南

> _Everyone should enjoy CS if you have a good teacher to teach you a good course._

<a href="https://trendshift.io/repositories/4643" target="_blank"><img src="https://trendshift.io/api/badge/repositories/4643" alt="PKUFlyingPig%2Fcs-self-learning | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>

[![Website](https://img.shields.io/badge/website-csdiy.wiki-blue)](https://csdiy.wiki)
[![License](https://img.shields.io/github/license/PKUFlyingPig/cs-self-learning)](https://github.com/PKUFlyingPig/cs-self-learning/blob/master/LICENSE)
[![Issues](https://img.shields.io/github/issues/PKUFlyingPig/cs-self-learning)](https://github.com/PKUFlyingPig/cs-self-learning/issues)
[![Stars](https://img.shields.io/github/stars/PKUFlyingPig/cs-self-learning)](https://github.com/PKUFlyingPig/cs-self-learning)

新冠肆虐,网课当道,CS 爆火,这一系列的事件都让自学计算机成为了一种潮流。

随着欧美众多名校将质量极高的计算机课程全部开源,自学 CS 成了一件可操作性极强的事情。毫不夸张地说,只要你有毅力和兴趣,自学的成果完全不亚于你在国内任何一所大学受到的本科 CS 教育(当然,这里单指计算机专业领域,大学带给你的显然不止是专业知识)。

我很庆幸在自己大一的时候就选择了自学 CS 这条路,它让我爱上了计算机这门学科,也无比丰富了我的视野。

但同时,自学这条路也有很多困难和阻力:课程繁多不知如何选择,资料零散甚至残缺,作业难度不知深浅,课内任务还需要花时间应付······这些主客观因素叠加到一起,使得好课虽多,却只能在收藏夹里吃灰。

在大学的第四个年头,我想把这一路自学走来的经验和教训,把那些让我受益终身的课程记录下来,分享给大家,形成了这本 CS 自学指南,以期能给所有想自学计算机的朋友一点帮助。

我的目标是让一个刚刚接触计算机的小白,可以完全凭借这些开源社区的优质资源,少走弯路,在 2-3 年内成长为一个有扎实的数学功底和代码能力,经历过数十个千行代码量的 Project 的洗礼,掌握至少 C/C++/Java/JS/Python/Go/Rust 等主流语言,对算法、电路、体系、网络、操统、编译、人工智能、机器学习、计算机视觉、自然语言处理、强化学习、密码学、信息论、博弈论、数值分析、统计学、分布式、数据库、图形学、Web 开发、云服务、超算等等方面均有所涉猎的全能程序员。此后,无论是选择科研还是就业,我相信你都会有相当的竞争力。

你可以[在线免费阅读这本书](https://csdiy.wiki)。英文版请移步[这里](https://csdiy.wiki/en/)。

## 如何成为贡献者

一个人的力量终究是有限的,对于书中任意章节你若有想要补充的内容,欢迎各位提出 [Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork)。如果你想贡献一门新的课程,可以参考目前 repo 中的 [template](./template.md) 文件作为模版,并在 [mkdocs.yml](./mkdocs.yml) 文件中添加其 navigation,当然你还可以在 [CS 学习规划](./docs/CS学习规划.md) 里的对应模块为其添加言简意赅的导语。如果你有想推荐的书籍,请参考 [好书推荐](https://raw.githubusercontent.com/PKUFlyingPig/cs-self-learning/master/docs/%E5%A5%BD%E4%B9%A6%E6%8E%A8%E8%8D%90.md) 模块上方的注释按相应格式添加内容。

对于中英混合排版的要点规范,可以参考[这个仓库](https://github.com/sparanoid/chinese-copywriting-guidelines/blob/master/README.zh-Hans.md),我们将会对您的 Pull Request 做相应的校对,具体原因参见这个 [issue](https://github.com/PKUFlyingPig/cs-self-learning/issues/114)。

本书支持英文版,因此贡献的内容需要提供对应的英文翻译,具体流程可以参考这个 [issue](https://github.com/PKUFlyingPig/cs-self-learning/issues/222)。

同时由于个人水平有限,书中难免有笔误甚至概念错误之处,也请各位不吝赐教,在 issue 中提出来。

## 关于交流社区的建立

本书支持页面评论功能,因此如果你想自学某课程,可以自己建立群聊后(QQ 微信皆可)在对应的课程页面下方发表评论,注明你的学习目标以及加入交流群的途径。此外,过去已有不少朋友在 issue 里建立了类似群聊,可以自行选择直接加入。

## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=PKUFlyingPig/cs-self-learning&type=Timeline)](https://star-history.com/#PKUFlyingPig/cs-self-learning&Timeline)

## ✨ 鸣谢

特别感谢 @[AlfredThiel](https://github.com/AlfredThiel) 为项目制作了精美的 Logo。

<!--  support by https://contrib.rocks -->
<a href="https://github.com/PKUFlyingPig/cs-self-learning/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=PKUFlyingPig/cs-self-learning"/>
</a>

## 许可

项目贡献者编写的部分依照 [MIT LICENSE](https://www.tawesoft.co.uk/kb/article/mit-license-faq)。

其余部分(包括但不限于书中提到的课程资源、开源书籍以及视频内容)遵循原作者规定的许可。


================================================
FILE: docs/CNAME
================================================
csdiy.wiki

================================================
FILE: docs/CS学习规划.en.md
================================================
# A Reference Guide for CS Learning

The field of computer science is vast and complex, with a seemingly endless sea of knowledge. Each specialized area can lead to limitless learning if pursued deeply. Therefore, a clear and definite study plan is very important. I've taken some detours in my years of self-study and finally distilled the following content for your reference.

Before you start learning, I highly recommend a popular science video series for beginners: [Crash Course: Computer Science](https://www.bilibili.com/video/BV1EW411u7th). In just 8 hours, it vividly and comprehensively covers various aspects of computer science: the history of computers, how computers operate, the important modules that make up a computer, key ideas in computer science, and so on. As its slogan says, *Computers are not magic!* I hope that after watching this video, everyone will have a holistic perception of computer science and embark on the detailed and in-depth learning content below with interest.

## Essential Tools

> As the saying goes: sharpening your axe will not delay your job of chopping wood. If you are a pure beginner in the world of computers, learning some tools will make you more efficient.

**Learn to ask questions**: You might be surprised that asking questions is the first one listed? I think in the open-source community, learning to ask questions is a very important ability. It involves two aspects. First, it indirectly cultivates your ability to solve problems independently, as the cycle of forming a question, describing it, getting answers from others, and then understanding the response is quite long. If you expect others to remotely assist you with every trivial issue, then the world of computers might not suit you. Second, if after trying, you still can't solve a problem, you can seek help from the open-source community. But at that point, how to concisely explain your situation and goal to others becomes particularly important. I recommend reading the article [How To Ask Questions The Smart Way](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md), which not only increases the probability and efficiency of solving your problems but also keeps those who provide answers in the open-source community in a good mood.

**Learn to be a hacker**: [MIT-Missing-Semester](./编程入门/MIT-Missing-Semester.md) covers many useful tools for a hacker and provides detailed usage instructions. I strongly recommend beginners to study this course. However, one thing to note is that the course occasionally refers to terms related to the development process. Therefore, it is recommended to study it at least after completing an introductory computer science course.

**[GFW](./必学工具/翻墙.md)**: For well-known reasons, sites like Google and GitHub are not accessible in mainland China. However, in many cases, Google and StackOverflow can solve 99% of the problems encountered during development. Therefore, learning to use a VPN is almost an essential skill for a mainland CSer. (Considering legal issues, the methods provided in this book are only applicable to users with a Peking University email address).

**Command Line**: Proficiency in using the command line is often overlooked or considered difficult to master, but in reality, it greatly enhances your flexibility and productivity as an engineer. [The Art of Command Line](https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md) is a classic tutorial that started as a question on Quora, but with the contribution of many experts, it has become a top GitHub project with over 100,000 stars, translated into dozens of languages. The tutorial is not long, and I highly recommend everyone to read it repeatedly and internalize it through practice. Also, mastering shell script programming should not be overlooked, and you can refer to this [tutorial](https://www.shellscript.sh/).

**IDE (Integrated Development Environment)**: Simply put, it's where you write your code. The importance of an IDE for a programmer goes without saying, but many IDEs are designed for large-scale projects and are quite bulky and overly feature-rich. Nowadays, some lightweight text editors with rich plugin ecosystems can basically meet the needs of daily lightweight programming. My personal favorites are VS Code and Sublime (the former has a very simple plugin configuration, while the latter is a bit more complex but aesthetically pleasing). Of course, for large projects, I would still use slightly heavier IDEs, such as Pycharm (Python), IDEA (Java), etc. (Disclaimer: all IDEs are the best in the world).

**[Vim](./必学工具/Vim.md)**: A command-line editor. Vim has a somewhat steep learning curve, but mastering it, I think, is very necessary because it will greatly improve your development efficiency. Most modern IDEs also support Vim plugins, allowing you to retain the coolness of a geek while enjoying a modern development environment.

**[Emacs](./必学工具/Emacs.md)**: A classic editor that stands alongside Vim, with equally high development efficiency and more powerful expandability. It can be configured as a lightweight editor or expanded into a custom IDE, and even more sophisticated tricks.

**[Git](./必学工具/Git.md)**: A version control tool for your project. Git, created by the father of Linux, Linus, is definitely one of the must-have tools for every CS student.

**[GitHub](./必学工具/GitHub.md)**: A code hosting platform based on Git. The world's largest open-source community and a gathering place for CS experts.

**[GNU Make](./必学工具/GNU_Make.md)**: An engineering build tool. Proficiency in GNU Make will help you develop a habit of modularizing your code and familiarize you with the compilation and linking processes of large projects.

**[CMake](./必学工具/CMake.md)**: A more powerful build tool than GNU Make, recommended for study after mastering GNU Make.

**[LaTex](./必学工具/LaTeX.md)**: <del>Pretentious</del> Paper typesetting tool.

**[Docker](./必学工具/Docker.md)**: A lighter-weight software packaging and deployment tool compared to virtual machines.

**[Practical Toolkit](./必学工具/tools.md)**: In addition to the tools mentioned above that are frequently used in development, I have also collected many practical and interesting free tools, such as download tools, design tools, learning websites, etc.

**[Thesis](./必学工具/thesis.md)**: Tutorial for writing graduation thesis in Word.

## Recommended Books

> I believe a good textbook should be people-oriented, rather than a display of technical jargon. It's certainly important to tell readers "what it is," but a better approach would be for the author to integrate decades of experience in the field into the book and narratively convey to the reader "why it is" and what should be done in the future.

[Link here](./好书推荐.md)

## Environment Setup

> What you think of as development — coding frantically in an IDE for hours.
>
> Actual development — setting up the environment for several days without starting to code.

### PC Environment Setup

If you are a Mac user, you're in luck, as this [guide](https://sourabhbajaj.com/mac-setup/) will walk you through setting up the entire development environment. If you are a Windows user, thanks to the efforts of the open-source community, you can enjoy a similar experience with [Scoop](./必学工具/Scoop.md).

Additionally, you can refer to an [environment setup guide][guide] inspired by [6.NULL MIT-Missing-Semester](./编程入门/MIT-Missing-Semester.md), focusing on terminal beautification. It also includes common software sources (such as GitHub, Anaconda, PyPI) for acceleration and replacement, as well as some IDE configuration and activation tutorials.

[guide]: https://taylover2016.github.io/%E6%96%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E6%89%8B%E6%8C%87%E5%8D%97%EF%BC%88%E6%96%B0%E6%89%8B%E5%90%91%EF%BC%89/index.html

### Server-Side Environment Setup

Server-side operation and maintenance require basic use of Linux (or other Unix-like systems) and fundamental concepts like processes, devices, networks, etc. Beginners can refer to the [Linux 101](https://101.lug.ustc.edu.cn/) online notes compiled by the Linux User Association of the University of Science and Technology of China. If you want to delve deeper into system operation and maintenance, you can refer to the [Aspects of System Administration](https://stevens.netmeister.org/615/) course.

Additionally, if you need to learn a specific concept or tool, I recommend a great GitHub project, [DevOps-Guide](https://github.com/Tikam02/DevOps-Guide), which covers a lot of foundational knowledge and tutorials in the administration field, such as Docker, Kubernetes, Linux, CI-CD, GitHub Actions, and more.

## Course Map

> As mentioned at the beginning of this chapter, this course map is merely a **reference guide** for course planning, from my perspective as an undergraduate nearing graduation. I am acutely aware that I neither have the right nor the capability to preach to others about “how one should learn”. Therefore, if you find any issues with the course categorization and selection below, I fully accept and deeply apologize for them. You can tailor your own course map in the next section [Customize Your Own Course Map](#yourmap).

Apart from courses labeled as *basic* or *introductory*, there is no explicit sequence in the following categories. As long as you meet the prerequisites for a course, you are free to choose any course according to your needs and interests.

### Mathematical Foundations

#### Calculus and Linear Algebra

As a freshman, mastering calculus and linear algebra is as important as learning to code. This point has been reiterated countless times by predecessors, but I feel compelled to emphasize it again: mastering calculus and linear algebra is really important! You might complain that these subjects are forgotten after exams, but I believe that indicates a lack of deep understanding of their essence. If you find the content taught in class to be obscure, consider referring to MIT’s [Calculus Course](./数学基础/MITmaths.md) and [18.06: Linear Algebra](./数学基础/MITLA.md) course notes. For me, they greatly deepened my understanding of the essence of calculus and linear algebra. Also, I highly recommend the maths YouTuber [**3Blue1Brown**](https://www.youtube.com/c/3blue1brown), whose channel features videos explaining the core of mathematics with vivid animations, offering both depth and breadth of high quality.

#### Introduction to Information Theory

For computer science students, gaining some foundational knowledge in information theory early on is beneficial. However, most information theory courses are targeted towards senior or even graduate students, making them quite inaccessible to beginners. MIT’s [6.050J: Information theory and Entropy](./数学基础/information.md) is tailored for freshmen, with almost no prerequisites, covering coding, compression, communication, information entropy, and more, which is very interesting.

### Advanced Mathematics

#### Discrete Mathematics and Probability Theory

Set theory, graph theory, and probability theory are essential tools for algorithm derivation and proof, as well as foundations for more advanced mathematical courses. However, the teaching of these subjects often falls into a rut of being overly theoretical and formalistic, turning classes into mere recitations of theorems and conclusions without helping students grasp the essence of these theories. If theory teaching can be interspersed with examples of algorithm application, students can expand their algorithm knowledge while appreciating the power and charm of theory.

[UCB CS70: Discrete Math and Probability Theory](./数学进阶/CS70.md) and [UCB CS126: Probability Theory](./数学进阶/CS126.md) are UC Berkeley’s probability courses. The former covers the basics of discrete mathematics and probability theory, while the latter delves into stochastic processes and more advanced theoretical content. Both emphasize the integration of theory and practice and feature abundant examples of algorithm application, with the latter including numerous Python programming assignments to apply probability theory to real-world problems.

#### Numerical Analysis

For computer science students, developing computational thinking is crucial. Modeling and discretizing real-world problems, and simulating and analyzing them on computers, are vital skills. Recently, the [Julia](https://julialang.org/) programming language, developed by MIT, has become popular in the field of numerical computation with its C-like speed and Python-friendly syntax. Many MIT mathematics courses have started using Julia as a teaching tool, presenting complex mathematical theories through clear and intuitive code.

[ComputationalThinking](https://computationalthinking.mit.edu/Spring21/) is an introductory course in computational thinking offered by MIT. All course materials are open source and accessible on the course website. Using the Julia programming language, the course covers image processing, social science and data science, and climatology modeling, helping students understand algorithms, mathematical modeling, data analysis, interactive design, and graph presentation. The course content, though not difficult, profoundly impressed me with the idea that the allure of science lies not in obscure theories or jargon but in presenting complex concepts through vivid examples and concise, deep language.

After completing this experience course, if you’re still eager for more, consider MIT’s [18.330: Introduction to Numerical Analysis](./数学进阶/numerical.md). This course also uses Julia for programming assignments but is more challenging and in-depth. It covers floating-point encoding, root finding, linear systems, differential equations, and more, with the main goal of using discrete computer representations to estimate and approximate continuous mathematical concepts. The course instructor has also written an accompanying open-source textbook, [Fundamentals of Numerical Computation](https://fncbook.github.io/fnc/frontmatter.html), which includes abundant Julia code examples and rigorous formula derivations.

If you’re still not satisfied, MIT’s graduate course in numerical analysis, [18.335: Introduction to Numerical Methods][18.335], is also available for reference.

[18.335]: https://ocw.mit.edu/courses/mathematics/18-335j-introduction-to-numerical-methods-spring-2019/index.htm

#### Differential Equations

Wouldn't it be cool if the motion and development of everything in the world could be described and depicted with equations? Although differential equations are not a mandatory part of any CS curriculum, I believe mastering them provides a new perspective to view the world.

Since differential equations often involve complex variable functions, you can refer to [MIT18.04: Complex Variables Functions][MIT18.04] course notes to fill in prerequisite knowledge.

[MIT18.04]: https://ocw.mit.edu/courses/mathematics/18-04-complex-variables-with-applications-spring-2018/

[MIT18.03: Differential Equations][MIT18.03] mainly covers the solution of ordinary differential equations, and on this basis, [MIT18.152: Partial Differential Equations][MIT18.152] dives into the modeling and solving of partial differential equations. With the powerful tool of differential equations, you will gain enhanced capabilities in modeling real-world problems and intuitively grasping the essence among various noisy variables.

[MIT18.03]: https://ocw.mit.edu/courses/mathematics/18-03sc-differential-equations-fall-2011/unit-i-first-order-differential-equations/
[MIT18.152]: https://ocw.mit.edu/courses/mathematics/18-152-introduction-to-partial-differential-equations-fall-2011/index.htm

### Advanced Mathematical Topics

As a computer science student, I often hear arguments about the uselessness of mathematics. While I neither agree nor have the authority to oppose such views, if everything is forcibly categorized as useful or useless, it indeed becomes quite dull. Therefore, the following advanced mathematics courses, aimed at senior and even graduate students, are available for those interested.

#### Convex Optimization

[Standford EE364A: Convex Optimization](./数学进阶/convex.md)

#### Information Theory

[MIT6.441: Information Theory](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-441-information-theory-spring-2016/syllabus/)

#### Applied Statistics

[MIT18.650: Statistics for Applications](https://ocw.mit.edu/courses/mathematics/18-443-statistics-for-applications-spring-2015/index.htm)

#### Elementary Number Theory

[MIT18.781: Theory of Numbers](https://ocw.mit.edu/courses/mathematics/18-781-theory-of-numbers-spring-2012/index.htm)

#### Cryptography

[Standford CS255: Cryptography](http://crypto.stanford.edu/~dabo/cs255/)

### Programming Fundamentals

> Languages are tools, and you choose the right tool for the right job. Since there's no universally perfect tool, there's no universally perfect language.

#### General

- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)
- [Harvard CS50: This is CS50x](编程入门/C/CS50.md)

#### Java

- [MIT 6.092: Introduction To Programming In Java](编程入门/Java/MIT%206.092.md)

#### Python

- [CS50P: CS50's Introduction to Programming with Python](编程入门/Python/CS50P.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/Python/CS61A.md)
- [MIT6.100L: Introduction to CS and Programming using Python](编程入门/Python/MIT6.100L.md)

#### C++

- [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/cpp/CS106L.md)

#### Rust

- [Stanford CS110L: Safety in Systems Programming](编程入门/Rust/CS110L.md)

#### OCaml

- [Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful](编程入门/Functional/CS3110.md)

### Electronics Fundamentals

#### Basics of Circuits

For computer science students, understanding basic circuit knowledge and experiencing the entire pipeline from sensor data collection to data analysis and algorithm prediction can be very helpful for future learning and developing computational thinking. [EE16A&B: Designing Information Devices and Systems I&II](./电子基础/EE16.md) at UC Berkeley are introductory courses for freshmen in electrical engineering. EE16A focuses on collecting and analyzing data from the real environment through circuits, while EE16B focuses on analyzing these collected data to make predictive actions.

#### Signals and Systems

Signals and Systems is a course I find very worthwhile. Initially, I studied it out of curiosity about Fourier Transform, but after completing it, I was amazed at how Fourier Transform provided a new perspective to view the world, just like differential equations, immersing you in the elegance and magic of precisely depicting the world with mathematics.

[MIT 6.003: Signal and Systems][MIT6.003] provides all course recordings, written assignments, and answers. You can also check out this course's [ancient version](电子基础/Signals_and_Systems_AVO.md).

[MIT6.003]: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-003-signals-and-systems-fall-2011/lecture-videos/lecture-1-signals-and-systems/

[UCB EE120: Signal and Systems](电子基础/signal.md) has very well-written notes on Fourier Transform and provides many interesting Python programming assignments to practically apply the theories and algorithms of signals and systems.

### Data Structures and Algorithms

Algorithms are the core of computer science and the foundation for almost all professional courses. How to abstract real-world problems into algorithmic problems mathematically and solve them under time and memory constraints using appropriate data structures is the eternal theme of algorithm courses. If you are fed up with your teacher's rote teaching, I highly recommend UC Berkeley's [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) and Princeton's [Coursera: Algorithms I & II](数据结构与算法/Algo.md). Both courses are taught in a deep yet simple manner and have rich and interesting programming experiments to integrate theory with knowledge.

Both of these courses are based on Java. If you prefer C/C++, you can refer to Stanford's data structure and basic algorithm course [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md). For those who prefer Python, you can learn MIT's introductory algorithm course [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md).

For those interested in more advanced algorithms and NP problems, consider UC Berkeley's course on algorithm design and analysis [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md) or MIT's advanced algorithms course [MIT 6.046: Design and Analysis of Algorithms](数据结构与算法/6.046.md).

### Software Engineering

#### Introductory Course

There is a fundamental difference between “working” code and high-quality industrial code. Therefore, I highly recommend senior students to take [MIT 6.031: Software Construction](软件工程/6031.md). Based on Java, this course teaches how to write high-quality code that is **bug-resistant, clear, and easy to maintain and modify** with rich and detailed reading materials and well-designed programming exercises. From macro data structure design to minor details like how to write comments, following these details and experiences summarized by predecessors can greatly benefit your future programming career.



#### Professional Course

Of course, if you want to systematically take a software engineering course, I recommend UC Berkeley’s [UCB CS169: Software Engineering](软件工程/CS169.md). However, unlike most software engineering courses, this course does not involve the traditional **design and document** model that emphasizes various class diagrams, flowcharts, and document design. Instead, it adopts the **Agile Development** model, which has become popular in recent years, featuring small team rapid iterations and the **Software as a Service** model using cloud platforms.

### Computer Architecture

#### Introductory Course

Since childhood, I've always heard that the world of computers is made of 0s and 1s, which I didn't understand but was deeply impressed by. If you also have this curiosity, consider spending one to two months learning the barrier-free computer course [Coursera: Nand2Tetris](体系结构/N2T.md). This comprehensive course starts from 0s and 1s, allowing you to build a computer by hand and run a Tetris game on it. It covers compilation, virtual machines, assembly, architecture, digital circuits, logic gates, etc., from top to bottom, from software to hardware. Its difficulty is carefully designed to omit many complex details of modern computers, extracting the most core essence, aiming to make it understandable to everyone. In lower levels, establishing a bird's-eye view of the entire computer system is very beneficial.

#### Professional Course

Of course, if you want to delve into the complex details of modern computer architecture, you still need to take a university-level course [UCB CS61C: Great Ideas in Computer Architecture](体系结构/CS61C.md). This course emphasizes practice, and you will hand-write assembly to construct neural networks in projects, build a CPU from scratch, and more, all of which will give you a deeper understanding of computer architecture, beyond the monotony of "fetch, decode, execute, memory access, write back."

### Introduction to Computer Systems

Computer systems are a vast and profound topic. Before delving into a specific area, having a macro conceptual understanding of each field and some general design principles will reinforce core and even philosophical concepts in your subsequent in-depth study, rather than being shackled by complex internal details and various tricks. In my opinion, the key to learning systems is to grasp these core concepts to design and implement your own systems.

[MIT6.033: System Engineering](http://web.mit.edu/6.033/www/) is MIT's introductory course to systems, covering topics like operating systems, networks, distributed systems, and system security. In addition to the theory, this course also teaches some writing and expression skills, helping you learn how to design, introduce, and analyze your own systems. The accompanying textbook *Principles of Computer System Design: An Introduction* is also very well written and recommended for reading.

[CMU 15-213: Introduction to Computer System](计算机系统基础/CSAPP.md) is CMU’s introductory systems course, covering architecture, operating systems, linking, parallelism, networks, etc., with both breadth and depth. The accompanying textbook *Computer Systems: A Programmer's Perspective* is also of very high quality and strongly recommended for reading.

### Operating Systems

> There’s nothing like writing your own kernel to deepen your understanding of operating systems.

Operating systems provide a set of elegant abstractions to virtualize various complex underlying hardware, providing rich functional support for all application software. Understanding the design principles and internal mechanisms of operating systems is greatly beneficial for a programmer who is not satisfied with just being a coder. Out of love for operating systems, I have taken many operating system courses in different colleges, each with its own focus and merits. You can choose based on your interests.

[MIT 6.S081: Operating System Engineering](操作系统/MIT6.S081.md), offered by the famous PDOS lab at MIT, features 11 projects that modify an elegantly implemented Unix-like operating system xv6. This course made me realize that systems is not about reading PPTs; it's about writing tens of thousands of lines of code.

[UCB CS162: Operating System](操作系统/CS162.md), UC Berkeley’s operating system course, uses the same Project as Stanford — an educational operating system, Pintos. As the teaching assistant for Peking University’s 2022 and 2023 Spring Semester Operating Systems Course, I introduced and improved this Project. The course resources are fully open-sourced, with details on [the course website](https://pku-os.github.io).

[NJU: Operating System Design and Implementation](操作系统/NJUOS.md), offered by Professor Yanyan Jiang at Nanjing University, provides an in-depth and accessible explanation of various operating system concepts, combining a unique system perspective with rich code examples. All course content is in Chinese, making it very convenient for students.

[HIT OS: Operating System](操作系统/HITOS.md), taught by Professor Zhijun Li at Harbin Institute of Technology, is a Chinese course on operating systems. Based on the Linux 0.11 source code, the course places great emphasis on code practice, explaining the intricacies of operating systems from the student's perspective.

### Parallel and Distributed Systems

In recent years, the most common phrase heard in CS lectures is "Moore's Law is coming to an end." As single-core capabilities reach their limits, multi-core and many-core architectures are becoming increasingly important. The changes in hardware necessitate adaptations and changes in the upper-level programming logic. Writing parallel programs has nearly become a mandatory skill for programmers to fully utilize hardware performance. Meanwhile, the rise of deep learning has brought unprecedented demands on computing power and storage, making the deployment and optimization of large-scale clusters a hot topic.

#### Parallel Computing

[CMU 15-418 / Stanford CS149: Parallel Computing](并行与分布式系统/CS149.md) takes you deep into the design principles and trade-offs of modern parallel computing architectures. The course teaches you how to fully leverage hardware resources and software programming frameworks—such as CUDA, MPI, and OpenMP—to write high-performance parallel programs.

#### Distributed Systems

[MIT 6.824: Distributed Systems](并行与分布式系统/MIT6.824.md), like MIT 6.S081, is offered by MIT’s renowned PDOS (Parallel and Distributed Operating Systems) lab. The course is taught by Professor Robert Morris, who was once a legendary hacker—famously known for creating the first computer worm, the Morris Worm.

Each lecture focuses on an in-depth reading of a classic paper in the field of distributed systems, through which the course conveys essential principles and key techniques for designing and implementing distributed systems. The course is also famous for its challenging projects: over the course of four progressively difficult programming assignments, students build a key-value store framework based on the Raft consensus algorithm. These projects offer a firsthand experience of the randomness and complexity brought by concurrency and distribution—often felt most acutely during painful debugging sessions.

### System Security

Whether you chose computer science because of a youthful dream of becoming a hacker, the reality is that becoming a hacker is a long and difficult journey.

#### Theoretical Courses

[UCB CS161: Computer Security](系统安全/CS161.md) at UC Berkeley covers stack attacks, cryptography, website security, network security, and more.

[SU SEED Labs](系统安全/SEEDLabs.md) at Syracuse University, supported by a $1.3 million grant from the NSF, has developed hands-on experimental exercises (called SEED Labs) for cybersecurity education. The course emphasizes both theoretical teaching and practical exercises, including detailed open-source lectures, video tutorials, textbooks (printed in multiple languages), and a ready-to-use virtual machine and Docker-based attack-defense environment. This project is currently used by 1,050 institutions worldwide and covers a wide range of topics in computer and information security, including software security, network security, web security, operating system security, and mobile app security.

#### Practical Courses

After mastering this theoretical knowledge, it's essential to cultivate and hone these "hacker skills" in practice. [CTF competitions](https://ctf-wiki.org/) are a popular way to comprehensively test your understanding and application of computer knowledge in various fields. Peking University also successfully held the [0th and 1st editions](https://geekgame.pku.edu.cn/), encouraging participation to improve skills through practice. Here are some resources I use for learning (and relaxing):

- [CTF-wiki](https://ctf-wiki.org/)
- [CTF-101](https://ctf101.org/)
- [Hacker-101](https://ctf.hacker101.com/)

### Computer Networks

> There’s nothing like writing your own TCP/IP protocol stack to deepen your understanding of computer networks.

The renowned [Stanford CS144: Computer Network](计算机网络/CS144.md) includes 8 projects that guide you in implementing the entire TCP/IP protocol stack.

If you're mainly interested in gaining a theoretical understanding of computer networks, it's recommended to read the [textbook](https://textbook.cs168.io/) that accompanies the course [UCB CS168](计算机网络/CS168.md).


### Database Systems

> There’s nothing like building your own relational database to deepen your understanding of database systems.

CMU's famous database course [CMU 15-445: Introduction to Database System](数据库系统/15445.md) guides you through 4 projects to add various functionalities to the educational relational database [bustub](https://github.com/cmu-db/bustub). The experimental evaluation framework is also open-source, making it very suitable for self-learning. The course experiments also use many new features of C++11, offering a great opportunity to strengthen C++ coding skills.

Berkeley, as the birthplace of the famous open-source database PostgreSQL, has its own course [UCB CS186: Introduction to Database System](数据库系统/CS186.md) where you will implement a relational database in Java that supports SQL concurrent queries, B+ tree indexing, and fault recovery.

### Compiler Theory

> There’s nothing like writing your own compiler to deepen your understanding of compilers.

[Stanford CS143: Compilers](编译原理/CS143.md) guides you through the process of writing a compiler.

### Web Development

Front-end and back-end development are often overlooked in standard computer science curricula, but in reality, having these skills can be extremely beneficial—for example, creating your own personal website or building a polished demo page for a course project.

If you're looking for a quick, two-week crash course, I recommend the [MIT Web Development Course](Web开发/mitweb.md). For a more comprehensive and structured learning experience, check out [Stanford CS142: Web Applications](Web开发/CS142.md).

### Computer Graphics

I personally don't have much background in computer graphics, so I've collected a selection of high-quality courses recommended by the community for those interested in exploring the field.

- [Stanford CS148](计算机图形学/CS148.md)
- [Games101](计算机图形学/GAMES101.md)
- [Games103](计算机图形学/GAMES103.md)
- [Games202](计算机图形学/GAMES202.md)

### Data Science

Data science, machine learning, and deep learning are closely related, with a focus on practical application. Berkeley's [UCB Data100: Principles and Techniques of Data Science](数据科学/Data100.md) lets you master various data analysis tools and algorithms through extensive programming exercises. The course guides you through extracting desired results from massive datasets and making predictions about future data or user behavior. For those looking to learn industrial-level data mining and analysis techniques, Stanford's big data mining course [CS246: Mining Massive Data Sets](https://web.stanford.edu/class/cs246/) is an option.

### Artificial Intelligence

Artificial intelligence has been one of the hottest fields in computer science over the past decade. If you're not content with just hearing about AI advancements in the media and want to delve into the subject, I highly recommend Harvard's renowned CS50 series AI course [Harvard CS50: Introduction to AI with Python](人工智能/CS50.md). The course is concise and covers several major branches of traditional AI, supplemented with rich and interesting Python programming exercises to reinforce your understanding of AI algorithms. However, the content is somewhat simplified for online learners and doesn't delve into deep mathematical theories. For a more systematic and in-depth study, consider an undergraduate-level course like Berkeley's [UCB CS188: Introduction to Artificial Intelligence](人工智能/CS188.md). This course's projects feature the classic game "Pac-Man," allowing you to use AI algorithms to play the game, which is very fun.

### Machine Learning

The most significant recent progress in the field of machine learning is the emergence of deep learning, a branch based on deep neural networks. However, many algorithms based on statistical learning are still widely used in data analysis. If you're new to machine learning and don't want to get bogged down in complex mathematical proofs, start with Andrew Ng's (Enda Wu) [Coursera: Machine Learning](机器学习/ML.md). This course is well-known in the field of machine learning, and Enda Wu, with his profound theoretical knowledge and excellent presentation skills, makes many complex algorithms accessible and practical. The accompanying assignments are also of high quality, helping you get started quickly.

However, completing this course will only give you a general understanding of the field of machine learning. To truly understand the mathematical principles behind these "magical" algorithms or to engage in related research, you need a more "mathematical" course, such as [Stanford CS229: Machine Learning](机器学习/CS229.md) or [UCB CS189: Introduction to Machine Learning](机器学习/CS189.md).

If you plan to pursue scientific research in machine learning theory, you can refer to the [advanced learning roadmap](./机器学习进阶/roadmap.md) shared by [Yao Fu](https://franxyao.github.io/), which includes more in-depth, graduate-level courses.


### Deep Learning

The popularity of AlphaGo a few years ago brought deep learning to the public eye, leading many universities to establish related majors. Many other areas of computer science also use deep learning technology for research, so regardless of your field, you will likely encounter some needs related to neural networks and deep learning. For a quick introduction, I again recommend Andrew Ng's (Enda Wu) [Coursera: Deep Learning](深度学习/CS230.md), a top-rated course on Coursera. Additionally, if you find English-language courses challenging, consider Professor Hongyi Li's course [National Taiwan University: Machine Learning](深度学习/LHY.md). Although titled "Machine Learning," this course covers almost all areas of deep learning and is very comprehensive, making it suitable for getting a broad overview of the field. The professor is also very humorous, with frequent witty remarks in class.

Due to the rapid development of deep learning, there are now many research branches. For further in-depth study, consider the following representative courses:

If you want rigorous fundamentals, start with CMU 11-785: it is dense, practical, and has very little filler content. MIT 6.7960 provides broader coverage beyond mainstream LLM topics, including CV-oriented material, and its assignments/projects are feasible for self-learners. NYU DLSP21 is especially notable because it is taught by Yann LeCun, offering a rare public opportunity to follow a full deep learning course from him.

#### Fundamentals and Breadth

- [CMU 11-785: Introduction to Deep Learning](深度学习/CMU11-785.md)
- [MIT 6.7960: Deep Learning](深度学习/MIT6-7960.md)
- [NYU DLSP21: NYU Deep Learning Spring 2021](深度学习/NYU-DLSP21.md)

#### Computer Vision

- [UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision](深度学习/EECS498-007.md)
- [Stanford CS231n: CNN for Visual Recognition](深度学习/CS231.md)

#### Natural Language Processing

- [Stanford CS224n: Natural Language Processing](深度学习/CS224n.md)

#### Graph Neural Networks

- [Stanford CS224w: Machine Learning with Graphs](深度学习/CS224w.md)

#### Reinforcement Learning

- [UCB CS285: Deep Reinforcement Learning](深度学习/CS285.md)

### Deep Learning Systems

As deep learning models grow in importance and demand increasing computational resources, optimizing the underlying systems for training and inference has become increasingly critical. For those looking to enter this field, a highly recommended resource is [CMU 10-414/714: Deep Learning Systems](./机器学习系统/CMU10-414.md). This course provides a comprehensive "full-stack" understanding of deep learning systems—from high-level architectural design of modern frameworks, to the principles and implementation of automatic differentiation, down to low-level hardware acceleration and real-world deployment.

To deepen theoretical understanding, students are tasked with building a deep learning library from scratch, called Needle, as part of the coursework. This library supports automatic differentiation on computational graphs, GPU-based acceleration, and includes modules for loss functions, data loaders, and optimizers. On top of this, students will implement several common neural network architectures including CNNs, RNNs, LSTMs, and Transformers.

For those with foundational knowledge, the next step would be to explore [MIT 6.5940: TinyML and Efficient Deep Learning Computing](./机器学习系统/EML.md), taught by [Professor Song Han](https://hanlab.mit.edu/songhan). This course dives into techniques for making neural networks more efficient, such as pruning, quantization, distillation, and neural architecture search. It also covers cutting-edge system optimizations for advanced models, including large language models.

### Deep Generative Models

With the explosive popularity of large language models, understanding the principles behind them is essential to staying at the forefront of the field. You can refer to my recommended [learning roadmap](./深度生成模型/roadmap.md) for a guided approach to studying this area.

## Customize Your Course Map

> Better to teach fishing than to give fish.

The course map above inevitably carries strong personal preferences and may not suit everyone. It is more intended to serve as a starting point for exploration. If you want to select your own areas of interest for study, you can refer to the following resources:

- [MIT OpenCourseWare](https://ocw.mit.edu/): MIT's open-sharing project for course resources, featuring thousands of courses from various disciplines, including computer science courses numbered 6.xxx.
- [MIT CS Course List](http://student.mit.edu/catalog/m6a.html): List of CS courses at MIT.
- [UC Berkeley EECS Course Map](https://hkn.eecs.berkeley.edu/courseguides): UC Berkeley's EECS curriculum plan, presenting the categories and prerequisites of various courses in a course map format, most of which are included in this book.
- [UC Berkeley CS Course List](https://www2.eecs.berkeley.edu/Courses/CS/): List of CS courses at UC Berkeley.
- [Stanford CS Course List](https://blog.csdn.net/qq_41220023/article/details/81976967): List of CS courses at Stanford.


================================================
FILE: docs/CS学习规划.md
================================================
# 一个仅供参考的 CS 学习规划

计算机领域方向庞杂,知识浩如烟海,每个细分领域如果深究下去都可以说学无止境。因此,一个清晰明确的学习规划是非常重要的。我在多年自学的尝试中也走过不少弯路,最终提炼出了下面的内容,供大家参考。

不过,在开始学习之前,先向小白们强烈推荐一个科普向系列视频 [Crash Course: Computer Science](https://www.bilibili.com/video/BV1EW411u7th),在短短 8 个小时里非常生动且全面地科普了关于计算机科学的方方面面:计算机的历史、计算机是如何运作的、组成计算机的各个重要模块、计算机科学中的重要思想等等等等。正如它的口号所说的 *Computers are not magic!*,希望看完这个视频之后,大家能对计算机科学有个全貌性地感知,从而怀着兴趣去面对下面浩如烟海的更为细致且深入的学习内容。

## 必学工具

> 俗话说:磨刀不误砍柴工。如果你是一个刚刚接触计算机的24k纯小白,学会一些工具将会让你事半功倍。

学会提问:也许你会惊讶,提问也算计算机必备技能吗,还放在第一条?我觉得在开源社区中,学会提问是一项非常重要的能力,它包含两方面的事情。其一是会变相地培养你自主解决问题的能力,因为从形成问题、描述问题并发布、他人回答、最后再到理解回答这个周期是非常长的,如果遇到什么鸡毛蒜皮的事情都希望别人最好远程桌面手把手帮你完成,那计算机的世界基本与你无缘了。其二,如果真的经过尝试还无法解决,可以借助开源社区的帮助,但这时候如何通过简洁的文字让别人瞬间理解你的处境以及目的,就显得尤为重要。推荐阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)这篇文章,这不仅能提高你解决问题的概率和效率,也能让开源社区里无偿提供解答的人们拥有一个好心情。

[MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md) 这门课覆盖了这些工具中绝大部分,而且有相当详细的使用指导,强烈建议小白学习。不过需要注意的一点是,在课程中会不时提到一些与开发流程相关的术语。因此推荐至少在学完计算机导论级别的课程之后进行学习。

[翻墙](必学工具/翻墙.md):由于一些众所周知的原因,谷歌、GitHub 等网站在大陆无法访问。然而很多时候,谷歌和 StackOverflow 可以解决你在开发过程中遇到的 99% 的问题。因此,学会翻墙几乎是一个内地 CSer 的必备技能。(考虑到法律问题,这个文档提供的翻墙方式仅对拥有北大邮箱的用户适用)。

命令行:熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会极大地提高你作为工程师的灵活性以及生产力。[命令行的艺术](https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md)是一份非常经典的教程,它源于 Quora 的一个提问,但在各路大神的贡献努力下已经成为了一个 GitHub 十万 stars 的顶流项目,被翻译成了十几种语言。教程不长,非常建议大家反复通读,在实践中内化吸收。同时,掌握 Shell 脚本编程也是一项不容忽视的技术,可以参考这个[教程](https://www.shellscript.sh/)。

IDE (Integrated Development Environment):集成开发环境,说白了就是你写代码的地方。作为一个码农,IDE 的重要性不言而喻,但由于很多 IDE 是为大型工程项目设计的,体量较大,功能也过于丰富。其实如今一些轻便的文本编辑器配合丰富的插件生态基本可以满足日常的轻量编程需求。个人常用的编辑器是 VS Code 和 Sublime(前者的插件配置非常简单,后者略显复杂但颜值很高)。当然对于大型项目我还是会采用略重型的 IDE,例如 Pycharm (Python),IDEA (Java) 等等(免责申明:所有的 IDE 都是世界上最好的 IDE)。

[Vim](必学工具/Vim.md):一款命令行编辑工具。这是一个学习曲线有些陡峭的编辑器,不过学会它我觉得是非常有必要的,因为它将极大地提高你的开发效率。现在绝大多数 IDE 也都支持 Vim 插件,让你在享受现代开发环境的同时保留极客的炫酷(yue)。

[Emacs](必学工具/Emacs.md):与 Vim 齐名的经典编辑器,同样具有极高的开发效率,同时具有更为强大的扩展性,它既可以配置为一个轻量编辑器,也可以扩展成一个个人定制的 IDE,甚至可以有更多奇技淫巧。

[Git](必学工具/Git.md):一款代码版本控制工具。Git的学习曲线可能更为陡峭,但出自 Linux 之父 Linus 之手的 Git 绝对是每个学 CS 的童鞋必须掌握的神器之一。

[GitHub](必学工具/GitHub.md):基于 Git 的代码托管平台。全世界最大的代码开源社区,大佬集聚地。

[GNU Make](必学工具/GNU_Make.md):一款工程构建工具。善用 GNU Make 会让你养成代码模块化的习惯,同时也能让你熟悉一些大型工程的编译链接流程。

[CMake](必学工具/CMake.md):一款功能比 GNU Make 更为强大的构建工具,建议掌握 GNU Make 之后再加以学习。

[LaTeX](必学工具/LaTeX.md):<del>逼格提升</del> 论文排版工具。

[Docker](必学工具/Docker.md):一款相较于虚拟机更轻量级的软件打包与环境部署工具。

[实用工具箱](必学工具/tools.md):除了上面提到的这些在开发中使用频率极高的工具之外,我还收集了很多实用有趣的免费工具,例如一些下载工具、设计工具、学习网站等等。

[Thesis](必学工具/thesis.md):毕业论文 Word 写作教程。

## 好书推荐

> 私以为一本好的教材应当是以人为本的,而不是炫技式的理论堆砌。告诉读者“是什么”固然重要,但更好的应当是教材作者将其在这个领域深耕几十年的经验融汇进书中,向读者娓娓道来“为什么”以及未来应该“怎么做”。

[链接戳这里](./好书推荐.md)

## 环境配置

> 你以为的开发 —— 在 IDE 里疯狂码代码数小时。
>
> 实际上的开发 —— 配环境配几天还没开始写代码。

### PC 端环境配置

如果你是 Mac 用户,那么你很幸运,这份[指南](https://sourabhbajaj.com/mac-setup/) 将会手把手地带你搭建起整套开发环境。如果你是 Windows 用户,在开源社区的努力下,你同样可以获得与其他平台类似的体验:[Scoop](必学工具/Scoop.md)。

另外大家可以参考一份灵感来自 [6.NULL MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md) 的 [环境配置指南][guide],重点在于终端的美化配置。此外还包括常用软件源(如 GitHub, Anaconda, PyPI 等)的加速与替换以及一些 IDE 的配置与激活教程。

[guide]: https://taylover2016.github.io/%E6%96%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E6%89%8B%E6%8C%87%E5%8D%97%EF%BC%88%E6%96%B0%E6%89%8B%E5%90%91%EF%BC%89/index.html

### 服务器端环境配置

服务器端的运维需要掌握 Linux(或者其他类 Unix 系统)的基本使用以及进程、设备、网络等系统相关的基本概念,小白可以参考中国科学技术大学 Linux 用户协会编写的[《Linux 101》在线讲义](https://101.lug.ustc.edu.cn/)。如果想深入学习系统运维相关的知识,可以参考 [Aspects of System Administration](https://stevens.netmeister.org/615/) 这门课程。

另外,如果需要学习某个具体的概念或工具,推荐一个非常不错的 GitHub 项目 [DevOps-Guide](https://github.com/Tikam02/DevOps-Guide),其中涵盖了非常多的运维方面的基础知识和教程,例如 Docker, Kubernetes, Linux, CI-CD, GitHub Actions 等等。

## 课程地图

> 正如这章开头提到的,这份课程地图仅仅是一个**仅供参考**的课程规划,我作为一个临近毕业的本科生。深感自己没有权利也没有能力向别人宣扬“应该怎么学”。因此如果你觉得以下的课程分类与选择有不合理之处,我全盘接受,并深感抱歉。你可以在下一节[定制属于你的课程地图](#yourmap)

以下课程类别中除了含有 *基础* 和 *入门* 字眼的以外,并无明确的先后次序,大家只要满足某个课程的先修要求,完全可以根据自己的需要和喜好选择想要学习的课程。

### 数学基础

#### 微积分与线性代数

作为大一新生,学好微积分线代是和写代码至少同等重要的事情,相信已经有无数的前人经验提到过这一点,但我还是要不厌其烦地再强调一遍:学好微积分线代真的很重要!你也许会吐槽这些东西岂不是考完就忘,那我觉得你是并没有把握住它们本质,对它们的理解还没有达到刻骨铭心的程度。如果觉得老师课上讲的内容晦涩难懂,不妨参考 MIT 的 [Calculus Course](./数学基础/MITmaths.md) 和 [18.06: Linear Algebra](./数学基础/MITLA.md) 的课程 notes,至少于我而言,它帮助我深刻理解了微积分和线性代数的许多本质。顺道再安利一个油管数学网红 [**3Blue1Brown**](https://www.youtube.com/c/3blue1brown),他的频道有很多用生动形象的动画阐释数学本质内核的视频,兼具深度和广度,质量非常高。

#### 信息论入门

作为计算机系的学生,及早了解一些信息论的基础知识,我觉得是大有裨益的。但大多信息论课程都面向高年级本科生甚至研究生,对新手极不友好。而 MIT 的 [6.050J: Information theory and Entropy](./数学基础/information.md) 这门课正是为大一新生量身定制的,几乎没有先修要求,涵盖了编码、压缩、通信、信息熵等等内容,非常有趣。

### 数学进阶

#### 离散数学与概率论

集合论、图论、概率论等等是算法推导与证明的重要工具,也是后续高阶数学课程的基础。但我觉得这类课程的讲授很容易落入理论化与形式化的窠臼,让课堂成为定理结论的堆砌,而无法使学生深刻把握理论的本质,进而造成学了就背,考了就忘的怪圈。如果能在理论教学中穿插算法运用实例,学生在拓展算法知识的同时也能窥见理论的力量和魅力。

[UCB CS70 : discrete Math and probability theory](./数学进阶/CS70.md) 和 [UCB CS126 : Probability theory](./数学进阶/CS126.md) 是 UC Berkeley 的概率论课程,前者覆盖了离散数学和概率论基础,后者则涉及随机过程以及深入的理论内容。两者都非常注重理论和实践的结合,有丰富的算法实际运用实例,后者还有大量的 Python 编程作业来让学生运用概率论的知识解决实际问题。

#### 数值分析

作为计算机系的学生,培养计算思维是很重要的,实际问题的建模、离散化,计算机的模拟、分析,是一项很重要的能力。而这两年开始风靡的,由 MIT 打造的 [Julia](https://julialang.org/) 编程语言以其 C 一样的速度和 Python 一样友好的语法在数值计算领域有一统天下之势,MIT 的许多数学课程也开始用 Julia 作为教学工具,把艰深的数学理论用直观清晰的代码展示出来。

[ComputationalThinking](https://computationalthinking.mit.edu/Spring21/) 是 MIT 开设的一门计算思维入门课,所有课程内容全部开源,可以在课程网站直接访问。这门课利用 Julia 编程语言,在图像处理、社会科学与数据科学、气候学建模三个 topic 下带领学生理解算法、数学建模、数据分析、交互设计、图例展示,让学生体验计算与科学的美妙结合。内容虽然不难,但给我最深刻的感受就是,科学的魅力并不是故弄玄虚的艰深理论,不是诘屈聱牙的术语行话,而是用直观生动的案例,用简练深刻的语言,让每个普通人都能理解。

上完上面的体验课之后,如果意犹未尽的话,不妨试试 MIT 的 [18.330 : Introduction to numerical analysis](./数学进阶/numerical.md),这门课的编程作业同样会用 Julia 编程语言,不过难度和深度上都上了一个台阶。内容涉及了浮点编码、Root finding、线性系统、微分方程等等方面,整门课的主旨就是让你利用离散化的计算机表示去估计和逼近一个数学上连续的概念。这门课的教授还专门撰写了一本配套的开源教材 [Fundamentals of Numerical Computation](https://fncbook.github.io/fnc/frontmatter.html),里面附有丰富的 Julia 代码实例和严谨的公式推导。

如果你还意犹未尽的话,还有 MIT 的数值分析研究生课程 [18.335: Introduction to numerical method][18.335] 供你参考。

[18.335]: https://ocw.mit.edu/courses/mathematics/18-335j-introduction-to-numerical-methods-spring-2019/index.htm

#### 微分方程

如果世间万物的运动发展都能用方程来刻画和描述,这是一件多么酷的事情呀!虽然几乎任何一所学校的 CS 培养方案中都没有微分方程相关的必修课程,但我还是觉得掌握它会赋予你一个新的视角来审视这个世界。

由于微分方程中往往会用到很多复变函数的知识,所以大家可以参考 [MIT18.04: Complex variables functions][MIT18.04] 的课程 notes 来补齐先修知识。

[MIT18.04]: https://ocw.mit.edu/courses/mathematics/18-04-complex-variables-with-applications-spring-2018/

[MIT18.03: differential equations][MIT18.03] 主要覆盖了常微分方程的求解,在此基础之上 [MIT18.152: Partial differential equations][MIT18.152] 则会深入偏微分方程的建模与求解。掌握了微分方程这一有力工具,相信对于你的实际问题的建模能力以及从众多噪声变量中把握本质的直觉都会有很大帮助。

[MIT18.03]: https://ocw.mit.edu/courses/mathematics/18-03sc-differential-equations-fall-2011/unit-i-first-order-differential-equations/
[MIT18.152]: https://ocw.mit.edu/courses/mathematics/18-152-introduction-to-partial-differential-equations-fall-2011/index.htm

### 数学高阶

作为计算机系的学生,我经常听到数学无用论的论断,对此我不敢苟同但也无权反对,但若凡事都硬要争出个有用和无用的区别来,倒也着实无趣,因此下面这些面向高年级甚至研究生的数学课程,大家按兴趣自取所需。

#### 凸优化

[Standford EE364A: Convex Optimization](./数学进阶/convex.md)

#### 信息论

[MIT6.441: Information Theory](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-441-information-theory-spring-2016/syllabus/)

#### 应用统计学

[MIT18.650: Statistics for Applications](https://ocw.mit.edu/courses/mathematics/18-443-statistics-for-applications-spring-2015/index.htm)

#### 初等数论

[MIT18.781: Theory of Numbers](https://ocw.mit.edu/courses/mathematics/18-781-theory-of-numbers-spring-2012/index.htm)

#### 密码学

[Standford CS255: Cryptography](http://crypto.stanford.edu/~dabo/cs255/)

### 编程入门

> Languages are tools, you choose the right tool to do the right thing. Since there's no universally perfect tool, there's no universally perfect language.

#### General

- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)
- [Harvard CS50: This is CS50x](编程入门/C/CS50.md)

#### Java

- [MIT 6.092: Introduction To Programming In Java](编程入门/Java/MIT%206.092.md)

#### Python

- [CS50P: CS50's Introduction to Programming with Python](编程入门/Python/CS50P.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/Python/CS61A.md)
- [MIT6.100L: Introduction to CS and Programming using Python](编程入门/Python/MIT6.100L.md)

#### C++

- [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/cpp/CS106L.md)

#### Rust

- [Stanford CS110L: Safety in Systems Programming](编程入门/Rust/CS110L.md)

#### OCaml

- [Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful](编程入门/Functional/CS3110.md)

### 电子基础

#### 电路基础

作为计算机系的学生,了解一些基础的电路知识,感受从传感器收集数据到数据分析再到算法预测整条流水线,对于后续知识的学习以及计算思维的培养还是很有帮助的。[EE16A&B: Designing Information Devices and Systems I&II](./电子基础/EE16.md) 是伯克利 EE 学生的大一入门课,其中 EE16A 注重通过电路从实际环境中收集和分析数据,而 EE16B 则侧重从这些收集到的数据进行分析并做出预测行为。

#### 信号与系统

信号与系统是一门我觉得非常值得一上的课,最初学它只是为了满足我对傅里叶变换的好奇,但学完之后我才不禁感叹,傅立叶变换给我提供了一个全新的视角去看待这个世界,就如同微分方程一样,让你沉浸在用数学去精确描绘和刻画这个世界的优雅与神奇之中。

[MIT 6.003: signal and systems][MIT6.003] 提供了全部的课程录影、书面作业以及答案。也可以去看这门课的[远古版本](电子基础/Signals_and_Systems_AVO.md)

[MIT6.003]: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-003-signals-and-systems-fall-2011/lecture-videos/lecture-1-signals-and-systems/

而 [UCB EE120: Signal and Systems](电子基础/signal.md) 关于傅立叶变换的 notes 写得非常好,并且提供了6 个非常有趣的 Python 编程作业,让你实践中运用信号与系统的理论与算法。

### 数据结构与算法

算法是计算机科学的核心,也是几乎一切专业课程的基础。如何将实际问题通过数学抽象转化为算法问题,并选用合适的数据结构在时间和内存大小的限制下将其解决是算法课的永恒主题。如果你受够了老师的照本宣科,那么我强烈推荐伯克利的 [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) 和普林斯顿的 [Coursera: Algorithms I & II](数据结构与算法/Algo.md),这两门课的都讲得深入浅出并且会有丰富且有趣的编程实验将理论与知识结合起来。

以上两门课程都是基于 Java 语言,如果你想学习 C/C++ 描述的版本,可以参考斯坦福的数据结构与基础算法课程 [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)。偏好 Python 的同学可以学习 MIT 的算法入门课 [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md)

对一些更高级的算法以及 NP 问题感兴趣的同学可以学习伯克利的算法设计与分析课程 [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md) 或者 MIT 的高阶算法 [MIT 6.046: Design and Analysis of Algorithms](数据结构与算法/6.046.md)。

### 软件工程

#### 入门课

一份“能跑”的代码,和一份高质量的工业级代码是有本质区别的。因此我非常推荐低年级的同学学习一下 [MIT 6.031: Software Construction](软件工程/6031.md) 这门课,它会以 Java 语言为基础,以丰富细致的阅读材料和精心设计的编程练习传授如何编写**不易出 bug、简明易懂、易于维护修改**的高质量代码。大到宏观数据结构设计,小到如何写注释,遵循这些前人总结的细节和经验,对于你此后的编程生涯大有裨益。

#### 专业课

当然,如果你想系统性地上一门软件工程的课程,那我推荐的是伯克利的 [UCB CS169: software engineering](软件工程/CS169.md)。但需要提醒的是,和大多学校(包括贵校)的软件工程课程不同,这门课不会涉及传统的 **design and document** 模式,即强调各种类图、流程图及文档设计,而是采用近些年流行起来的小团队快速迭代 **Agile Develepment** 开发模式以及利用云平台的 **Software as a service** 服务模式。

### 体系结构

#### 入门课

从小我就一直听说,计算机的世界是由 01 构成的,我不理解但大受震撼。如果你的内心也怀有这份好奇,不妨花一到两个月的时间学习 [Coursera: Nand2Tetris](体系结构/N2T.md) 这门无门槛的计算机课程。这门麻雀虽小五脏俱全的课程会从 01 开始让你亲手造出一台计算机,并在上面运行俄罗斯方块小游戏。一门课里涵盖了编译、虚拟机、汇编、体系结构、数字电路、逻辑门等等从上至下、从软至硬的各类知识,非常全面。难度上也是通过精心的设计,略去了众多现代计算机复杂的细节,提取出了最核心本质的东西,力图让每个人都能理解。在低年级,如果就能从宏观上建立对整个计算机体系的鸟瞰图,是大有裨益的。

#### 专业课

当然,如果想深入现代计算机体系结构的复杂细节,还得上一门大学本科难度的课程 [UCB CS61C: Great Ideas in Computer Architecture](体系结构/CS61C.md)。UC Berkeley 作为 RISC-V 架构的发源地,在体系结构领域算得上首屈一指。其课程非常注重实践,你会在 Project 中手写汇编构造神经网络,从零开始搭建一个 CPU,这些实践都会让你对计算机体系结构有更为深入的理解,而不是仅停留于“取指译码执行访存写回”的单调背诵里。

### 系统入门

计算机系统是一个庞杂而深刻的主题,在深入学习某个细分领域之前,对各个领域有一个宏观概念性的理解,对一些通用性的设计原则有所知晓,会让你在之后的深入学习中不断强化一些最为核心乃至哲学的概念,而不会桎梏于复杂的内部细节和各种 trick。因为在我看来,学习系统最关键的还是想让你领悟到这些最核心的东西,从而能够设计和实现出属于自己的系统。

[MIT6.033: System Engineering](http://web.mit.edu/6.033/www/) 是 MIT 的系统入门课,主题涉及了操作系统、网络、分布式和系统安全,除了知识点的传授外,这门课还会讲授一些写作和表达上的技巧,让你学会如何设计并向别人介绍和分析自己的系统。这本书配套的教材 *Principles of Computer System Design: An Introduction* 也写得非常好,推荐大家阅读。

[CMU 15-213: Introduction to Computer System](计算机系统基础/CSAPP.md) 是 CMU 的系统入门课,内容覆盖了体系结构、操作系统、链接、并行、网络等等,兼具广度和深度,配套的教材 *Computer Systems: A Programmer's Perspective* 也是质量极高,强烈建议阅读。

### 操作系统

> 没有什么能比自己写个内核更能加深对操作系统的理解了。

操作系统作为各类纷繁复杂的底层硬件虚拟化出一套规范优雅的抽象,给所有应用软件提供丰富的功能支持。了解操作系统的设计原则和内部原理对于一个不满足于当调包侠的程序员来说是大有裨益的。出于对操作系统的热爱,我上过国内外很多操作系统课程,它们各有侧重和优劣,大家可以根据兴趣各取所需。

[MIT 6.S081: Operating System Engineering](操作系统/MIT6.S081.md),MIT 著名 PDOS 实验室出品,11 个 Project 让你在一个实现非常优雅的类Unix操作系统xv6上增加各类功能模块。这门课也让我深刻认识到,做系统不是靠 PPT 念出来的,是得几万行代码一点点累起来的。

[UCB CS162: Operating System](操作系统/CS162.md),伯克利的操作系统课,采用和 Stanford 同样的 Project —— 一个教学用操作系统 Pintos。我作为北京大学2022年和2023年春季学期操作系统实验班的助教,引入并改善了这个 Project,课程资源也会全部开源,具体参见[课程网站](https://pku-os.github.io)。

[NJU: Operating System Design and Implementation](操作系统/NJUOS.md),南京大学的蒋炎岩老师开设的操作系统课程。蒋老师以其独到的系统视角结合丰富的代码示例将众多操作系统的概念讲得深入浅出,此外这门课的全部课程内容都是中文的,非常方便大家学习。

[HIT OS: Operating System](操作系统/HITOS.md),哈尔滨工业大学的李治军老师开设的中文操作系统课程。李老师的课程基于 Linux 0.11 源码,十分注重代码实践,并站在学生视角将操作系统的来龙去脉娓娓道来。

### 并行与分布式系统

想必这两年各类 CS 讲座里最常听到的话就是“摩尔定律正在走向终结”,此话不假,当单核能力达到上限时,多核乃至众核架构如日中天。硬件的变化带来的是上层编程逻辑的适应与改变,要想充分利用硬件性能,编写并行程序几乎成了程序员的必备技能。与此同时,深度学习的兴起对计算机算力与存储的要求都达到了前所未有的高度,大规模集群的部署和优化也成为热门技术话题。

#### 并行计算

[CMU 15-418/Stanford CS149: Parallel Computing](并行与分布式系统/CS149.md) 会带你深入理解现代并行计算架构的设计原则与必要权衡,并学会如何充分利用硬件资源以及软件编程框架(例如 CUDA,MPI,OpenMP 等)编写高性能的并行程序。

#### 分布式系统

[MIT 6.824: Distributed System](并行与分布式系统/MIT6.824.md) 和 MIT 6.S081 一样,出品自 MIT 大名鼎鼎的 PDOS 实验室,授课老师 Robert Morris 教授曾是一位顶尖黑客,世界上第一个蠕虫病毒 Morris 病毒就是出自他之手。这门课每节课都会精读一篇分布式系统领域的经典论文,并由此传授分布式系统设计与实现的重要原则和关键技术。同时其课程 Project 也是以难度之大而闻名遐迩,4 个编程作业循序渐进带你实现一个基于 Raft 共识算法的 KV-store 框架,让你在痛苦的 debug 中体会并行与分布式带来的随机性和复杂性。

### 系统安全

不知道你当年选择计算机是不是因为怀着一个中二的黑客梦想,但现实却是成为黑客道阻且长。

#### 理论课程

[UCB CS161: Computer Security](系统安全/CS161.md) 是伯克利的系统安全课程,会涵盖栈攻击、密码学、网站安全、网络安全等等内容。

[SU SEED Labs](系统安全/SEEDLabs.md) 是雪城大学的网安课程,由 NSF 提供130万美元的资金支持,为网安教育开发了动手实践性的实验练习(称为 SEED Lab)。课程理论教学和动手实践并重,包含详细的开源讲义、视频教程、教科书(被印刷为多种语言)、开箱即用的基于虚拟机和 docker 的攻防环境等。目前全球有1050家研究机构在使用该项目。涵盖计算机和信息安全领域的广泛主题,包括软件安全、网络安全、Web 安全、操作系统安全和移动应用安全。

#### CTF 实践

掌握这些理论知识之后,还需要在实践中培养和锻炼这些“黑客素养”。[CTF 夺旗赛](https://ctf-wiki.org/)是一项比较热门的系统安全比赛,赛题中会融会贯通地考察你对计算机各个领域知识的理解和运用。北大每年会举办[相关赛事](https://geekgame.pku.edu.cn/),鼓励大家踊跃参与,在实践中提高自己。下面列举一些我平时学习(摸鱼)用到的资源:

- [CTF-wiki](https://ctf-wiki.org/)
- [CTF-101](https://ctf101.org/)
- [Hacker-101](https://ctf.hacker101.com/)

### 计算机网络

> 没有什么能比自己写个 TCP/IP 协议栈更能加深对计算机网络的理解了。

大名鼎鼎的 [Stanford CS144: Computer Network](计算机网络/CS144.md),8 个 Project 带你实现整个 TCP/IP 协议栈。

如果你只是想在理论上对计算机网络有所了解,那么推荐阅读 [UCB CS168](计算机网络/CS168.md) 这门课程配套的[教材](https://textbook.cs168.io/)。

### 数据库系统

> 没有什么能比自己写个关系型数据库更能加深对数据库系统的理解了。

CMU 的著名数据库神课 [CMU 15-445: Introduction to Database System](数据库系统/15445.md) 会通过 4 个 Project 带你为一个用于教学的关系型数据库 [bustub](https://github.com/cmu-db/bustub) 添加各种功能。实验的评测框架也免费开源了,非常适合大家自学。此外课程实验会用到 C++11 的众多新特性,也是一个锻炼 C++ 代码能力的好机会。

Berkeley 作为著名开源数据库 postgres 的发源地也不遑多让,[UCB CS186: Introduction to Database System](数据库系统/CS186.md) 会让你用 Java 语言实现一个支持 SQL 并发查询、B+ 树索引和故障恢复的关系型数据库。

### 编译原理

> 没有什么能比自己写个编译器更能加深对编译器的理解了。

理论学习推荐阅读大名鼎鼎的《龙书》。当然动手实践才是掌握编译原理最好的方式,推荐[北京大学编译原理实践](./编译原理/PKU-Compilers.md)课程,丰富的实验配套和循序渐进的文档带你实现一个类C语言到 RISC-V 汇编的编译器。当然编译原理课程目录下也有众多其他优质实验供你选择。

### Web 开发

前后端开发很少在计算机的培养方案里被重视,但其实掌握这项技能还是好处多多的,例如搭建自己的个人主页,抑或是给自己的课程项目做一个精彩的展示网页。如果你只是想两周速成,那么推荐 [MIT web development course](Web开发/mitweb.md)。如果想系统学习,推荐 [Stanford CS142: Web Applications](Web开发/CS142.md)。

### 计算机图形学

我本人对计算机图形学了解不多,这里收录了一些社区推荐的优质课程供大家选择:

- [Stanford CS148](计算机图形学/CS148.md)
- [Games101](计算机图形学/GAMES101.md)
- [Games103](计算机图形学/GAMES103.md)
- [Games202](计算机图形学/GAMES202.md)

### 数据科学

其实数据科学和机器学习与深度学习有着很紧密的联系,但可能更侧重于实践。Berkeley 的 [UCB Data100: Principles and Techniques of Data Science](数据科学/Data100.md) 通过丰富的编程练习让你在实践中掌握各类数据分析工具和算法,并带领你体验从海量的数据集中提取出想要的结果,并对未来的数据或用户的行为做出相应的预测。但这只是一门基础课,如果想学习工业级别的数据挖掘与分析技术,可以尝试 Stanford 的大数据挖掘课程 [CS246: Mining Massive Data Sets](https://web.stanford.edu/class/cs246/)。

### 人工智能

近十年人工智能应该算是计算机界最火爆的领域。如果你不满足于整日听各路媒体争相报道人工智能相关的进展,而想真正一探究竟,那么非常推荐学习 Harvard 神课 CS50 系列的人工智能课程 [Harvard CS50: Introduction to AI with Python](人工智能/CS50.md)。课程短小精悍,覆盖了传统人工智能领域的几大分支,并配有丰富有趣的 Python 编程练习来巩固你对人工智能算法的理解。美中不足的是这门课因为面向在线自学者的缘故内容较为精简,并且不会涉及特别深入的数学理论,如果想要系统深入地学习还需要一门本科生难度的课程,例如 Berkeley 的
 [UCB CS188: Introduction to Artificial Intelligence](人工智能/CS188.md)。这门课的 Project 复刻了经典游戏糖豆人,让你运用人工智能算法玩游戏,非常有趣。

### 机器学习

机器学习领域近些年最重要的进展就是发展出了基于神经网络的深度学习分支,但其实很多基于统计学习的算法依然在数据分析领域有着广泛的应用。如果你之前从未接触过机器学习的相关知识,而且不想一开始就陷入艰深晦涩的数学证明,那么不妨先从 Andrew Ng (吴恩达)的 [Coursera: Machine Learning](机器学习/ML.md) 学起。这门课在机器学习领域基本无人不晓,吴恩达以其深厚的理论功底和出色的表达能力把很多艰深的算法讲得深入浅出,并且非常实用。其配套的作业也是质量相当上乘,可以帮助你快速入门。

但上过这门课只能让你从宏观上对机器学习这一领域有一定了解,如果想真正理解那些“神奇”算法背后的数学原理甚至从事相关领域的科研工作,那么还需要一门更“数学”的课程,例如 [Stanford CS229: Machine Learning](机器学习/CS229.md) 或者 [UCB CS189: Introduction to Machine Learning](机器学习/CS189.md)。

当然,如果你之后致力于从事机器学习理论相关的科学研究,那么可以参考 [Yao Fu](https://franxyao.github.io/) 分享的[进阶学习路线](./机器学习进阶/roadmap.md)学习一些更深入的研究生难度的课程。

### 深度学习

前几年 AlphaGo 的大热让深度学习进入了大众的视野,不少大学专门成立了相关专业。很多计算机的其他领域也会借助深度学习的技术来做研究,因此基本不管你干啥多少都会接触到一些神经网络、深度学习相关的技术需求。如果想快速入门,同样推荐 Andrew Ng (吴恩达)的 [Coursera: Deep Learning](深度学习/CS230.md),质量无需多言,Coursera 上罕见的满分课程。此外如果你觉得英文课程学习起来有难度,推荐李宏毅老师的 [国立台湾大学:机器学习](深度学习/LHY.md) 课程。这门课打着机器学习的名号,却囊括了深度学习领域的几乎所有方向,非常全面,很适合你从宏观上对这个领域有一个大致的了解。而且老师本人也非常幽默,课堂金句频出。

当然因为深度学习领域发展非常迅速,已经拥有了众多研究分支,如果想要进一步深入,可以按需学习下面罗列的代表课程:

如果你想系统打牢基础,可以优先看 CMU 11-785:这门课风格非常扎实,内容一点不水,作业也能很好地锻炼训练与调参能力;MIT 6.7960 的覆盖面更广,除了主流 LLM 路线之外也兼顾 CV 等方向,作业和项目对自学者也比较友好;NYU DLSP21 的亮点则是 Yann LeCun 亲自授课,对很多人来说这是非常难得的公开系统课程资源。

#### 综合与基础

[CMU 11-785: Introduction to Deep Learning](深度学习/CMU11-785.md)

[MIT 6.7960: Deep Learning](深度学习/MIT6-7960.md)

[NYU DLSP21: NYU Deep Learning Spring 2021](深度学习/NYU-DLSP21.md)

#### 计算机视觉

[UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision](深度学习/EECS498-007.md)

[Stanford CS231n: CNN for Visual Recognition](深度学习/CS231.md)

#### 自然语言处理

[Stanford CS224n: Natural Language Processing](深度学习/CS224n.md)

#### 图神经网络

[Stanford CS224w: Machine Learning with Graphs](深度学习/CS224w.md)

#### 强化学习

[UCB CS285: Deep Reinforcement Learning](深度学习/CS285.md)


### 深度学习系统

随着深度学习模型的重要性和资源需求越来越大,针对其训练和推理相关的底层系统优化也越发重要。如果想入门这个领域,推荐 [CMU 10-414/714: Deep Learning Systems](./机器学习系统/CMU10-414.md),内容覆盖了深度学习系统“全栈”的知识体系。从现代深度学习系统框架的顶层设计,到自微分算法的原理和实现,再到底层硬件加速和实际生产部署。为了更好地掌握理论知识,学生将会在课程作业中从头开始设计和实现一个完整的深度学习库 Needle,使其能对计算图进行自动微分,能在 GPU 上实现硬件加速,并且支持各类损失函数、数据加载器和优化器。在此基础上,学生将实现几类常见的神经网络,包括 CNN,RNN,LSTM,Transformer 等等。有一定基础后,还可以学习 [Song Han](https://hanlab.mit.edu/songhan) 老师开设的 [MIT6.5940: TinyML and Efficient Deep Learning Computing](./机器学习系统/EML.md) 课程,了解让神经网络轻量化的各种关键技术,例如剪枝、量化、蒸馏、网络架构搜索等等。此外,课程中还会涉及很多更前沿的深度学习模型例如大语言模型相关的系统优化。

### 深度生成模型

随着大语言模型的爆火,了解其背后的原理才能紧跟时代潮流。可以参考笔者推荐的[学习路线](./深度生成模型/roadmap.md)进行学习。



## <a id="yourmap">定制属于你的课程地图</a>

> 授人以鱼不如授人以渔。

以上的课程规划难免带有强烈的个人偏好,不一定适合所有人,更多是起到抛砖引玉的作用。如果你想挑选自己感兴趣的方向和内容加以学习,可以参考我在下面列出来的资源。

- [MIT OpenCourseWare](https://ocw.mit.edu/): 麻省理工学院的课程资源开放共享项目,收录了数以千计的各科课程资源,其中计算机类的课号是 6.xxx。
- [MIT CS Course List](http://student.mit.edu/catalog/m6a.html): 麻省理工学院的 CS 课程列表。
- [UC Berkeley EECS Course Map](https://hkn.eecs.berkeley.edu/courseguides): UC Berkeley 的 EECS 培养方案,以课程地图的方式将各门课程的类别和先修关系一目了然地呈现,其中绝大多数课程本书中均有收录。
- [UC Berkeley CS Course List](https://www2.eecs.berkeley.edu/Courses/CS/): UC Berkeley 的 CS 课程列表。
- [Stanford CS Course List](https://blog.csdn.net/qq_41220023/article/details/81976967): 斯坦福的 CS 课程列表。


================================================
FILE: docs/Web开发/CS142.en.md
================================================
# Stanford CS142: Web Applications

## Descriptions

- Offered by: Stanford
- Prerequisites: CS107 and CS108
- Programming Languages: JavaScript/HTML/CSS
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 100 hours

This is Stanford's Web Application course covers HTML, CSS, JavaScript, ReactJs, NodeJS, ExpressJS, Web Security, and more. Eight projects will enhance your web development skills in practice.

## Course Resources

- Course Website: <https://web.stanford.edu/class/cs142/index.html>
- Recordings: <https://web.stanford.edu/class/cs142/lectures.html>
- Assignments: <https://web.stanford.edu/class/cs142/projects.html>


================================================
FILE: docs/Web开发/CS142.md
================================================
# Stanford CS142: Web Applications

## 课程简介

- 所属大学:Stanford
- 先修要求:有一定的编程经验
- 编程语言:JavaScript/HTML/CSS
- 课程难度:🌟🌟🌟🌟
- 预计学时:100 小时

斯坦福的 Web 应用开发课程,内容覆盖了 HTML, CSS, JavaScript, ReactJs, NodeJS, ExpressJS, Web安全等等。8 个 Project 会让你在实战中锻炼自己的 Web 开发技巧。

## 课程资源

- 课程网站:<https://web.stanford.edu/class/cs142/index.html>
- 课程视频:<https://web.stanford.edu/class/cs142/lectures.html>
- 课程教材:无
- 课程作业:<https://web.stanford.edu/class/cs142/projects.html>


================================================
FILE: docs/Web开发/CS571.en.md
================================================
# CS571 Building UI (React & React Native)

## Course Overview

- University: University of Wisconsin, Madison
- Prerequisites: CS400 (Advanced Java. But in my opinion you only need to master one programming language)
- Programming Languages: JavaScript/HTML/CSS
- Course Difficulty: 🌟🌟🌟
- Estimated Time Commitment: 2 hrs/week (lecture) + 4–10 hrs/week (HW), 12 weeks

This course provides a comprehensive but concise introduction to the best practices of React front-end development and React Native mobile development. It focuses on the latest versions of React and React Native and is updated every semester. It is a valuable resource for tackling the complexities of front-end development.

The course also offers a good training ground. Be prepared for a significant workload throughout the semester. The techniques and knowledge points involved in the homework will be explained in class, but code won't be written hand by hand (I personally think that hand-holding code writing is very inefficient, and most courses on Udemy are of this type). As this isn't a hand-holding course, if you are unsure about how to write React code when doing homework, I recommend spending extra time carefully reading the relevant chapters on [react.dev](https://react.dev/reference/react) before diving in. The starter code also provides you with a great starting point, saving you from coping with Node.js environment settings.

Although this course doesn't require prior knowledge of Javascript/HTML/CSS, the classroom introduction to syntax is relatively limited. It's recommended to frequently consult resources and ask questions when encountering syntax issues during learning and coding.

This course also includes an introduction to and practices for Dialog Flow, a ChatBot development tool by Google. You can also find content related to UX development (on the practical side) in this course.

According to the official website, CS 571 is open to everyone. You can request a Badger ID directly from the [webpage](https://cs571.org/auth) using your email address.

## Course Resources

- Course Website: <https://cs571.org>
- Course Videos: Refer to the links labeled "R" on the course website.
- Course Assignments: Refer to the course website for more information.


================================================
FILE: docs/Web开发/CS571.md
================================================
# CS571 Building UI (React & React Native)

## 课程简介

- 所属大学:威斯康星大学麦迪逊分校(University of Wisconsin, Madison)
- 先修要求:CS400(高级 Java,但个人觉得先修不必要,掌握至少一门编程语言即可)
- 编程语言:JavaScript/HTML/CSS
- 课程难度:🌟🌟🌟
- 预计学时:每周 2 小时(讲座)+ 每周 4–10 小时(作业),持续 12 周

该课程提供了 React 前端开发和 React Native 移动端开发的最佳实践介绍,完整的同时又提纲挈领。采用 React 和 React Native 的最新版本,课程网站每学期都会更新。对于各门工具迭出的前端开发难能可贵。

同时,该课程也提供了很好的训练机会。在整个学期中,需要为较大作业量做好准备。作业所涉及的技术和知识点会在课上讲解,但不会手把手写代码(个人认为手把手写代码效率非常低,而 Udemy 上多为此类型)。由于不是保姆级课程,如果写作业时对于 React 的某些功能不确定怎么写,建议在动手之前多花些时间仔细阅读 [react.dev](https://react.dev/reference/react) 上的相关章节。作业的 starter code 提供的训练起点也恰好合适,不用为配 Node.js 环境伤脑筋。

尽管这门课程不要求预先会 Javascript/HTML/CSS,课堂上对 syntax 的介绍比较有限,建议学习和写码遇到语法问题时勤查勤问。

此外,本课程还对 Google 旗下的 ChatBot 开发工具 Dialog Flow 有较为深入的介绍和练习。还对 UX Design 的实用原则和技术有所讲解。

根据官网信息,CS 571 对所有人开放。你可以在[官网](https://cs571.org/auth)直接使用电子邮箱申请 Badger ID。

## 课程资源

- 课程网站:<https://cs571.org>
- 课程视频:请参考课程网站上标有“R”的链接
- 课程作业:请参考课程网站上的相关信息


================================================
FILE: docs/Web开发/fullstackopen.en.md
================================================
# University of Helsinki: Full Stack open 2022

## Descriptions

- Offered by: University of Helsinki
- Prerequisites: Good programming skills, basic knowledge of web programming and databases, and have mastery of the Git version management system.
- Programming Languages: JavaScript/HTML/CSS/NoSQL/SQL
- Difficulty: 🌟🌟
- Class Hour: Varying according to the learner

This course serves as an introduction to modern web application development with JavaScript. The main focus is on building single page applications with ReactJS that use REST APIs built with Node.js. The course also contains a section on GraphQL, a modern alternative to REST APIs.

The course covers testing, configuration and environment management, and the use of MongoDB for storing the application’s data.

## Resources
- Course Website: <https://fullstackopen.com/en/>
- Assignments: refer to the course website
- Course group on Discord: <https://study.cs.helsinki.fi/discord/join/fullstack/>
- Course group on Telegram: <https://t.me/fullstackcourse/>


================================================
FILE: docs/Web开发/fullstackopen.md
================================================
# University of Helsinki: Full Stack open 2022

## 课程简介

- 所属大学:University of Helsinki
- 先修要求:具备良好的编程技能、基本的网络编程和数据库知识,并且了解使用 Git 这个版本控制系统的基础知识。
- 编程语言:JavaScript/HTML/CSS/NoSQL/SQL
- 课程难度:🌟🌟
- 预计学时:因人而异

本课程是介绍如何使用 JavaScript 开发现代Web应用程序。 课程的重点是使用 ReactJS 构建单页面应用程序(SPA),并使用由 Node.js 构建 REST API。该课程还包含介绍 GraphQL 的部分,这是 REST API 的现代替代方案。

课程还包括测试、配置和环境管理,以及使用 MongoDB 来存储应用的数据。

## 课程资源

- 课程网站:<https://fullstackopen.com/zh/>
- 课程作业:参见课程网站
- 课程 Discord 群组:<https://study.cs.helsinki.fi/discord/join/fullstack/>
- 课程 Telegram 群组:<https://t.me/fullstackcourse/>


================================================
FILE: docs/Web开发/mitweb.en.md
================================================
# MIT Web Development Crash Course

## Descriptions

- Offered by: MIT
- Prerequisites: better if you are already proficient in a programming language
- Programming Languages: JavaScript/HTML/CSS/NoSQL
- Difficulty: 🌟🌟🌟
- Class Hour: Varying according to the learner

[Independent Activities Period](https://elo.mit.edu/iap/) (IAP) is a four-week period in January during which faculty and students are freed from the rigors of regularly scheduled classes for flexible teaching and learning and for independent study and research, and that's how this web development course was born.

Within a month, you will master the core content of designing, building, beautifying, and publishing a website from scratch, basically covering full-stack web development. If you don't need to learn web development systematically, but just want to add it to your toolkit out of interest, then this class will be perfect for you.

## Resources

- Course Website: <https://weblab.mit.edu/schedule/>
- Recordings: refer to the course website.
- Assignments: refer to the course website.


================================================
FILE: docs/Web开发/mitweb.md
================================================
# MIT Web Development Crash Course

## 课程简介

- 所属大学:MIT
- 先修要求:掌握至少一门编程语言
- 编程语言:JavaScript/HTML/CSS/NoSQL
- 课程难度:🌟🌟🌟
- 预计学时:因人而异

MIT 在每年 1 月份会有一个为期 4 周的 [Independent Activities Period](https://elo.mit.edu/iap/) (IAP),在这个月里,MIT 的学生和老师可以自由地开设很多有趣的课程,而这门网站开发课程就是其中之一。

在一个月的时间里,你会从零开始掌握一个网站的设计、搭建、美化、交互等等核心内容,基本覆盖了 Web 开发的前后端大部分技术栈。如果你不需要系统地学习网络开发,而只是出于兴趣想把它加入自己的技能包里,那么这门课将非常适合你。

## 课程资源

- 课程网站:<https://weblab.mit.edu/schedule/>
- 课程视频:参见课程网站链接
- 课程作业:参见课程 Schedule


================================================
FILE: docs/index.en.md
================================================
<figure markdown>
  ![Image title](./images/title.png){ width="600" }
</figure>

# **Foreword**

This is a self-learning guide to computer science, and a memento of my three years of self-learning at university.

It is also a gift to the young students at Peking University. It would be a great encouragement and comfort to me if this book could be of even the slightest help to you in your college life.

The book is currently organized to include the following sections (if you have other good suggestions, or would like to join the ranks of contributors, please feel free to email [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn) or ask questions in the issue).

- User guide for this book: Given the numerous resources covered in this book, I have developed corresponding usage guides based on different people's free time and learning objectives.
- A reference CS learning plan: This is a comprehensive and systematic CS self-learning plan that I have formulated based on my own self-study experience.
- Productivity Toolkit: IDE, VPN, StackOverflow, Git, Github, Vim, Latex, GNU Make and so on.
- Book recommendations: Those who have read the CSAPP must have realized the importance of good books. I will list links to books and resources in different areas of Computer Science that I find rewarding to read.
- **List of high quality CS courses**: I will summarize all the high quality foreign CS courses I have taken and the community contributed into different categories and give relevant self-learning advice. Most of them will have a separate repository containing relevant resources as well as the homework/project implementations.

## **The place where dreams start —— CS61A**

In my freshman year, I was a novice who knew nothing about computers. I installed a giant IDE Visual Studio and fight with OJ every day. With my high school maths background, I did pretty well in maths courses, but I felt struggled to learn courses in my major. When it came to programming, all I could do was open up that clunky IDE, create a new project that I didn't know exactly what it was for, and then `cin`, `cout`, `for` loops, and then CE, RE, WA loops. I was in a state where I was desperately trying to learn well but I didn't know how to learn. I listened carefully in class but I couldn't solve the homework problems. I spent almost all my spare time doing the homework after class, but the results were disappointing. I still retain the source code of the project for Introduction to Computing course —— a single 1200-line C++ file with no header files, no class abstraction, no unit tests, no makefile, no version control. The only good thing is that it can run, the disadvantage is the complement of "can run". For a while I wondered if I wasn't cut out for computer science, as all my childhood imaginings of geekiness had been completely ruined by my first semester's experience.

It all turned around during the winter break of my freshman year, when I had a hankering to learn Python. I overheard someone recommend CS61A, a freshman introductory course at UC Berkeley on Python. I'll never forget that day, when I opened the [CS61A](https://cs61a.org/) course website. It was like Columbus discovering a new continent, and I opened the door to a new world.

I finished the course in 3 weeks and for the first time I felt that CS could be so fulfilling and interesting, and I was shocked that there existed such a great course in the world.

To avoid any suspicion of pandering to foreign courses, I will tell you about my experience of studying CS61A from the perspective of a pure student.

- ***Course website developed by course staffs***: The course website integrates all the course resources into one, with a well organised course schedule, links to all slides, recorded videos and homework, detailed and clear syllabus, list of exams and solutions from previous years. Aesthetics aside, this website is so convenient for students.

- ***Textbook written by course instructor***: The course instructor has adapted the classic MIT textbook *Structure and Interpretation of Computer Programs* (SICP) into Python (the original textbook was based on Scheme). This is a great way to ensure that the classroom content is consistent with the textbook, while adding more details. The entire book is open source and can be read directly online.

- ***Various, comprehensive and interesting homework***: There are 14 labs to reinforce the knowledge gained in class, 10 homework assignments to practice, and 4 projects each with thousands of lines of code, all with well-organized skeleton code and babysitting instructions. Unlike the old-school OJ and Word document assignments, each lab/homework/project has a detailed handout document, fully automated grading scripts, and CS61A staffs have even developed an [automated assignment submission and grading system](https://okpy.org/). Of course, one might say "How much can you learn from a project where most of code are written by your teaching assistants?" . For someone who is new to CS and even stumbling over installing Python, this well-developed skeleton code allows students to focus on reinforcing the core knowledge they've learned in class, but also gives them a sense of achievement that they already can make a little game despite of learning Python only for a month. It also gives them the opportunity to read and learn from other people's high quality code so that they can reuse it later. I think in the freshman year, this kind of skeleton code is absolutely beneficial. The only bad thing perhaps is for the instructors and teaching assistants, as developing such assignments can conceivably require a considerable time commitment.

- ***Weekly discussion sessions***: The teaching assistants will explain the difficult knowledge in class and add some supplementary materials which may not be covered in class. Also, there will be exercises from exams of previous years. All the exercises are written in LaTeX with solutions.

In CS61A, You don't need any prerequesites about CS at all. You just need to pay attention, spend time and work hard. The feeling that you do not know what to do, that you are not getting anything in return for all the time you put in, is gone. It suited me so well that I fell in love with self-learning.

Imagine that if someone could chew up the hard knowledge and present it to you in a vivid and straightforward way, with so many fancy and varied projects to reinforce your theoretical knowledge, you'd think they were really trying their best to make you fully grasp the course, and it was even an insult to the course builders not to learn it well.

If you think I'm exaggerating, start with [CS61A](https://cs61a.org/), because it's where my dreams began.

## **Why write this book?**

In the 2020 Fall semester, I worked as a teaching assistant for the class "Introduction to Computer Systems" at Peking University. At that time, I had been studying totally on my own for over a year. I enjoyed this style of learning immensely. To share this joy, I have made a [CS Self-learning Materials List](https://github.com/PKUFlyingPig/Self-learning-Computer-Science) for students in my seminar. It was purely on a whim at the time, as I wouldn't dare to encourage my students to skip classes and study on their own.

But after another year of maintenance, the list has become quite comprehensive, covering most of the courses in Computer Science, Artificial Intelligence and Soft Engineering, and I have built separate repositories for each course, summarising the self-learning materials that I used.

In my last college year, when I opened up my curriculum book, I realized that it was already a subset of my self-learning list. By then, it was only two and a half years after I had started my self-learning journey. Then, a bold idea came to my mind: perhaps I could create a self-learning book, write down the difficulty I encountered and the interest I found during these years of self-learning, hoping to make it easy for students who may also enjoy self-learning to start their wonderful self-learning journey.

If you can build up the whole CS foundation in less than three years, have relatively solid mathematical skills and coding ability, experience dozens of projects with thousands of lines of code, master at least C/C++/Java/JS/Python/Go/Rust and other mainstream programming languages, have a good understanding of algorithms, circuits, architectures, networks, operating systems, compilers, artificial intelligence, machine learning, computer vision, natural language processing, reinforcement learning, cryptography, information theory, game theory, numerical analysis, statistics, distributed systems, parallel computing, database systems, computer graphics, web development, cloud computing, supercomputing etc. I think you will be confident enough to choose the area you are interested in, and you will be quite competitive in both industry and academia.

I firmly believe that if you have read to this line, you do not lack the ability and commitment to learn CS well, you just need a good teacher to teach you a good course. And I will try my best to pick such courses for you, based on my three years of experience.

## **Pros**

For me, the biggest advantage of self-learning is that I can adjust the pace of learning entirely according to my own progress. For difficult parts, I can watch the videos over and over again, Google it online and ask questions on StackOverflow until I have it all figured out. For those that I mastered relatively quickly, I could skip them at twice or even three times the speed.

Another great thing about self-learning is that you can learn from different perspectives. I have taken core courses such as architectures, networking, operating systems, and compilers from different universities. Different instructors may have different views on the same knowledge, which will broaden your horizon.

A third advantage of self-learning is that you do not need to go to the class, listening to the boring lectures.

## **Cons**

Of course, as a big fan of self-learning, I have to admit that it has its disadvantages.

The first is the difficulty of communication. I'm actually a very keen questioner, and I like to follow up all the points I don't understand. But when you're facing a screen and you hear a teacher talking about something you don't understand, you can't go to the other end of the network and ask him or her for clarification. I try to mitigate this by thinking independently and making good use of Google, but it would be great to have a few friends to study together. You can refer to `README` for more information on participating a community group.

The second thing is that these courses are basically in English. From the videos to the slides to the assignments, all in English. You may struggle at first, but I think it's a challenge that if you overcome, it will be extremely rewarding. Because at the moment, as reluctant as I am, I have to admit that in computer science, a lot of high quality documentation, forums and websites are all in English.

The third, and I think the most difficult one, is self-discipline. Because have no DDL can sometimes be a really scary thing, especially when you get deeper, many foreign courses are quite difficult. You have to be self-driven enough to force yourself to settle down, read dozens of pages of Project Handout, understand thousands of lines of skeleton code and endure hours of debugging time. With no credits, no grades, no teachers, no classmates, just one belief - that you are getting better.

## **Who is this book for?**

As I said in the beginning, anyone who is interested in learning computer science on their own can refer to this book. If you already have some basic skills and are just interested in a particular area, you can selectively pick and choose what you are interested in to study. Of course, if you are a novice who knows nothing about computers like I did back then, and just begin your college journey, I hope this book will be your cheat sheet to get the knowledge and skills you need in the least amount of time. In a way, this book is more like a course search engine ordered according to my experience, helping you to learn high quality CS courses from the world's top universities without leaving home.

Of course, as an undergraduate student who has not yet graduated, I feel that I am not in a position nor have the right to preach one way of learning. I just hope that this material will help those who are also self-motivated and persistent to gain a richer, more varied and satisfying college life.

## **Special thanks**

I would like to express my sincere gratitude to all the professors who have made their courses public for free. These courses are the culmination of decades of their teaching careers, and they have chosen to selflessly make such a high quality CS education available to all. Without them, my university life would not have been as fulfilling and enjoyable. Many of the professors would even reply with hundreds of words in length after I had sent them a thank you email, which really touched me beyond words. They also inspired me all the time that if decide to do something, do it with all heart and soul.

## **Want to join as a contributor?**

There is a limit to how much one person can do, and this book was written by me under a heavy research schedule, so there are inevitably imperfections. In addition, as I work in the area of systems, many of the courses focus on systems, and there is relatively little content related to advanced mathematics, computing theory, and advanced algorithms. If any of you would like to share your self-learning experience and resources in other areas, you can directly initiate a Pull Request in the project, or feel free to contact me by email ([zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn)).


================================================
FILE: docs/index.md
================================================
<figure markdown>
  ![Image title](./images/title.png){ width="600" }
</figure>

# 前言

**🎉🎉 [Release v1.2.0](https://github.com/PKUFlyingPig/cs-self-learning/releases/tag/v1.2.0): 更新了[深度生成模型学习路线](./深度生成模型/roadmap.md) 🎉🎉**

这是一本计算机的自学指南,也是对自己大学三年自学生涯的一个纪念。

这同时也是一份献给北大信科学弟学妹们的礼物。如果这本书能对你们的信科生涯有哪怕一丝一毫的帮助,都是对我极大的鼓励和慰藉。

本书目前包括了以下部分(如果你有其他好的建议,或者想加入贡献者的行列,欢迎邮件 [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn) 或者在 issue 里提问):

- 本书使用指南:由于书内涵盖资源众多,我根据不同人群的空闲时间和学习目标制定了对应的使用指南。
- 一份供参考的 CS 学习规划:我根据自己的自学经历制定的全面的、系统化的 CS 自学规划。
- 必学工具:一些 CSer 效率工具介绍,例如 IDE, 翻墙, StackOverflow, Git, GitHub, Vim, LaTeX, GNU Make, Docker, 工作流 等等。
- 经典书籍推荐:你是否苦于教材的晦涩难懂不知所云?别从自己身上找原因了,可能只是教材写得太烂。看过 CSAPP 这本书的同学一定会感叹好书的重要,我将列举推荐各个计算机领域的必看好书与资源链接。
- **国内外高质量 CS 课程汇总**:我将把我上过的以及开源社区贡献的**高质量**的国内外 CS 课程分门别类进行汇总,介绍其课程内容特点并给出相应的自学建议,大部分课程都会有一个独立的仓库维护相关的资源以及作业实现供大家学习参考。

## 梦开始的地方 —— CS61A

大一入学时我是一个对计算机一无所知的小白,装了几十个 G 的 Visual Studio 天天和 OJ 你死我活。凭着高中的数学底子我数学课学得还不错,但在专业课上对竞赛大佬只有仰望。提到编程我只会打开那笨重的 IDE,新建一个我也不知道具体是干啥的命令行项目,然后就是 `cin`, `cout`, `for` 循环,然后 CE, RE, WA 循环。当时的我就处在一种拼命想学好但不知道怎么学,课上认真听讲但题还不会做,课后做作业完全是用时间和它硬耗的痛苦状态。我至今电脑里还存着自己大一上学期计算概论大作业的源代码 —— 一个 1200 行的 C++ 文件,没有头文件、没有类、没有封装、没有 unit test、没有 Makefile、没有 Git,唯一的优点是它确实能跑,缺点是“能跑”的补集。我一度怀疑我是不是不适合学计算机,因为童年对于极客的所有想象,已经被我第一个学期的体验彻底粉碎了。

这一切的转机发生在我大一的寒假,我心血来潮想学习 Python。无意间看到知乎有人推荐了 CS61A 这门课,说是 UC Berkeley 的大一入门课程,讲的就是 Python。我永远不会忘记那一天,打开 [CS61A](https://cs61a.org/) 课程网站的那个瞬间,就像哥伦布发现了新大陆一样,我开启了新世界的大门。

我一口气 3 个星期上完了这门课,它让我第一次感觉到原来 CS 可以学得如此充实而有趣,原来这世上竟有如此精华的课程。

为避免有崇洋媚外之嫌,我单纯从一个学生的视角来讲讲自学 CS61A 的体验:

- 独立搭建的课程网站: 一个网站将所有课程资源整合一体,条理分明的课程 schedule、所有 slides, homework, discussion 的文件链接、详细明确的课程给分说明、历年的考试题与答案。这样一个网站抛开美观程度不谈,既方便学生,也让资源公正透明。

- 课程教授亲自编写的教材:CS61A 这门课的开课老师将 MIT 的经典教材 *Structure and Interpretation of Computer Programs* (SICP) 用Python这门语言进行改编(原教材基于 Scheme 语言),保证了课堂内容与教材内容的一致性,同时补充了更多细节,可以说诚意满满。而且[全书开源](https://www.composingprograms.com/),可以直接线上阅读。

- 丰富到让人眼花缭乱的课程作业:14 个 lab 巩固随堂知识点,10 个 homework,还有 4 个代码量均上千行的 project。与大家熟悉的 OJ 和 Word 文档式的作业不同,所有作业均有完善的代码框架,保姆级的作业说明。每个 Project 都有详尽的 handout 文档、全自动的评分脚本。CS61A 甚至专门开发了一个[自动化的作业提交评分系统](https://okpy.org/)(据说还发了论文)。当然,有人会说“一个 project 几千行代码大部分都是助教帮你写好的,你还能学到啥?”。此言差矣,作为一个刚刚接触计算机,连安装 Python 都磕磕绊绊的小白来说,这样完善的代码框架既可以让你专注于巩固课堂上学习到的核心知识点,又能有“我才学了一个月就能做一个小游戏了!”的成就感,还能有机会阅读学习别人高质量的代码,从而为自己所用。我觉得在低年级,这种代码框架可以说百利而无一害。就是苦了老师和助教,因为开发这样的作业可想而知需要相当大的时间投入和多年的迭代积累。

- 每周 Discussion 讨论课:助教会讲解知识难点和考试例题,习题全部用 LaTeX 撰写,相当规范并且会给出详细的解答,让学生及时查漏补缺巩固知识点。

这样的课程,你完全不需要任何计算机的基础,你只需要努力、认真、花时间就够了。此前那种有劲没处使的感觉,那种付出再多时间却得不到回报的感觉,从此烟消云散。这太适合我了,我从此爱上了自学。

试想如果有人能把艰深的知识点嚼碎嚼烂,用生动直白的方式呈现给你,还有那么多听起来就很 fancy,种类繁多的 project 来巩固你的理论知识,你会觉得他们真的是在倾尽全力想方设法地让你完全掌握这门课,你会觉得不学好它简直是对这些课程建设者的侮辱。

如果你觉得我在夸大其词,那么不妨从 [CS61A](https://cs61a.org/) 开始,因为它是我的梦开始的地方。

## 为什么写这本书

在我2020年秋季学期担任《深入理解计算机系统》(CSAPP)这门课的助教时,我已经自学一年多了。这一年多来我无比享受这种自学模式,为了分享这种快乐,我为自己的研讨班学生做过一个 [CS自学资料整理仓库](https://github.com/PKUFlyingPig/Self-learning-Computer-Science)。当时纯粹是心血来潮,因为我也不敢公然鼓励大家翘课自学。

但随着又一年时间的维护,这个仓库的内容已经相当丰富,基本覆盖了计科、智能系、软工系的绝大多数课程,我也为每个课程都建了各自的 GitHub 仓库,汇总我用到的自学资料以及作业实现。

直到大四开始凑学分毕业的时候,我打开自己的培养方案,我发现它已经是我这个自学仓库的子集了,而这距离我开始自学也才两年半而已。于是,一个大胆的想法在我脑海中浮现:也许,我可以打造一个自学式的培养方案,把我这三年自学经历中遇到的坑、走过的路记录下来,以期能为后来的学弟学妹们贡献自己的一份微薄之力。

如果大家可以在三年不到的时间里就能建立起整座 CS 的基础大厦,能有相对扎实的数学功底和代码能力,经历过数十个千行代码量的 Project 的洗礼,掌握至少 C/C++/Java/JS/Python/Go/Rust 等主流语言,对算法、电路、体系、网络、操统、编译、人工智能、机器学习、计算机视觉、自然语言处理、强化学习、密码学、信息论、博弈论、数值分析、统计学、分布式、数据库、图形学、Web开发、云服务、超算等等方面均有涉猎。我想,你将有足够的底气和自信选择自己感兴趣的方向,无论是就业还是科研,你都将有相当的竞争力。

因为我坚信,既然你能坚持听我 BB 到这里,你一定不缺学好 CS 的能力,你只是没有一个好的老师,给你讲一门好的课程。而我,将力图根据我三年的体验,为你挑选这样的课程。

## 自学的好处

对我来说,自学最大的好处就在于可以完全根据自己的进度来调整学习速度。对于一些疑难知识点,我可以反复回看视频,在网上谷歌相关的内容,上 StackOverflow 提问题,直到完全将它弄明白。而对于自己掌握得相对较快的内容,则可以两倍速甚至三倍速略过。

自学的另一大好处就是博采众长。计算机系的几大核心课程:体系、网络、操统、编译,每一门我基本都上过不同大学的课程,不同的教材、不同的知识点侧重、不同的 project 将会极大丰富你的视野,也会让你理解错误的一些内容得到及时纠正。

自学的第三个好处是时间自由。大学的课余时间本就相对自由,再加上不用去上课的话更是可以放飞自我地安排自学时间和进度。我大二的时候赶上疫情在家窝了大半年,返校之后也基本没有线下去过教室上课,对绩点也毫无影响。

## 自学的坏处

当然,作为 CS 自学主义的忠实拥趸,我不得不承认自学也有它的坏处。

第一就是交流沟通的不便。我其实是一个很热衷于提问的人,对于所有没有弄明白的点,我都喜欢穷追到底。但当你面对着屏幕听到老师讲了一个你没明白的知识点的时候,你无法顺着网线到另一端向老师问个明白。我努力通过独立思考和善用 Google 来缓解这一点,但是,如果能有几个志同道合的伙伴结伴自学,那将是极好的。关于交流群的建立,大家可以参考仓库 `README` 中的教程。

第二就是这些自学的课程基本都是英文的。从视频到课件再到作业全是英文,所以有一定的门槛。我尽量在汇总课程视频资源的时候寻找带中文字幕的搬运视频,但大多数课程还是只有机翻或者生肉,而课件和作业肯定都是英文的。不过我觉得这是个值得努力克服的挑战,因为在当下,虽然我很不情愿,但也不得不承认,在计算机领域,很多优质的文档、论坛、网站都是英文居多。养成英文阅读的习惯,在赤旗插遍世界之前,还是有一定好处的(狗头保命)。

第三,也是我觉得最困难的一点,就是自律。因为没有 DDL 有时候真的是一件可怕的事情。特别是随着学习的深入,国外的很多课程是相当虐的。你得有足够的驱动力强迫自己静下心来,阅读几十页的 Project Handout,理解上千行的代码框架,忍受数个小时的 debug 时光。而这一切,没有学分,没有绩点,没有老师,没有同学,只有一个信念 —— 你在变强。

## 这本书适合谁

正如我在前言里说的,任何有志于自学计算机的朋友都可以参考这本书。如果你已经有了一定的计算机基础,只是对某个特定的领域感兴趣,可以选择性地挑选你感兴趣的内容进行学习。当然,如果你是一个像我当年一样对计算机一无所知的小白,初入大学的校门,我希望这本书能成为你的攻略,让你花最少的时间掌握你所需要的知识和能力。某种程度上,这本书更像是一个根据我的体验来排序的课程搜索引擎,帮助大家足不出户,体验世界顶级名校的计算机优质课程。

当然,作为一个还未毕业的本科生,我深感自己没有能力也没有权利去宣扬一种学习方式,我只是希望这份资料能让那些同样有自学之心和毅力朋友可以少走些弯路,收获更丰富、更多样、更满足的学习体验。

## 特别鸣谢

在这里,我怀着崇敬之心真诚地感谢所有将课程资源无偿开源的各位教授们。这些课程倾注了他们数十年教学生涯的积淀和心血,他们却选择无私地让所有人享受到如此高质量的 CS 教育。没有他们,我的大学生活不会这样充实而快乐。很多教授在我给他们发了感谢邮件之后,甚至会回复上百字的长文,真的让我无比感动。他们也时刻激励着我,做一件事,就得用心做好,无论是学习、科研、还是为人。

## 你也想加入到贡献者的行列

一个人的力量终究是有限的,这本书也是我在繁重的科研之余熬夜抽空写出来的,难免有不够完善之处。另外,由于个人做的是系统方向,很多课程侧重系统领域,对于数学、理论计算机、高级算法相关的内容则相对少些。如果有大佬想在其他领域分享自己的自学经历与资源,可以直接在项目中发起 Pull Request,也欢迎和我邮件联系([zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn))。

## 关于交流群的建立

本书支持页面评论功能,因此如果你想自学某课程,可以自己建立群聊后(QQ 微信皆可)在对应的课程页面下方发表评论,注明你的学习目标以及加入交流群的途径。此外,过去已有不少朋友在 issue 里建立了类似群聊,可以自行选择直接加入。

## 请作者喝杯下午茶

本书的内容是完全开源免费的,如果你觉得该项目对你真的有帮助,可以给仓库点个 star 或者请作者喝一杯下午茶。

<figure markdown>
  ![Image title](./images/sponsor.png){ width="500" }
</figure>

================================================
FILE: docs/人工智能/CS188.en.md
================================================
# CS188: Introduction to Artificial Intelligence

## Course Overview

- University:UC Berkeley
- Prerequisites:CS70
- Programming Language:Python
- Course Difficulty:🌟🌟🌟
- Estimated Hours:50 hours

This introductory artificial intelligence course at UC Berkeley provides in-depth and accessible course notes, making it possible to grasp the material without necessarily watching the lecture videos. The course follows the chapters of the classic AI textbook *Artificial Intelligence: A Modern Approach*, covering topics such as search pruning, constraint satisfaction problems, Markov decision processes, reinforcement learning, Bayesian networks, Hidden Markov Models, as well as fundamental concepts in machine learning and neural networks.

The Fall 2018 version of the course offered free access to gradescope, allowing students to complete written assignments online and receive real-time assessment results. The course also includes 6 projects of high quality, featuring the recreation of the classic Pac-Man game. These projects challenge students to apply their AI knowledge to implement various algorithms, enabling their Pac-Man to navigate mazes, evade ghosts, and collect pellets.

## Course Resources

- Course Websites:[Fall 2022](https://inst.eecs.berkeley.edu/~cs188/fa22/), [Fall 2018](https://inst.eecs.berkeley.edu/~cs188/fa18/index.html)
- Course Videos:[Fall 2022](https://inst.eecs.berkeley.edu/~cs188/fa22/), [Fall 2018](https://inst.eecs.berkeley.edu/~cs188/fa18/index.html), with links to each lecture on the course website
- Course Textbook:Artificial intelligence: A Modern Approach
- Course Assignments:Online assessments for written assignments and projects, details available on the course website


================================================
FILE: docs/人工智能/CS188.md
================================================
# CS188: Introduction to Artificial Intelligence

## 课程简介

- 所属大学:UC Berkeley
- 先修要求:CS70
- 编程语言:Python
- 课程难度:🌟🌟🌟
- 预计学时:50 小时

伯克利的人工智能入门课,课程 notes 写得非常深入浅出,基本不需要观看课程视频。课程内容的安排基本按照人工智能的经典教材 *Artificial intelligence: A Modern Approach* 的章节顺序,覆盖了搜索剪枝、约束满足问题、马尔可夫决策过程、强化学习、贝叶斯网络、隐马尔可夫模型以及基础的机器学习和神经网络的相关内容。

目前Spring 2024是最新一期视频与资料完整、开放了旁听gradescope的版本,大家可以在线完成书面作业并实时得到测评结果。同时课程的 6 个 Project 也是质量爆炸,复现了经典的 Packman(吃豆人)小游戏,会让你利用学到的 AI 知识,去实现相关算法,让你的吃豆人在迷宫里自由穿梭,躲避鬼怪,收集豆子。

## 课程资源

- 课程网站:[Spring 2024](https://inst.eecs.berkeley.edu/~cs188/sp24/)
- 课程视频:每节课的链接详见课程网站
- 课程教材:Artificial intelligence: A Modern Approach
- 课程作业:在线测评书面作业和 Projects,详见课程网站


================================================
FILE: docs/人工智能/CS50.en.md
================================================
# Harvard's CS50: Introduction to AI with Python

## Descriptions

- Offered by: Harvard University
- Prerequisites: Basic knowledge of probability theory and Python
- Programming Languages: Python
- Difficulty: 🌟🌟🌟
- Class Hour: 30

A very basic introductory AI course, what makes it stand out is the 12 well-designed programming assignments, all of which will use the learned knowledge to implement a simple game AI, such as using reinforcement learning to play Nim game, using max-min search with alpha-beta pruning to sweep mines, and so on. It's perfect for newbies to get started or bigwigs to relax.

## Course Resources

- Course Website: [2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)
- Recordings: [2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)
- Textbooks: No textbook is needed in this course.
- Assignments: [2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/) with 12 programming labs of high quality mentioned above.

## Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/cs50_ai - GitHub](https://github.com/PKUFlyingPig/cs50_ai).


================================================
FILE: docs/人工智能/CS50.md
================================================
# CS50’s Introduction to AI with Python

## 课程简介

- 所属大学:Harvard
- 先修要求:基本概率论 + Python 基础
- 编程语言:Python
- 课程难度:🌟🌟🌟
- 预计学时:30 小时

一门非常基础的 AI 入门课,让人眼前一亮的是 12 个设计精巧的编程作业,都会用学到的 AI 知识去实现一个简易的游戏 AI,比如用强化学习训练一个 Nim 游戏的 AI,用 alpha-beta 剪枝去扫雷等等,非常适合新手入门或者大佬休闲。

## 课程资源

- 课程网站:[2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)
- 课程视频:[2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)
- 课程教材:无
- 课程作业:[2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/),12个精巧的编程作业

## 资源汇总

@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/cs50_ai - GitHub](https://github.com/PKUFlyingPig/cs50_ai) 中。


================================================
FILE: docs/人工智能/Neural Networks:Zero to Hero.en.md
================================================
# Neural Networks: Zero to Hero  

## Description  

- **Instructor:** Andrej Karpathy  
- **Prerequisites:** Basic Python programming and some familiarity with deep learning concepts  
- **Programming Language:** Python  
- **Difficulty:** 🌟🌟🌟🌟  
- **Class Hours:** Approximately 19 hours  

This hands-on deep learning course, taught by Andrej Karpathy, provides a detailed and intuitive introduction to neural networks and their underlying principles. The course starts with foundational concepts such as backpropagation and micrograd before progressing to building language models, WaveNets, and GPT from scratch. The emphasis is on practical implementation, with step-by-step coding explanations to help students understand and build complex models from the ground up.  

## Instructor Information  

Andrej Karpathy is a renowned AI researcher and educator with extensive experience in deep learning and neural networks. He was the **Senior Director of AI at Tesla**, leading the **computer vision team for Tesla Autopilot** from 2017 to 2022. Prior to that, he was a **research scientist and founding member at OpenAI** (2015-2017). In 2023, he returned to OpenAI, contributing to improvements in GPT-4 for ChatGPT. In 2024, he founded **Eureka Labs**, an AI+Education company.  

Karpathy holds a **PhD from Stanford University**, where he worked on convolutional and recurrent neural networks with **Fei-Fei Li**. He has collaborated with leading AI researchers, including **Daphne Koller, Andrew Ng, Sebastian Thrun, and Vladlen Koltun**. He also taught the first deep learning course at Stanford, **CS 231n: Convolutional Neural Networks for Visual Recognition**, which became one of the largest classes at the university.  

## Course Resources  

- **Lecture Videos:** [YouTube Playlist](https://www.youtube.com/watch?v=VMj-3S1tku0&list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ)  
- **Assignments:** Self-guided projects and code implementation exercises available throughout the lectures  

For more information, watch the full playlist on YouTube.  

================================================
FILE: docs/人工智能/Neural Networks:Zero to Hero.md
================================================
# 神经网络:从零到英雄  

## 课程简介  

- **讲师:** Andrej Karpathy  
- **先修要求:** 具备基本的 Python 编程能力,并对深度学习概念有所了解  
- **编程语言:** Python  
- **难度:** 🌟🌟🌟🌟  
- **课程时长:** 约 19 小时  

本课程由 Andrej Karpathy 讲授,是一个深入浅出的深度学习课程,旨在帮助学习者掌握神经网络的核心原理。课程从基础概念(如反向传播和 micrograd)入手,逐步带领学员构建语言模型、WaveNet,并从零开始实现 GPT。课程以实践为主,提供逐步讲解的代码示例,让学员能够理解并构建复杂的神经网络模型。  

## 讲师信息  

Andrej Karpathy 是一位知名的人工智能研究员和教育者,在深度学习和神经网络领域具有丰富的经验。他曾在 **2017 至 2022 年担任特斯拉 AI 部门高级总监**,领导 **Tesla Autopilot 计算机视觉团队**,负责数据标注、神经网络训练、部署等工作。在此之前,他曾是 **OpenAI 的研究科学家和创始成员**(2015-2017)。2023 年,他回归 OpenAI,参与改进 ChatGPT 的 GPT-4。2024 年,他创立了 **Eureka Labs**,一家专注于 AI + 教育的公司。  

Karpathy 拥有 **斯坦福大学博士学位**,师从 **Fei-Fei Li(李飞飞)**,主要研究卷积神经网络和循环神经网络及其在计算机视觉和自然语言处理中的应用。他曾与 **Daphne Koller、Andrew Ng(吴恩达)、Sebastian Thrun 和 Vladlen Koltun** 等知名研究员合作。此外,他还在斯坦福大学教授了首个深度学习课程 **CS 231n: 卷积神经网络与视觉识别**,该课程逐渐发展为斯坦福大学规模最大的课程之一。  

## 课程资源  

- **课程视频:** [YouTube 播放列表](https://www.youtube.com/watch?v=VMj-3S1tku0&list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ)  
- **作业:** 课程中提供的代码实践和项目练习  

更多信息请访问 YouTube 观看完整课程视频。  

================================================
FILE: docs/体系结构/CA.en.md
================================================
# ETH: Computer Architecture

## Course Overview

- University: ETH Zurich
- Prerequisites: [DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/DDCA/)
- Programming Language: C/C++, Verilog
- Difficulty Level: 🌟🌟🌟🌟
- Estimated Study Time: 70+ hours

This course, taught by Professor Onur Mutlu, delves into computer architecture. It appears to be an advanced course following [DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/DDCA/), aimed at teaching how to design control and data paths hardware for a MIPS-like processor, how to execute machine instructions concurrently through pipelining and simple superscalar execution, and how to design fast memory and storage systems. According to student feedback, the course is at least more challenging than CS61C, and some of its content is cutting-edge. Bilibili uploaders recommend it as a supplement to Carnegie Mellon University's 18-447 course. The reading materials provided are extensive, akin to attending a semester's worth of lectures.

The official website description is as follows:
> "We will learn the fundamental concepts of the different parts of modern computing systems, as well as the latest major research topics in Industry and Academia. We will extensively cover memory systems (including DRAM and new Non-Volatile Memory technologies, memory controllers, flash memory), new paradigms like processing-in-memory, parallel computing systems (including multicore processors, coherence and consistency, GPUs), heterogeneous computing, interconnection networks, specialized systems for major data-intensive workloads (e.g., graph analytics, bioinformatics, machine learning), etc. We will focus on fundamentals as well as cutting-edge research. Significant attention will be given to real-life examples and tradeoffs, as well as critical analysis of modern computing systems."

The programming practice involves using Verilog to design and simulate RT implementations of a MIPS-like pipeline processor to enhance theoretical course understanding. The initial experiments include Verilog CPU pipeline programming. Additionally, students will develop a cycle-accurate processor simulator in C and explore processor design options using this simulator.

## Course Resources

- Course Website: [2020 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start), [2022 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start)
- Course Videos: Official videos available on the course website. A [2020 version is available on Bilibili](https://www.bilibili.com/video/BV1Vf4y1i7YG/?vd_source=77d47fcb2bac41ab4ad02f265b3273cf).
- Course Textbooks: No designated textbook; each lecture has an extensive bibliography for reading.
- Course Assignments: 5 Projects, mostly related to memory and cache, detailed on the [lab page of the course website](https://safari.ethz.ch/architecture/fall2022/doku.php?id=labs).

## Resource Summary
Some universities in China have introduced this course, so interested students can find additional resources through online searches.

================================================
FILE: docs/体系结构/CA.md
================================================
# ETH: Computer Architecture

## 课程简介

- 所属大学:ETH Zurich
- 先修要求:[DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/DDCA/)
- 编程语言:C/C++,verilog
- 课程难度:🌟🌟🌟🌟
- 预计学时:70 小时 +

讲解计算机体系结构,授课教师是 Onur Mutlu 教授。本课程根据课程描述应该是[DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/DDCA/)的进阶课程,课程目标是学习如何为类MIPS处理器设计控制和数据通路硬件,如何通过流水线和简单的超标量执行使机器指令同时执行,以及如何设计快速的内存和存储系统。根据同学反馈,从课程本身的难度上说,至少高于 CS61C ,课程的部分内容十分前沿,B站搬运UP主建议大家作为卡内基梅隆大学18-447的补充。所提供的阅读材料十分丰富,相当于听了一学期讲座。

以下是官网的介绍:
>We will learn the fundamental concepts of the different parts of modern computing systems, as well as the latest major research topics in Industry and Academia. We will extensively cover memory systems (including DRAM and new Non-Volatile Memory technologies, memory controllers, flash memory), new paradigms like processing-in-memory, parallel computing systems (including multicore processors, coherence and consistency, GPUs), heterogeneous computing, interconnection networks, specialized systems for major data-intensive workloads (e.g. graph analytics, bioinformatics, machine learning), etc. We will focus on fundamentals as well as cutting-edge research. Significant attention will be given to real-life examples and tradeoffs, as well as critical analysis of modern computing systems.

编程实践采取 Verilog 设计和模拟类 MIPS 流水线处理器的寄存器传输(RT)实现,以此加强对理论课程的理解。因此前几个实验会有 verilog 的 CPU 流水线编程。同时还将使用C语言开发一个周期精确的处理器模拟器,并使用该模拟器探索处理器设计选项。


## 课程资源

- 课程网站:[2020 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start), [2022 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start)
- 课程视频:官方视频详见课程网站。B站有个[2020年版本搬运](https://www.bilibili.com/video/BV1Vf4y1i7YG/?vd_source=77d47fcb2bac41ab4ad02f265b3273cf)。
- 课程教材:无指定教材,每个 lecture 都有大量文献可供阅读
- 课程作业:5 个 Project ,大多与内存和cache相关,具体内容见[课程网站的lab界面](https://safari.ethz.ch/architecture/fall2022/doku.php?id=labs)

## 资源汇总
国内有高校引入了这门课,因此有需要的同学可以搜索到一些资源。




================================================
FILE: docs/体系结构/CS61C.en.md
================================================
# CS61C: Great Ideas in Computer Architecture

## Descriptions

- Offered by: UC Berkeley
- Prerequisites: CS61A, CS61B
- Programming Languages: C
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 100 hours

This is the last course in Berkeley's CS61 series, which dives into the internal of computer architecture and will make you understand how the C language is translated into RISC-V assembly language and executed on the CPU. Unlike [Nand2Tetris](https://github.com/PKUFlyingPig/cs-self-learning/blob/master/docs/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/N2T.md), this course is much more difficult and more in-depth, covering pipelining, cache, virtual memory, and concurrency-related content.

The projects are very innovative and interesting. Project1 is a warmup assignment in C. In 2020Fall, you will implement the famous *Game of Life*. Project2 requires you to write a fully-connected neural network in RISC-V assembly to classify handwritten digits in MNIST dataset, which is a great exercise to write assembly code. In Project3, you will use Logisim, a digital circuit simulation software, to build a two-stage pipeline CPU from scratch and run RISC-V assembly code on it. In Project4 you will implement a toy version of Numpy, using OpenMP, SIMD, and other techniques to speed up matrix operations.

In a word, this is the best computer architecture course I have ever taken.

## Course Resources

- [Course Website](https://cs61c.org/)
- Course Website (Backup): [Fa24-WayBack Machine](https://web.archive.org/web/20241219154359/https://cs61c.org/fa24/), [Fa20-WayBack Machine](https://web.archive.org/web/20220120134001/https://inst.eecs.berkeley.edu/~cs61c/fa20/), [Fa20-Backup](https://www.learncs.site/docs/curriculum-resource/cs61c/syllabus)
- Recordings: [Su20-Bilibili](https://www.bilibili.com/video/BV1fC4y147iZ/?share_source=copy_web&vd_source=7c3823b46a52fbbef42b79e01d55c300), [Su20-Youtube](https://youtube.com/playlist?list=PLDoI-XvXO0aqgoMQvogzmf7CKiSMSUS3M&si=62aaH5a_PMGrAT2Y), [Fa20-Bilibili](https://www.bilibili.com/video/BV17b42177VG/?share_source=copy_web&vd_source=7c3823b46a52fbbef42b79e01d55c300), [Fa20-Youtube](https://youtube.com/playlist?list=PL0j-r-omG7i0-mnsxN5T4UcVS1Di0isqf&si=CG1EjQiPcw7r7Vs4)
- Assignments: [Fa20-Backup](https://github.com/InsideEmpire/CS61C-Assignment#)

## Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS61C-summer20 - GitHub](https://github.com/PKUFlyingPig/CS61C-summer20).

All the resources and assignments used by @InsideEmpire in this course are maintained in [@InsideEmpire/CS61C-fall20 - GitHub](https://github.com/InsideEmpire/CS61C-PathwayToSuccess).

All the resources and assignments used by @RisingUppercut in this course are maintained in [@RisingUppercut/CS61C-fall24 - GitHub](https://github.com/RisingUppercut/CS61C_2024_Fall).


================================================
FILE: docs/体系结构/CS61C.md
================================================
# CS61C: Great Ideas in Computer Architecture

## 课程简介

- 所属大学:UC Berkeley
- 先修要求:CS61A, CS61B
- 编程语言:C
- 课程难度:🌟🌟🌟🌟
- 预计学时:100 小时

伯克利 CS61 系列的最后一门课程,深入计算机的硬件细节,带领学生逐步理解 C 语言是如何一步步转化为 RISC-V 汇编并在 CPU 上执行的。和 [Nand2Tetris](./N2T.md) 不同,这门课
在难度和深度上都会提高很多,具体会涉及到流水线、Cache、虚存以及并发相关的内容。

这门课的 Project 也非常新颖有趣。Project1 会让你用 C 语言写一个小程序,20 年秋季学期是著名的游戏 *Game of Life*。Project2 会让你用 RISC-V 汇编编写一个神经网络,用来
识别 MNIST 手写数字,非常锻炼你对汇编代码的理解和运用。Project3 中你会用 Logisim 这个数字电路模拟软件搭建出一个二级流水线的 CPU,并在上面运行 RISC-V 汇编代码。Project4
会让你使用 OpenMP, SIMD 等方法并行优化矩阵运算,实现一个简易的 Numpy。

总而言之,这是个人上过的最好的计算机体系结构的课程。

## 课程资源

- [课程网站](https://cs61c.org/)
- 课程网站 (页面备份): [Fa24-WayBack Machine](https://web.archive.org/web/20241219154359/https://cs61c.org/fa24/), [Fa20-WayBack Machine](https://web.archive.org/web/20220120134001/https://inst.eecs.berkeley.edu/~cs61c/fa20/), [Fa20-备份](https://www.learncs.site/docs/curriculum-resource/cs61c/syllabus)
- 课程视频: [Su20-Bilibili](https://www.bilibili.com/video/BV1fC4y147iZ/?share_source=copy_web&vd_source=7c3823b46a52fbbef42b79e01d55c300), [Su20-Youtube](https://youtube.com/playlist?list=PLDoI-XvXO0aqgoMQvogzmf7CKiSMSUS3M&si=62aaH5a_PMGrAT2Y), [Fa20-Bilibili](https://www.bilibili.com/video/BV17b42177VG/?share_source=copy_web&vd_source=7c3823b46a52fbbef42b79e01d55c300), [Fa20-Youtube](https://youtube.com/playlist?list=PL0j-r-omG7i0-mnsxN5T4UcVS1Di0isqf&si=CG1EjQiPcw7r7Vs4)
- 课程作业: [Fa20-备份](https://github.com/InsideEmpire/CS61C-Assignment#)

## 资源汇总

@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS61C-summer20 - GitHub](https://github.com/PKUFlyingPig/CS61C-summer20) 中。

@InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 [@InsideEmpire/CS61C-fall20 - GitHub](https://github.com/InsideEmpire/CS61C-PathwayToSuccess) 中。

@RisingUppercut 在学习这门课中用到的所有资源和作业实现都汇总在 [@RisingUppercut/CS61C-fall24 - GitHub](https://github.com/RisingUppercut/CS61C_2024_Fall) 中。


================================================
FILE: docs/体系结构/DDCA.en.md
================================================
# Digital Design and Computer Architecture

## Descriptions

- Offered by: ETH Zurich
- Prerequisites: CS50 or same level course; Better have a basic knowledge of C
- Programming Languages: C, Verilog, MIPS, LC3
- Difficulty: 🌟🌟🌟
- Class Hour: 100 hours

In this course, Onur Mutlu, a great expert in the field of Computer Architecture, will teach you about digital circuits and computer architecture. The course is entirely from the perspective of a computer designer, starting with transistors and logic gates and extending to microarchitecture, caches, and virtual memory. It also covers many of the latest research advances in the field of computer architecture. After learning, you will master digital circuits, hardware description language Verilog, MIPS instruction set, CPU design and performance analysis, pipelining, cache, virtual memory, and so on.

There are 9 labs in the course. You will use the Basys 3 FPGA board and [Vivado](https://china.xilinx.com/products/design-tools/vivado.html) to design and synthesize the circuits, starting from combinational and sequential circuits, and eventually assembly into a complete CPU. Except for assignment solutions, all the course materials are open source.

## Course Resources

- Course Website: <https://safari.ethz.ch/digitaltechnik/spring2020/>
- Recordings: <https://www.youtube.com/playlist?list=PL5Q2soXY2Zi_FRrloMa2fUYWPGiZUBQo2>
- Textbook1: Patt and Patel, Introduction to Computing Systems
- Textbook2: Harris and Harris, Digital Design and Computer Architecture (MIPS Edition)
- Assignments: refer to the course website.


================================================
FILE: docs/体系结构/DDCA.md
================================================
# ETH Zurich:Digital Design and Computer Architecture

## 课程简介

- 所属大学:ETH Zurich
- 先修要求:CS50 或同阶课程,最好有 C 语言基础。
- 编程语言:C,Verilog,MIPS 汇编,LC3 汇编
- 课程难度:🌟🌟🌟
- 预计学时:100 小时

体系结构领域的大牛 Onur Mutlu 来教你数字电路和计算机体系结构。课程完全从计算机设计的角度出发,从晶体管、逻辑门开始,一直讲解到微架构、缓存和虚拟内存,还会介绍
很多体系结构领域最新的研究进展。课程共有 9 个 lab,使用 Basys 3 FPGA 开发板(可自行购买)和 Xilinx 公司的  [Vivado 软件](https://china.xilinx.com/products/design-tools/vivado.html)(可在官网免费下载使用)进行电路设计,从组合电路
和时序电路开始,一直到最后部署一个完整的 CPU。课程资料除了 lab 答案和当期考试答案之外全部开源,学完之后你可以掌握计算机相关的数字电路,Verilog 硬件描述语言,MIPS 与 C 之间的转换关系,MIPS 单周期多周期流水线 CPU 的设计和性能分析,缓存,虚拟内存等重要概念。

## 课程资源

- 课程网站:[2020](https://safari.ethz.ch/digitaltechnik/spring2020/),[2023](https://safari.ethz.ch/digitaltechnik/spring2023/)
- 课程视频:[youtube](https://www.youtube.com/playlist?list=PL5Q2soXY2Zi_FRrloMa2fUYWPGiZUBQo2), [B站2020年版本搬运](https://www.bilibili.com/video/BV1MA411s7qq/?vd_source=77d47fcb2bac41ab4ad02f265b3273cf)
- 课程教材1:Patt and Patel, Introduction to Computing Systems
- 课程教材2:Harris and Harris, Digital Design and Computer Architecture (MIPS Edition)
中文译本为《数字设计和计算机体系结构(原书第2版)》
- 课程实验:9 个实验从零开始设计 MIPS CPU,详见课程网站


================================================
FILE: docs/体系结构/N2T.en.md
================================================
# Coursera: Nand2Tetris

## Descriptions

- Offered by: Hebrew University of Jerusalem
- Prerequisites: None
- Programming Languages: Chosen by the course taker
- Difficulty: 🌟🌟🌟
- Class Hour: 40 hours

As one of the most popular courses on [Coursera](https://www.coursera.org), tens of thousands of people give it a full score, and over four hundred colleges and high schools teach it. It guides the students who may have no preparatory knowledge in computer science to build a whole computer from Nand logic gates and finally run the Tetris game on it. 

Sounds cool, right? It's even cooler when you implement it!

The course is divided into hardware modules and software modules respectively. 

In the hardware modules, you will dive into a world based on 0 and 1, create various logic gates from Nand gates, and construct a CPU step by step to run a simplified instruction set designed by the course instructors. 

In the software modules, you will first write a compiler to compile a high-level language *Jack* which is designed by the instructors into byte codes that can run on virtual machines. Then you will further translate the byte codes into assembly language that can run on the CPU you create in the hardware modules. You will also develop a simple operating system that enables your computer to support GUI. 

Finally, you can use *Jack* to create the Tetris game, compile it into assembly language, run it on your self-made CPU, and interact with it through the OS built by yourself. After taking this course, you will have a comprehensive and profound understanding of the entire computer architecture, which might be extremely helpful to your subsequent learning. 

You may think that the course is too difficult. Don't worry, because it is completely designed for laymen. In the instructors' expectations, even high school students can understand the content. So as long as you keep pace with the syllabus, you can finish it within a month. 

This course extracts the essence of computers while omitting the tedious and complex details in modern computer systems that are designed for efficiency and performance. Surely you will enjoy the elegance and magic of computers in a relaxing and jolly journey. 

## Course Resources

- Course Website: [Nand2Tetris I](https://www.coursera.org/learn/build-a-computer/home/week/1), [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome)
- Recordings: Refer to course website
- Textbook: [The Elements of Computing Systems: Building a Modern Computer from First Principles (CN-zh version)][book]
- Assignments: 10 projects to construct a computer, refer to the course website for more details 

[book]: https://github.com/PKUFlyingPig/NandToTetris/blob/master/%5B%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E8%A6%81%E7%B4%A0%EF%BC%9A%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E6%9E%84%E5%BB%BA%E7%8E%B0%E4%BB%A3%E8%AE%A1%E7%AE%97%E6%9C%BA%5D.(%E5%B0%BC%E8%90%A8).%E5%91%A8%E7%BB%B4.%E6%89%AB%E6%8F%8F%E7%89%88.pdf

## Personal Resources

All the resources and assignments used by @PKUFlyingPig are maintained in [PKUFlyingPig/NandToTetris - GitHub](https://github.com/PKUFlyingPig/NandToTetris). 


================================================
FILE: docs/体系结构/N2T.md
================================================
# Coursera: Nand2Tetris

## 课程简介

- 所属大学:希伯来大学
- 先修要求:无
- 编程语言:任选一个编程语言
- 课程难度:🌟🌟🌟
- 预计学时:40 小时

[Coursera](https://www.coursera.org) 上被数万人评为满分,在全球四百多所高校、高中被采用,让一个完全没有计算机基础的人从与非门开始造一台计算机,并在上面运行俄罗斯方块小游戏。

听起来就很酷对不对?实现起来更酷!这门课分为硬件和软件两个部分。在硬件部分,你将进入 01 的世界,用与非门构造出逻辑电路,并逐步搭建出一个 CPU 来运行一套课程作者定义的简易汇编代码。在软件部分,你将编写一个编译器,将作者开发的一个名为Jack的高级语言编译为可以运行在虚拟机上的字节码,然后进一步翻译为汇编代码。你还将开发一个简易的 OS,让你的计算机支持输入输出图形界面。至此,你可以用 Jack 开发一个俄罗斯方块的小游戏,将它编译为汇编代码,运行在你用与非门搭建出的 CPU 上,通过你开发的 OS 进行交互。学完这门课程,你将对整个计算机的体系结构有一个全局且深刻的理解,对于你后续课程的学习有着莫大的帮助。

你也许会担心课程会不会很难,但这门课面向的人群是完全没有计算机基础的人,课程作者的目标是让高中生都能理解。因此,只要你按部就班跟着课程规划走,一个月内学完应该绰绰有余。麻雀虽小但是五脏俱全,这门课很好地提取出了计算机的本质,而不过多地陷于现代计算机为了性能而设计出的众多复杂细节。让学习者能在轻松愉快的学习体验中感受计算机的优雅与神奇。

## 课程资源

- 课程网站:[Nand2Tetris I](https://www.coursera.org/learn/build-a-computer/home/week/1), [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome)
- 课程视频:详见课程网站
- 课程教材:[计算机系统要素:从零开始构建现代计算机][book]
- 课程作业:10 个 Project 带你造台计算机,具体要求详见课程网站

[book]: https://github.com/PKUFlyingPig/NandToTetris/blob/master/%5B%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E8%A6%81%E7%B4%A0%EF%BC%9A%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E6%9E%84%E5%BB%BA%E7%8E%B0%E4%BB%A3%E8%AE%A1%E7%AE%97%E6%9C%BA%5D.(%E5%B0%BC%E8%90%A8).%E5%91%A8%E7%BB%B4.%E6%89%AB%E6%8F%8F%E7%89%88.pdf

## 资源汇总

@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/NandToTetris - GitHub](https://github.com/PKUFlyingPig/NandToTetris) 中。


================================================
FILE: docs/使用指南.en.md
================================================
# **How to Use This Book**

As the number of contributors grows, the content of this book keeps expanding. It is impractical and unnecessary to try to complete all the courses in the book. Attempting to do so might even be counterproductive, resulting in effort without reward. To better align with our readers and make this book truly useful for you, I have roughly divided readers into the following three categories based on their needs. Everyone can plan their own self-study program accurately according to their actual situation.

## **Freshmen**

If you have just entered the university or are in the lower grades, and you are studying or planning to switch to computer science, then you are lucky. As studying is your main task, you have ample time and freedom to learn what you are interested in without the pressure of work and daily life. You needn't be overly concerned with utilitarian thoughts like "is it useful" or "can it help me find a job". So, how should you arrange your studies? The first point is to break away from the passive learning style formed in high school. As a small-town problem solver, I know that most Chinese high schools fill every minute of your day with tasks, and you just need to passively follow the schedule. As long as you are diligent, the results won’t be too bad. However, once you enter university, you have much more freedom. All your extracurricular time is yours to use, and no one will organize knowledge points or summarize outlines for you. Exams are not as formulaic as in high school. If you still hold the mentality of a "good high school student", following everything step by step, the results may not be as expected. The professional training plan may not be reasonable, the teaching may not be responsible, attending classes may not guarantee understanding, and even the exam content may not relate to what was taught. Jokingly, you might feel that the whole world is against you, and you can only rely on yourself.

Given this reality, if you want to change it, you must first survive and have the ability to question it. In the lower grades, it’s important to lay a solid foundation. This foundation is comprehensive, covering both in-class knowledge and practical skills, which are often lacking in China's undergraduate computer science education. Based on personal experience, I offer the following suggestions for your reference.

First, learn how to write "elegant" code. Many programming introductory courses in China can be extremely boring syntax classes, less effective than reading official documentation. Initially, letting students understand what makes code elegant and what constitutes "bad taste" is beneficial. Introductory courses usually start with procedural programming (like C language), but even here, the concepts of **modularity** and **encapsulation** are crucial. If you write code just to pass on OpenJudge, using lengthy copy-pasting and bloated main functions, your code quality will remain poor. For larger projects, endless debugging and maintenance costs will overwhelm you. So, constantly ask yourself, is there a lot of repetitive code? Is the current function too complex (Linux advocates each function should do only one thing)? Can this code be abstracted into a function? Initially, this may seem cumbersome for simple problems, but remember, good habits are invaluable. Even middle school students can master C language, so why should a company hire you as a software engineer?

After procedural programming, the second semester of the freshman year usually introduces object-oriented programming (like C++ or Java). I highly recommend [MIT 6.031: Software Construction](软件工程/6031.md) course notes, which use Java (switch to TypeScript after 2022) to explain how to write “elegant” code in detail, including Test-Driven development, function Specification design, exception handling, and more. Also, understanding common design patterns is necessary when learning object-oriented programming. Domestic object-oriented courses can easily become dull syntax classes, focusing on inheritance syntax and puzzling questions, neglecting that these are rarely used in real-world development. The essence of object-oriented programming is teaching students to abstract real problems into classes and their relationships, and design patterns are the essence of these abstractions. I recommend the book ["Big Talk Design Patterns"](https://book.douban.com/subject/2334288/), which is very easy to understand.

Second, try to learn some productivity-enhancing tools and skills, such as Git, Shell, Vim. I strongly recommend the [MIT missing semester](编程入门/MIT-Missing-Semester.md) course. Initially, you may feel awkward, but force yourself to use them, and your development efficiency will skyrocket. Additionally, many applications can greatly increase your productivity. A rule of thumb is: any action that requires your hands to leave the keyboard should be eliminated. For example, switching applications, opening files, browsing the web - there are plugins for these (like [Alfred](https://www.alfredapp.com/) for Mac). If you find an daily operation that takes more than 1 second, try to reduce it to 0.1 seconds. After all, you'll be dealing with computers for decades, so forming a smooth workflow can greatly enhance efficiency. Lastly, learn to touch type! If you still need to look at the keyboard while typing, find a tutorial online and learn to type without looking. This will significantly increase your development efficiency.

Third, balance coursework and self-learning. We feel angry about the institution but must also follow the rules, as GPA is still important for postgraduate recommendations. Therefore, in the first year, I suggest focusing on the curriculum, complemented by high-quality extracurricular resources. For example, for calculus and linear algebra, refer to [MIT 18.01/18.02](./数学基础/MITmaths.md) and [MIT 18.06](./数学基础/MITLA.md). During holidays, learn Python through [UCB CS61A](./编程入门/Python/CS61A.md). Also, focus on good programming habits and practical skills mentioned above. From my experience, mathematics courses matter a lot for your GPA in the first year, and the content of math exams varies greatly between different schools and teachers. Self-learning might help you understand the essence of mathematics, but it may not guarantee good grades. Therefore, it’s better to specifically practice past exams. 

In your sophomore year, as computer science courses become the majority, you can fully immerse yourself in self-learning. Refer to [A Reference Guide for CS Learning](./CS学习规划.md), a guide I created based on three years of self-learning, introducing each course and its importance. For every course in your curriculum, this guide should have a corresponding one, and I believe they are of higher quality. If there are course projects, try to adapt labs or projects from these self-learning courses. For example, I took an operating systems course and found the teacher was still using experiments long abandoned by UC Berkeley, so I emailed the teacher to switch to the [MIT 6.S081](./操作系统/MIT6.S081.md) xv6 Project I was studying. This allowed me to self-learn while inadvertently promoting curriculum reform. In short, be flexible. Your goal is to master knowledge in the most convenient and efficient way. Anything that contradicts this goal can be “fudged” as necessary. With this attitude, after my junior year, I barely attended offline classes (I spent most of my sophomore year at home due to the pandemic), and it had no impact on my GPA.

Finally, I hope everyone can be less impetuous and more patient in their pursuit. Many ask if self-learning requires strong self-discipline. It depends on what you want. If you still hold the illusion that mastering a programming language will earn you a high salary and a share of the internet’s profits, then whatever I say is pointless. Initially, my motivation was out of pure curiosity and a natural desire for knowledge, not for utilitarian reasons. The process didn't involve “extraordinary efforts”; I spent my days in college as usual and gradually accumulated this wealth of materials. Now, as the US-China confrontation becomes a trend, we still humbly learn techniques from the West. Who will change this? You, the newcomers. So, go for it, young man!

## **Simplify the Complex**

If you have graduated and started postgraduate studies, or have begun working, or are in another field and want to learn coding in your spare time, you may not have enough time to systematically complete the materials in [A Reference Guide for CS Learning](./CS学习规划.md), but still want to fill the gaps in your undergraduate foundation. Considering that these readers usually has some programming experience, there is no need to repeat introductory courses. From a practical standpoint, since the general direction of work is already determined, there is no need to deeply study every branch of computer science. Instead, focus on general principles and skills. Based on my own experience, I've selected the most important and highest quality core professional courses to deepen readers' understanding of computer science. After completing these courses, regardless of your specific job, I believe you won't just be an ordinary coder, but will have a deeper understanding of the underlying logic of computers.

| Course Direction    | Course Name                                          |
|---------------------|------------------------------------------------------|
| Discrete Mathematics and Probability Theory | [UCB CS70: Discrete Math and Probability Theory](数学进阶/CS70.md) |
| Data Structures and Algorithms | [Coursera: Algorithms I & II](数据结构与算法/Algo.md) |
| Software Engineering | [MIT 6.031: Software Construction](软件工程/6031.md) |
| Full-Stack Development | [MIT Web Development Course](Web开发/mitweb.md) |
| Introduction to Computer Systems | [CMU CS15213: CSAPP](计算机系统基础/CSAPP.md) |
| Introductory System Architecture | [Coursera: Nand2Tetris](体系结构/N2T.md) |
| Advanced System Architecture | [CS61C: Great Ideas in Computer Architecture](体系结构/CS61C.md) |
| Principles of Databases | [CMU 15-445: Introduction to Database Systems](数据库系统/15445.md) |
| Computer Networking | [Computer Networking: A Top-Down Approach](计算机网络/topdown.md) |
| Artificial Intelligence | [Harvard CS50: Introduction to AI with Python](人工智能/CS50.md) |
| Deep Learning | [Coursera: Deep Learning](深度学习/CS230.md) |

## **Focused and Specialized**

If you have a solid grasp of the core professional courses in computer science and have already determined your work or research direction, then there are many courses in the book not mentioned in [A Reference Guide for CS Learning](./CS学习规划.md) for you to explore.

As the number of contributors increases, new branches such as **Advanced Machine Learning** and **Machine Learning Systems** will be added to the navigation bar. Under each branch, there are several similar courses from different schools with different emphases and experiments, such as the **Operating Systems** branch, which includes courses from MIT, UC Berkeley, Nanjing University, and Harbin Institute of Technology. If you want to delve into a field, studying these similar courses will give you different perspectives on similar knowledge. Additionally, I plan to contact researchers in related fields to share research learning paths in specific subfields, enhancing the depth of the CS Self-learning Guide while pursuing breadth.

If you want to contribute in this area, feel free to contact the author via email [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn).

================================================
FILE: docs/使用指南.md
================================================
# 如何使用这本书

随着贡献者的不断增多,本书的内容也不断扩展,想把书中所有的课程全部学完是不切实际也没有必要的,甚至会起到事倍功半的反效果,吃力而不讨好。为了更好地贴合读者,让这本书真正为你所用,我将读者按照需求大致分为了如下三类,大家可以结合切身实际,精准地规划属于自己的自学方案。

## 初入校园

如果你刚刚进入大学校园或者还在低年级,并且就读的是计算机方向或者想要转到计算机方向,那么你很幸运,因为学习是你的本业,你可以有充足的时间和自由来学习自己感兴趣的东西,不会有工作的压力和生活的琐碎,不必过于纠结“学了有没有用”,“能不能找到工作”这类功利的想法。那么该如何安排自己的学业呢?我觉得首要的一点就是要打破在高中形成的“按部就班”式的被动学习。作为一个小镇做题家,我深知国内大部分高中会把大家一天当中的每一分钟都安排得满满当当,你只需要被动地跟着课表按部就班地完成一个个既定的任务。只要足够认真,结果都不会太差。但步入大学的校门,自由度一下子变大了许多。首先所有的课外时间基本都由你自由支配,没有人为你整理知识点,总结提纲,考试也不像高中那般模式化。如果你还抱着高中那种“乖学生”的心态,老老实实按部就班,结果未必如你所愿。因为专业培养方案未必就是合理,老师的教学未必就会负责,认真出席课堂未必就能听懂,甚至考试内容未必就和讲的有关系。说句玩笑话,你或许会觉得全世界都与你为敌,而你只能指望自己。

那么现状就是这么个现状,你想改变,也得先活过去,并且拥有足够的能力去质疑它。而在低年级,打好基础很重要。这里的基础是全方面的,课内的知识固然重要,但计算机很大程度上还是强调实践,因此有很多课本外的能力需要培养,而这恰恰是国内的计算机本科教育很欠缺的一点。我根据个人的体验总结出了下面几点建议,供大家参考。

其一就是了解如何写“优雅”的代码。国内的很多大一编程入门课都会讲成极其无聊的语法课,其效果还不如直接让学生看官方文档。事实上,在刚开始接触编程的时候,让学生试着去了解什么样的代码是优雅的,什么样的代码 "have bad taste" 是大有裨益的。一般来说,编程入门课会先介绍过程式编程(例如 C 语言)。但即便是面向过程编程,**模块化** 和 **封装** 的思想也极其重要。如果你只想着代码能在 OpenJudge 上通过,写的时候图省事,用大段的复制粘贴和臃肿的 main 函数,长此以往,你的代码质量将一直如此。一旦接触稍微大一点的项目,无尽的 debug 和沟通维护成本将把你吞没。因此,写代码时不断问自己,是否有大量重复的代码?当前函数是否过于复杂(Linux 提倡每个函数只需要做好一件事)?这段代码能抽象成一个函数吗?一开始你可能觉得很不习惯,甚至觉得这么简单的题需要如此大费周章吗?但记住好的习惯是无价的,C 语言初中生都能学会,凭什么公司要招你去当程序员呢?

学过面向过程编程后,大一下学期一般会讲面向对象编程(例如 C++ 或 Java)。这里非常推荐大家看 [MIT 6.031: Software Construction](./软件工程/6031.md) 这门课的 Notes,会以 Java 语言(22年改用了 TypeScript 语言)为例非常详细地讲解如何写出“优雅”的代码。例如 Test-Driven 的开发、函数 Specification 的设计、异常的处理等等等等。除此之外,既然接触了面向对象,那么了解一些常见的设计模式也是很有必要的。因为国内的面向对象课程同样很容易变成极其无聊的语法课,让学生纠结于各种继承的语法,甚至出一些无聊的脑筋急转弯一样的题目,殊不知这些东西在地球人的开发中基本不会用到。面向对象的精髓是让学生学会自己将实际的问题抽象成若干类和它们之间的关系,而设计模式则是前人总结出来的一些精髓的抽象方法。这里推荐[大话设计模式](https://book.douban.com/subject/2334288/) 这本书,写得非常浅显易懂。

其二就是尝试学习一些能提高生产力的工具和技能,例如 Git、Shell、Vim。这里强烈推荐学习 [MIT missing semester](./编程入门/MIT-Missing-Semester.md) 这门课,也许一开始接触这些工具用起来会很不习惯,但强迫自己用,熟练之后开发效率会直线提高。此外,还有很多应用也能极大提高你的生产力。一条定律是:一切需要让手离开键盘的操作,都应该想办法去除。例如切换应用、打开文件、浏览网页这些都有相关插件可以实现快捷操作(例如 Mac 上的 [Alfred](https://www.alfredapp.com/))。如果你发现某个操作每天都会用到,并且用时超过1秒,那就应该想办法把它缩减到0.1秒。毕竟以后数十年你都要和电脑打交道,形成一套顺滑的工作流是事半功倍的。最后,学会盲打!如果你还需要看着键盘打字,那么赶紧上网找个教程学会盲打,这将极大提高你的开发效率。

其三就是平衡好课内和自学。我们质疑现状,但也得遵守规则,毕竟绩点在保研中还是相当重要的。因此在大一,我还是建议大家尽量按照自己的课表学习,但辅以一些优质的课外资源。例如微积分线代可以参考 [MIT 18.01/18.02](./数学基础/MITmaths.md) 和 [MIT 18.06](./数学基础/MITLA.md) 的课程 Notes。假期可以通过 [UCB CS61A](./编程入门/Python/CS61A.md) 来学习 Python。同时做到上面第一、第二点说的,注重好的编程习惯和实践能力的培养。就个人经验,大一的数学课学分占比相当大,而且数学考试的内容方差是很大的,不同学校不同老师风格迥异,自学也许能让你领悟数学的本质,但未必能给你一个好成绩。因此考前最好有针对性地刷往年题,充分应试。

在升入大二之后,计算机方向的专业课将居多,此时大家可以彻底放飞自我,进入自学的殿堂了。具体可以参考 [一份仅供参考的CS学习规划](./CS学习规划.md),这是我根据自己三年自学经历总结提炼出来的全套指南,每门课的特点以及为什么要上这门课我都做了简单的介绍。对于你课表上的每个课程,这份规划里应该都会有相应的国外课程,而且在质量上我相信基本是全方位的碾压。由于计算机方向的专业知识基本是一样的,而且高质量的课程会让你从原理上理解知识点,对于国内大多照本宣科式的教学来说基本是降维打击。一般来说只要考前将老师“辛苦”念了一学期的 PPT 拿来突击复习两天,取得一个不错的卷面分数并不困难。如果有课程大作业,则可以尽量将国外课程的 Lab 或者 Project 修改一番以应付课内的需要。我当时上操作系统课,发现老师还用着早已被国外学校淘汰的课程实验,便邮件老师换成了自己正在学习的 [MIT 6.S081](./操作系统/MIT6.S081.md) 的 xv6 Project,方便自学的同时还无意间推动了课程改革。总之,灵活变通是第一要义,你的目标是用最方便、效率最高的方式掌握知识,所有与你这一目标违背的所谓规定都可以想方设法地去“糊弄”。凭着这份糊弄劲儿,我大三之后基本没有去过线下课堂(大二疫情在家呆了大半年),对绩点也完全没有影响。

最后,希望大家少点浮躁和功利,多一些耐心和追求。很多人发邮件问我自学需不需要很强的自制力,我觉得得关键得看你自己想要什么。如果你依然抱着会一门编程语言便能月薪过万的幻想,想分一杯互联网的红利,那么我说再多也是废话。其实我最初的自学并没有太多功利的想法,只是单纯的好奇和本能的求知欲。自学的过程也没有所谓的“头悬梁,锥刺股”,该吃吃,该玩玩,不知不觉才发现竟然攒下了这么多资料。现如今中美的对抗已然成为趋势,而我们还在“卑微”地“师夷长技”,感叹国外高质量课程的同时也时常会有一种危机感。这一切靠谁来改变呢?靠的是刚刚入行的你们。所以,加油吧,少年!

## 删繁就简

如果你已经本科毕业开始读研或者走上了工作岗位,亦或是从事着其他领域的工作想要利用业余时间转码,那么你也许并没有充足的业余时间来系统地学完 [一份仅供参考的CS学习规划](./CS学习规划.md) 里的内容,但又想弥补本科时期欠下的基础。考虑到这部分读者通常有一定的编程经验,入门课程没有必要再重复学习。而且从实用角度来说,由于工作的大体方向已经确定,确实没有太大必要对于每个计算机分支都有特别深入的研究,更应该侧重一些通用性的原则和技能。因此我结合自身经历,选取了个人感觉最重要也是质量最高的几门核心专业课,希望能更好地加深读者对计算机的理解。学完这些课程,无论你具体从事的是什么工作,我相信你将不可能沦为一个普通的调包侠,而是对计算机的底层运行逻辑有更深入的了解。

|课程方向      |课程名                                            |
|-------------|-------------------------------------------------|
|离散数学和概率论|[UCB CS70 : discrete Math and probability theory](./数学进阶/CS70.md)|
|数据结构与算法 |[Coursera: Algorithms I & II](数据结构与算法/Algo.md)|
|软件工程      |[MIT 6.031: Software Construction](软件工程/6031.md)|
|全栈开发      |[MIT web development course](Web开发/mitweb.md)|
|计算机系统导论 |[CMU CS15213: CSAPP](计算机系统基础/CSAPP.md)|
|体系结构入门   |[Coursera: Nand2Tetris](./体系结构/N2T.md)       |
|体系结构进阶   |[CS61C: Great Ideas in Computer Architecture](./体系结构/CS61C.md)|
|数据库原理     |[CMU 15-445: Introduction to Database System](数据库系统/15445.md)|
|计算机网络     |[Computer Networking: A Top-Down Approach](./计算机网络/topdown.md)|
|人工智能      |[Harvard CS50: Introduction to AI with Python](人工智能/CS50.md)|
|深度学习      |[Coursera: Deep Learning](深度学习/CS230.md)|

## 心有所属

如果你对于计算机领域的核心专业课都掌握得相当扎实,而且已经确定了自己的工作或研究方向,那么书中还有很多未在 [一份仅供参考的CS学习规划](./CS学习规划.md) 提到的课程供你探索。

随着贡献者的不断增多,左侧的目录中将不断增加新的分支,例如 **机器学习进阶** 和 **机器学习系统**。并且同一个分支下都有若干同类型课程,它们来自不同的学校,有着不同的侧重点和课程实验,例如 **操作系统** 分支下就包含了麻省理工、伯克利、南京大学还有哈工大四所学校的课程。如果你想深耕一个领域,那么学习这些同类的课程会给你不同的视角来看待类似的知识。同时,本书作者还计划联系一些相关领域的科研工作者来分享某个细分领域的科研学习路径,让 CS自学指南 在追求广度的同时,实现深度上的提高。

如果你想贡献这方面的内容,欢迎和作者邮件联系 [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn)


================================================
FILE: docs/后记.md
================================================
# 后记

从最初的想法开始,到断断续续完成这本书,再到树洞的热烈反响,我很激动,但也五味杂陈。原来在北大这个园子里,也有那么多人,对自己的本科生涯并不满意。而这里,可是囊括了中国非常优秀的一帮年轻人。所以问题出在哪里?我不知道。

我只是个籍籍无名的本科生呀,只是一个单纯的求学者,我的目标只是想快乐地、自由地、高质量地掌握那些专业知识,我想,正在看这本书的大多数本科生也是如此,谁想付出时间但却收效甚微呢?又是谁迫使大家带着痛苦去应付呢?我不知道。

我写这本书绝不是为了鼓励大家翘课自学,试问谁不想在课堂上和那么多优秀的同学济济一堂,热烈讨论呢?谁不想遇到问题直接找老师答疑解惑呢?谁不想辛苦学习的成果可以直接化作学校承认的学分绩点呢?可如果一个兢兢业业、按时到堂的学生收获的却是痛苦,而那个一学期只有考试会出席的学生却学得自得其乐,这公平吗?我不知道。

我只是不甘,不甘心这些通过高考战胜无数人进入高校的学子本可以收获一个更快乐的本科生涯,但现实却留给了他们遗憾。我反问自己,本科教育究竟应该带给我们什么呢?是学完所有这些课程吗?倒也未必,它也许只适合我这种nerd。但我觉得,本科教育至少得展现它应有的诚意,一种分享知识的诚意,一种以人为本的诚意,一种注重学生体验的诚意。它至少不应该是一种恶意,一种拼比知识的恶意,一种胜者为王的恶意,一种让人学无所得的恶意。但这一切能改变吗?我不知道。

我只知道我做了应该做的事情,学生们会用脚投票,树洞的关注量和回帖数证明了这样一份资料是有价值的,也道出了国内CS本科教育和国外的差距。也许这样的改变是微乎其微的,但别忘了我只是一个籍籍无名的本科生,是北大信科一千多名本科生中的普通一员,是中国几百万在读本科生中的一分子,如果有更多的人站出来,每个人做一点点,也许是分享一个帖子,也许是当一门课的助教,也许是精心设计一门课的lab,更或许是将来获得教职之后开设一门高质量的课程,出版一本经典的教材。本科教育真的有什么技术壁垒吗?我看未必,教育靠的是诚意,靠的是育人之心。

今天是2021年12月12日,我期待在不久的将来这个帖子会被遗忘,大家可以满心欢喜地选着自己培养方案上的课程,做着学校自行设计的各类编程实验,课堂没有签到也能济济一堂,学生踊跃地发言互动,大家的收获可以和努力成正比,那些曾经的遗憾和痛苦可以永远成为历史。我真的很期待那一天,真的真的真的很期待。

<p align="right">PKUFlyingPig</p>
<p align="right">2021年12月12日写于燕园</p>


================================================
FILE: docs/好书推荐.md
================================================
# 好书推荐

<!-- 
    汇总类的书籍资源请放在 资源汇总 板块下

    书籍格式要求: 
        书籍名(优先英文原版,开源则附上链接,多版本则默认最新版) [豆瓣链接] [其他相关资源链接(如相关课程)]
    
    同板块下的顺序要求:
        先中文后英文,同种语言先开源后闭源,最后按从基础到深入或者字母序。
 -->

由于版权原因,下面列举的图书中除了开源资源提供了链接,其他的资源请大家自行通过 [libgen](http://libgen.is/) 查找。

## 资源汇总

- [Free Programming Books](https://github.com/EbookFoundation/free-programming-books): 开源编程书籍资源汇总
- [CS Textbook Recommendations](https://4chan-science.fandom.com/wiki/Computer_Science_and_Engineering): 计算机科学方向推荐教材列表
- [C Book Guide and List](https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list): C语言相关的编程书籍推荐列表
- [C++ Book Guide and List](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list): C++语言相关的编程书籍推荐列表
- [Python Book Guide and List](https://pythonbooks.org/): Python语言相关的编程书籍推荐列表
- [Computer Vision Textbook Recommendations](https://www.folio3.ai/blog/best-computer-vision-books/): 计算机视觉方向推荐教材列表
- [Deep Learning Textbook Recommendations](https://www.mostrecommendedbooks.com/lists/best-deep-learning-books): 深度学习方向推荐教材列表


## 系统入门

- Computer Systems: A Programmer's Perspective [[豆瓣](https://book.douban.com/subject/26912767/)]
- Principles of Computer System Design: An Introduction [[豆瓣](https://book.douban.com/subject/3707841/)]

## 操作系统

- [现代操作系统: 原理与实现](https://ipads.se.sjtu.edu.cn/mospi/) [[豆瓣](https://book.douban.com/subject/35208251/)]
- [Operating Systems: Three Easy Pieces](https://pages.cs.wisc.edu/~remzi/OSTEP/) [[豆瓣](https://book.douban.com/subject/19973015/)]
- Modern Operating Systems [[豆瓣](https://book.douban.com/subject/27096665/)]
- Operating Systems: Principles and Practice [[豆瓣](https://book.douban.com/subject/25984145/)]
- [Operating Systems: Internals and Design Principles](https://elibrary.pearson.de/book/99.150005/9781292214306) [[豆瓣](https://book.douban.com/subject/6047741/)]

## 计算机网络

- [Computer Networks: A Systems Approach](https://book.systemsapproach.org/foreword.html) [[豆瓣](https://book.douban.com/subject/26417896/)]
- [Computer Networking: A Top-Down Approach](https://www.ucg.ac.me/skladiste/blog_44233/objava_64433/fajlovi/Computer%20Networking%20_%20A%20Top%20Down%20Approach,%207th,%20converted.pdf) [[豆瓣](https://book.douban.com/subject/30280001/)]
- How Networks Work [[豆瓣](https://book.douban.com/subject/26941639/)]

## 分布式系统

- [Patterns of Distributed System (Blog)](https://github.com/dreamhead/patterns-of-distributed-systems)
- [Distributed Systems for Fun and Profit (Blog)](http://book.mixu.net/distsys/index.html)
- [Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems](https://github.com/Vonng/ddia) [[豆瓣](https://book.douban.com/subject/26197294/)]

## 数据库系统

- [Architecture of a Database System](https://dsf.berkeley.edu/papers/fntdb07-architecture.pdf) [[豆瓣](https://book.douban.com/subject/17665384/)]
- [Readings in Database Systems](http://www.redbook.io/) [[豆瓣](https://book.douban.com/subject/2256069/)]
- Database System Concepts : 7th Edition [[豆瓣](https://book.douban.com/subject/30345517/)]

## 编译原理

- Engineering a Compiler [[豆瓣](https://book.douban.com/subject/5288601/)]
- Compilers: Principles, Techniques, and Tools [[豆瓣](https://book.douban.com/subject/1866231/)]
- [Crafting Interpreters](https://craftinginterpreters.com/contents.html)[[豆瓣]](https://book.douban.com/subject/35548379/)[[开源中文翻译]](https://github.com/GuoYaxiang/craftinginterpreters_zh)

## 计算机编程语言

- 计算机程序的构造和解释 [[豆瓣](https://book.douban.com/subject/1148282/)]
- [Essentials of Programming Languages](https://eopl3.com/) [[豆瓣](https://book.douban.com/subject/3136252/)]
- [Practical Foundations for Programming Languages](https://www.cs.cmu.edu/~rwh/pfpl.html) [[豆瓣](https://book.douban.com/subject/26782198/)]
- [Software Foundations](https://softwarefoundations.cis.upenn.edu/) [[豆瓣](https://book.douban.com/subject/25712292/)] [[北大相关课程](https://xiongyingfei.github.io/SF/2021/)]
- [Types and Programming Languages](https://www.cis.upenn.edu/~bcpierce/tapl/) [[豆瓣](https://book.douban.com/subject/1761910/)] [[北大相关课程](https://xiongyingfei.github.io/DPPL/2021/main.htm)]

## 体系结构

- 超标量处理器设计: Superscalar RISC Processor Design [[豆瓣](https://book.douban.com/subject/26293546/)]
- Computer Organization and Design: The Hardware/Software Interface [[MIPS Edition](https://book.douban.com/subject/35998323/)][[ARM Edition](https://book.douban.com/subject/30443432/)][[RISC-V Edition](https://book.douban.com/subject/36490912/)]
- Computer Architecture: A Quantitative Approach [[豆瓣](https://book.douban.com/subject/6795919/)]

## 理论计算机科学

- Introduction to the Theory of Computation [[豆瓣](https://book.douban.com/subject/1852515/)]

## 密码学

- Cryptography Engineering: Design Principles and Practical Applications [[豆瓣](https://book.douban.com/subject/26416592/)]
- Introduction to Modern Cryptography [[豆瓣](https://book.douban.com/subject/2678340/)]

## 逆向工程

- 逆向工程核心原理 [[豆瓣](https://book.douban.com/subject/25866389/)]
- 加密与解密 [[豆瓣](https://book.douban.com/subject/30288807/)]

## 计算机图形学

- [Monte Carlo theory, methods and examples](https://artowen.su.domains/mc/)[[豆瓣](https://book.douban.com/subject/6089923/)]
- Advanced Global Illumination [[豆瓣](https://book.douban.com/subject/2751153/)]
- Fundamentals of Computer Graphics [[豆瓣](https://book.douban.com/subject/26868819/)]
- [Fluid Simulation for Computer Graphics](http://wiki.cgt3d.cn/mediawiki/images/4/43/Fluid_Simulation_for_Computer_Graphics_Second_Edition.pdf) [[豆瓣](https://book.douban.com/subject/2584523/)]
- [Physically Based Rendering: From Theory To Implementation](https://research.quanfita.cn/files/Physically_Based_Rendering_Third_Edition.pdf) [[豆瓣](https://book.douban.com/subject/4306242/)]
- [Real-Time Rendering](https://research.quanfita.cn/files/Real-Time_Rendering_4th_Edition.pdf) [[豆瓣](https://book.douban.com/subject/30296179/)]

## 游戏引擎

- 游戏编程模式: Game Programming Patterns [[豆瓣](https://book.douban.com/subject/26880704/)]
- 实时碰撞检测算法技术 [[豆瓣](https://book.douban.com/subject/4861957/)]
- [Game AI Pro Series](http://www.gameaipro.com/) [[豆瓣](https://search.douban.com/book/subject_search?search_text=Game+AI+Pro&cat=1001)]
- Artificial Intelligence for Games [[豆瓣](https://book.douban.com/subject/3836472/)]
- Game Engine Architecture [[豆瓣](https://book.douban.com/subject/25815142/)]
- Game Programming Gems Series [[豆瓣](https://search.douban.com/book/subject_search?search_text=Game+Programming+Gems&cat=1001)]

## 软件工程

- [Software Engineering at Google](https://abseil.io/resources/swe-book) [[豆瓣](https://book.douban.com/subject/34875994/)]

## 设计模式

- 设计模式: 可复用面向对象软件的基础 [[豆瓣](https://book.douban.com/subject/1052241/)]
- 大话设计模式 [[豆瓣](https://book.douban.com/subject/2334288/)]
- Head First Design Patterns 2nd ed. [[豆瓣](https://book.douban.com/subject/35097022/)]

## 深度学习

- 深度学习 [[豆瓣](https://book.douban.com/subject/27087503/)][[Github](https://github.com/exacity/deeplearningbook-chinese)]
- [动手学深度学习](https://zh.d2l.ai) [[豆瓣](https://book.douban.com/subject/33450010/)]
- [神经网络与深度学习](https://nndl.github.io/) [[豆瓣](https://book.douban.com/subject/35044046/)]
- 深度学习入门 [[豆瓣](https://book.douban.com/subject/30270959/)]
- [简单粗暴 TensorFlow 2 (Tutorial)](https://tf.wiki/)
- [Speech and Language Processing](https://web.stanford.edu/~jurafsky/slp3/) [[豆瓣](https://book.douban.com/subject/5373023/)]

## 计算机视觉

- [Multiple View Geometry in Computer Vision](https://github.com/DeepRobot2020/books/blob/master/Multiple%20View%20Geometry%20in%20Computer%20Vision%20(Second%20Edition).pdf)  [[豆瓣](https://book.douban.com/subject/1841346/)]
## 机器人

- [Probabilistic Robotics](https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf) [[豆瓣](https://book.douban.com/subject/2861227/)]

## 面试

- 剑指 Offer:名企面试官精讲典型编程题 [[豆瓣](https://book.douban.com/subject/27008702/)]
- Cracking The Coding Interview [[豆瓣](https://book.douban.com/subject/10436668/)]


================================================
FILE: docs/并行与分布式系统/CS149.en.md
================================================
# CMU 15-418/Stanford CS149: Parallel Computing

## Descriptions

- Offered by: CMU and Stanford
- Prerequisites: Computer Architecture, C++
- Programming Languages: C++
- Difficulty: 🌟🌟🌟🌟🌟
- Class Hour: 150 hours

The professor [Kayvon Fatahalian](http://www.cs.cmu.edu/~kayvonf) used to teach course 15-418 at CMU. After he became an assistant professor at Stanford, he offered a similar course, CS149 at Stanford. In general, the 15-418 version is more comprehensive and has lecture recordings, but CS149's programming assignments are more fashionable. Personally, I watched the recordings of 15-418 but completed the assignments of CS149.

The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems, as well as to teach how to utilize hardwares and software programming frameworks (such as CUDA, MPI, OpenMP, etc.) for writing high-performance parallel programs. Due to the complexity of parallel computing architecture, this course involves a lot of advanced computer architecture and network communication content, the knowledge is quite low-level and hardcore. Meanwhile, the five assignments develop your understanding and application of upper-level abstraction through software, specifically by analyzing bottlenecks in parallel programs, writing multi-threaded synchronization code, learning CUDA programming, OpenMP programming, and the popular Spark framework, etc. It really combines theory and practice perfectly.

## Resources

- Course Website: [CMU15418](https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/index.html), [CS149](https://gfxcourses.stanford.edu/cs149/fall21)
- Recordings: [CMU15418](https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/schedule.html), [CS149](https://youtube.com/playlist?list=PLoROMvodv4rMp7MTFr4hQsDEcX7Bx6Odp&si=txtQiRDZ9ZZUzyRn)
- Textbook: None
- Assignments: <https://gfxcourses.stanford.edu/cs149/fall21>, 5 assignments.

## Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS149-parallel-computing - GitHub](https://github.com/PKUFlyingPig/CS149-parallel-computing).


================================================
FILE: docs/并行与分布式系统/CS149.md
================================================
# CMU 15-418/Stanford CS149: Parallel Computing

## 课程简介

- 所属大学:CMU 和 Stanford
- 先修要求:计算机体系结构,熟悉 C++
- 编程语言:C++
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时:150 小时

[Kayvon Fatahalian](http://www.cs.cmu.edu/~kayvonf) 教授此前在 CMU 开了 15-418 这门课,后来他成为 Stanford 的助理教授后又开了类似的课程 CS149。但总体来说,15-418 包含的课程内容更丰富,并且有课程回放,但 CS149 的编程作业更 fashion 一些。我个人是观看的 15-418 的课程录影但完成的 CS149 的作业。

这门课会带你深入理解现代并行计算架构的设计原则与必要权衡,并学会如何充分利用硬件资源以及软件编程框架(例如 CUDA,MPI,OpenMP 等)编写高性能的并行程序。由于并行计算架构的复杂性,这门课会涉及诸多高级体系结构与网络通信的内容,知识点相当底层且硬核。与此同时,5 个编程作业则是从软件的层面培养学生对上层抽象的理解与运用,具体会让你分析并行程序的瓶颈、编写多线程同步代码、学习 CUDA 编程、OpenMP 编程以及前段时间大热的 Spark 框架等等。真正意义上将理论与实践完美地结合在了一起。

## 课程资源

- 课程网站:[CMU15418](https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/index.html), [CS149](https://gfxcourses.stanford.edu/cs149/fall21)
- 课程视频:[CMU15418](https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/schedule.html), [CS149](https://youtube.com/playlist?list=PLoROMvodv4rMp7MTFr4hQsDEcX7Bx6Odp&si=txtQiRDZ9ZZUzyRn)
- 课程教材:无
- 课程作业:<https://gfxcourses.stanford.edu/cs149/fall21>,5 个编程作业

## 资源汇总

@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS149-parallel-computing - GitHub](https://github.com/PKUFlyingPig/CS149-parallel-computing) 中。


================================================
FILE: docs/并行与分布式系统/MIT6.824.en.md
================================================
# MIT6.824: Distributed System

## Descriptions

- Offered by: MIT
- Prerequisites: Computer Architecture, Parallel Computing
- Programming Languages: Go
- Difficulty: 🌟🌟🌟🌟🌟🌟
- Class Hour: 200 hours

This course, the same as MIT 6.S081, comes from the renowned MIT PDOS Lab. The instructor, Professor Robert Morris, was once a famous hacker who created 'Morris', the first worm virus in the world.

Each lecture will discuss a classic paper in the field of distributed systems, teaching you the important principles and key techniques of distributed systems design and implementation. The Project is known for its difficulty. In four programming assignments, you will implement a KV-store framework step by step based on the Raft consensus algorithm, allowing you to experience the randomness and complexity to implement and debug a distributed system.

This course is so famous that you can easily have access to the project solutions on the Internet. It is highly recommended to implement the projects on your own.

## Resources

- Course Website: <https://pdos.csail.mit.edu/6.824/schedule.html>
- Assignments: refer to the course website.
- Textbook: None
- Assignments: 4 torturing projects, the course website has specific requirements.

## Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/MIT6.824 - GitHub](https://github.com/PKUFlyingPig/MIT6.824).

@[OneSizeFitsQuorum](https://github.com/OneSizeFitsQuorum) has written a [Lab Documentation](https://github.com/OneSizeFitsQuorum/MIT6.824-2021) that quite clearly describes many of the details to be considered when implementing lab 1-4 and challenge 1-2, you can read when you encounter bottlenecks ~ ~


================================================
FILE: docs/并行与分布式系统/MIT6.824.md
================================================
# MIT6.824: Distributed System

## 课程简介

- 所属大学:MIT
- 先修要求:计算机体系结构,并行编程
- 编程语言:Go
- 课程难度:🌟🌟🌟🌟🌟🌟
- 预计学时:200 小时

这门课和 MIT 6.S081 一样,出品自 MIT 大名鼎鼎的 PDOS 实验室,授课老师 Robert Morris 教授曾是一位顶尖黑客,世界上第一个蠕虫病毒 Morris 病毒就是出自他之手。

这门课每节课都会精读一篇分布式系统领域的经典论文,并由此传授分布式系统设计与实现的重要原则和关键技术。同时其课程 Project 也是以其难度之大而闻名遐迩,4 个编程作业循序渐进带你实现一个基于 Raft 共识算法的 KV-store 框架,让你在痛苦的 debug 中体会并行与分布式带来的随机性和复杂性。

同样,这门课由于太过出名,网上答案无数,希望大家不要参考,而是力图自主实现整个 Project。

## 课程资源

- 课程网站:<https://pdos.csail.mit.edu/6.824/schedule.html>
- 课程视频:参见课程网站链接
- 课程视频中文翻译:<https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/>
- 课程教材:无,以阅读论文为主
- 课程作业:4 个非常虐的 Project,具体要求参见课程网站

## 资源汇总

@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.824 - GitHub](https://github.com/PKUFlyingPig/MIT6.824) 中。

@[OneSizeFitsQuorum](https://github.com/OneSizeFitsQuorum) 的 [Lab 文档](https://github.com/OneSizeFitsQuorum/MIT6.824-2021) 较为清晰地介绍了实现 lab 1-4 和 challenge 1-2 时需要考虑的许多细节,在遇到瓶颈期时可以阅读一下~~


================================================
FILE: docs/必学工具/CMake.en.md
================================================
# CMake 

## Why CMake 

Similar to GNU make, CMake is a cross-platform tool designed to build, test and package software. It uses CMakeLists.txt to define build configuration, and have more functionalities compared to GNU make. It is highly recommended to learn GNU Make and get familiar with Makefile first before learning CMake. 

## How to learn CMake 

Compare to `Makefile`, `CMakeLists.txt` is more obscure and difficult to understand and use. Nowadays many IDEs (e.g., Visual Studio, CLion) offer functionalities to generate `CMakeLists.txt` automatically, but it's still necessary to manage basic usage of `CMakeLists.txt`. Besides [Official CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html), [this one-hour video tutorial (in Chinese)](https://www.bilibili.com/video/BV14h41187FZ) presented by IPADS group at SJTU is also a good learning resource. 


================================================
FILE: docs/必学工具/CMake.md
================================================
# CMake

## 为什么学习 CMake

CMake 是类似于 GNU make 的跨平台自动软件构建工具,使用 CMakeLists.txt 定义构建规则,相比于 make 它提供了更多的功能,在各种软件构建上广泛使用。**强烈建议学习使用 GNU Make 和熟悉 `Makefile` 后再学习 CMake**。

## 如何学习 CMake

`CMakeLists.txt` 比 `Makefile` 更为抽象,理解和使用难度也更大。现阶段很多 IDE (如 Visual Studio, CLion) 提供了自动生成 `CMakeLists.txt` 的功能,但掌握 `CMakeLists.txt` 的基本用法仍然很有必要。除了 [CMake 官方 Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html) 外,上海交通大学 IPADS 组新人培训也提供了[大约一小时的视频教程](https://www.bilibili.com/video/BV14h41187FZ)。


================================================
FILE: docs/必学工具/Docker.en.md
================================================
# Docker

## Why Docker

The main obstacle when using software/tools developed by others is often the hassle of setting up the environment. This configuration headache can significantly dampen your enthusiasm for software and programming. While virtual machines can solve some of these issues, they are cumbersome and might not be worth simulating an entire operating system for a single application's configuration.

[Docker](https://www.docker.com/) has changed the game by making environment configuration (potentially) less painful. In essence, Docker uses lightweight "containers" instead of an entire operating system to support an application's configuration. Applications, along with their environment configurations, are packaged into images that can freely run on different platforms in containers, saving considerable time and effort for everyone.

## How to learn Docker

The [official Docker documentation](https://docs.docker.com/) is the best starting point, but the best teacher is often yourself—try using Docker to experience its convenience. Docker has rapidly developed in the industry and is already quite mature. You can download its desktop version and use the graphical interface.

If you're like me, reinventing the wheel, consider building a [Mini Docker](https://github.com/PKUFlyingPig/rubber-docker) yourself to deepen your understanding.

[KodeKloud Docker for the Absolute Beginner](https://kodekloud.com/courses/docker-for-the-absolute-beginner/) offers a comprehensive introduction to Docker's basic functionalities with numerous hands-on exercises. It also provides a free cloud environment for practice. While other cloud-related courses, such as Kubernetes, may require payment, I highly recommend them. The explanations are detailed, suitable for beginners, and come with a corresponding Kubernetes lab environment, eliminating the need for complex setups.


================================================
FILE: docs/必学工具/Docker.md
================================================
# Docker

## 为什么使用 Docker

使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。

[Docker](https://www.docker.com/) 的出现让环境配置变得(或许)不再折磨。简单来说 Docker 使用轻量级的“容器”(container)而不是整个操作系统去支持一个应用的配置。应用自身连同它的环境配置被打包为一个个 image 可以自由运行在不同平台的一个个 container 中,这极大地节省了所有人的时间成本。

## 如何学习 Docker

[Docker 官方文档](https://docs.docker.com/)当然是最好的初学教材,但最好的导师一定是你自己——尝试去使用 Docker 才能享受它带来的便利。Docker 在工业界发展迅猛并已经非常成熟,你可以下载它的桌面端并使用图形界面。

当然,如果你像我一样,是一个疯狂的造轮子爱好者,那不妨自己亲手写一个[迷你 Docker](https://github.com/PKUFlyingPig/rubber-docker) 来加深理解。

[KodeKloud Docker for the Absolute Beginner](https://kodekloud.com/courses/docker-for-the-absolute-beginner/) 全面的介绍了 Docker 的基础功能,并且有大量的配套练习,同时提供免费的云环境来完成练习。其余的云相关的课程如 Kubernetes 需要付费,但个人强烈推荐:讲解非常仔细,适合从 0 开始的新手;有配套的 Kubernetes 的实验环境,不用被搭建环境劝退。


================================================
FILE: docs/必学工具/Emacs.en.md
================================================
# Emacs

## Why Emacs

Emacs is a powerful editor as famous as Vim. Emacs has almost all the benefits of Vim, such as: 

- Everything can be done with keyboard only, as there are a large number of shortcuts to improve the efficiency of code editing.
- Supporting both graphical and non-graphical interface in various scenarios.

Besides, the biggest difference between Emacs and most other editors lies in its powerful extensibility. Emacs kernel imposes no restrictions on users behaviors. With Emacs Lisp programming language, users is able to write any plugins to extend the functionality. After decades of development, Emacs' plugin ecosystem is arguably one of the richest and most powerful in the editor world. There is a joke saying that "Emacs is an OS that lacks a decent text editor". Futhermore, you can also write your own Emacs extensions with only a small amount of effort.

Emacs is friendly to Vim users as there is an extension called [evil](https://github.com/emacs-evil/evil) that migrate Vim operations into Emacs. Users can switch from Vim to Emacs with minimum effort. Statistics show that a considerable number of users would switch from Vim to Emacs, but there were almost no users who would switch from Emacs to Vim. In fact, the only weaknesss of Emacs is that it is not as efficient as Vim in pure text editing because of Vim's multi-modal editing. However, with Emacs' powerful extensibility, it can make up for its weaknesses by combining the strengths of both.

## How to learn Emacs

Same as Vim, Emacs also has a steep learning curve. But once you understand the basic underlying logic, you will never live without it. 

There are plenty of tutorials for Emacs. Since Emacs is highly customizable, every user has their own learning path. Here are some good starting points:

- [This tutorial](https://www.masteringemacs.org/article/beginners-guide-to-emacs) is a brief guide to the basic logic of Emacs.
- [Awesome Emacs](https://github.com/emacs-tw/awesome-emacs) lists a large number of useful Emacs packages, utilities, and libraries.

## Keyboard remapping

One of the most shortcomings of Emacs is the excessive use of the Ctrl key, which is a burden on your left little finger. It is highly recommended to change the keyboard mapping of the Ctrl key. Please refer to [Vim](Vim.en.md) for details to remapping. 


================================================
FILE: docs/必学工具/Emacs.md
================================================
# Emacs

## 为什么学习 Emacs

Emacs 是一个与 Vim 齐名的强大编辑器,事实上 Emacs 几乎具有 Vim 的所有好处,例如:

- 只需要键盘就可以完成所有操作,大量使用快捷键,具有极高的编辑效率。
- 既可以在终端无图形界面的场景下使用,也可使用有图形界面的版本获得更现代、更美观的体验。

此外,Emacs 与其它大部分编辑器最大的不同就在于其强大的扩展性。Emacs 的内核没有对用户做出任何限制,使用 Emacs Lisp 编程语言可以为 Emacs 编写任意逻辑的插件来扩展 Emacs 的功能。经过几十年的积累,Emacs 的插件生态可谓编辑器中最为丰富和强大的生态之一。有一种说法是,“Emacs 表面上是个编辑器,其实是一个操作系统”。只要稍作学习,你也可以编写属于自己的 Emacs 扩展。

Emacs 对 Vim 用户也十分友好,有一个叫 [evil](https://github.com/emacs-evil/evil) 的插件可以让用户在 Emacs 中使用 Vim 的基本操作,只需要很低的迁移成本即可从 Vim 转到 Emacs。曾经有统计显示有相当一部分用户会从 Vim 转到 Emacs,但几乎没有用户从 Emacs 转到 Vim。事实上,Emacs 相对 Vim 最大的不足是纯文本编辑方面不如 Vim 的多模态编辑效率高,但凭借其强大的扩展性,Emacs 可以扬长避短,把 Vim 吸收进来,结合了二者的长处。

## 如何学习 Emacs

与 Vim 相同,Emacs 的学习曲线也比较陡峭,但一旦理解了 Emacs 的使用逻辑,就会爱不释手。然而,网上的 Emacs 资料大多不细致、不够准确,甚至有哗众取宠的嫌疑。

这里给大家推荐一个较新的中文教程[《专业 Emacs 入门》](https://www.zhihu.com/column/c_1440829147212279808),这篇教程比较系统和全面,且讲述相对比较耐心细致,在讲解 Emacs 基本逻辑的同时也给出了成套的插件推荐,读完后可以获得一个功能完善的、接近 IDE 的 Emacs,因此值得一读。学完教程只是刚刚开始,学会之后要经常使用,在使用中遇到问题勤于搜索和思考,最终才能得心应手。

## 关于键位映射

Emacs 的唯一缺点便是对 Ctrl 键的使用过多,对小手指不是很友好,强烈建议更改 Ctrl 键的键盘映射。更改映射的方式与 [Vim 教程](Vim.md)中的方法相同,这里不做赘述。



================================================
FILE: docs/必学工具/GNU_Make.en.md
================================================
# GNU Make

## Why GNU Make

Everyone remembers their first "hello world" program. After editing `helloworld.c`, you needed to use `gcc` to compile and generate an executable file, and then execute it. (If you're not familiar with this, please Google *gcc compilation* and understand the related content first.) However, what if your project consists of hundreds of C source files scattered across various subdirectories? How do you compile and link them together? Imagine if your project takes half an hour to compile (quite common for large projects), and you only changed a semicolon—would you want to wait another half an hour?

This is where GNU Make comes to the rescue. It allows you to define the entire compilation process and the dependencies between target files and source files in a script (known as a `Makefile`). It only recompiles the parts affected by your changes, significantly reducing compilation time.

## How to learn GNU Make

Here is a well-written [document] (https://seisman.github.io/how-to-write-makefile/overview.html) for in-depth and accessible understanding.

Mastering GNU Make is relatively easy, but using it effectively requires continuous practice. Integrate it into your daily development routine, be diligent in learning, and mimic the `Makefile` styles from other excellent open-source projects. Develop your own template that suits your needs, and over time, you will become more proficient in using GNU Make.


================================================
FILE: docs/必学工具/GNU_Make.md
================================================
# GNU Make

## 为什么学 GNU Make

大家第一次写 hello world 程序的时候一定都记得,在编辑完 `helloworld.c` 之后,需要用 `gcc` 编译生成可执行文件,然后再执行(如果你不理解前面这段话,请先自行谷歌 *gcc 编译* 并理解相关内容)。但如果你的项目由成百上千个 C 源文件组成,并且星罗棋布在各个子目录下,你该如何将它们编译链接到一起呢?假如你的项目编译一次需要半个小时(大型项目相当常见),而你只修改了一个分号,是不是还需要再等半个小时呢?

这时候 GNU Make 就闪亮登场了,它能让你在一个脚本里(即所谓的 `Makefile`)定义整个编译流程以及各个目标文件与源文件之间的依赖关系,并且只重新编译你的修改会影响到的部分,从而降低编译的时间。

## 如何学习 GNU Make

这里有一篇写得深入浅出的[文档](https://seisman.github.io/how-to-write-makefile/overview.html)供大家参考。

GNU Make 掌握起来相对容易,但用好它需要不断的练习。将它融入到自己的日常开发中,勤于学习和模仿其他优秀开源项目里的 `Makefile` 的写法,总结出适合自己的 template,久而久之,你对 GNU Make 的使用会愈加纯熟。


================================================
FILE: docs/必学工具/Git.en.md
================================================
# Git 

## Why Git 

Git is a distributed version control system. The father of Linux, Linus Torvalds developed Git to maintain the version control of Linux, replacing the centralized version control tools which were difficult and costly to use. 

The design of Git is very elegant, but beginners usually find it very difficult to use without understanding its internal logic. It is very easy to mess up the version history if misusing the commands. 

Git is a powerful tool and when you finally master it, you will find all the effort paid off. 

## How to learn Git 

Different from Vim, I don't suggest beginners use Git rashly without fully understanding it, because its inner logic can not be acquainted by practicing. Here is my recommended learning path: 

1. Read this [Git tutorial](https://missing.csail.mit.edu/2020/version-control/) in English, or you can watch this [Git tutorial (by 尚硅谷)](https://www.bilibili.com/video/BV1vy4y1s7k6) in Chinese. 
2. Read Chap1 - Chap5 of this open source book [Pro Git](https://git-scm.com/book/en/v2). Yes, to learn Git, you need to read a book.
3. [Learn Git Branching](https://learngitbranching.js.org/) is an interactive Git learning website that can help you quickly get started with using Git.
4. Now that you have understood its principles and most of its usages, it's time to consolidate those commands by practicing. How to use Git properly is a kind of philosophy. I recommend reading this blog [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/). 
5. You are now in love with Git and are not content with only using it, you want to build a Git by yourself! Great, that's exactly what I was thinking. [This tutorial](https://wyag.thb.lt/) will satisfy you! 
6. What? Building your own Git is not enough?  Seems that you are also passionate about reinventing the wheels. These two GitHub projects, [build-your-own-x](https://github.com/danistefanovic/build-your-own-x) and [project-based-learning](https://github.com/tuvtran/project-based-learning), collected many wheel-reinventing tutorials, e.g., text editor, virtual machine, docker, TCP and so on. 


================================================
FILE: docs/必学工具/Git.md
================================================
# Git

## 为什么使用 Git

Git 是一款分布式的代码版本控制工具,Linux 之父 Linus 嫌弃当时主流的中心式的版本控制工具太难用还要花钱,就自己开发出了 Git 用来维护 Linux 的版本(给大佬跪了)。

Git 的设计非常优雅,但初学者通常因为很难理解其内部逻辑因此会觉得非常难用。对 Git 不熟悉的初学者很容易出现因为误用命令将代码给控制版本控制没了的状况(好吧是我)。

但相信我,和 Vim 一样,Git 是一款你最终掌握之后会感叹“它值得!”的神器。

## 如何学习 Git

和 Vim 不同,我不建议初学者在一知半解的情况下贸然使用 Git,因为它的内部逻辑并不能熟能生巧,而是需要花时间去理解。我推荐的学习路线如下:

1. 阅读这篇 [Git tutorial](https://missing.csail.mit.edu/2020/version-control/),视频的话可以看这个[尚硅谷Git教程](https://www.bilibili.com/video/BV1vy4y1s7k6)
2. 阅读这本开源书籍 [Pro Git](https://git-scm.com/book/en/v2) 的 Chapter1 - Chapter5,是的没错,学 Git 需要读一本书(捂脸)。
3. [Learn Git Branching](https://learngitbranching.js.org/) 是一个交互式的 Git 学习网站, 可以帮助你快速上手 Git 的使用。
4. 此时你已经掌握了 Git 的原理和绝大部分用法,接下来就可以在实践中反复巩固 Git 的命令了。但用好它同样是一门哲学,我个人觉得这篇[如何写好 Commit Message](https://chris.beams.io/posts/git-commit/) 的博客非常值得一读。
5. 好的此时你已经爱上了 Git,你已经不满足于学会它了,你想自己实现一个 Git!巧了,我当年也有这样的想法,[这篇 tutorial](https://wyag.thb.lt/) 可以满足你!
6. 什么?光实现一个 Git 无法满足你?小伙子/小仙女有前途,巧的是我也喜欢造轮子,这两个 GitHub 项目 [build-your-own-x](https://github.com/danistefanovic/build-your-own-x) 和 [project-based-learning](https://github.com/tuvtran/project-based-learning) 收录了你能想到的各种造轮子教程,比如:自己造个编辑器、自己写个虚拟机、自己写个 docker、自己写个 TCP 等等等等。


================================================
FILE: docs/必学工具/GitHub.en.md
================================================
# GitHub

## What is GitHub

Functionally, GitHub is an online platform for hosting code. You can host your local Git repositories on GitHub for collaborative development and maintained by a group. However, GitHub's significance has evolved far beyond that. It has become a very active and resource-rich open-source community. Developers from all over the world share a wide variety of open-source software on GitHub. From industrial-grade deep learning frameworks like PyTorch and TensorFlow to practical scripts consisting of just a few lines of code, GitHub offers hardcore knowledge sharing, beginner-friendly tutorials, and even many technical books are open-sourced here (like the one you're reading now). Browsing GitHub has become a part of my daily life.

On GitHub, stars are the ultimate affirmation for a project. If you find this book useful, you are welcome to enter the repository's homepage via the link in the upper right corner and give your precious star✨.

## How to Use GitHub

If you have never created your own remote repository on GitHub or cloned someone else's code, I suggest you start your open-source journey with [GitHub's official tutorial](https://docs.github.com/en/get-started).

If you want to keep up with some interesting open-source projects on GitHub, I highly recommend the [HelloGitHub](https://hellogithub.com/) website. It regularly features GitHub's recently trending or very interesting open-source projects, giving you the opportunity to access various quality resources firsthand.

I believe GitHub's success is due to the "one for all, all for one" spirit of open source and the joy of sharing knowledge. If you also want to become the next revered open-source giant or the author of a project with tens of thousands of stars, then transform your ideas that spark during development into code and showcase them on GitHub.

However, it's important to note that the open-source community is not lawless. Many open-source softwares are not meant for arbitrary copying, distribution, or even sale. Understanding various [open-source licenses](https://www.runoob.com/w3cnote/open-source-license.html) and complying with them is not only a legal requirement but also the responsibility of every member of the open-source community.


================================================
FILE: docs/必学工具/GitHub.md
================================================
# GitHub

## GitHub 是什么

从功能上来说,GitHub 是一个在线代码托管平台。你可以将你的本地 Git 仓库托管到 GitHub 上,供多人同时开发浏览。但现如今 GitHub 的意义已远不止如此,它已经演变为一个非常活跃且资源极为丰富的开源交流社区。全世界的软件开发者在 GitHub 上分享各式各样种类繁多的开源软件。大到工业级的深度学习框架 PyTorch, TensorFlow,小到几十行的实用脚本,既有硬核的知识分享,也有保姆级的教程指导,甚至很多技术书籍也在 GitHub上开源(例如诸位正在看的这本——如果我厚着脸皮勉强称之为书的话)。闲来无事逛逛 GitHub 已经成为了我日常生活的一部分。

在 GitHub 里,星星是对一个项目至高无上的肯定,如果你觉得这本书对你有用的话,欢迎通过右上角的链接进入仓库主页献出你宝贵的星星✨。

## 如何使用 GitHub

如果你还从未在 GitHub 上建立过自己的远程仓库,也没有克隆过别人的代码,那么我建议你从 [GitHub的官方教程](https://docs.github.com/cn/get-started)开始自己的开源之旅。

如果你想时刻关注 GitHub 上一些有趣的开源项目,那么我向你重磅推荐 [HelloGitHub](https://hellogithub.com/) 这个网站以及它的同名微信公众号。它会定期收录 GitHub 上近期开始流行的或者非常有趣的开源项目,让你有机会第一时间接触各类优质资源。

GitHub 之所以成功,我想是得益于“我为人人,人人为我”的开源精神,得益于知识分享的快乐。如果你也想成为下一个万人敬仰的开源大佬,或者下一个 star 破万的项目作者。那就把你在开发过程中灵感一现的 idea 化作代码,展示在 GitHub 上吧~

不过需要提醒的是,开源社区不是法外之地,很多开源软件并不是可以随意复制分发甚至贩卖的,了解各类[开源协议](https://www.runoob.com/w3cnote/open-source-license.html)并遵守,不仅是法律的要求,更是每个开源社区成员的责任。


================================================
FILE: docs/必学工具/LaTeX.en.md
================================================
# LaTeX

## Why Learn LaTeX

If you need to write academic papers, please skip directly to the next section, as learning LaTeX is not just a choice but a necessity.

LaTeX is a typesetting system based on TeX, developed by Turing Award winner Lamport, while TeX was originally developed by Knuth, both of whom are giants in the field of computer science. Of course, the developers' prowess is not the reason we learn LaTeX. The biggest difference between LaTeX and the commonly used WYSIWYG (What You See Is What You Get) Word documents is that in LaTeX, users only need to focus on the content of the writing, leaving the typesetting entirely to the software. This allows people without any typesetting experience to produce papers or articles with highly professional formatting.

Berkeley computer science professor Christos Papadimitriou once jokingly said:

> Every time I read a LaTeX document, I think, wow, this must be correct!

## How to Learn LaTeX

The recommended learning path is as follows:

- Setting up the LaTeX environment can be a headache. If you encounter problems with configuring LaTeX locally, consider using [Overleaf], an online LaTeX editor. The site not only offers a variety of LaTeX templates to choose from but also eliminates the difficulty of environment setup.
- Read the following three tutorials: [Part-1], [Part-2], [Part-3].
- The best way to learn LaTeX is, of course, by writing papers. However, starting with a math class and using LaTeX for homework is also a good choice.

[Overleaf]: https://www.overleaf.com
[Part-1]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-1
[Part-2]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-2
[Part-3]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-3

Other recommended introductory materials include:

- A brief guide to installing LaTeX [[GitHub](https://github.com/OsbertWang/install-latex-guide-zh-cn)] or the TEX Live Guide (texlive-zh-cn) [[PDF](https://www.tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf)] can help you with installation and environment setup.
- A (not so) brief introduction to LaTeX2ε (lshort-zh-cn) [[PDF](https://mirrors.ctan.org/info/lshort/chinese/lshort-zh-cn.pdf)] [[GitHub](https://github.com/CTeX-org/lshort-zh-cn)], translated by the CTEX development team, helps you get started quickly and accurately. It's recommended to read it thoroughly.
- Liu Haiyang's "Introduction to LaTeX" can be used as a reference book, to be consulted when you have specific questions. Skip the section on CTEX suite.
- [Modern LaTeX Introduction Seminar](https://github.com/stone-zeng/latex-talk)
- [A Very Short LaTeX Introduction Document](https://liam.page/2014/09/08/latex-introduction/)

================================================
FILE: docs/必学工具/LaTeX.md
================================================
# LaTeX

## 为什么学 LaTeX

如果你需要写论文,那么请直接跳到下一节,因为你不学也得学。

LaTeX 是一种基于 TeX 的排版系统,由图灵奖得主 Lamport 开发,而 Tex 则是由 Knuth 最初开发,这两位都是计算机界的巨擘。当然开发者强并不是我们学习 LaTeX 的理由,LaTeX 和常见的所见即所得的 Word 文档最大的区别就是用户只需要关注写作的内容,而排版则完全交给软件自动完成。这让没有任何排版经验的普通人得以写出排版非常专业的论文或文章。

Berkeley 计算机系教授 Christos Papadimitriou 曾说过一句半开玩笑的话:

> Every time I read a LaTeX document, I think, wow, this must be correct!

## 如何学习 LaTeX

推荐的学习路线如下:

- LaTeX 的环境配置是个比较头疼的问题。如果你本地配置 LaTeX 环境出现了问题,可以考虑使用 [Overleaf] 这个在线 LaTeX 编辑网站。站内不仅有各种各样的 LaTeX 模版供你选择,还免去了环境配置的难题。
- 阅读下面三篇 Tutorial: [Part-1], [Part-2], [Part-3]。
- 学习 LaTeX 最好的方式当然是写论文,不过从一门数学课入手用 LaTeX 写作业也是一个不错的选择。

[Overleaf]: https://www.overleaf.com
[Part-1]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-1
[Part-2]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-2
[Part-3]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-3

其他值得推荐的入门学习资料如下:

- 一份简短的安装 LaTeX 的介绍 [[GitHub](https://github.com/OsbertWang/install-latex-guide-zh-cn)] 或者 TEX Live 指南(texlive-zh-cn)[[PDF](https://www.tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf)] 可以帮助你完成安装和环境配置过程
- 一份(不太)简短的 LaTeX2ε 介绍(lshort-zh-cn)[[PDF](https://mirrors.ctan.org/info/lshort/chinese/lshort-zh-cn.pdf)] [[GitHub](https://github.com/CTeX-org/lshort-zh-cn)] 是由 CTEX 开发小组翻译的,可以帮助你快速准确地入门,建议通读一遍
- 刘海洋的《LaTeX 入门》,可以当作工具书来阅读,有问题再查找,跳过 CTEX 套装部分
- [现代 LaTeX 入门讲座](https://github.com/stone-zeng/latex-talk)
- [一份其实很短的 LaTeX 入门文档](https://liam.page/2014/09/08/latex-introduction/)


================================================
FILE: docs/必学工具/Scoop.en.md
================================================
# Scoop

## Why Use Scoop

Setting up a development environment in Windows has always been a complex and challenging task. The lack of a unified standard means that the installation methods for different development environments vary greatly, resulting in unnecessary time costs. Scoop helps you uniformly install and manage common development software, eliminating the need for manual downloads, installations, and environment variable configurations.

For example, to install Python and Node.js, you just need to execute:

```powershell
scoop install python
scoop install nodejs
```

## Installing Scoop

Scoop requires [Windows PowerShell 5.1](https://aka.ms/wmf5download) or [PowerShell](https://aka.ms/powershell) as its runtime environment. If you are using Windows 10 or later, Windows PowerShell is built into the system. However, the version of Windows PowerShell built into Windows 7 is outdated, and you will need to manually install a newer version of PowerShell.

> Many students have encountered issues due to setting up Windows user accounts with Chinese usernames, leading to user directories also being named in Chinese. Installing software via Scoop into user directories in such cases may cause some software to execute incorrectly. Therefore, it is recommended to install in a custom directory. For other installation methods, please refer to: [ScoopInstaller/Install](https://github.com/ScoopInstaller/Install)

```powershell
# Set PowerShell execution policy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Download the installation script
irm get.scoop.sh -outfile 'install.ps1'
# Run the installation, use --ScoopDir parameter to specify Scoop installation path
.\install.ps1 -ScoopDir 'C:\Scoop'
```

## Using Scoop

Scoop's official documentation is very user-friendly for beginners. Instead of elaborating here, it is recommended to read the [official documentation](https://github.com/ScoopInstaller/Scoop) or the [Quick Start guide](https://github.com/ScoopInstaller/Scoop/wiki/Quick-Start).

## Q&A

### Can Scoop Configure Mirror Sources?

The Scoop community only maintains installation configurations, and all software is downloaded from the official download links provided by the software's creators. Therefore, mirror sources are not provided. If your network environment causes repeated download failures, you may need a bit of [magic](翻墙.md).

### Why Can't I Find Java 8?

For the same reasons mentioned above, the official download links for Java 8 are no longer provided. It is recommended to use [ojdkbuild8](https://github.com/ScoopInstaller/Java/blob/master/bucket/ojdkbuild8.json) as a substitute.

### How Do I Install Python 2?

For software that is outdated and no longer in use, the Scoop community removes it from [ScoopInstaller/Main](https://github.com/ScoopInstaller/Main) and adds it to [ScoopInstaller/Versions](https://github.com/ScoopInstaller/Versions). If you need such software, you need to manually add the bucket:

```powershell
scoop bucket add versions
scoop install python27
```

================================================
FILE: docs/必学工具/Scoop.md
================================================
# Scoop

## 为什么使用 Scoop

在 Windows 下,搭建开发环境一直是一个复杂且困难的问题。由于没有一个统一的标准,导致各种开发环境的安装方式差异巨大,需要付出很多不必要的时间成本。而 Scoop 可以帮助你统一安装并管理常见的开发软件,省去了手动下载安装,配置环境变量等繁琐步骤。

例如安装 python 和 nodejs 只需要执行:

```powershell
scoop install python
scoop install nodejs
```

## 安装 Scoop

Scoop 需要 [Windows PowerShell 5.1](https://aka.ms/wmf5download) 或者 [PowerShell](https://aka.ms/powershell) 作为运行环境,如果你使用的是 Windows 10 及以上版本,Windows PowerShell 是内置在系统中的。而 Windows 7 内置的 Windows PowerShell 版本过于陈旧,你需要手动安装新版本的 PowerShell。

> 由于发现很多同学在设置 Windows 用户时使用了中文用户名,导致了用户目录也变成了中文名。如果按照 Scoop 的默认方式将软件安装到用户目录下,可能会造成部分软件执行错误。所以这里推荐安装到自定义目录,如果需要其他安装方式请参考: [ScoopInstaller/Install](https://github.com/ScoopInstaller/Install)

```powershell
# 设置 PowerShell 执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 下载安装脚本
irm get.scoop.sh -outfile 'install.ps1'
# 执行安装, --ScoopDir 参数指定 Scoop 安装路径
.\install.ps1 -ScoopDir 'C:\Scoop'
```

## 使用 Scoop

Scoop 的官方文档对于新手非常友好,相对于在此处赘述更推荐阅读 [官方文档](https://github.com/ScoopInstaller/Scoop) 或 [快速入门](https://github.com/ScoopInstaller/Scoop/wiki/Quick-Start) 。

## Q&A

### Scoop 能配置镜像源吗?

Scoop 社区仅维护安装配置,所有的软件都是从该软件官方提供的下载链接进行下载,所以无法提供镜像源。如果因为你的网络环境导致多次下载失败,那么你需要一点点 [魔法](翻墙.md)。

### 为什么找不到 Java8?

原因同上,官方已不再提供 Java8 的下载链接,推荐使用 [ojdkbuild8](https://github.com/ScoopInstaller/Java/blob/master/bucket/ojdkbuild8.json) 替代。

### 我需要安装 python2 该如何操作?

对于已经过时弃用的软件,Scoop 社区会将其从 [ScoopInstaller/Main](https://github.com/ScoopInstaller/Main) 中移除并将其添加到 [ScoopInstaller/Versions](https://github.com/ScoopInstaller/Versions) 中。如果你需要这些软件的话需要手动添加 bucket:

```powershell
scoop bucket add versions
scoop install python27
```



================================================
FILE: docs/必学工具/Vim.en.md
================================================
# Vim

## Why Vim

In my opinion, the Vim editor has the following benefits:

- It keeps your finger on the keyboard throughout the development and moving the cursor without the arrow keys keeps your fingers in the best position for typing.
- Convenient file switching and panel controls allow you to edit multiple files simultaneously or even different locations of the same file.
- Vim's macros can batch repeat operations (e.g. add tabs to multi-lines, etc.)
- Vim is well-suited for Linux servers without GUI. When you connect to a remote server through `ssh`, you can only develop from the command line because there is no GUI (of course, many IDEs such as PyCharm now provide `ssh` plugins to solve this problem).
- A rich ecology of plugins gives you the world's most fancy command-line editor.

## How to learn Vim

Unfortunately Vim does have a pretty steep learning curve and it took me a few weeks to get used to developing with Vim. You'll feel very uncomfortable at first, but once you get past the initial stages, trust me, you'll fall in love with Vim.

There is a vast amount of learning material available on Vim, but the best way to master it is to use it in your daily development, no need to learn all the fancy advanced Vim tricks right away. The recommended learning path is as follows:

- Read [This tutorial](https://missing.csail.mit.edu/2020/editors/) first to understand the basic Vim concepts and usage.
- Use Vim's own `vimtutor` to practice. After installing Vim, type `vimtutor` directly into the command line to enter the practice program.
- Then you can force yourself to use Vim for development, and you can install Vim plugins in your favorite IDE.
- Once you're fully comfortable with Vim, a new world opens up to you, and you can configure your own Vim on demand (by modifying the `.vimrc` file), and there are countless resources on the Internet to learn from.
- If you want to know more about how to customize Vim to suit your needs, [_Learn Vim Script the Hard Way_](https://learnvimscriptthehardway.stevelosh.com/) is a perfect start point.

## Remapping Keys

Ctrl and Esc keys are probably two of the most used keys in Vim. However, these two keys are pretty far away from home row.
In order to make it easier to reach these keys, you can remap CapsLock to Esc or Ctrl.

On Windows, [Powertoys](https://learn.microsoft.com/en-us/windows/powertoys/) or [AutoHotkey](https://www.autohotkey.com/) can be used to achieve this goal.    
On macOS, you can remap keys in system settings, see this [page](https://vim.fandom.com/wiki/Map_caps_lock_to_escape_in_macOS). [Karabiner-Elements](https://karabiner-elements.pqrs.org/) also works.

A better solution is to make CapsLock function as Esc and Ctrl simultaneously. Click CapsLock to send Esc, hold CapsLock to use it as Ctrl key. Here's how to do it on different systems:

- [Windows](https://gist.github.com/sedm0784/4443120)  
- [MacOS](https://ke-complex-modifications.pqrs.org/#caps_lock_tapped_escape_held_left_control)  
- [Linux](https://www.jianshu.com/p/6fdc0e0fb266)

## Recommended References

- Neil, Drew. Practical Vim: Edit Text at the Speed of Thought. N.p., Pragmatic Bookshelf, 2015.
- Neil, Drew. Modern Vim: Craft Your Development Environment with Vim 8 and Neovim. United States, Pragmatic Bookshelf.


================================================
FILE: docs/必学工具/Vim.md
================================================
# Vim

## 为什么学习 Vim

在我看来 Vim 编辑器有如下的好处:

- 让你的整个开发过程手指不需要离开键盘,而且光标的移动不需要方向键使得你的手指一直处在打字的最佳位置。
- 方便的文件切换以及面板控制可以让你同时开发多份文件甚至同一个文件的不同位置。
- Vim 的宏操作可以批量化处理重复操作(例如多行 tab,批量加双引号等等)
- Vim 是很多服务器自带的命令行编辑器,当你通过 `ssh` 连接远程服务器之后,由于没有图形界面,只能在命令行里进行开发(当然现在很多 IDE 如 PyCharm 提供了 `ssh` 插件可以解决这个问题)。
- 异常丰富的插件生态,让你拥有世界上最花里胡哨的命令行编辑器。

## 如何学习 Vim

不幸的是 Vim 的学习曲线确实相当陡峭,我花了好几个星期才慢慢适应了用 Vim 进行开发的过程。最开始你会觉得非常不适应,但一旦熬过了初始阶段,相信我,你会爱上 Vim。

Vim 的学习资料浩如烟海,但掌握它最好的方式还是将它用在日常的开发过程中,而不是一上来就去学各种花里胡哨的高级 Vim 技巧。个人推荐的学习路线如下:

- 先阅读[这篇 tutorial](https://missing.csail.mit.edu/2020/editors/),掌握基本的 Vim 概念和使用方式,不想看英文的可以阅读[这篇教程](https://github.com/wsdjeg/vim-galore-zh_cn)。
- 用 Vim 自带的 `vimtutor` 进行练习,安装完 Vim 之后直接在命令行里输入 `vimtutor` 即可进入练习程序。
- 最后就是强迫自己使用 Vim 进行开发,IDE 里可以安装 Vim 插件。
- 等你完全适应 Vim 之后新的世界便向你敞开了大门,你可以按需配置自己的 Vim(修改 `.vimrc` 文件),网上有数不胜数的资源可以借鉴。
- 如果你想对配置 Vim 有更加深入的了解,[_Learn Vim Script the Hard Way_](https://learnvimscriptthehardway.stevelosh.com/) 是一个很好的资源。

## 关于键位映射

用 Vim 编辑代码的时候会频繁用到 ESC 和 CTRL 键, 但是这两个键都离 home row 很远, 可以把 CapsLock 键映射到 Esc 或者 Ctrl 键,让手更舒服一些。

Windows 系统可以使用 [Powertoys](https://learn.microsoft.com/en-us/windows/powertoys/) 或者 [AutoHotkey](https://www.autohotkey.com/) 重映射键位。    
MacOS 系统提供了重映射键位的[设置](https://vim.fandom.com/wiki/Map_caps_lock_to_escape_in_macOS),另外也可以使用 [Karabiner-Elements](https://karabiner-elements.pqrs.org/) 重映射。  
Linux 系统可以使用 [xremap](https://github.com/xremap/xremap) 进行映射,对于 wayland 和 x.org 都可以使用,并且支持分别映射点按和按住。

但更佳的做法是同时将 CapsLock 映射为 Ctrl 和 Esc,点按为 Esc,按住为 Ctrl。这是不同系统下的实现方法:

- [Windows](https://gist.github.com/sedm0784/4443120)  
- [MacOS](https://ke-complex-modifications.pqrs.org/#caps_lock_tapped_escape_held_left_control)  
- [Linux](https://www.jianshu.com/p/6fdc0e0fb266)

## 推荐参考资料

- Neil, Drew. Practical Vim: Edit Text at the Speed of Thought. N.p., Pragmatic Bookshelf, 2015.
- Neil, Drew. Modern Vim: Craft Your Development Environment with Vim 8 and Neovim. United States, Pragmatic Bookshelf.


================================================
FILE: docs/必学工具/thesis.en.md
================================================
# Thesis Writing

## Why I Wrote This Tutorial

In 2022, I graduated from my college. When I started writing my thesis, I embarrassingly realized that my command of Word was limited to basic functions like adjusting fonts and saving documents. I considered switching to LaTeX, but formatting requirements for the thesis were more conveniently handled in Word. After a painful struggle, I finally completed the writing and defense of my thesis. To prevent others from following in my footsteps, I compiled relevant resources into a ready-to-use document for everyone's reference.

## How to Write a Graduation Thesis in Word

Just as it takes three steps to put an elephant in a fridge, writing a graduation thesis in Word also requires three simple steps:

1. **Determine the Format Requirements of the Thesis**: Usually, colleges will provide the formatting requirements for theses (font and size for headings, sections, formatting of figures and citations, etc.), and if you're lucky, they might even provide a thesis template (if so, jump to the next step). Unfortunately, my college did not issue standard format requirements and provided a chaotic and almost useless template. Out of desperation, I found the [thesis format requirements](https://github.com/PKUFlyingPig/Thesis-Template/blob/master/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%94%9F%E5%AD%A6%E4%BD%8D%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C%E6%8C%87%E5%8D%97.pdf) of Peking University graduate students and created [a template](https://github.com/PKUFlyingPig/Thesis-Template/blob/master/%E8%AE%BA%E6%96%87%E6%A8%A1%E7%89%88.docx) based on their guidelines. Feel free to use it, but I take no responsibility for any issues for using it.

2. **Learn Word Formatting**: At this stage, you either have a standard template provided by your college or just a vague set of formatting requirements. Now, the priority is to learn basic Word formatting skills. If you have a template, learn to use it; if not, learn to create one. Remember, there's no need to ambitiously start with a lengthy Word tutorial video. A half-hour tutorial is enough to get started for creating a passable academic paper. I watched [a concise and practical Bilibili tutorial video](https://www.bilibili.com/video/BV1YQ4y1M73G?p=1&vd_source=a4d76d1247665a7e7bec15d15fd12349), which is very useful for a quick start.

3. **Produce Academic Work**: The easiest step. Everyone has their own way, so unleash your creativity. Best wishes for a smooth graduation!


================================================
FILE: docs/必学工具/thesis.md
================================================
# 毕业论文

## 为什么写这份教程

2022年,我本科毕业了。在开始动手写毕业论文的时候,我尴尬地发现,我对 Word 的掌握程度仅限于调节字体、保存导出这些傻瓜功能。曾想转战 Latex,但论文的段落格式要求调整起来还是用 Word 更为方便,经过一番痛苦缠斗之后,总算是有惊无险地完成了论文的写作和答辩。为了不让后来者重蹈覆辙,遂把相关资源整理成一份开箱即用的文档,供大家参考。

## 如何用 Word 写毕业论文

正如将大象装进冰箱需要三步,用 Word 写毕业论文也只需要简单三步:

- 确定论文的格式要求:通常学院都会下发毕业论文的格式要求(各级标题的字体字号、图例和引用的格式等等),如果更为贴心的话甚至会直接给出论文模版(如是此情况请直接跳转到下一步)。很不幸的是,我的学院并没有下发标准的论文格式要求,还提供了一份格式混乱几乎毫无用处的论文模版膈应我,被逼无奈之下我找到了北京大学研究生的[论文格式要求](https://github.com/PKUFlyingPig/Thesis-Template/blob/master/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%94%9F%E5%AD%A6%E4%BD%8D%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C%E6%8C%87%E5%8D%97.pdf),并按照其要求制作了[一份模版](https://github.com/PKUFlyingPig/Thesis-Template/blob/master/%E8%AE%BA%E6%96%87%E6%A8%A1%E7%89%88.docx),大家需要的话自取,本人不承担无法毕业等任何责任。

- 学习 Word 排版:到达这一步的童鞋分为两类,一是已经拥有了学院提供的标准模版,二是只有一份虚无缥缈的格式要求。那现在当务之急就是学习基础的 Word 排版技术,对于前者可以学会使用模版,对于后者则可以学会制作模版。此时切记不要雄心勃勃地选择一个十几个小时的 Word 教学视频开始头悬梁锥刺股,因为生产一份应付毕业的学术垃圾只要学半小时能上手就够了。我当时看的[一个 B 站的教学视频](https://www.bilibili.com/video/BV1YQ4y1M73G?p=1&vd_source=a4d76d1247665a7e7bec15d15fd12349),短小精悍非常实用,全长半小时极速入门。

- 生产学术垃圾:最容易的一步,大家八仙过海,各显神通吧,祝大家毕业顺利~~


================================================
FILE: docs/必学工具/tools.en.md
================================================
# Practical Toolbox

## Download Tools

- [Sci-Hub](https://sci-hub.se/): A revolutionary site aiming to break knowledge barriers, greeted by the goddess Elbakyan.
- [Library Genesis](http://libgen.is/): A website for downloading e-books.
- [Z-library](https://z-library.rs/): An e-book download site (works better under [Tor](https://www.torproject.org/), [link](http://loginzlib2vrak5zzpcocc3ouizykn6k5qecgj2tzlnab5wcbqhembyd.onion/)).
- [Z-ePub](https://z-epub.com/): ePub e-book download site.
- [PDF Drive](https://www.pdfdrive.com/): A PDF e-book search engine.
- [MagazineLib](https://magazinelib.com/): A site for downloading PDF e-magazines.
- [BitDownloader](https://bitdownloader.io/): YouTube video downloader.
- [qBittorrent](https://www.qbittorrent.org/download.php): A BitTorrent client.
- [uTorrent](https://www.utorrent.com): Another BitTorrent client.
- [National Standard Information Public Service Platform](https://std.samr.gov.cn/): Official platform for querying and downloading various standards.
- [Standard Knowledge Service System](http://www.standards.com.cn/): Search and read the standards you need.
- [MSDN, I Tell You](https://msdn.itellyou.cn/): A site for downloading Windows OS images and other software.

## Design Tools

- [excalidraw](https://excalidraw.com/): A hand-drawn style drawing tool, great for creating diagrams in course reports or PPTs.
- [tldraw](https://www.tldraw.com/): A drawing tool suitable for flowcharts, architecture diagrams, etc.
- [draw.io](https://app.diagrams.net/): A powerful and concise online drawing website, supports flowcharts, UML diagrams, architecture diagrams, prototypes, etc., with export options for Onedrive, Google Drive, Github, and offline client availability.
- [origamiway](https://www.origamiway.com/paper-folding-crafts-step-by-step.shtml): Step-by-step origami tutorials.
- [thingiverse](https://www.thingiverse.com/): Includes various 2D/3D design resources, with STL files ready for 3D printing.
- [iconfont](https://www.iconfont.cn/): The largest icon and illustration library in China, useful for development or drawing system architecture diagrams.
- [turbosquid](https://www.turbosquid.com/): A platform to purchase various models.
- [flaticon](https://www.flaticon.com/): A site to download free and high-quality icons.
- [Standard Map Service System](http://bzdt.ch.mnr.gov.cn/): Official standard map downloads.
- [PlantUML](https://plantuml.com/zh/): Quickly write UML diagrams using code.

## Programming Related

- [sqlfiddle](http://www.sqlfiddle.com/): An easy-to-use online SQL Playground.
- [sqlzoo](https://sqlzoo.net/wiki/SQL_Tutorial): Practice SQL statements online.
- [godbolt](https://godbolt.org/): A convenient compiler exploration tool. Write some C/C++ code, choose a compiler, and observe the specific assembly code generated.
- [explainshell](https://explainshell.com/): Struggling with the meaning of a shell command? Try this site!
- [regex101](https://regex101.com/): A regex debugging site supporting various programming language standards.
- [typingtom](https://www.typingtom.com/lessons): Typing practice/speed test site for programmers.
- [wrk](https://github.com/wg/wrk): Website stress testing tool.
- [gbmb](https://www.gbmb.org/): Data unit conversion tool.
- [tools](https://tools.fun/): A collection of online tools.
- [github1s](https://github1s.com/): Read GitHub code online with a web-based VS Code.
- [visualgo](https://visualgo.net/en): Algorithm visualization website.
- [DataStructureVisual](http://www.rmboot.com/): Data structure visualization website.
- [Data Structure Visualizations](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html): Visualization website for data structures and algorithms.
- [learngitbranching](https://learngitbranching.js.org/?locale=zh_CN): Visualize learning git.
- [UnicodeCharacter](https://unicode-table.com/en/): Unicode character set website.
- [cyrilex](https://extendsclass.com/regex-tester.html): A site for testing and visualizing regular expressions, supporting various programming language standards.
- [mockium](https://softwium.com/mockium/): Platform for generating test data.

## Learning Websites

- [HFS](https://hepsoftwarefoundation.org/training/curriculum.html): Various software tutorials.
- [Shadertoy](https://www.shadertoy.com/): Write various shaders.
- [comments-for-awesome-courses](https://conanhujinming.github.io/comments-for-awesome-courses/): Reviews of open courses from prestigious universities.
- [codetop](https://codetop.cc/home): Corporate problem bank.
- [cs-video-courses](https://github.com/Developer-Y/cs-video-courses): List of computer science courses with video lectures.
- [bootlin](https://elixir.bootlin.com/linux/v2.6.39.4/source/include/linux): Read Linux source code online.
- [ecust-CourseShare](https://github.com/tianyilt/ecnu-PGCourseShare): East China Normal University graduate course strategy sharing project.
- [REKCARC-TSC-UHT](https://github.com/PKUanonym/REKCARC-TSC-UHT): Tsinghua University computer science course strategy.
- [seu-master](https://github.com/oneman233/seu-master): Southeast University graduate course materials.
- [Runoob](https://www.runoob.com/): Brief tutorials on computer-related knowledge.
- [FreeBSD From Entry to Run Away](https://book.bsdcn.org/): A Chinese tutorial on FreeBSD.
- [MDN Web Docs](https://developer.mozilla.org/zh-CN/docs/Learn): MDN's beginner's guide to web development.
- [Hello Algorithm](https://www.hello-algo.com/): A quick introductory tutorial on data structures and algorithms with animations, runnable examples, and Q&A.

## Encyclopedic/Dictionarial Websites

- [os-wiki](https://wiki.osdev.org/Main_Page): An encyclopedia of operating system technology resources.
- [FreeBSD Documentation](https://docs.freebsd.org/en/): Official FreeBSD documentation.
- [Python3 Documentation](https://docs.python.org/zh-cn/3/): Official Chinese documentation for Python3.
- [C++ Reference](https://en.cppreference.com/w/): C++ reference manual.
- [OI Wiki](https://oi-wiki.org/): An integrated site for programming competition knowledge.
- [CTF Wiki](https://ctf-wiki.org/): An integrated site for knowledge and tools related to cybersecurity competitions.
- [Microsoft Learn](https://learn.microsoft.com/zh-cn/): Microsoft's official learning platform, containing most Microsoft product documentation.
- [Arch Wiki](https://wiki.archlinux.org/): Wiki written for Arch Linux, containing a lot of Linux-related knowledge.
- [Qt Wiki](https://wiki.qt.io/Main): Official Qt Wiki.
- [OpenCV Chinese Documentation](https://opencv.apachecn.org/#/): Community version of OpenCV's Chinese documentation.
- [npm Docs](https://docs.npmjs.com/): Official npm documentation.
- [developer-roadmap](https://roadmap.sh/): provides roadmaps, guides and other educational content to help guide developers in picking up a path and guide their learnings.

## Communication Platforms

- [GitHub](https://github.com/): Many open-source projects' hosting platform, also a major communication platform for many open-source projects, where issues can solve many problems.
- [StackExchange](https://stackexchange.com/): A programming community composed of 181 Q&A communities (including Stack Overflow).
- [StackOverflow](https://stackoverflow.com/): An IT technical Q&A site related to programming.
- [Gitee](https://gitee.com/): A code hosting platform similar to GitHub, where you can find solutions to common questions in the issues of corresponding projects.
- [Zhihu](https://www.zhihu.com/): A Q&A community similar to Quora, where you can ask questions, with some answers containing computer knowledge.
- [Cnblogs](https://www.cnblogs.com/): A knowledge-sharing community for developers, containing blogs on common questions. Accuracy is not guaranteed, please use with caution.
- [CSDN](https://blog.csdn.net/): Contains blogs on common questions. Accuracy is not guaranteed, please use with caution.

## Miscellaneous

- [tophub](https://tophub.today/): A collection of trending news headlines (aggregating from Zhihu, Weibo, Baidu, WeChat, etc.).
- [feedly](https://feedly.com/): A famous RSS feed reader.
- [speedtest](https://www.speedtest.net/zh-Hans): An online network speed testing website.
- [public-apis](https://github.com/public-apis/public-apis): A collective list of free APIs for development.
- [numberempire](https://zh.numberempire.com/derivativecalculator.php): A tool for calculating derivatives of functions.
- [sustech-application](https://sustech-application.com/#/grad-application/computer-science-and-engineering/README): Southern University of Science and Technology experience sharing website.
- [vim-adventures](https://vim-adventures.com/): An online game based on vim keyboard shortcuts.
- [vimsnake](https://vimsnake.com/): Play the snake game using vim commands.
- [keybr](https://www.keybr.com/): A website for learning touch typing.
- [Awesome C++](https://cpp.libhunt.com/): A curated list of awesome C/C++ frameworks, libraries, resources.
- [HelloGitHub](https://hellogithub.com/): Shares interesting and beginner-friendly open-source projects on GitHub.
- [Synergy](https://github.com/DEAKSoftware/Synergy-Binaries): A set of keyboard and mouse controls for multiple computers


================================================
FILE: docs/必学工具/tools.md
================================================
# 实用工具箱

## 下载工具

- [Sci-Hub](https://sci-hub.se/): Elbakyan 女神向你挥手,旨在打破知识壁垒的革命性网站。
- [Library Genesis](http://libgen.is/): 电子书下载网站。
- [Z-library](https://z-library.rs/): 电子书下载网站(在 [Tor](https://www.torproject.org/) 下运行较佳,[链接](http://loginzlib2vrak5zzpcocc3ouizykn6k5qecgj2tzlnab5wcbqhembyd.onion/))。
- [Z-ePub](https://z-epub.com/): ePub 电子书下载网站。
- [PDF Drive](https://www.pdfdrive.com/): PDF 电子书搜索引擎。
- [MagazineLib](https://magazinelib.com/): PDF 电子杂志下载网站。
- [BitDownloader](https://bitdownloader.io/): 油管视频下载器。
- [qBittorrent](https://www.qbittorrent.org/download.php): BitTorrent 客户端。
- [uTorrent](https://www.utorrent.com): BitTorrent 客户端。
- [全国标准信息公共服务平台](https://std.samr.gov.cn/):各类标准查询和下载官方平台。
- [标准知识服务系统](http://www.standards.com.cn/):检索与阅读所需标准。
- [MSDN,我告诉你](https://msdn.itellyou.cn/): Windows 操作系统镜像下载站,也有许多其他软件的下载。

## 设计工具

- [excalidraw](https://excalidraw.com/): 一款手绘风格的绘图工具,非常适合绘制课程报告或者PPT内的示意图。
- [tldraw](https://www.tldraw.com/): 一个绘图工具,适合画流程图,架构图等。
- [draw.io](https://app.diagrams.net/): 强大简洁的在线的绘图网站,支持流程图,UML图,架构图,原型图等等,支持 Onedrive, Google Drive, Github 导出,同时提供离线客户端。
- [origamiway](https://www
Download .txt
gitextract_rr3ofv8w/

├── .editorconfig
├── .github/
│   └── workflows/
│       └── ci.yml
├── .gitignore
├── LICENSE
├── README.md
├── docs/
│   ├── CNAME
│   ├── CS学习规划.en.md
│   ├── CS学习规划.md
│   ├── Web开发/
│   │   ├── CS142.en.md
│   │   ├── CS142.md
│   │   ├── CS571.en.md
│   │   ├── CS571.md
│   │   ├── fullstackopen.en.md
│   │   ├── fullstackopen.md
│   │   ├── mitweb.en.md
│   │   └── mitweb.md
│   ├── index.en.md
│   ├── index.md
│   ├── 人工智能/
│   │   ├── CS188.en.md
│   │   ├── CS188.md
│   │   ├── CS50.en.md
│   │   ├── CS50.md
│   │   ├── Neural Networks:Zero to Hero.en.md
│   │   └── Neural Networks:Zero to Hero.md
│   ├── 体系结构/
│   │   ├── CA.en.md
│   │   ├── CA.md
│   │   ├── CS61C.en.md
│   │   ├── CS61C.md
│   │   ├── DDCA.en.md
│   │   ├── DDCA.md
│   │   ├── N2T.en.md
│   │   └── N2T.md
│   ├── 使用指南.en.md
│   ├── 使用指南.md
│   ├── 后记.md
│   ├── 好书推荐.md
│   ├── 并行与分布式系统/
│   │   ├── CS149.en.md
│   │   ├── CS149.md
│   │   ├── MIT6.824.en.md
│   │   └── MIT6.824.md
│   ├── 必学工具/
│   │   ├── CMake.en.md
│   │   ├── CMake.md
│   │   ├── Docker.en.md
│   │   ├── Docker.md
│   │   ├── Emacs.en.md
│   │   ├── Emacs.md
│   │   ├── GNU_Make.en.md
│   │   ├── GNU_Make.md
│   │   ├── Git.en.md
│   │   ├── Git.md
│   │   ├── GitHub.en.md
│   │   ├── GitHub.md
│   │   ├── LaTeX.en.md
│   │   ├── LaTeX.md
│   │   ├── Scoop.en.md
│   │   ├── Scoop.md
│   │   ├── Vim.en.md
│   │   ├── Vim.md
│   │   ├── thesis.en.md
│   │   ├── thesis.md
│   │   ├── tools.en.md
│   │   ├── tools.md
│   │   ├── workflow.en.md
│   │   ├── workflow.md
│   │   ├── 信息检索.en.md
│   │   ├── 信息检索.md
│   │   ├── 翻墙.en.md
│   │   └── 翻墙.md
│   ├── 操作系统/
│   │   ├── CS162.en.md
│   │   ├── CS162.md
│   │   ├── HITOS.en.md
│   │   ├── HITOS.md
│   │   ├── MIT6.S081.en.md
│   │   ├── MIT6.S081.md
│   │   ├── NJUOS.en.md
│   │   └── NJUOS.md
│   ├── 数学基础/
│   │   ├── MITLA.en.md
│   │   ├── MITLA.md
│   │   ├── MITmaths.en.md
│   │   ├── MITmaths.md
│   │   ├── information.en.md
│   │   └── information.md
│   ├── 数学进阶/
│   │   ├── 6.042J.en.md
│   │   ├── 6.042J.md
│   │   ├── CS126.en.md
│   │   ├── CS126.md
│   │   ├── CS70.en.md
│   │   ├── CS70.md
│   │   ├── The_Information_Theory_Pattern_Recognition_and_Neural_Networks.en.md
│   │   ├── The_Information_Theory_Pattern_Recognition_and_Neural_Networks.md
│   │   ├── convex.en.md
│   │   ├── convex.md
│   │   ├── numerical.en.md
│   │   └── numerical.md
│   ├── 数据库系统/
│   │   ├── 15445.en.md
│   │   ├── 15445.md
│   │   ├── 15799.en.md
│   │   ├── 15799.md
│   │   ├── CS122.en.md
│   │   ├── CS122.md
│   │   ├── CS186.en.md
│   │   ├── CS186.md
│   │   ├── CS346.en.md
│   │   └── CS346.md
│   ├── 数据科学/
│   │   ├── Data100.en.md
│   │   └── Data100.md
│   ├── 数据结构与算法/
│   │   ├── 6.006.en.md
│   │   ├── 6.006.md
│   │   ├── 6.046.en.md
│   │   ├── 6.046.md
│   │   ├── Algo.en.md
│   │   ├── Algo.md
│   │   ├── CS170.en.md
│   │   ├── CS170.md
│   │   ├── CS61B.en.md
│   │   └── CS61B.md
│   ├── 机器学习/
│   │   ├── CS189.en.md
│   │   ├── CS189.md
│   │   ├── CS229.en.md
│   │   ├── CS229.md
│   │   ├── ML.en.md
│   │   └── ML.md
│   ├── 机器学习系统/
│   │   ├── AICS.en.md
│   │   ├── AICS.md
│   │   ├── CMU10-414.en.md
│   │   ├── CMU10-414.md
│   │   ├── CSE234.en.md
│   │   ├── CSE234.md
│   │   ├── EML.en.md
│   │   ├── EML.md
│   │   ├── MLC.en.md
│   │   └── MLC.md
│   ├── 机器学习进阶/
│   │   ├── CMU10-708.en.md
│   │   ├── CMU10-708.md
│   │   ├── CS229M.en.md
│   │   ├── CS229M.md
│   │   ├── STA4273.en.md
│   │   ├── STA4273.md
│   │   ├── STAT8201.en.md
│   │   ├── STAT8201.md
│   │   ├── roadmap.en.md
│   │   └── roadmap.md
│   ├── 深度学习/
│   │   ├── CMU11-785.en.md
│   │   ├── CMU11-785.md
│   │   ├── CS224n.en.md
│   │   ├── CS224n.md
│   │   ├── CS224w.en.md
│   │   ├── CS224w.md
│   │   ├── CS230.en.md
│   │   ├── CS230.md
│   │   ├── CS231.en.md
│   │   ├── CS231.md
│   │   ├── CS285.en.md
│   │   ├── CS285.md
│   │   ├── EECS498-007.en.md
│   │   ├── EECS498-007.md
│   │   ├── LHY.en.md
│   │   ├── LHY.md
│   │   ├── MIT6-7960.en.md
│   │   ├── MIT6-7960.md
│   │   ├── NYU-DLSP21.en.md
│   │   └── NYU-DLSP21.md
│   ├── 深度生成模型/
│   │   ├── MIT6.S184.en.md
│   │   ├── MIT6.S184.md
│   │   ├── roadmap.en.md
│   │   ├── roadmap.md
│   │   └── 大语言模型/
│   │       ├── CMU11-667.en.md
│   │       ├── CMU11-667.md
│   │       ├── CMU11-711.en.md
│   │       ├── CMU11-711.md
│   │       ├── CMU11-868.en.md
│   │       ├── CMU11-868.md
│   │       ├── CMU15-779.en.md
│   │       └── CMU15-779.md
│   ├── 电子基础/
│   │   ├── EE16.en.md
│   │   ├── EE16.md
│   │   ├── Signals_and_Systems_AVO.en.md
│   │   ├── Signals_and_Systems_AVO.md
│   │   ├── signal.en.md
│   │   └── signal.md
│   ├── 系统安全/
│   │   ├── CS161.en.md
│   │   ├── CS161.md
│   │   ├── CSE365.en.md
│   │   ├── CSE365.md
│   │   ├── CSE466.en.md
│   │   ├── CSE466.md
│   │   ├── MIT6.1600.en.md
│   │   ├── MIT6.1600.md
│   │   ├── MIT6.858.en.md
│   │   ├── MIT6.858.md
│   │   ├── SEEDLabs.en.md
│   │   └── SEEDLabs.md
│   ├── 编程入门/
│   │   ├── C/
│   │   │   ├── CS50.en.md
│   │   │   ├── CS50.md
│   │   │   ├── Duke-Coursera-Intro-C.en.md
│   │   │   └── Duke-Coursera-Intro-C.md
│   │   ├── DeCal.en.md
│   │   ├── DeCal.md
│   │   ├── Functional/
│   │   │   ├── CS3110.en.md
│   │   │   ├── CS3110.md
│   │   │   ├── Haskell-MOOC.en.md
│   │   │   └── Haskell-MOOC.md
│   │   ├── Java/
│   │   │   ├── MIT 6.092.en.md
│   │   │   └── MIT 6.092.md
│   │   ├── MIT-Missing-Semester.en.md
│   │   ├── MIT-Missing-Semester.md
│   │   ├── Python/
│   │   │   ├── CS50P.en.md
│   │   │   ├── CS50P.md
│   │   │   ├── CS61A.en.md
│   │   │   ├── CS61A.md
│   │   │   ├── MIT6.100L.en.md
│   │   │   └── MIT6.100L.md
│   │   ├── Rust/
│   │   │   ├── CS110L.en.md
│   │   │   ├── CS110L.md
│   │   │   ├── cs220.en.md
│   │   │   ├── cs220.md
│   │   │   ├── cs431.en.md
│   │   │   └── cs431.md
│   │   └── cpp/
│   │       ├── AUT1400.en.md
│   │       ├── AUT1400.md
│   │       ├── CS106B_CS106X.en.md
│   │       ├── CS106B_CS106X.md
│   │       ├── CS106L.en.md
│   │       └── CS106L.md
│   ├── 编程语言设计与分析/
│   │   ├── CS242.en.md
│   │   ├── CS242.md
│   │   ├── Cambridge-Semantics.en.md
│   │   ├── Cambridge-Semantics.md
│   │   ├── NJU-SoftwareAnalysis.en.md
│   │   ├── NJU-SoftwareAnalysis.md
│   │   ├── PKU-SoftwareAnalysis.en.md
│   │   └── PKU-SoftwareAnalysis.md
│   ├── 编译原理/
│   │   ├── CS143.en.md
│   │   ├── CS143.md
│   │   ├── CS420.en.md
│   │   ├── CS420.md
│   │   ├── NJU-Compilers.en.md
│   │   ├── NJU-Compilers.md
│   │   ├── PKU-Compilers.en.md
│   │   ├── PKU-Compilers.md
│   │   ├── SJTU-Compilers.en.md
│   │   ├── SJTU-Compilers.md
│   │   ├── USTC-Compilers.en.md
│   │   └── USTC-Compilers.md
│   ├── 计算机图形学/
│   │   ├── 15462.en.md
│   │   ├── 15462.md
│   │   ├── CS148.en.md
│   │   ├── CS148.md
│   │   ├── GAMES101.en.md
│   │   ├── GAMES101.md
│   │   ├── GAMES103.en.md
│   │   ├── GAMES103.md
│   │   ├── GAMES202.en.md
│   │   ├── GAMES202.md
│   │   ├── USTC ComputerGraphics.en.md
│   │   └── USTC ComputerGraphics.md
│   ├── 计算机系统基础/
│   │   ├── CS110.en.md
│   │   ├── CS110.md
│   │   ├── CSAPP.en.md
│   │   └── CSAPP.md
│   ├── 计算机网络/
│   │   ├── CS144.en.md
│   │   ├── CS144.md
│   │   ├── CS168.en.md
│   │   ├── CS168.md
│   │   ├── topdown.en.md
│   │   ├── topdown.md
│   │   ├── topdown_ustc.en.md
│   │   └── topdown_ustc.md
│   └── 软件工程/
│       ├── 17803.en.md
│       ├── 17803.md
│       ├── 6031.en.md
│       ├── 6031.md
│       ├── CS169.en.md
│       └── CS169.md
├── mkdocs.yml
├── overrides/
│   └── partials/
│       └── comments.html
├── requirements.txt
├── template.en.md
└── template.md
Condensed preview — 279 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (593K chars).
[
  {
    "path": ".editorconfig",
    "chars": 198,
    "preview": "# http://editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 4\nend_of_line = lf\ncharset = utf-8\ntrim_tr"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 363,
    "preview": "name: ci\n\non:\n  push:\n    branches:\n      - master\n      - main\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n "
  },
  {
    "path": ".gitignore",
    "chars": 32,
    "preview": ".DS_Store\n.vscode/\n\n/venv\n/site\n"
  },
  {
    "path": "LICENSE",
    "chars": 1080,
    "preview": "MIT License\n\nCopyright © <2021> <copyright Yinmin Zhong>\n\nPermission is hereby granted, free of charge, to any person ob"
  },
  {
    "path": "README.md",
    "chars": 3337,
    "preview": "<div align=\"center\">\n  <img src=./docs/images/title.png >\n</div>\n\n# CS 自学指南\n\n> _Everyone should enjoy CS if you have a g"
  },
  {
    "path": "docs/CNAME",
    "chars": 10,
    "preview": "csdiy.wiki"
  },
  {
    "path": "docs/CS学习规划.en.md",
    "chars": 41113,
    "preview": "# A Reference Guide for CS Learning\n\nThe field of computer science is vast and complex, with a seemingly endless sea of "
  },
  {
    "path": "docs/CS学习规划.md",
    "chars": 18903,
    "preview": "# 一个仅供参考的 CS 学习规划\n\n计算机领域方向庞杂,知识浩如烟海,每个细分领域如果深究下去都可以说学无止境。因此,一个清晰明确的学习规划是非常重要的。我在多年自学的尝试中也走过不少弯路,最终提炼出了下面的内容,供大家参考。\n\n不过,在"
  },
  {
    "path": "docs/Web开发/CS142.en.md",
    "chars": 616,
    "preview": "# Stanford CS142: Web Applications\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: CS107 and CS108\n- Programmi"
  },
  {
    "path": "docs/Web开发/CS142.md",
    "chars": 443,
    "preview": "# Stanford CS142: Web Applications\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:有一定的编程经验\n- 编程语言:JavaScript/HTML/CSS\n- 课程难度:🌟🌟🌟🌟\n- 预计"
  },
  {
    "path": "docs/Web开发/CS571.en.md",
    "chars": 2265,
    "preview": "# CS571 Building UI (React & React Native)\n\n## Course Overview\n\n- University: University of Wisconsin, Madison\n- Prerequ"
  },
  {
    "path": "docs/Web开发/CS571.md",
    "chars": 926,
    "preview": "# CS571 Building UI (React & React Native)\n\n## 课程简介\n\n- 所属大学:威斯康星大学麦迪逊分校(University of Wisconsin, Madison)\n- 先修要求:CS400(高"
  },
  {
    "path": "docs/Web开发/fullstackopen.en.md",
    "chars": 1029,
    "preview": "# University of Helsinki: Full Stack open 2022\n\n## Descriptions\n\n- Offered by: University of Helsinki\n- Prerequisites: G"
  },
  {
    "path": "docs/Web开发/fullstackopen.md",
    "chars": 561,
    "preview": "# University of Helsinki: Full Stack open 2022\n\n## 课程简介\n\n- 所属大学:University of Helsinki\n- 先修要求:具备良好的编程技能、基本的网络编程和数据库知识,并且"
  },
  {
    "path": "docs/Web开发/mitweb.en.md",
    "chars": 1069,
    "preview": "# MIT Web Development Crash Course\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: better if you are already profic"
  },
  {
    "path": "docs/Web开发/mitweb.md",
    "chars": 469,
    "preview": "# MIT Web Development Crash Course\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:掌握至少一门编程语言\n- 编程语言:JavaScript/HTML/CSS/NoSQL\n- 课程难度:🌟🌟🌟\n- "
  },
  {
    "path": "docs/index.en.md",
    "chars": 13946,
    "preview": "<figure markdown>\n  ![Image title](./images/title.png){ width=\"600\" }\n</figure>\n\n# **Foreword**\n\nThis is a self-learning"
  },
  {
    "path": "docs/index.md",
    "chars": 5512,
    "preview": "<figure markdown>\n  ![Image title](./images/title.png){ width=\"600\" }\n</figure>\n\n# 前言\n\n**🎉🎉 [Release v1.2.0](https://git"
  },
  {
    "path": "docs/人工智能/CS188.en.md",
    "chars": 1728,
    "preview": "# CS188: Introduction to Artificial Intelligence\n\n## Course Overview\n\n- University:UC Berkeley\n- Prerequisites:CS70\n- Pr"
  },
  {
    "path": "docs/人工智能/CS188.md",
    "chars": 650,
    "preview": "# CS188: Introduction to Artificial Intelligence\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS70\n- 编程语言:Python\n- 课程难度:🌟🌟🌟\n- 预计学"
  },
  {
    "path": "docs/人工智能/CS50.en.md",
    "chars": 1224,
    "preview": "# Harvard's CS50: Introduction to AI with Python\n\n## Descriptions\n\n- Offered by: Harvard University\n- Prerequisites: Bas"
  },
  {
    "path": "docs/人工智能/CS50.md",
    "chars": 680,
    "preview": "# CS50’s Introduction to AI with Python\n\n## 课程简介\n\n- 所属大学:Harvard\n- 先修要求:基本概率论 + Python 基础\n- 编程语言:Python\n- 课程难度:🌟🌟🌟\n- 预计学"
  },
  {
    "path": "docs/人工智能/Neural Networks:Zero to Hero.en.md",
    "chars": 2058,
    "preview": "# Neural Networks: Zero to Hero  \n\n## Description  \n\n- **Instructor:** Andrej Karpathy  \n- **Prerequisites:** Basic Pyth"
  },
  {
    "path": "docs/人工智能/Neural Networks:Zero to Hero.md",
    "chars": 1029,
    "preview": "# 神经网络:从零到英雄  \n\n## 课程简介  \n\n- **讲师:** Andrej Karpathy  \n- **先修要求:** 具备基本的 Python 编程能力,并对深度学习概念有所了解  \n- **编程语言:** Python  "
  },
  {
    "path": "docs/体系结构/CA.en.md",
    "chars": 3066,
    "preview": "# ETH: Computer Architecture\n\n## Course Overview\n\n- University: ETH Zurich\n- Prerequisites: [DDCA](https://csdiy.wiki/%E"
  },
  {
    "path": "docs/体系结构/CA.md",
    "chars": 1896,
    "preview": "# ETH: Computer Architecture\n\n## 课程简介\n\n- 所属大学:ETH Zurich\n- 先修要求:[DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6"
  },
  {
    "path": "docs/体系结构/CS61C.en.md",
    "chars": 2872,
    "preview": "# CS61C: Great Ideas in Computer Architecture\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS61B\n"
  },
  {
    "path": "docs/体系结构/CS61C.md",
    "chars": 1861,
    "preview": "# CS61C: Great Ideas in Computer Architecture\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS61A, CS61B\n- 编程语言:C\n- 课程难度:🌟🌟🌟🌟\n- 预计"
  },
  {
    "path": "docs/体系结构/DDCA.en.md",
    "chars": 1591,
    "preview": "# Digital Design and Computer Architecture\n\n## Descriptions\n\n- Offered by: ETH Zurich\n- Prerequisites: CS50 or same leve"
  },
  {
    "path": "docs/体系结构/DDCA.md",
    "chars": 1098,
    "preview": "# ETH Zurich:Digital Design and Computer Architecture\n\n## 课程简介\n\n- 所属大学:ETH Zurich\n- 先修要求:CS50 或同阶课程,最好有 C 语言基础。\n- 编程语言:C"
  },
  {
    "path": "docs/体系结构/N2T.en.md",
    "chars": 3174,
    "preview": "# Coursera: Nand2Tetris\n\n## Descriptions\n\n- Offered by: Hebrew University of Jerusalem\n- Prerequisites: None\n- Programmi"
  },
  {
    "path": "docs/体系结构/N2T.md",
    "chars": 1394,
    "preview": "# Coursera: Nand2Tetris\n\n## 课程简介\n\n- 所属大学:希伯来大学\n- 先修要求:无\n- 编程语言:任选一个编程语言\n- 课程难度:🌟🌟🌟\n- 预计学时:40 小时\n\n[Coursera](https://www."
  },
  {
    "path": "docs/使用指南.en.md",
    "chars": 11672,
    "preview": "# **How to Use This Book**\n\nAs the number of contributors grows, the content of this book keeps expanding. It is impract"
  },
  {
    "path": "docs/使用指南.md",
    "chars": 4907,
    "preview": "# 如何使用这本书\n\n随着贡献者的不断增多,本书的内容也不断扩展,想把书中所有的课程全部学完是不切实际也没有必要的,甚至会起到事倍功半的反效果,吃力而不讨好。为了更好地贴合读者,让这本书真正为你所用,我将读者按照需求大致分为了如下三类,大家"
  },
  {
    "path": "docs/后记.md",
    "chars": 1083,
    "preview": "# 后记\n\n从最初的想法开始,到断断续续完成这本书,再到树洞的热烈反响,我很激动,但也五味杂陈。原来在北大这个园子里,也有那么多人,对自己的本科生涯并不满意。而这里,可是囊括了中国非常优秀的一帮年轻人。所以问题出在哪里?我不知道。\n\n我只是"
  },
  {
    "path": "docs/好书推荐.md",
    "chars": 7876,
    "preview": "# 好书推荐\n\n<!-- \n    汇总类的书籍资源请放在 资源汇总 板块下\n\n    书籍格式要求: \n        书籍名(优先英文原版,开源则附上链接,多版本则默认最新版) [豆瓣链接] [其他相关资源链接(如相关课程)]\n    "
  },
  {
    "path": "docs/并行与分布式系统/CS149.en.md",
    "chars": 2225,
    "preview": "# CMU 15-418/Stanford CS149: Parallel Computing\n\n## Descriptions\n\n- Offered by: CMU and Stanford\n- Prerequisites: Comput"
  },
  {
    "path": "docs/并行与分布式系统/CS149.md",
    "chars": 1176,
    "preview": "# CMU 15-418/Stanford CS149: Parallel Computing\n\n## 课程简介\n\n- 所属大学:CMU 和 Stanford\n- 先修要求:计算机体系结构,熟悉 C++\n- 编程语言:C++\n- 课程难度:"
  },
  {
    "path": "docs/并行与分布式系统/MIT6.824.en.md",
    "chars": 1737,
    "preview": "# MIT6.824: Distributed System\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Computer Architecture, Parallel Comp"
  },
  {
    "path": "docs/并行与分布式系统/MIT6.824.md",
    "chars": 938,
    "preview": "# MIT6.824: Distributed System\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:计算机体系结构,并行编程\n- 编程语言:Go\n- 课程难度:🌟🌟🌟🌟🌟🌟\n- 预计学时:200 小时\n\n这门课和 MIT "
  },
  {
    "path": "docs/必学工具/CMake.en.md",
    "chars": 897,
    "preview": "# CMake \r\n\r\n## Why CMake \r\n\r\nSimilar to GNU make, CMake is a cross-platform tool designed to build, test and package sof"
  },
  {
    "path": "docs/必学工具/CMake.md",
    "chars": 492,
    "preview": "# CMake\n\n## 为什么学习 CMake\n\nCMake 是类似于 GNU make 的跨平台自动软件构建工具,使用 CMakeLists.txt 定义构建规则,相比于 make 它提供了更多的功能,在各种软件构建上广泛使用。**强烈建"
  },
  {
    "path": "docs/必学工具/Docker.en.md",
    "chars": 1894,
    "preview": "# Docker\n\n## Why Docker\n\nThe main obstacle when using software/tools developed by others is often the hassle of setting "
  },
  {
    "path": "docs/必学工具/Docker.md",
    "chars": 809,
    "preview": "# Docker\n\n## 为什么使用 Docker\n\n使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好"
  },
  {
    "path": "docs/必学工具/Emacs.en.md",
    "chars": 2349,
    "preview": "# Emacs\n\n## Why Emacs\n\nEmacs is a powerful editor as famous as Vim. Emacs has almost all the benefits of Vim, such as: \n"
  },
  {
    "path": "docs/必学工具/Emacs.md",
    "chars": 1078,
    "preview": "# Emacs\n\n## 为什么学习 Emacs\n\nEmacs 是一个与 Vim 齐名的强大编辑器,事实上 Emacs 几乎具有 Vim 的所有好处,例如:\n\n- 只需要键盘就可以完成所有操作,大量使用快捷键,具有极高的编辑效率。\n- 既可以"
  },
  {
    "path": "docs/必学工具/GNU_Make.en.md",
    "chars": 1452,
    "preview": "# GNU Make\n\n## Why GNU Make\n\nEveryone remembers their first \"hello world\" program. After editing `helloworld.c`, you nee"
  },
  {
    "path": "docs/必学工具/GNU_Make.md",
    "chars": 585,
    "preview": "# GNU Make\n\n## 为什么学 GNU Make\n\n大家第一次写 hello world 程序的时候一定都记得,在编辑完 `helloworld.c` 之后,需要用 `gcc` 编译生成可执行文件,然后再执行(如果你不理解前面这段话"
  },
  {
    "path": "docs/必学工具/Git.en.md",
    "chars": 2137,
    "preview": "# Git \n\n## Why Git \n\nGit is a distributed version control system. The father of Linux, Linus Torvalds developed Git to m"
  },
  {
    "path": "docs/必学工具/Git.md",
    "chars": 1185,
    "preview": "# Git\n\n## 为什么使用 Git\n\nGit 是一款分布式的代码版本控制工具,Linux 之父 Linus 嫌弃当时主流的中心式的版本控制工具太难用还要花钱,就自己开发出了 Git 用来维护 Linux 的版本(给大佬跪了)。\n\nGit"
  },
  {
    "path": "docs/必学工具/GitHub.en.md",
    "chars": 2274,
    "preview": "# GitHub\n\n## What is GitHub\n\nFunctionally, GitHub is an online platform for hosting code. You can host your local Git re"
  },
  {
    "path": "docs/必学工具/GitHub.md",
    "chars": 930,
    "preview": "# GitHub\n\n## GitHub 是什么\n\n从功能上来说,GitHub 是一个在线代码托管平台。你可以将你的本地 Git 仓库托管到 GitHub 上,供多人同时开发浏览。但现如今 GitHub 的意义已远不止如此,它已经演变为一个非"
  },
  {
    "path": "docs/必学工具/LaTeX.en.md",
    "chars": 2778,
    "preview": "# LaTeX\n\n## Why Learn LaTeX\n\nIf you need to write academic papers, please skip directly to the next section, as learning"
  },
  {
    "path": "docs/必学工具/LaTeX.md",
    "chars": 1525,
    "preview": "# LaTeX\n\n## 为什么学 LaTeX\n\n如果你需要写论文,那么请直接跳到下一节,因为你不学也得学。\n\nLaTeX 是一种基于 TeX 的排版系统,由图灵奖得主 Lamport 开发,而 Tex 则是由 Knuth 最初开发,这两位都"
  },
  {
    "path": "docs/必学工具/Scoop.en.md",
    "chars": 3066,
    "preview": "# Scoop\n\n## Why Use Scoop\n\nSetting up a development environment in Windows has always been a complex and challenging tas"
  },
  {
    "path": "docs/必学工具/Scoop.md",
    "chars": 1626,
    "preview": "# Scoop\n\n## 为什么使用 Scoop\n\n在 Windows 下,搭建开发环境一直是一个复杂且困难的问题。由于没有一个统一的标准,导致各种开发环境的安装方式差异巨大,需要付出很多不必要的时间成本。而 Scoop 可以帮助你统一安装并"
  },
  {
    "path": "docs/必学工具/Vim.en.md",
    "chars": 3311,
    "preview": "# Vim\n\n## Why Vim\n\nIn my opinion, the Vim editor has the following benefits:\n\n- It keeps your finger on the keyboard thr"
  },
  {
    "path": "docs/必学工具/Vim.md",
    "chars": 1948,
    "preview": "# Vim\n\n## 为什么学习 Vim\n\n在我看来 Vim 编辑器有如下的好处:\n\n- 让你的整个开发过程手指不需要离开键盘,而且光标的移动不需要方向键使得你的手指一直处在打字的最佳位置。\n- 方便的文件切换以及面板控制可以让你同时开发多份"
  },
  {
    "path": "docs/必学工具/thesis.en.md",
    "chars": 2506,
    "preview": "# Thesis Writing\n\n## Why I Wrote This Tutorial\n\nIn 2022, I graduated from my college. When I started writing my thesis, "
  },
  {
    "path": "docs/必学工具/thesis.md",
    "chars": 1113,
    "preview": "# 毕业论文\n\n## 为什么写这份教程\n\n2022年,我本科毕业了。在开始动手写毕业论文的时候,我尴尬地发现,我对 Word 的掌握程度仅限于调节字体、保存导出这些傻瓜功能。曾想转战 Latex,但论文的段落格式要求调整起来还是用 Word"
  },
  {
    "path": "docs/必学工具/tools.en.md",
    "chars": 9283,
    "preview": "# Practical Toolbox\n\n## Download Tools\n\n- [Sci-Hub](https://sci-hub.se/): A revolutionary site aiming to break knowledge"
  },
  {
    "path": "docs/必学工具/tools.md",
    "chars": 5984,
    "preview": "# 实用工具箱\n\n## 下载工具\n\n- [Sci-Hub](https://sci-hub.se/): Elbakyan 女神向你挥手,旨在打破知识壁垒的革命性网站。\n- [Library Genesis](http://libgen.is"
  },
  {
    "path": "docs/必学工具/workflow.en.md",
    "chars": 12177,
    "preview": "> Contributed by [@HardwayLinka](https://github.com/HardwayLinka)\n\nThe field of computer science is vast and rapidly evo"
  },
  {
    "path": "docs/必学工具/workflow.md",
    "chars": 5905,
    "preview": "> Contributed by [@HardwayLinka](https://github.com/HardwayLinka)\n\n计算机领域的知识覆盖面很广并且更新速度很快,因此保持终身学习的习惯很重要。但在日常开发和学习的过程中,我们"
  },
  {
    "path": "docs/必学工具/信息检索.en.md",
    "chars": 6441,
    "preview": "# Information Retrieval\n\n## Introduction\n\n> When encountering a problem, remember the first thing is to **read the docum"
  },
  {
    "path": "docs/必学工具/信息检索.md",
    "chars": 3840,
    "preview": "# 信息检索\n\n## 前言\n\n<em>碰到问题,记住第一件事是 **翻阅文档** ,不要一开始就直接搜索或者找人问,翻阅FAQ可能会快速找到答案。</em>\n\n信息检索,我的理解来说,实际上就是灵活运用搜索引擎中,方便快捷的搜到需要的信息,"
  },
  {
    "path": "docs/必学工具/翻墙.en.md",
    "chars": 135,
    "preview": "# GFW\n\n[This link](https://wallesspku.space/) appears here purely as a random combination of binary bits and has nothing"
  },
  {
    "path": "docs/必学工具/翻墙.md",
    "chars": 68,
    "preview": "# 翻墙\n\n[此链接](https://wallesspku.space/)出现在这里纯属二进制 bit 的随意组合,与本人毫无关系。\n"
  },
  {
    "path": "docs/操作系统/CS162.en.md",
    "chars": 6301,
    "preview": "# CS162: Operating System\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS61B, CS61C; Solid C prog"
  },
  {
    "path": "docs/操作系统/CS162.md",
    "chars": 3430,
    "preview": "# CS162: Operating System\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS61A, CS61B, CS61C,扎实的C语言能力及GDB调试能力\n- 编程语言:C, x86汇编\n- 课程难"
  },
  {
    "path": "docs/操作系统/HITOS.en.md",
    "chars": 2338,
    "preview": "# HIT OS: Operating System\n\n## Course Introduction\n\n- University: Harbin Institute of Technology\n- Prerequisites: C Lang"
  },
  {
    "path": "docs/操作系统/HITOS.md",
    "chars": 947,
    "preview": "# HIT OS: Operating System\n\n## 课程简介\n\n- 所属大学:哈尔滨工业大学\n- 先修要求:C 语言\n- 编程语言:C 语言、汇编\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:100 小时+\n\n如果你在知乎上搜索“操作系"
  },
  {
    "path": "docs/操作系统/MIT6.S081.en.md",
    "chars": 4509,
    "preview": "# MIT 6.S081: Operating System Engineering\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Computer Architecture + "
  },
  {
    "path": "docs/操作系统/MIT6.S081.md",
    "chars": 2765,
    "preview": "# MIT 6.S081: Operating System Engineering\n\n## 课程简介\n\n- 所属大学:麻省理工学院\n- 先修要求:体系结构 + 扎实的 C 语言功底 + RISC-V 汇编语言\n- 编程语言:C, RISC"
  },
  {
    "path": "docs/操作系统/NJUOS.en.md",
    "chars": 4029,
    "preview": "# NJU OS: Operating System Design and Implementation\n\n## Course Introduction\n\n- **University**: Nanjing University\n- **P"
  },
  {
    "path": "docs/操作系统/NJUOS.md",
    "chars": 1479,
    "preview": "# NJU OS: Operating System Design and Implementation\n\n## 课程简介\n\n- 所属大学:南京大学\n- 先修要求:体系结构 + 扎实的 C 语言功底\n- 编程语言:C 语言\n- 课程难度:🌟"
  },
  {
    "path": "docs/数学基础/MITLA.en.md",
    "chars": 1940,
    "preview": "# MIT18.06: Linear Algebra\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: English\n- Programming languages: None\n- "
  },
  {
    "path": "docs/数学基础/MITLA.md",
    "chars": 951,
    "preview": "# MIT18.06: Linear Algebra\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:英文\n- 编程语言:无\n- 课程难度:🌟🌟🌟\n- 预计学时:因人而异\n\n数学大牛 Gilbert Strang 老先生年逾古稀仍坚"
  },
  {
    "path": "docs/数学基础/MITmaths.en.md",
    "chars": 1071,
    "preview": "# MIT Calculus Course\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: English\n- Programming Languages: None\n- Diffi"
  },
  {
    "path": "docs/数学基础/MITmaths.md",
    "chars": 623,
    "preview": "# MIT Calculus Course\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:英语\n- 编程语言:无\n- 课程难度:🌟🌟\n- 预计学时:因人而异\n\nMIT 的微积分课由 MIT18.01: Single Variabl"
  },
  {
    "path": "docs/数学基础/information.en.md",
    "chars": 952,
    "preview": "# MIT6.050J: Information theory and Entropy\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: None\n- Programming Lang"
  },
  {
    "path": "docs/数学基础/information.md",
    "chars": 679,
    "preview": "# MIT6.050J: Information theory and Entropy\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:无\n- 编程语言:无\n- 课程难度:🌟🌟🌟\n- 预计学时:100 小时\n\nMIT 面向大一新生的"
  },
  {
    "path": "docs/数学进阶/6.042J.en.md",
    "chars": 833,
    "preview": "# MIT 6.042J: Mathematics for Computer Science\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Calculus, Linear Alg"
  },
  {
    "path": "docs/数学进阶/6.042J.md",
    "chars": 882,
    "preview": "# MIT 6.042J: Mathematics for Computer Science\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:Calculus, Linear Algebra\n- 编程语言:Python prefer"
  },
  {
    "path": "docs/数学进阶/CS126.en.md",
    "chars": 1937,
    "preview": "# UCB CS126 : Probability theory\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS70, Calculus, Linear Alg"
  },
  {
    "path": "docs/数学进阶/CS126.md",
    "chars": 1211,
    "preview": "# UCB CS126 : Probability theory\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS70、微积分、线性代数\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟🌟\n- 预计学时:100"
  },
  {
    "path": "docs/数学进阶/CS70.en.md",
    "chars": 1391,
    "preview": "# UCB CS70: Discrete Math and Probability Theory\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: None\n- Pro"
  },
  {
    "path": "docs/数学进阶/CS70.md",
    "chars": 581,
    "preview": "# UCB CS70 : discrete Math and probability theory\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:无\n- 编程语言:无\n- 课程难度:🌟🌟🌟\n- 预计学时:60 小时"
  },
  {
    "path": "docs/数学进阶/The_Information_Theory_Pattern_Recognition_and_Neural_Networks.en.md",
    "chars": 974,
    "preview": "# The Information Theory, Pattern Recognition, and Neural Networks\n\n## Descriptions\n\n- Offered by: Cambridge\n- Prerequis"
  },
  {
    "path": "docs/数学进阶/The_Information_Theory_Pattern_Recognition_and_Neural_Networks.md",
    "chars": 563,
    "preview": "# The Information Theory, Pattern Recognition, and Neural Networks\n\n## 课程简介\n\n- 所属大学:Cambridge\n- 先修要求:Calculus, Linear Al"
  },
  {
    "path": "docs/数学进阶/convex.en.md",
    "chars": 1466,
    "preview": "# Stanford EE364A: Convex Optimization\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: Python, Calculus, Linea"
  },
  {
    "path": "docs/数学进阶/convex.md",
    "chars": 748,
    "preview": "# Stanford EE364A: Convex Optimization\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:Python,微积分,线性代数,概率论,数值分析\n- 编程语言:Python\n- 课程难度:🌟🌟"
  },
  {
    "path": "docs/数学进阶/numerical.en.md",
    "chars": 1419,
    "preview": "# MIT18.330 : Introduction to numerical analysis\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Calculus, Linear A"
  },
  {
    "path": "docs/数学进阶/numerical.md",
    "chars": 600,
    "preview": "# MIT18.330 : Introduction to numerical analysis\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:微积分,线性代数,概率论\n- 编程语言:Julia\n- 课程难度:🌟🌟🌟🌟🌟\n- 预计"
  },
  {
    "path": "docs/数据库系统/15445.en.md",
    "chars": 6492,
    "preview": "# CMU 15-445: Database Systems\n\n## Descriptions\n\n- Offered by: CMU\n- Prerequisites: C++, Data Structures and Algorithms\n"
  },
  {
    "path": "docs/数据库系统/15445.md",
    "chars": 3192,
    "preview": "# CMU 15-445: Database Systems\n\n## 课程简介\n\n- 所属大学:CMU\n- 先修要求:C++,数据结构与算法,CMU 15-213 (A.K.A. CS:APP,这也是 CMU 内部对每年 Enroll 同学"
  },
  {
    "path": "docs/数据库系统/15799.en.md",
    "chars": 1451,
    "preview": "# CMU 15-799: Special Topics in Database Systems\n\n## Course Introduction\n\n- **University**: Carnegie Mellon University ("
  },
  {
    "path": "docs/数据库系统/15799.md",
    "chars": 767,
    "preview": "# CMU 15-799: Special Topics in Database Systems\n\n## 课程简介\n\n- 所属大学:CMU\n- 先修要求:CMU 15-445\n- 编程语言:C++\n- 课程难度:🌟🌟🌟\n- 预计学时:80 "
  },
  {
    "path": "docs/数据库系统/CS122.en.md",
    "chars": 2199,
    "preview": "# Caltech CS 122: Database System Implementation\n\n## Course Introduction\n\n- **University**: California Institute of Tech"
  },
  {
    "path": "docs/数据库系统/CS122.md",
    "chars": 1009,
    "preview": "# Caltech CS 122: Database System Implementation\n\n## 课程简介\n\n- 所属大学:Caltech\n- 先修要求:无\n- 编程语言:Java\n- 课程难度:🌟🌟🌟🌟🌟\n- 预计学时:150 小"
  },
  {
    "path": "docs/数据库系统/CS186.en.md",
    "chars": 1244,
    "preview": "# UCB CS186: Introduction to Database System\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS61B, "
  },
  {
    "path": "docs/数据库系统/CS186.md",
    "chars": 619,
    "preview": "# UCB CS186: Introduction to Database System\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS61A, CS61B, CS61C\n- 编程语言:Java\n- 课程难度:"
  },
  {
    "path": "docs/数据库系统/CS346.en.md",
    "chars": 1731,
    "preview": "# Stanford CS 346: Database System Implementation\n\n## Course Introduction\n\n- **University**: Stanford\n- **Prerequisites*"
  },
  {
    "path": "docs/数据库系统/CS346.md",
    "chars": 790,
    "preview": "# Stanford CS 346: Database System Implementation\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:无\n- 编程语言:C++\n- 课程难度:🌟🌟🌟🌟🌟\n- 预计学时:150 "
  },
  {
    "path": "docs/数据科学/Data100.en.md",
    "chars": 762,
    "preview": "# UCB Data100: Principles and Techniques of Data Science\n\n## Description\n\n- Offered by: UC Berkeley\n- Prerequisites: Dat"
  },
  {
    "path": "docs/数据科学/Data100.md",
    "chars": 383,
    "preview": "# UCB Data100: Principles and Techniques of Data Science\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:Data8, CS61A,线性代数\n- 编程语言:Py"
  },
  {
    "path": "docs/数据结构与算法/6.006.en.md",
    "chars": 970,
    "preview": "# MIT 6.006: Introduction to Algorithms\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Introductory level courses "
  },
  {
    "path": "docs/数据结构与算法/6.006.md",
    "chars": 709,
    "preview": "# MIT 6.006: Introduction to Algorithms\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:计算机导论(CS50/CS61A or equivalent)\n- 编程语言:Python\n- 课程难度"
  },
  {
    "path": "docs/数据结构与算法/6.046.en.md",
    "chars": 1298,
    "preview": "# MIT 6.046: Design and Analysis of Algorithms\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Introductory level c"
  },
  {
    "path": "docs/数据结构与算法/6.046.md",
    "chars": 799,
    "preview": "# MIT 6.046: Design and Analysis of Algorithms\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:算法入门(6.006/CS61B/CS106B/CS106X or equivalent)"
  },
  {
    "path": "docs/数据结构与算法/Algo.en.md",
    "chars": 2734,
    "preview": "# Coursera: Algorithms I & II\n\n## Descriptions\n\n- Offered by: Princeton\n- Prerequisites: CS61A\n- Programming Languages: "
  },
  {
    "path": "docs/数据结构与算法/Algo.md",
    "chars": 1139,
    "preview": "# Coursera: Algorithms I & II\n\n## 课程简介\n\n- 所属大学:Princeton\n- 先修要求:CS61A\n- 编程语言:Java\n- 课程难度:🌟🌟🌟\n- 预计学时:60 小时\n\n这是 [Coursera]"
  },
  {
    "path": "docs/数据结构与算法/CS170.en.md",
    "chars": 1213,
    "preview": "# CS170: Efficient Algorithms and Intractable Problems\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61"
  },
  {
    "path": "docs/数据结构与算法/CS170.md",
    "chars": 577,
    "preview": "# CS170: Efficient Algorithms and Intractable Problems\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS61B, CS70\n- 编程语言:LaTeX\n- 课程"
  },
  {
    "path": "docs/数据结构与算法/CS61B.en.md",
    "chars": 2509,
    "preview": "# CS61B: Data Structures and Algorithms\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A\n- Programming"
  },
  {
    "path": "docs/数据结构与算法/CS61B.md",
    "chars": 1305,
    "preview": "# CS61B: Data Structures and Algorithms\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS61A\n- 编程语言:Java\n- 课程难度:🌟🌟🌟\n- 预计学时:60 小时\n\n伯"
  },
  {
    "path": "docs/机器学习/CS189.en.md",
    "chars": 673,
    "preview": "# CS189: Introduction to Machine Learning\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS188, CS70\n- Pro"
  },
  {
    "path": "docs/机器学习/CS189.md",
    "chars": 443,
    "preview": "# CS189: Introduction to Machine Learning\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS188, CS70\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟\n- 预计"
  },
  {
    "path": "docs/机器学习/CS229.en.md",
    "chars": 1147,
    "preview": "# CS229: Machine Learning\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisite requirements: Advanced Mathematics, Pr"
  },
  {
    "path": "docs/机器学习/CS229.md",
    "chars": 492,
    "preview": "# CS229: Machine Learning\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:高数,概率论,Python,需要较深厚的数学功底\n- 编程语言:无\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:100 小时\n\n"
  },
  {
    "path": "docs/机器学习/ML.en.md",
    "chars": 2123,
    "preview": "# Coursera: Machine Learning\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: entry level of AI and proficient "
  },
  {
    "path": "docs/机器学习/ML.md",
    "chars": 840,
    "preview": "# Coursera: Machine Learning\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:AI 入门 + 熟练使用 Python\n- 编程语言:Python\n- 课程难度:🌟🌟🌟\n- 预计学时:100 小时"
  },
  {
    "path": "docs/机器学习系统/AICS.en.md",
    "chars": 3350,
    "preview": "# Intelligent Computing Systems\n\n## Course Overview\n\n- University: University of Chinese Academy of Sciences\n- Prerequis"
  },
  {
    "path": "docs/机器学习系统/AICS.md",
    "chars": 1712,
    "preview": "# 智能计算系统\n\n## 课程简介\n\n- 所属大学:中国科学院大学\n- 先修要求:体系结构,深度学习\n- 编程语言:Python, C++, BCL\n- 课程难度:🌟🌟🌟\n- 预计学时:100 小时+\n\n智能计算系统是智能的核心物质载体,每"
  },
  {
    "path": "docs/机器学习系统/CMU10-414.en.md",
    "chars": 2153,
    "preview": "# CMU 10-414/714: Deep Learning Systems\n\n## Course Overview\n\n- University: Carnegie Mellon University (CMU)\n- Prerequisi"
  },
  {
    "path": "docs/机器学习系统/CMU10-414.md",
    "chars": 1392,
    "preview": "# CMU 10-414/714: Deep Learning Systems\n\n## 课程简介\n\n- 所属大学:CMU\n- 先修要求:系统入门(eg.15-213)、深度学习入门、基本的数学知识\n- 编程语言:Python, C++\n- "
  },
  {
    "path": "docs/机器学习系统/CSE234.en.md",
    "chars": 5204,
    "preview": "# CSE234: Data Systems for Machine Learning\n\n## Course Overview\n\n- University: UCSD  \n- Prerequisites: Linear Algebra, D"
  },
  {
    "path": "docs/机器学习系统/CSE234.md",
    "chars": 2483,
    "preview": "# CSE234: Data Systems for Machine Learning\n\n\n## 课程简介\n\n- 所属大学:UCSD\n- 先修要求:线性代数,深度学习,操作系统,计算机网络,分布式系统\n- 编程语言:Python, Trit"
  },
  {
    "path": "docs/机器学习系统/EML.en.md",
    "chars": 2531,
    "preview": "# MIT6.5940: TinyML and Efficient Deep Learning Computing\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Computer "
  },
  {
    "path": "docs/机器学习系统/EML.md",
    "chars": 1123,
    "preview": "# MIT6.5940: TinyML and Efficient Deep Learning Computing\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:体系结构、深度学习基础、\n- 编程语言:Python\n- 课程难度:"
  },
  {
    "path": "docs/机器学习系统/MLC.en.md",
    "chars": 1866,
    "preview": "# Machine Learning Compilation\n\n## Course Overview\n\n- University: Online course\n- Prerequisites: Foundations in Machine "
  },
  {
    "path": "docs/机器学习系统/MLC.md",
    "chars": 1048,
    "preview": "# Machine Learning Compilation\n\n## 课程简介\n\n- 所属大学:Bilibili 大学\n- 先修要求:机器学习/深度学习基础\n- 编程语言:Python\n- 课程难度:🌟🌟🌟\n- 预计学时:30小时\n\n<!-"
  },
  {
    "path": "docs/机器学习进阶/CMU10-708.en.md",
    "chars": 1141,
    "preview": "# CMU 10-708: Probabilistic Graphical Models\n\n## Course Introduction\n\n- **University**: Carnegie Mellon University (CMU)"
  },
  {
    "path": "docs/机器学习进阶/CMU10-708.md",
    "chars": 341,
    "preview": "# CMU 10-708: Probabilistic Graphical Models\n\n## 课程简介\n\n- 所属大学:CMU\n- 先修要求:Machine Learning, Deep Learning, Reinforcement "
  },
  {
    "path": "docs/机器学习进阶/CS229M.en.md",
    "chars": 1002,
    "preview": "# STATS214 / CS229M: Machine Learning Theory\n\n## Course Introduction\n\n- **University**: Stanford\n- **Prerequisites**: Ma"
  },
  {
    "path": "docs/机器学习进阶/CS229M.md",
    "chars": 244,
    "preview": "# STATS214 / CS229M: Machine Learning Theory\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:Machine Learning, Deep Learning, Statistic"
  },
  {
    "path": "docs/机器学习进阶/STA4273.en.md",
    "chars": 1250,
    "preview": "# STA 4273 Winter 2021: Minimizing Expectations\n\n## Course Introduction\n\n- **University**: University of Toronto\n- **Pre"
  },
  {
    "path": "docs/机器学习进阶/STA4273.md",
    "chars": 331,
    "preview": "# STA 4273 Winter 2021: Minimizing Expectations\n\n## 课程简介\n\n- 所属大学:U Toronto\n- 先修要求:Bayesian Inference, Reinforcement Lear"
  },
  {
    "path": "docs/机器学习进阶/STAT8201.en.md",
    "chars": 1429,
    "preview": "# Columbia STAT 8201: Deep Generative Models\n\n## Course Introduction\n\n- **University**: Columbia University\n- **Prerequi"
  },
  {
    "path": "docs/机器学习进阶/STAT8201.md",
    "chars": 333,
    "preview": "# Columbia STAT 8201: Deep Generative Models\n\n## 课程简介\n\n- 所属大学:Columbia University\n- 先修要求:Machine Learning, Deep Learning"
  },
  {
    "path": "docs/机器学习进阶/roadmap.en.md",
    "chars": 3290,
    "preview": "# Advanced Machine Learning Roadmap\n\nThis learning path is suitable for students who have already learned the basics of "
  },
  {
    "path": "docs/机器学习进阶/roadmap.md",
    "chars": 2214,
    "preview": "# 机器学习进阶学习路线\n\n此路线图适用于已经学过了基础机器学习 (ML, NLP, CV, RL) 的同学 (高年级本科生或低年级研究生),已经发表过至少一篇顶会论文 (NeurIPS, ICML, ICLR, ACL, EMNLP, N"
  },
  {
    "path": "docs/深度学习/CMU11-785.en.md",
    "chars": 1192,
    "preview": "# CMU 11-785: Introduction to Deep Learning\n\n## Descriptions\n\n- Offered by: CMU\n- Prerequisites: Linear Algebra, Probabi"
  },
  {
    "path": "docs/深度学习/CMU11-785.md",
    "chars": 573,
    "preview": "# CMU 11-785: Introduction to Deep Learning\n\n## 课程简介\n\n- 所属大学:CMU\n- 先修要求:线性代数、概率论、Python 编程、机器学习基础\n- 编程语言:Python\n- 课程难度:🌟"
  },
  {
    "path": "docs/深度学习/CS224n.en.md",
    "chars": 1408,
    "preview": "# CS224n: Natural Language Processing\n\n## Course Overview\n\n- University:Stanford\n- Prerequisites:Fundations of Deep Lear"
  },
  {
    "path": "docs/深度学习/CS224n.md",
    "chars": 698,
    "preview": "# CS224n: Natural Language Processing\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:深度学习基础 + Python\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:"
  },
  {
    "path": "docs/深度学习/CS224w.en.md",
    "chars": 776,
    "preview": "# CS224w: Machine Learning with Graphs\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: fundamental machine lea"
  },
  {
    "path": "docs/深度学习/CS224w.md",
    "chars": 423,
    "preview": "# CS224w: Machine Learning with Graphs\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:深度学习基础 + Python\n- 编程语言:Python, LaTeX\n- 课程难度:🌟🌟🌟🌟"
  },
  {
    "path": "docs/深度学习/CS230.en.md",
    "chars": 1077,
    "preview": "# Coursera: Deep Learning\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: fundamental machine learning + Pytho"
  },
  {
    "path": "docs/深度学习/CS230.md",
    "chars": 529,
    "preview": "# Coursera: Deep Learning\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:机器学习基础 + Python\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:80 小时\n\n吴恩达在 "
  },
  {
    "path": "docs/深度学习/CS231.en.md",
    "chars": 891,
    "preview": "# CS231n: CNN for Visual Recognition\n\n## Course Introduction\n\n- Affiliated Universities:Stanford\n- Prerequisites: Founda"
  },
  {
    "path": "docs/深度学习/CS231.md",
    "chars": 521,
    "preview": "# CS231n: CNN for Visual Recognition\n\n## 课程简介\n\n- 所属大学:Stanford\n- 先修要求:机器学习基础\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:80 小时\n\nSta"
  },
  {
    "path": "docs/深度学习/CS285.en.md",
    "chars": 1991,
    "preview": "# CS285: Deep Reinforcement Learning\n\n## Course Overview\n\n- University:UC Berkeley\n- Prerequisites:CS188, CS189\n- Progra"
  },
  {
    "path": "docs/深度学习/CS285.md",
    "chars": 838,
    "preview": "# CS285: Deep Reinforcement Learning\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS188, CS189\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:8"
  },
  {
    "path": "docs/深度学习/EECS498-007.en.md",
    "chars": 4312,
    "preview": "# UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision\n\n## Course Introduction\n\n- Offered by: UMich\n- Prerequ"
  },
  {
    "path": "docs/深度学习/EECS498-007.md",
    "chars": 2037,
    "preview": "# UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision\n\n## 课程简介\n\n- 所属大学:UMich\n- 先修要求:Python基础,矩阵论(熟悉矩阵求导即可),微"
  },
  {
    "path": "docs/深度学习/LHY.en.md",
    "chars": 2215,
    "preview": "# National Taiwan University: Machine Learning by Hung-yi Lee\n\n## Course Overview\n\n- University: National Taiwan Univers"
  },
  {
    "path": "docs/深度学习/LHY.md",
    "chars": 1185,
    "preview": "# 国立台湾大学:李宏毅机器学习\n\n## 课程简介\n\n- 所属大学:國立台灣大學\n- 先修要求:熟练掌握 Python\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:80 小时\n\n李宏毅老师是国立台湾大学的教授,其风趣幽"
  },
  {
    "path": "docs/深度学习/MIT6-7960.en.md",
    "chars": 1001,
    "preview": "# MIT 6.7960: Deep Learning\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Linear Algebra, Probability/Statistics,"
  },
  {
    "path": "docs/深度学习/MIT6-7960.md",
    "chars": 483,
    "preview": "# MIT 6.7960: Deep Learning\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:线性代数、概率统计、机器学习基础\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:90 小时\n\nMIT 6.7"
  },
  {
    "path": "docs/深度学习/NYU-DLSP21.en.md",
    "chars": 989,
    "preview": "# NYU DLSP21: NYU Deep Learning Spring 2021\n\n## Descriptions\n\n- Offered by: NYU\n- Prerequisites: Linear Algebra, Probabi"
  },
  {
    "path": "docs/深度学习/NYU-DLSP21.md",
    "chars": 448,
    "preview": "# NYU DLSP21: NYU Deep Learning Spring 2021\n\n## 课程简介\n\n- 所属大学:NYU\n- 先修要求:线性代数、概率论、Python 编程\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟\n- 预"
  },
  {
    "path": "docs/深度生成模型/MIT6.S184.en.md",
    "chars": 1240,
    "preview": "# MIT6.S184: Generative AI with Stochastic Differential Equations\n\n## Course Introduction\n\n- University: MIT  \n- Prerequ"
  },
  {
    "path": "docs/深度生成模型/MIT6.S184.md",
    "chars": 609,
    "preview": "# MIT6.S184: Generative AI with Stochastic Differential Equations\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:Basic understanding of dee"
  },
  {
    "path": "docs/深度生成模型/roadmap.en.md",
    "chars": 5416,
    "preview": "# Deep Generative Models Roadmap\n\nIn recent years, large language models (LLMs) have become a hot topic, which is also h"
  },
  {
    "path": "docs/深度生成模型/roadmap.md",
    "chars": 2491,
    "preview": "# 深度生成模型学习路线\n\n近几年大语言模型成为大热的方向,也和笔者博士期间的课题非常相关。这篇路线图旨在分享笔者在熟悉和深入深度生成模型这一领域过程中学习和参考的各类课程资料,方便相关领域的从业者或者对生成模型的底层原理感兴趣的朋友共同学"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-667.en.md",
    "chars": 2319,
    "preview": "# CMU11-667: Large Language Models: Methods and Applications\n\n## Course Overview\n\n- University: Carnegie Mellon Universi"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-667.md",
    "chars": 832,
    "preview": "# CMU11-667: Large Language Models: Methods and Applications\n\n## 课程简介\n\n- 所属大学:Carnegie Mellon University\n- 先修要求:具备机器学习基础"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-711.en.md",
    "chars": 2224,
    "preview": "# CMU 11-711: Advanced Natural Language Processing (ANLP)\n\n## Course Overview\n\n* University: Carnegie Mellon University "
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-711.md",
    "chars": 937,
    "preview": "# CMU 11-711: Advanced Natural Language Processing (ANLP)\n\n## 课程简介\n\n* 所属大学:Carnegie Mellon University\n* 先修要求:无硬性先修要求,但需具"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-868.en.md",
    "chars": 3002,
    "preview": "# CMU 11-868: Large Language Model Systems\n\n## Course Overview\n\n- University: Carnegie Mellon University  \n- Prerequisit"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-868.md",
    "chars": 1419,
    "preview": "# CMU 11-868: Large Language Model Systems\n\n## 课程简介\n\n- 所属大学:Carnegie Mellon University\n- 先修要求:强烈建议已修读 Deep Learning (117"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU15-779.en.md",
    "chars": 2751,
    "preview": "# CMU 15-779: Advanced Topics in Machine Learning Systems (LLM Edition)\n\n## Course Overview\n\n- University: Carnegie Mell"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU15-779.md",
    "chars": 1470,
    "preview": "# CMU 15-779: Advanced Topics in Machine Learning Systems (LLM Edition)\n\n## 课程简介\n\n- 所属大学:Carnegie Mellon University\n- 先修"
  },
  {
    "path": "docs/电子基础/EE16.en.md",
    "chars": 1292,
    "preview": "# UCB EE16A&B: Designing Information Devices and Systems I&II\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisite"
  },
  {
    "path": "docs/电子基础/EE16.md",
    "chars": 522,
    "preview": "# UCB EE16A&B: Designing Information Devices and Systems I&II\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:无\n- 编程语言:Python\n- 课程难度"
  },
  {
    "path": "docs/电子基础/Signals_and_Systems_AVO.en.md",
    "chars": 620,
    "preview": "# MIT 6.007 Signals and Systems\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Calculus, Linear Algebra\n- Programm"
  },
  {
    "path": "docs/电子基础/Signals_and_Systems_AVO.md",
    "chars": 475,
    "preview": "# MIT 6.007 Signals and Systems\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:Calculus, Linear Algebra\n- 编程语言:Matlab Preferred\n- 课程难度:🌟🌟\n-"
  },
  {
    "path": "docs/电子基础/signal.en.md",
    "chars": 1143,
    "preview": "# UCB EE120: Signal and Systems\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS70, Calculus, Line"
  },
  {
    "path": "docs/电子基础/signal.md",
    "chars": 561,
    "preview": "# UCB EE120: Signal and Systems\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS61A, CS70,微积分,线性代数\n- 编程语言:Python\n- 课程难度:🌟🌟🌟🌟🌟\n- 预计"
  },
  {
    "path": "docs/系统安全/CS161.en.md",
    "chars": 1367,
    "preview": "# UCB CS161: Computer Security\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS61B, CS61C\n- Progra"
  },
  {
    "path": "docs/系统安全/CS161.md",
    "chars": 846,
    "preview": "# UCB CS161: Computer Security\n\n## 课程简介\n\n- 所属大学:UC Berkeley\n- 先修要求:CS61A, CS61B, CS61C\n- 编程语言:C, Go\n- 课程难度:🌟🌟🌟🌟🌟\n- 预计学时:"
  },
  {
    "path": "docs/系统安全/CSE365.en.md",
    "chars": 1709,
    "preview": "# ASU CSE365: Introduction to Cybersecurity\n\n## Descriptions\n\n- Offered by: Arizona State University\n- Prerequisites: No"
  },
  {
    "path": "docs/系统安全/CSE365.md",
    "chars": 1074,
    "preview": "# ASU CSE365: Introduction to Cybersecurity\n\n## 课程简介\n\n- 所属大学:Arizona State University\n- 先修要求:无\n- 编程语言:C, Python, x86 ass"
  },
  {
    "path": "docs/系统安全/CSE466.en.md",
    "chars": 1953,
    "preview": "# ASU CSE466: Computer Systems Security\n\n## Descriptions\n\n- Offered by: Arizona State University\n- Prerequisites: None\n-"
  },
  {
    "path": "docs/系统安全/CSE466.md",
    "chars": 1179,
    "preview": "# ASU CSE466: Computer Systems Security\n\n## 课程简介\n\n- 所属大学:Arizona State University\n- 先修要求:无\n- 编程语言:C, Python, x86 assembl"
  },
  {
    "path": "docs/系统安全/MIT6.1600.en.md",
    "chars": 2238,
    "preview": "# MIT6.1600: Foundations of Computer Security\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: discrete mathematics,"
  },
  {
    "path": "docs/系统安全/MIT6.1600.md",
    "chars": 896,
    "preview": "# MIT6.1600: Foundations of Computer Security\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:离散数学,编程基础,计算机系统基础\n- 编程语言:Python3\n- 课程难度:🌟🌟🌟\n- "
  },
  {
    "path": "docs/系统安全/MIT6.858.en.md",
    "chars": 2055,
    "preview": "# MIT 6.858: Computer System Security\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Computer Architecture, basic "
  },
  {
    "path": "docs/系统安全/MIT6.858.md",
    "chars": 1138,
    "preview": "# MIT 6.858: Computer System Security\n\n## 课程简介\n\n- 所属大学:MIT\n- 先修要求:计算机体系结构,对计算机系统有初步了解\n- 编程语言:C, Python\n- 课程难度:🌟🌟🌟🌟🌟\n- 预计"
  },
  {
    "path": "docs/系统安全/SEEDLabs.en.md",
    "chars": 2081,
    "preview": "# SEEDLabs\n\n## Descriptions\n\n- Offered by: Syracuse University\n- Prerequisites: None\n- Programming Languages: C, x86 ass"
  },
  {
    "path": "docs/系统安全/SEEDLabs.md",
    "chars": 1090,
    "preview": "# SEEDLabs\n\n## 课程简介\n\n- 所属大学:雪城大学\n- 先修要求:无\n- 编程语言:C,汇编\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:150 小时\n\n雪城大学的网安课程,由 NSF 提供130万美元的资金支持,为网安教育开发了动"
  },
  {
    "path": "docs/编程入门/C/CS50.en.md",
    "chars": 1379,
    "preview": "# CS50: This is CS50x\n\n## Descriptions\n\n- Offered by: Harvard\n- Prerequisites: None\n- Programming Languages: C, Python, "
  },
  {
    "path": "docs/编程入门/C/CS50.md",
    "chars": 827,
    "preview": "# CS50: This is CS50x\n\n## 课程简介\n\n- 所属大学:Harvard\n- 先修要求:无\n- 编程语言:C, Python, SQL, HTML, CSS, JavaScript\n- 课程难度:🌟🌟\n- 预计学时:20"
  },
  {
    "path": "docs/编程入门/C/Duke-Coursera-Intro-C.en.md",
    "chars": 1587,
    "preview": "# Introductory C Programming Specialization\n\n## Descriptions\n\n- Offered by: Duke\n- Prerequisites: None\n- Programming Lan"
  },
  {
    "path": "docs/编程入门/C/Duke-Coursera-Intro-C.md",
    "chars": 720,
    "preview": "# Introductory C Programming Specialization\n\n## 课程简介\n\n- 所属大学:Duke\n- 先修要求:无\n- 编程语言:C\n- 课程难度:🌟🌟🌟🌟\n- 预计学时:110 小时\n\n非常好的课程,自我"
  },
  {
    "path": "docs/编程入门/DeCal.en.md",
    "chars": 2221,
    "preview": "# UCB: Sysadmin DeCal\n\n## Course Introduction\n\n- Offered by: UCB\n- Prerequisites: None\n- Programming Language: Shell\n- D"
  },
  {
    "path": "docs/编程入门/DeCal.md",
    "chars": 967,
    "preview": "# UCB: Sysadmin DeCal\n\n## 课程简介\n\n- 所属大学:UCB\n- 先修要求:无\n- 编程语言:shell\n- 课程难度:🌟🌟🌟\n- 预计学时:20小时\n\n来自 UCB 的一门讲解 Linux 的入门课程,比起定位相同"
  },
  {
    "path": "docs/编程入门/Functional/CS3110.en.md",
    "chars": 2694,
    "preview": "# CS3110:OCaml Programming Correct + Efficient + Beautiful\n\n## Descriptions\n\n- Offered by: Cornell University\n- Prerequi"
  },
  {
    "path": "docs/编程入门/Functional/CS3110.md",
    "chars": 1187,
    "preview": "# CS3110:OCaml Programming Correct + Efficient + Beautiful\n\n## 课程简介\n\n- 所属大学:Cornell\n- 先修要求:了解一门命令式编程语言,类C语言\n- 编程语言:OCaml"
  }
]

// ... and 79 more files (download for full content)

About this extraction

This page contains the full source code of the PKUFlyingPig/cs-self-learning GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 279 files (555.1 KB), approximately 193.3k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!