102 Commits

Author SHA1 Message Date
Yinmin Zhong
629016ffb7 [RELEASE] Release v1.1.0 (#546) 2023-12-16 12:27:59 +08:00
Yinmin Zhong
efa0ee2791 [RELEASE] Release English version (#545) 2023-12-16 12:21:58 +08:00
Yinmin Zhong
af9526f8c2 [Translation] Finish all the remaining translation (#544)
* GFW translation

* translate usage

* [FIX] Fix giscus plugin (#543)

* [Translate] translate CS188/Docker/GUN_Make (#540)

* complete eng_version for deep learning folder

* fix typo

* add english version for machine learning systems

* Update AICS.en.md

Adjust indentation

* [ADD]add translation for CS188

* [ADD]add translation for Docker

* [UPDATE]update file name

* [ADD]add translation for GNU_Make

* [FIX]fix typo

* [FIX]fix spacing error

* translate github

* translate thesis writing

* translate tools

* translate NJUOS

* translate CS122

* translate CS346

* translate 15799

* translate CS148

* translate games101

* translate games202

* translate games103

* translate advanced ML

* translate CS plan

* nits

* translate scoop

* translate CA

* translate information retrieval

* translate Decal && AUT

* translate workflow

---------

Co-authored-by: nzomi <jly14@tsinghua.org.cn>
2023-12-16 12:15:13 +08:00
nzomi
f5ef84aaf3 [Translate] translate CS188/Docker/GUN_Make (#540)
* complete eng_version for deep learning folder

* fix typo

* add english version for machine learning systems

* Update AICS.en.md

Adjust indentation

* [ADD]add translation for CS188

* [ADD]add translation for Docker

* [UPDATE]update file name

* [ADD]add translation for GNU_Make

* [FIX]fix typo

* [FIX]fix spacing error
2023-12-15 13:45:13 +08:00
Yinmin Zhong
905592de9b [FIX] Fix giscus plugin (#543) 2023-12-15 13:41:56 +08:00
Yinmin Zhong
1f4cdd486b [UPDATE] Update dependencies && fix English navigations (#541) 2023-12-14 22:21:11 +08:00
nzomi
540131ba71 [TRANSLATE] translate AICS/CMU10-414/MLC/CS224n/CS285 and LHY (#528)
* complete eng_version for deep learning folder

* fix typo

* add english version for machine learning systems

* Update AICS.en.md

Adjust indentation
2023-12-14 13:03:37 +08:00
Yi Sun
2b5f6a0f38 [FIX] Fix course name (#533) 2023-11-25 00:11:03 +08:00
Qi Zhan
cb391bb818 [FIX] Fix English PL title bug (#532) 2023-11-21 12:41:32 +08:00
SamBillon
fa10c12787 [FIX] Fix blog link for MIT 6.S081 (#531)
* Update MIT6.S081.md

修改 Xiao Fan blog 链接

* Update MIT6.S081.en.md
2023-11-20 17:51:31 +08:00
Qi Zhan
14b2b931c8 [REFACTOR] Refactor the organization for software analysis course (#522) 2023-10-12 20:26:42 -05:00
Qi Zhan
3673c718ac [COURSE] Add PKU Software Analysis (#520) 2023-10-12 15:42:40 +08:00
Duplicate4
c8747e787e [FIX] Fix course link for NJU OS (#519)
Signed-off-by: Dup4 <lyuzhi.pan@gmail.com>
2023-10-11 14:13:03 +08:00
Qian (Stella) Xu
8892f21309 [FIX] Fix text book link for CS61A (#516)
* Update CS61A.en.md

Update the URL to text book. The original link no longer word or me.

* [FIX] Fix text book link for CS61A
2023-10-11 06:43:34 +08:00
Qi Zhan
6b3482e52c [COURSE] Add KAIST CS431: Concurrent Programming (#514) 2023-10-03 11:39:07 -04:00
Guo Jiaming
c14dde8d9e [COURSE] Add Syracuse University SEEDLabs (#510)
* Add Syracuse University SEEDLabs

* Update CS学习规划.md
2023-09-27 20:37:34 -04:00
YikunHan
658251460d [TRANSLATE] translate course CS224W (#501) 2023-09-01 15:43:37 +08:00
gogo
85ab88308b [FIX] fix search language error in mkdocs.yml (#502)
* fix search language error

* add search language english

* fix search language error
2023-09-01 15:42:12 +08:00
Qi Zhan
7fb7acb200 [COURSE] Add NJU Software Analysis (#495) 2023-08-19 14:56:38 +08:00
Qi Zhan
775f7e49cf [COURSE] Add Stanford CS242 (#493)
* add cs242

* 增加cs242英文,修改位置

* 删除了标题中多余的课程名称

* 修改英文版语病
2023-08-17 19:29:11 +08:00
Yinmin Zhong
3aaecaed30 [FIX] Update sponsor QR code image (#492) 2023-08-16 00:02:02 +08:00
featherwit001
c49f7f9dd7 [COURSE] Add CS3110 Cornell University (#490)
* [COURSE] Add CS3110 Cornell University

* [COURSE] Add CS3110 Cornell University modify format
2023-08-15 21:32:02 +08:00
Yinmin Zhong
ba9520c5b7 [FIX] fix format error in mkdocs.yml (#487) 2023-08-08 22:57:12 +08:00
Yuchen Mu
e8e413fcf3 [COURSE] Add UCB-Sysadmin-DeCal (#484)
* Add 2 course

* fix my commit

* Some simple fix

* rename CA.md

* Add Course UCB's DeCal

* add UCB-Sysadmin-DeCal
2023-08-08 22:51:01 +08:00
Yinmin Zhong
ffeb410da0 [SPONSOR] Add QR code for sponsor (#486)
* add wx/zfb

* update fig
2023-08-02 18:49:34 +08:00
Errant
4db8ddd921 [FIX] Update status for MIT-Missing-Semester Chinese subtitle video (#480) 2023-07-05 19:23:35 +08:00
Xu
7318286e51 [UPDATE] Enhancements to CMU 15-445: Incorporating Latest Spring 2023 Content & Relevant Resource and Improved Overall Formatting (#478)
* feat: Update CMU 15-445, improve overall format & update course relevant contents

* feat: Update English version & Improve overall format

* feat: Improve overall format
2023-07-04 11:49:48 +08:00
Xu
8262d0fe64 [COURSE] Add UMich EECS 498-007: Deep Learning for Computer Vision (#476)
* feat: Add UMich EECS498-007: Deep Learning for Computer Vision

* feat: Improve overall format

* feat: Add English version for EECS498-007
2023-07-03 23:15:16 +08:00
Yuchen Mu
c36feaca99 [COURSE] Add ETH Computer Architecture Course (#468)
* Add 2 course

* fix my commit

* Some simple fix

* rename CA.md
2023-06-30 17:32:59 +08:00
Herry Patel
6de885e047 [TRANSLATE] translate course CS231 (#475) 2023-06-29 10:24:52 +08:00
Lingkang
1f5da35850 [FIX] fix zlibrary link (#474) 2023-06-28 13:13:59 +08:00
Andy
0c8f25ac8c [CONFIG] Add footnotes markdown extension (#471) 2023-06-18 12:30:02 +08:00
Yanshi XU
5ece872757 [RELEASE] Update release version in home page (#472)
更新主页中的 Release 版本
2023-06-18 12:27:53 +08:00
MContour
e4c3efd2d3 [ENHANCE] Add additional resources for CS110L (#463) 2023-06-12 20:45:11 +08:00
Asensia
c2ab954368 [COURSE] Add UW–Madison CS571 for Web/Mobile Development (#464)
* add CS571 (Web)

* edit

* elaborate

* format & elaborate & add entry

* react.dev link in eng

* add UX
2023-06-08 18:41:56 +08:00
Na Chen
039a0f9b63 [COURSE] Add HIT OS Course (#461)
* [COURSE] Add HIT OS

* minor and update translation
2023-05-30 21:38:40 +08:00
ulic-youthlic
bb0dae6618 [ENHANCE] Add more tools in tools.md (#459) 2023-05-29 18:50:55 +08:00
ulic-youthlic
0e9e0f143c [ENHANCE] Add Chinese subtitles video group for The Missing Semester (#457) 2023-05-24 19:20:23 +08:00
flyingpig
e459a3abf5 [FIX] fix link to PKU OS course (#446) 2023-05-03 01:05:47 +08:00
Yanshi XU
0cb267247b [ENHANCE] Fix prerequisites of Data 100. (#442)
* Update Data100.md

Prerequisites
While we are working to make this class widely accessible we currently require the following (or equivalent) prerequisites:

Foundations of Data Science: Data 8 covers much of the material in Data 100 but at an introductory level. Data8 provides basic exposure to python programming and working with tabular data as well as visualization, statistics, and machine learning.

Computing: The Structure and Interpretation of Computer Programs CS 61A or Computational Structures in Data Science CS 88. These courses provide additional background in python programming (e.g., for loops, lambdas, debugging, and complexity) that will enable Data 100 to focus more on the concepts in Data Science and less on the details of programming in python.

Math: Linear Algebra (Math 54, EE 16A, or Stat 89A): We will need some basic concepts like linear operators and derivatives to enable statistical inference and derive new prediction algorithms. This may be satisfied concurrently to Data 100.

* Update Data100.en.md

Prerequisites
While we are working to make this class widely accessible we currently require the following (or equivalent) prerequisites:

Foundations of Data Science: Data 8 covers much of the material in Data 100 but at an introductory level. Data8 provides basic exposure to python programming and working with tabular data as well as visualization, statistics, and machine learning.

Computing: The Structure and Interpretation of Computer Programs CS 61A or Computational Structures in Data Science CS 88. These courses provide additional background in python programming (e.g., for loops, lambdas, debugging, and complexity) that will enable Data 100 to focus more on the concepts in Data Science and less on the details of programming in python.

Math: Linear Algebra (Math 54, EE 16A, or Stat 89A): We will need some basic concepts like linear operators and derivatives to enable statistical inference and derive new prediction algorithms. This may be satisfied concurrently to Data 100.

* Update Data100.en.md
2023-04-24 03:07:11 +08:00
ulic-youthlic
b9c2b4ca35 [ENHANCE] Add Chinese resources for MIT-Missing-Semester (#437) 2023-04-14 19:23:30 +08:00
Pavinberg
e83dda6987 [TOOLS] Recommendation for Emacs (#434)
* [TOOLS] Recommendation for Emacs

* [TOOLS] Add entry for Emacs

* [TRANSLATION] Emacs recommendation
2023-04-11 14:14:16 +08:00
Vollate
ad55ca142b [TOOLS] update vim tutor (#433) 2023-04-10 00:00:12 +08:00
Vollate
bcf34cbb19 [TOOLS] add draw.io (#432)
* add tool draw.io

* fix(punctuation marks error)
2023-04-07 20:37:08 +08:00
莫胜文
884e169f05 [VIM] make caps as ctrl & esc (#429)
language formatting
2023-04-04 16:16:01 +08:00
littlefattiger
e8154bf526 Update links for tow books, newer version (#428) 2023-04-03 09:44:23 +08:00
mancuoj
05020aa566 [UPDATE] Add link for CS61A textbook translation (#420)
暂时还没翻译完成,添加是希望能有更多小伙伴可以参与进来
2023-03-11 22:46:43 +08:00
mancuoj
a3d210c3a3 [UPDATE] Add personal resources for CS50 (#417) 2023-03-06 20:59:18 +08:00
zztaki
ae5126de3e [EDIT] Add MIT6.824 Chinese document (#415) 2023-03-02 23:00:18 +08:00
Echoo
46d3d537e1 [UPDATE]Add new course link for CS50 (#414)
* Updates the Course link to 2023

* Updates the course link to latest

* Updates the course link to latest
2023-03-02 22:59:01 +08:00
mancuoj
7a347e599a [FIX] fix format (#412) 2023-02-28 17:17:31 +08:00
Lee
d6cf088463 [FIX] fix format (#408) 2023-02-13 22:18:02 +08:00
Jax Young
ed15d52383 [UPDATE] Add 2022 fall course link for CMU 15-445 (#401) 2023-02-07 20:30:58 +08:00
Leo Xie
d3a237b172 [COURSE] Add CMU 15-799 (#396)
* Create 15799.md

* Update mkdocs.yml
2023-01-30 22:59:51 +08:00
Elijah Zhang
13c0b7e001 [FIX] Fix the cover image for Linear Algebra textbook (#394) 2023-01-29 22:45:35 +08:00
crud
71dcf414a4 [FIX] minor fix (#391) 2023-01-27 02:37:50 +08:00
Tony Zhang
2b59f44ebd [UPDATE] Add navigations for the newly added courses (#389) 2023-01-18 21:05:21 +08:00
smxm
a89fc1507f [TRANSLATION] translate CS229.md and add a missing translation in Vim.en.md (#384)
* Update Vim.en.md, added the missing translations

* [TRANSLATION] translate CS229.md

* add space

* Update CS229.en.md

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号

* 加句号
2023-01-18 11:31:23 +08:00
Tony Zhang
af82c1fe48 [COURSE] Harvard CS50P, MIT6.006, and MIT6.046 (#387)
* Typo fixed

* Add MIT 6.006

* Add MIT 6.006 (En)

* Add MIT 6.046

* Add MIT 6.046

* Add MIT 6.006 (en)

* Add MIT 6.006 (en)

* Add MIT 6.046 (en)

* Add Harvard CS50P

* Add Harvard CS50P

* Add Harvard CS50P(En)

* MIT Missing Semester timeline

* CS50P added

* Algorithms related courses added

* Space added
2023-01-18 11:29:28 +08:00
flyingpig
afa5d5a0a1 [Release] v1.0.1 (#382) 2023-01-08 00:23:17 +08:00
flyingpig
f3adbc38b3 [COURSE] Add system administration course (#381) 2023-01-07 23:53:47 +08:00
flyingpig
6ea9a7a5da [UPDATE] Update machine learning system course resources (#380)
* Add CMU dlsys course resources

* move AICS into mlsys section

* nits
2023-01-07 20:30:25 +08:00
Lingkang
2c4cc3a6b5 [TRANSLATE] Haskell MOOC (#376)
* create haskell-mooc.en.md

* translation done

* fix a typo in CN version

* translation done

* update

* fix typo
2023-01-04 22:50:52 +08:00
Lingkang
64934f642f [FIX] Fix Z-library Link & Add Its Tor Address (#378)
* update z-library link

* add tor link
2023-01-04 22:50:26 +08:00
FDUZS
35eab85983 [UPDATE] Add some LaTeX resources (#372)
* add some LaTeX resources

* resolve conversion
2023-01-03 11:18:22 +08:00
Lee
7f20ea01c1 [BOOKS] Add more information for Crafting Interpreters (#377) 2023-01-03 11:17:53 +08:00
QQ
d87ab836b9 [BOOKS] Add Crafting Interpreters for compiler principle (#373) 2023-01-02 23:03:00 +08:00
mancuoj
d678019357 [FIX] Fix giscus dark mode in new page (#371) 2022-12-28 23:46:29 +08:00
jihongyu
71049ff92c [FIX] Fix link in the N2T.md (#369) 2022-12-28 20:34:20 +08:00
Lee
0fbdaf37e2 [TOOLS] Add PlantUML (#368)
* add plantuml tool

* modify expression
2022-12-28 20:34:03 +08:00
showthesunli
6b0d175d80 [COURSE] Add Haskell MOOC (#367)
* Add Haskell MOOC (#356)

* follow Chinese copywriting guidelines
2022-12-27 19:00:04 +08:00
junyu33
855dd9f7ff [COURSE]: Add ASU web/system security courses CSE365&CSE466 (#366) 2022-12-26 17:37:16 +08:00
wuqi
9194c47455 [NEW] Information retrieval tutorial (#348)
* 添加信息检索

添加信息检索

* Update 信息检索.md

更新格式和部分文字
2022-12-23 11:22:49 +08:00
mancuoj
86ad554095 [FEATURE] Dynamic theme change for giscus (#362)
* feat(giscus): dynamic theme change

* reformat and update giscus theme color to protanopia
2022-12-21 20:26:13 +08:00
NoDocCat
e71d7badd8 [FIX] Fix scoop command error (#361) 2022-12-21 10:29:36 +08:00
烏丸千歲
0e229b7586 [COURSE] Add CMU 15-462(Computer Graphics) and fix link to zlib (#353)
* Add a course cmu 15-462

* [FIX]fix link to zlib

* [FIX]fix typo
2022-12-15 11:26:37 +08:00
HJ-Ranch
32b7ee3161 [UPDATE] update icons and tools (#352)
* [UPDATE] update icons

* [TOOLS] Add new tool websites

* [UPDATE] update tool websites
2022-12-14 23:13:34 +08:00
乐之叶
08aae35dd8 [UPDATE] Add CS 188 Fall 2022 (#349)
* [Course] Add CS 188 Fall 2022

* [Course] Add CS 188 Fall 2022
2022-12-06 15:29:58 +08:00
Koril33
0365e0c736 [TOOLS]: Add new tool websites (#346)
* [TOOLS]: Add new tool websites
2022-12-05 21:47:12 +08:00
Zeeland
d6c78902d1 [FIX] polish the example of IDE (#345) 2022-12-05 15:10:30 +08:00
Shaofeng
a8a2f26a69 [FIX] Add links in CS110L (#344) 2022-12-05 02:19:22 +08:00
Shaofeng
f8808df2ea [UPDATE] Add resources in CS110L (#343) 2022-12-05 01:41:29 +08:00
MoeMagicMango
dfb22efaff [BOOKS] add a book about computer network principle (#340)
* Update 好书推荐.md
2022-11-30 13:19:37 +08:00
ArtieLiu
365ca2265f [TOOLS] fix link to z-lib and add two new tools (#341) 2022-11-30 12:54:05 +08:00
XeLavend
52c7ce7ce1 [TRANSLATE] Translate Harvard's AI Course (#326)
* Create CS50.en.md

* Update the translation of CS50
2022-11-30 10:50:26 +08:00
ArtieLiu
36bb20bd5e [UPDATE] add key mapping in vim.md (#333) 2022-11-29 21:16:26 +08:00
shelton
260b2c5ad0 [FIX]: fix typo (#332) 2022-11-29 10:35:58 +08:00
xhldtc
a3c35fa662 [TRANSLATE] Translate Vim.md (#317)
* add Vim.en.md

* enhance Vim.en.md according to review comments
2022-11-21 19:24:48 +08:00
XeLavend
8c7de67e04 [TRANSLATE] Translate Stanford's Compiler Course (#315)
* Create CS143.en.md

* Improve the translation
2022-11-17 16:45:03 +08:00
莫思潋
3d0bd2eb0d [FIX] Replace an invalid link in CYJ.md (#313)
replace invalid link
2022-11-14 23:08:13 +08:00
seudonam
78c4b9e69d [FIX] fix typo in CS61A.md (#310) 2022-11-12 12:31:29 +08:00
zzwalala
54f07dfb7e [UPDATE] Update CS285.md (#309) 2022-11-11 15:34:44 +08:00
NeroHin
56b3e9c066 [FEAT]Update the textbook resource (#305)
* [FEAT]Update the textbook resource

* [FIX]:remove the redundant "[" and "]"
2022-11-05 14:08:13 +08:00
祝健聪
f05042c1fd [FIX] fix format for AUT1400.md (#304) 2022-11-04 23:56:40 +08:00
NoDocCat
62bf51517d [TOOLS] Add scoop article in tools (#302)
* [TOOLS] Add scoop article in tools

* [UPDATE] Add scoop link in environment configuration
2022-11-02 14:02:28 +08:00
smxm
319c1544e2 [TRANSLATION] translate 15445.md and fix a typo (#301)
* [TRANSLATION] translate 15445.md

* Update 15445.en.md
2022-11-01 02:06:45 +08:00
Darius Huang
01304508cc [ENHANCE] Added MIT6.S081 xv6 support resource (#291)
* added xv6 support resource

* fixed typo
2022-10-29 00:27:51 +08:00
Lee
b9cc133598 [COURSE] Add course CS346 && AUT1400 (#295)
* add course cs346

* add course AUT1400
2022-10-28 22:51:17 +08:00
YunShu
7ab5f4ee2c [FIX] fix a typo in tool (#294) 2022-10-28 17:15:51 +08:00
smxm
39f55c74ae [TRANSLATION] translate mitweb.md (#290)
* [TRANSLATION] translate mitweb.md

* Update mitweb.en.md
2022-10-26 00:55:55 +08:00
Erkai Yu
865cbc97a2 [TRANSLATION] translate CS230.md (#289) 2022-10-25 15:51:59 +08:00
Vacodwave
dac40922c3 [TOOLs] Add some practical tools (#288) 2022-10-25 10:53:05 +08:00
147 changed files with 3501 additions and 195 deletions

View File

@@ -22,9 +22,7 @@
我的目标是让一个刚刚接触计算机的小白,可以完全凭借这些开源社区的优质资源,少走弯路,在 2-3 年内成长为一个有扎实的数学功底和代码能力,经历过数十个千行代码量的 Project 的洗礼,掌握至少 C/C++/Java/JS/Python/Go/Rust 等主流语言对算法、电路、体系、网络、操统、编译、人工智能、机器学习、计算机视觉、自然语言处理、强化学习、密码学、信息论、博弈论、数值分析、统计学、分布式、数据库、图形学、Web 开发、云服务、超算等等方面均有所涉猎的全能程序员。此后,无论是选择科研还是就业,我相信你都会有相当的竞争力。
你可以[在线免费阅读这本书](https://csdiy.wiki)。
英文版请移步[这里](https://github.com/PKUFlyingPig/Self-learning-Computer-Science)。
你可以[在线免费阅读这本书](https://csdiy.wiki)。英文版请移步[这里](https://csdiy.wiki/en/)。
## 如何成为贡献者
@@ -32,7 +30,7 @@
对于中英混合排版的要点规范,可以参考[这个仓库](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](https://github.com/PKUFlyingPig/cs-self-learning/issues/222)。
同时由于个人水平有限,书中难免有笔误甚至概念错误之处,也请各位不吝赐教,在 issue 中提出来。

357
docs/CS学习规划.en.md Normal file
View File

@@ -0,0 +1,357 @@
# 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 MITs [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. MITs [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 Berkeleys 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 youre still eager for more, consider MITs [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 youre still not satisfied, MITs 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.
#### Shell
- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)
#### Python
- [CS50P: CS50's Introduction to Programming with Python](编程入门/CS50P.md)
- [Harvard CS50: This is CS50x](编程入门/CS50.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/CS61A.md)
#### C++
- [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/CS106L.md)
#### Rust
- [Stanford CS110L: Safety in Systems Programming](编程入门/CS110L.md)
#### OCaml
- [Cornell CS3110 textbook: Functional Programming in OCaml](https://cs3110.github.io/textbook/cover.html)
### 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](编程入门/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 Berkeleys [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 CMUs 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
> Theres 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 Berkeleys operating system course, uses the same Project as Stanford — an educational operating system, Pintos. As the teaching assistant for Peking Universitys 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)
#### Distributed Systems
[MIT 6.824: Distributed System](并行与分布式系统/MIT6.824.md)
### 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.
[ASU CSE365: Introduction to Cybersecurity](系统安全/CSE365.md) at Arizona State University focuses mainly on injections, assembly, and cryptography.
[ASU CSE466: Computer Systems Security](系统安全/CSE466.md) at Arizona State University covers a wide range of topics in system security. It has a high barrier to entry, requiring familiarity with Linux, C, and Python.
[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
> Theres 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 just looking to understand computer networks theoretically, I recommend the famous networking textbook "A Top-Down Approach" and its accompanying learning resources [Computer Networking: A Top-Down Approach](计算机网络/topdown.md).
### Database Systems
> Theres 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
> Theres 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 development is often overlooked in computer science curricula, but mastering these skills has many benefits, such as building your personal website or creating an impressive presentation website for your course projects.
#### Two-Week Crash Course
[MIT web development course](Web开发/mitweb.md)
#### Systematic Study Version
[Stanford CS142: Web Applications](Web开发/CS142.md)
### Computer Graphics
- [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).
### 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:
### 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)
## 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.

View File

@@ -10,7 +10,7 @@
学会提问:也许你会惊讶,提问也算计算机必备技能吗,还放在第一条?我觉得在开源社区中,学会提问是一项非常重要的能力,它包含两方面的事情。其一是会变相地培养你自主解决问题的能力,因为从形成问题、描述问题并发布、他人回答、最后再到理解回答这个周期是非常长的,如果遇到什么鸡毛蒜皮的事情都希望别人最好远程桌面手把手帮你完成,那计算机的世界基本与你无缘了。其二,如果真的经过尝试还无法解决,可以借助开源社区的帮助,但这时候如何通过简洁的文字让别人瞬间理解你的处境以及目的,就显得尤为重要。推荐阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)这篇文章,这不仅能提高你解决问题的概率和效率,也能让开源社区里无偿提供解答的人们拥有一个好心情。
[MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md) 这门课覆盖了这些工具中绝大部分,而且有相当详细的使用指导,强烈建议小白学习。
[MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md) 这门课覆盖了这些工具中绝大部分,而且有相当详细的使用指导,强烈建议小白学习。不过需要注意的一点是,在课程中会不时提到一些与开发流程相关的术语。因此推荐至少在学完计算机导论级别的课程之后进行学习。
[翻墙](必学工具/翻墙.md)由于一些众所周知的原因谷歌、GitHub 等网站在大陆无法访问。然而很多时候,谷歌和 StackOverflow 可以解决你在开发过程中遇到的 99% 的问题。因此,学会翻墙几乎是一个内地 CSer 的必备技能。(考虑到法律问题,这个文档提供的翻墙方式仅对拥有北大邮箱的用户适用)。
@@ -20,6 +20,8 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
[Vim](必学工具/Vim.md):一款命令行编辑工具。这是一个学习曲线有些陡峭的编辑器,不过学会它我觉得是非常有必要的,因为它将极大地提高你的开发效率。现在绝大多数 IDE 也都支持 Vim 插件让你在享受现代开发环境的同时保留极客的炫酷yue
[Emacs](必学工具/Emacs.md):与 Vim 齐名的经典编辑器,同样具有极高的开发效率,同时具有更为强大的扩展性,它既可以配置为一个轻量编辑器,也可以扩展成一个个人定制的 IDE甚至可以有更多奇技淫巧。
[Git](必学工具/Git.md)一款代码版本控制工具。Git的学习曲线可能更为陡峭但出自 Linux 之父 Linus 之手的 Git 绝对是每个学 CS 的童鞋必须掌握的神器之一。
[GitHub](必学工具/GitHub.md):基于 Git 的代码托管平台。全世界最大的代码开源社区,大佬集聚地。
@@ -50,7 +52,7 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
### PC 端环境配置
如果你是 Mac 用户,那么你很幸运,这份[指南](https://sourabhbajaj.com/mac-setup/) 将会手把手地带你搭建起整套开发环境。如果你是 Windows 用户,可以参考这个相对简略的[教程](https://github.com/orlp/dev-on-windows/wiki)。
如果你是 Mac 用户,那么你很幸运,这份[指南](https://sourabhbajaj.com/mac-setup/) 将会手把手地带你搭建起整套开发环境。如果你是 Windows 用户,在开源社区的努力下,你同样可以获得与其他平台类似的体验:[Scoop](必学工具/Scoop.md)。
另外大家可以参考一份灵感来自 [6.NULL MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md) 的 [环境配置指南][guide],重点在于终端的美化配置。此外还包括常用软件源(如 GitHub, Anaconda, PyPI 等)的加速与替换以及一些 IDE 的配置与激活教程。
@@ -58,7 +60,9 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
### 服务器端环境配置
推荐一个非常不错的 GitHub 项目 [DevOps-Guide](https://github.com/Tikam02/DevOps-Guide),其中涵盖了非常多的运维方面的基础知识和教程,例如 Docker, Kubernetes, Linux, CI-CD, GitHub Actions 等等
服务器端的运维需要掌握 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 等等。
## 课程地图
@@ -143,6 +147,7 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
#### Python
- [CS50P: CS50's Introduction to Programming with Python](编程入门/CS50P.md)
- [Harvard CS50: This is CS50x](编程入门/CS50.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/CS61A.md)
@@ -177,7 +182,11 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
### 数据结构与算法
算法是计算机科学的核心,也是几乎一切专业课程的基础。如何将实际问题通过数学抽象转化为算法问题,并选用合适的数据结构在时间和内存大小的限制下将其解决是算法课的永恒主题。如果你受够了老师的照本宣科,那么我强烈推荐伯克利的 [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) 和普林斯顿的 [Coursera: Algorithms I & II](数据结构与算法/Algo.md),这两门课的都讲得深入浅出并且会有丰富且有趣的编程实验将理论与知识结合起来。此外,对一些更高级的算法以及 NP 问题感兴趣的同学可以学习伯克利的算法设计与分析课程 [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md)。
算法是计算机科学的核心,也是几乎一切专业课程的基础。如何将实际问题通过数学抽象转化为算法问题,并选用合适的数据结构在时间和内存大小的限制下将其解决是算法课的永恒主题。如果你受够了老师的照本宣科,那么我强烈推荐伯克利的 [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) 和普林斯顿的 [Coursera: Algorithms I & II](数据结构与算法/Algo.md),这两门课的都讲得深入浅出并且会有丰富且有趣的编程实验将理论与知识结合起来。
以上两门课程都是基于 Java 语言,如果你想学习 C/C++ 描述的版本,可以参考斯坦福的数据结构与基础算法课程 [Stanford CS106B/X: Programming Abstractions](编程入门/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)。
### 软件工程
@@ -215,10 +224,12 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
[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年春季学期操作系统实验班的助教引入并改善了这个 Project课程资源也会全部开源具体参见[课程网站](https://https://pku-os.github.io/sp22/)。
[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 讲座里最常听到的话就是“摩尔定律正在走向终结”,此话不假,当单核能力达到上限时,多核乃至众核架构如日中天。硬件的变化带来的是上层编程逻辑的适应与改变,要想充分利用硬件性能,编写并行程序几乎成了程序员的必备技能。与此同时,深度学习的兴起对计算机算力与存储的要求都达到了前所未有的高度,大规模集群的部署和优化也成为热门技术话题。
@@ -239,6 +250,12 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
[UCB CS161: Computer Security](系统安全/CS161.md) 是伯克利的系统安全课程,会涵盖栈攻击、密码学、网站安全、网络安全等等内容。
[ASU CSE365: Introduction to Cybersecurity](系统安全/CSE365.md) 亚利桑那州立大学的 Web 安全课程,主要涉及注入、汇编与密码学的内容。
[ASU CSE466: Computer Systems Security](系统安全/CSE466.md) 亚利桑那州立大学的系统安全课程,涉及内容全面。门槛较高,需要对 Linux, C 与 Python 充分熟悉。
[SU SEED Labs](系统安全/SEEDLabs.md) 雪城大学的网安课程,由 NSF 提供130万美元的资金支持为网安教育开发了动手实践性的实验练习称为 SEED Lab。课程理论教学和动手实践并重包含详细的开源讲义、视频教程、教科书被印刷为多种语言、开箱即用的基于虚拟机和 docker 的攻防环境等。目前全球有1050家研究机构在使用该项目。涵盖计算机和信息安全领域的广泛主题包括软件安全、网络安全、Web 安全、操作系统安全和移动应用安全。
#### 实践课程
掌握这些理论知识之后,还需要在实践中培养和锻炼这些“黑客素养”。[CTF 夺旗赛](https://ctf-wiki.org/)是一项比较热门的系统安全比赛,赛题中会融会贯通地考察你对计算机各个领域知识的理解和运用。北大今年也成功举办了[第 0 届和第 1 届](https://geekgame.pku.edu.cn/),鼓励大家后期踊跃参与,在实践中提高自己。下面列举一些我平时学习(摸鱼)用到的资源:
@@ -311,6 +328,8 @@ Berkeley 作为著名开源数据库 postgres 的发源地也不遑多让,[UCB
#### 计算机视觉
[UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision](深度学习/EECS498-007.md)
[Stanford CS231n: CNN for Visual Recognition](深度学习/CS231.md)
#### 自然语言处理

View File

@@ -0,0 +1,25 @@
# 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) + 410 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.
All course materials and assignments are open-source, but you will need to request an X-CS571-ID header from the instructor, Cole Nelson (ctnelson2@wisc.edu). The header will be necessary for API request. When sending an email, it is advisable to include a brief self-introduction. It is unclear whether the instructor is willing to give everyone an ID. If you got turned down, please [raise an issue for this GitHub repo](https://github.com/PKUFlyingPig/cs-self-learning/issues/new/choose).
## 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.

25
docs/Web开发/CS571.md Normal file
View File

@@ -0,0 +1,25 @@
# CS571 Building UI (React & React Native)
## 课程简介
- 所属大学威斯康星大学麦迪逊分校University of Wisconsin, Madison
- 先修要求CS400高级 Java但个人觉得先修不必要掌握至少一门编程语言即可
- 编程语言JavaScript/HTML/CSS
- 课程难度:🌟🌟🌟
- 预计学时:每周 2 小时(讲座)+ 每周 410 小时(作业),持续 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 的实用原则和技术有所讲解。
所有课程资料和作业都是开源的,但你需要向授课教师 Cole Nelson (ctnelson2@wisc.edu) 发送电子邮件以获取 X-CS571-ID。该 ID 是向 API 发送 request 必需。在发送邮件时建议附上自我介绍。目前还不清楚老师是否愿意给所有人提供ID如果老师表示无法分享请[在 GitHub repo 里提一个 issue](https://github.com/PKUFlyingPig/cs-self-learning/issues/new/choose)。
## 课程资源
- 课程网站:<https://cs571.org>
- 课程视频请参考课程网站上标有“R”的链接
- 课程作业:请参考课程网站上的相关信息

View File

@@ -0,0 +1,19 @@
# 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.

BIN
docs/images/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 963 B

BIN
docs/images/mobile_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
docs/images/sponsor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 711 KiB

View File

@@ -2,9 +2,7 @@
![Image title](./images/title.png){ width="600" }
</figure>
# Foreword
**The English version is still under development, please check [this issue](https://github.com/PKUFlyingPig/cs-self-learning/issues/222) if you want to contribute.**
# **Foreword**
This is a self-learning guide to computer science, and a memento of my three years of self-learning at university.
@@ -17,7 +15,7 @@ The book is currently organized to include the following sections (if you have o
- 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 into different categories and give relevant self-learning advice. Most of them will have a separate repository containing relevant resources as well as my homework/project implementations.
## The place where dreams start —— CS61A
## **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.
@@ -41,9 +39,9 @@ Imagine that if someone could chew up the hard knowledge and present it to you i
If you think I'm exaggerating, start with [CS61A](https://cs61a.org/), because it's where my dreams began.
## Why write this book?
## **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.
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.
@@ -53,7 +51,7 @@ If you can build up the whole CS foundation in less than three years, have relat
I firmly believe that if you have read to this line, you do not lack the ability and committment 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
## **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.
@@ -61,7 +59,7 @@ Another great thing about self-learning is that you can learn from different per
A third advantage of self-learning is that you do not need to go to the class, listening to the boring lectures.
## Cons
## **Cons**
Of course, as a big fan of self-learning, I have to admit that it has its disadvantages.
@@ -71,16 +69,16 @@ The second thing is that these courses are basically in English. From the videos
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?
## **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
## **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?
## **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)).

View File

@@ -4,9 +4,7 @@
# 前言
**最近更新:英文版正在[建设中](https://github.com/PKUFlyingPig/cs-self-learning/issues/222),增加陈天奇[机器学习编译](机器学习系统/MLC.md),增加 CMU [机器学习系统](机器学习系统/CMU10-414.md), 增加 [学习工作流](必学工具/workflow.md)**
<!-- **最近更新:增加[Caltech CS 122: Database System Implementation](./数据库系统/CS122.md) ,重新整理[好书推荐](./%E5%A5%BD%E4%B9%A6%E6%8E%A8%E8%8D%90.md)模块 ~** -->
<!-- **最近更新:增加南京大学[操作系统课程](操作系统/NJUOS.md),增加毕业论文[写作教程](必学工具/thesis.md) ** -->
**最近更新:[Release v1.1.0](https://github.com/PKUFlyingPig/cs-self-learning/releases/tag/v1.1.0) 已发布 🎉**
这是一本计算机的自学指南,也是对自己大学三年自学生涯的一个纪念。
@@ -90,3 +88,11 @@
## 关于交流群的建立
方法参见仓库的 `README.md`
## 请作者喝杯下午茶
本书的内容是完全开源免费的,如果你觉得该项目对你真的有帮助,可以给仓库点个 star 或者请作者喝一杯下午茶。
<figure markdown>
![Image title](./images/sponsor.png){ width="500" }
</figure>

View File

@@ -0,0 +1,20 @@
# CS188: Introduction to Artificial Intelligence
## Course Overview
- UniversityUC Berkeley
- PrerequisitesCS70
- Programming LanguagePython
- Course Difficulty🌟🌟🌟
- Estimated Hours50 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 TextbookArtificial intelligence: A Modern Approach
- Course AssignmentsOnline assessments for written assignments and projects, details available on the course website

View File

@@ -14,7 +14,7 @@
## 课程资源
- 课程网站:<https://inst.eecs.berkeley.edu/~cs188/fa18/index.html>
- 课程视频:<https://inst.eecs.berkeley.edu/~cs188/fa18/index.html>,每节课的链接详见课程网站
- 课程网站:[Fall 2022](https://inst.eecs.berkeley.edu/~cs188/fa22/)[Fall 2018](https://inst.eecs.berkeley.edu/~cs188/fa18/index.html)
- 课程视频:[Fall 2022](https://inst.eecs.berkeley.edu/~cs188/fa22/)[Fall 2018](https://inst.eecs.berkeley.edu/~cs188/fa18/index.html),每节课的链接详见课程网站
- 课程教材Artificial intelligence: A Modern Approach
- 课程作业:<https://inst.eecs.berkeley.edu/~cs188/fa18/index.html>14个在线测评书面作业和 6 个Project
- 课程作业:在线测评书面作业和 Projects详见课程网站

View File

@@ -0,0 +1,22 @@
# 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: <https://cs50.harvard.edu/ai/2020/>
- Recordings: <https://cs50.harvard.edu/ai/2020/>
- Textbooks: No textbook is needed in this course.
- Assignments: <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).

View File

@@ -3,12 +3,12 @@
## 课程简介
- 所属大学Harvard
- 先修要求:基本概率论 + Python基础
- 先修要求:基本概率论 + Python 基础
- 编程语言Python
- 课程难度:🌟🌟🌟
- 预计学时30 小时
一门非常基础的AI入门课让人眼前一亮的是12个设计精巧的编程作业都会用学到的AI知识去实现一个简易的游戏AI比如用强化学习训练一个Nim游戏的AI用alpha-beta剪枝去扫雷等等非常适合新手入门或者大佬休闲。
一门非常基础的 AI 入门课,让人眼前一亮的是 12 个设计精巧的编程作业,都会用学到的 AI 知识去实现一个简易的游戏 AI比如用强化学习训练一个 Nim 游戏的 AI alpha-beta 剪枝去扫雷等等,非常适合新手入门或者大佬休闲。
## 课程资源

View File

@@ -0,0 +1,26 @@
# 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.

29
docs/体系结构/CA.md Normal file
View File

@@ -0,0 +1,29 @@
# 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)
## 资源汇总
国内有高校引入了这门课,因此有需要的同学可以搜索到一些资源。

View File

@@ -19,8 +19,8 @@ In a word, this is the best computer architecture course I have ever taken.
- Course Website: <https://cs61c.org/su20/>
- Recordings: [Youtube](https://www.youtube.com/playlist?list=PLDoI-XvXO0aqgoMQvogzmf7CKiSMSUS3M)
- Textbook: None
- Assignments: 11 Labs, 4 Projects, the course website has specific requirements
- Assignments: 11 Labs, 4 Projects, the course website has specific requirements.
## 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 @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS61C-summer20 - GitHub](https://github.com/PKUFlyingPig/CS61C-summer20).

View File

@@ -23,6 +23,6 @@ After completing this course, your understanding of computer systems will defini
- Course Website: <http://csapp.cs.cmu.edu/>
- Recordings: <https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22b96d90ae-9871-4fae-91e2-b1627b43e25e%22>
- Textbook: Computer Systems: A Programmer's Perspective, 3/E
- Assignments: 11 Projects, [skeleton code all open source](http://csapp.cs.cmu.edu/3e/labs.html)
- Assignments: 11 Projects, [skeleton code all open source](http://csapp.cs.cmu.edu/3e/labs.html).
If you have trouble with Chapter 7 Linking, I recommend reading the book *Programmer's Self-Cultivation*, subtitled link. load and library. This book can complete our understanding of program linking, and I believe after reading this book you will have a deeper comprehension of program linking, ELF files, and dynamic libraries. It is highly recommended to be read as a supplementary material after reading CSAPP and having a certain understanding of computer systems.

View File

@@ -18,4 +18,4 @@ There are 9 labs in the course. You will use the Basys 3 FPGA board and [Vivado]
- 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
- Assignments: refer to the course website.

View File

@@ -1,4 +1,4 @@
# Digital Design and Computer Architecture
# ETH ZurichDigital Design and Computer Architecture
## 课程简介
@@ -14,8 +14,9 @@
## 课程资源
- 课程网站:<https://safari.ethz.ch/digitaltechnik/spring2020/>
- 课程视频:<https://www.youtube.com/playlist?list=PL5Q2soXY2Zi_FRrloMa2fUYWPGiZUBQo2>
- 课程网站:[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)
- 课程教材1Patt and Patel, Introduction to Computing Systems
- 课程教材2Harris and Harris, Digital Design and Computer Architecture (MIPS Edition)
中文译本为《数字设计和计算机体系结构(原书第2版)》
- 课程实验9 个实验从零开始设计 MIPS CPU详见课程网站

View File

@@ -28,7 +28,7 @@ This course extracts the essence of computers while omitting the tedious and com
- 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)
- 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

View File

@@ -18,7 +18,7 @@
- 课程网站:[Nand2Tetris I](https://www.coursera.org/learn/build-a-computer/home/week/1), [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome)
- 课程视频:详见课程网站
- 课程教材:[计算机系统要素:从零开始构建现代计算机](book)
- 课程教材:[计算机系统要素:从零开始构建现代计算机][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

47
docs/使用指南.en.md Normal file
View File

@@ -0,0 +1,47 @@
# **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 wont 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, its 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](./编程入门/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, its 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 internets 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](Web开发/mitweb.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).

View File

@@ -10,7 +10,7 @@
其一就是了解如何写“优雅”的代码。国内的很多大一编程入门课都会讲成极其无聊的语法课,其效果还不如直接让学生看官方文档。事实上,在刚开始接触编程的时候,让学生试着去了解什么样的代码是优雅的,什么样的代码 "have bad taste" 是大有裨益的。一般来说,编程入门课会先介绍过程式编程(例如 C 语言)。但即便是面向过程编程,**模块化** 和 **封装** 的思想也极其重要。如果你只想着代码能在 OpenJudge 上通过,写的时候图省事,用大段的复制粘贴和臃肿的 main 函数,长此以往,你的代码质量将一直如此。一旦接触稍微大一点的项目,无尽的 debug 和沟通维护成本将把你吞没。因此写代码时不断问自己是否有大量重复的代码当前函数是否过于复杂Linux 提倡每个函数只需要做好一件事这段代码能抽象成一个函数吗一开始你可能觉得很不习惯甚至觉得这么简单的题需要如此大费周章吗但记住好的习惯是无价的C 语言初中生都能学会,凭什么公司要招你去当程序员呢?
学过面向过程编程后,大一下学期一般会讲面向对象编程(例如 C++ 或 Java。这里非常推荐大家看 [MIT 6.031: Software Construction](./软件工程/6031.md) 这门课的 Notes会以 Java 语言为例非常详细地讲解如何写出“优雅”的代码。例如 Test-Driven 的开发、函数 Specification 的设计、异常的处理等等等等。除此之外,既然接触了面向对象,那么了解一些常见的设计模式也是很有必要的。因为国内的面向对象课程同样很容易变成极其无聊的语法课,让学生纠结于各种继承的语法,甚至出一些无聊的脑筋急转弯一样的题目,殊不知这些东西在地球人的开发中基本不会用到。面向对象的精髓是让学生学会自己将实际的问题抽象成若干类和它们之间的关系,而设计模式则是前人总结出来的一些精髓的抽象方法。这里推荐[大话设计模式](https://book.douban.com/subject/2334288/) 这本书,写得非常浅显易懂。
学过面向过程编程后,大一下学期一般会讲面向对象编程(例如 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秒。毕竟以后数十年你都要和电脑打交道,形成一套顺滑的工作流是事半功倍的。最后,学会盲打!如果你还需要看着键盘打字,那么赶紧上网找个教程学会盲打,这将极大提高你的开发效率。
@@ -42,6 +42,6 @@
如果你对于计算机领域的核心专业课都掌握得相当扎实,而且已经确定了自己的工作或研究方向,那么书中还有很多未在 [一份仅供参考的CS学习规划](./CS学习规划.md) 提到的课程供你探索。
随着贡献者的不断增多,左侧的目录中将不断增加新的分支,例如 **机器学习进阶****机器学习系统**。并且同一个分支下都有若干同类型课程,它们来自不同的学校,有着不同的侧重点和课程实验,例如 **操作系统** 分支下就包含了麻省理工、伯克利还有南京大学三个学校的课程。如果你想深耕一个领域,那么学习这些同类的课程会给你不同的角来看待类似的知识。同时,本书作者还计划联系一些相关领域的科研工作者来分享某个细分领域的科研学习路径,让 CS自学指南 在追求广度的同时,实现深度上的提高。
随着贡献者的不断增多,左侧的目录中将不断增加新的分支,例如 **机器学习进阶****机器学习系统**。并且同一个分支下都有若干同类型课程,它们来自不同的学校,有着不同的侧重点和课程实验,例如 **操作系统** 分支下就包含了麻省理工、伯克利南京大学还有哈工大四所学校的课程。如果你想深耕一个领域,那么学习这些同类的课程会给你不同的角来看待类似的知识。同时,本书作者还计划联系一些相关领域的科研工作者来分享某个细分领域的科研学习路径,让 CS自学指南 在追求广度的同时,实现深度上的提高。
如果你想贡献这方面的内容,欢迎和作者邮件联系 [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn)

View File

@@ -1 +0,0 @@
under construction.

View File

@@ -19,6 +19,9 @@
- [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): 深度学习方向推荐教材列表
## 系统入门
@@ -35,7 +38,8 @@
## 计算机网络
- [Computer Networks: A Systems Approach](https://book.systemsapproach.org/foreword.html) [[豆瓣](https://book.douban.com/subject/26417896/)]
- Computer Networking: A Top-Down Approach [[豆瓣](https://book.douban.com/subject/30280001/)]
- [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/)]
## 分布式系统
@@ -47,12 +51,13 @@
- [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 [[豆瓣](https://book.douban.com/subject/10548379/)]
- 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)
## 计算机编程语言
@@ -85,12 +90,12 @@
## 计算机图形学
- [Monte Carlo theory, methods and examples](https://artowen.su.domains/mc/)
- [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 [[豆瓣](https://book.douban.com/subject/2584523/)]
- Physically Based Rendering: From Theory To Implementation [[豆瓣](https://book.douban.com/subject/4306242/)]
- Real-Time Rendering [[豆瓣](https://book.douban.com/subject/30296179/)]
- [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/)]
## 游戏引擎
@@ -109,7 +114,7 @@
- 设计模式: 可复用面向对象软件的基础 [[豆瓣](https://book.douban.com/subject/1052241/)]
- 大话设计模式 [[豆瓣](https://book.douban.com/subject/2334288/)]
- [Head First 设计模式](https://awesome-programming-books.github.io/design-pattern/HeadFirst%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.pdf) [[豆瓣](https://book.douban.com/subject/2243615/)]
- Head First Design Patterns 2nd ed. [[豆瓣](https://book.douban.com/subject/35097022/)]
## 深度学习
@@ -121,11 +126,10 @@
## 计算机视觉
- Multiple View Geometry in Computer Vision [[豆瓣](https://book.douban.com/subject/1841346/)]
- [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://book.douban.com/subject/2861227/)]
- [Probabilistic Robotics](https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf) [[豆瓣](https://book.douban.com/subject/2861227/)]
## 面试

View File

@@ -17,8 +17,8 @@ The goal of this course is to provide a deep understanding of the fundamental pr
- Course Website: [CMU15418](http://15418.courses.cs.cmu.edu/spring2016/), [CS149](https://gfxcourses.stanford.edu/cs149/fall21)
- Recordings: <http://15418.courses.cs.cmu.edu/spring2016/lectures>
- Textbook: None
- Assignments: <https://gfxcourses.stanford.edu/cs149/fall21>, 5 assignments
- 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)
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).

View File

@@ -17,12 +17,12 @@ This course is so famous that you can easily have access to the project solution
## Resources
- Course Website: <https://pdos.csail.mit.edu/6.824/schedule.html>
- Assignments: refer to the course website
- Assignments: refer to the course website.
- Textbook: None
- Assignments: 4 torturing projects, the course website has specific requirements
- 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)
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 ~ ~

View File

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

View File

@@ -2,8 +2,8 @@
## 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 recommanded to learn GNU Make and get familiar with Makefile first before learning 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` automaticly, 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.
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.

View File

@@ -0,0 +1,15 @@
# 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.

View File

@@ -0,0 +1,25 @@
# 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.

View File

@@ -0,0 +1,23 @@
# 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)中的方法相同,这里不做赘述。

View File

@@ -0,0 +1,13 @@
# 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.

View File

@@ -0,0 +1,17 @@
# 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.

View File

@@ -6,7 +6,7 @@
LaTeX 是一种基于 TeX 的排版系统,由图灵奖得主 Lamport 开发,而 Tex 则是由 Knuth 最初开发,这两位都是计算机界的巨擘。当然开发者强并不是我们学习 LaTeX 的理由LaTeX 和常见的所见即所得的 Word 文档最大的区别就是用户只需要关注写作的内容,而排版则完全交给软件自动完成。这让没有任何排版经验的普通人得以写出排版非常专业的论文或文章。
Berkeley计算机系教授 Christos Papadimitriou 曾说过一句半开玩笑的话:
Berkeley 计算机系教授 Christos Papadimitriou 曾说过一句半开玩笑的话:
> Every time I read a LaTeX document, I think, wow, this must be correct!
@@ -22,3 +22,11 @@ Berkeley计算机系教授 Christos Papadimitriou 曾说过一句半开玩笑的
[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/)

View File

@@ -0,0 +1,32 @@
# 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/)

View File

@@ -0,0 +1,50 @@
# 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
```

View File

@@ -0,0 +1,51 @@
# 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
```

View File

@@ -0,0 +1,42 @@
# 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.

View File

@@ -7,7 +7,7 @@
- 让你的整个开发过程手指不需要离开键盘,而且光标的移动不需要方向键使得你的手指一直处在打字的最佳位置。
- 方便的文件切换以及面板控制可以让你同时开发多份文件甚至同一个文件的不同位置。
- Vim 的宏操作可以批量化处理重复操作(例如多行 tab批量加双引号等等
- Vim 是很多服务器自带的命令行编辑器,当你通过 `ssh` 连接远程服务器之后,由于没有图形界面,只能在命令行里进行开发(当然现在很多 IDE 如 VS Code 提供了 `ssh` 插件可以解决这个问题)。
- Vim 是很多服务器自带的命令行编辑器,当你通过 `ssh` 连接远程服务器之后,由于没有图形界面,只能在命令行里进行开发(当然现在很多 IDE 如 PyCharm 提供了 `ssh` 插件可以解决这个问题)。
- 异常丰富的插件生态,让你拥有世界上最花里胡哨的命令行编辑器。
## 如何学习 Vim
@@ -16,10 +16,24 @@
Vim 的学习资料浩如烟海,但掌握它最好的方式还是将它用在日常的开发过程中,而不是一上来就去学各种花里胡哨的高级 Vim 技巧。个人推荐的学习路线如下:
- 先阅读[这篇 tutorial](https://missing.csail.mit.edu/2020/editors/),掌握基本的 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/) 重映射。
但更佳的做法是同时将 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)
## 推荐参考资料

View File

@@ -0,0 +1,15 @@
# 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!

View File

@@ -0,0 +1,100 @@
# 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://zlibrary-global.se/): 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.
## 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.
- [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.
## 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.

View File

@@ -2,36 +2,97 @@
## 下载工具
- [Libgen](http://libgen.is/): PDF电子书下载网站。
- [z-epub](https://z-epub.com/): ePub电子书下载网站。
- [bitdownloader](https://bitdownloader.io/): 油管视频下载器
- [zlibrary](https://1lib.limited/): 电子书下载网站(可能需要翻墙)
- [Sci-Hub](https://sci-hub.se/): Elbakyan 女神向你挥手,旨在打破知识壁垒的革命性网站。
- [Library Genesis](http://libgen.is/): 电子书下载网站。
- [Z-library](https://zlibrary-global.se/): 电子书下载网站(在 [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.origamiway.com/paper-folding-crafts-step-by-step.shtml): 手把手教你怎么折纸。
- [thingiverse](https://www.thingiverse.com/): 囊括各类 2D/3D 设计资源,其 STL 文件下载可直接 3D 打印。
- [iconfont](https://www.iconfont.cn/): 国内最大的图标和插画资源库,可用于开发或绘制系统架构图。
- [turbosquid](https://www.turbosquid.com/): 可以购买各式各样的模型。
- [flaticon](https://www.flaticon.com/): 可下载免费且高质量的图标。
- [标准地图服务系统](http://bzdt.ch.mnr.gov.cn/): 可以下载官方标准地图。
- [PlantUML](https://plantuml.com/zh/): 可以使用代码快速编写 UML 图。
## 编程相关
- [sqlfiddle](http://www.sqlfiddle.com/): 一个简易的在线 SQL Playground。
- [sqlzoo](https://sqlzoo.net/wiki/SQL_Tutorial):在线练习 sql 语句。
- [godbolt](https://godbolt.org/): 非常方便的编译器探索工具。你可以写一段 C/C++ 代码,选择一款编译器,然后便可以观察生成的具体汇编代码。
- [explainshell](https://explainshell.com/): 你是否曾为一段 shell 代码的具体含义感到困扰manpage 看半天还是不明所以?试试这个网站!
- [regex101](https://regex101.com/): 正则表达式调试网站,支持各种编程语言的匹配标准。
- [typingtom](https://www.typingtom.com/lessons): 针对程序员的打字练习/测速网站。
- [wrk](https://github.com/wg/wrk): 网站压测工具
- [wrk](https://github.com/wg/wrk): 网站压测工具
- [gbmb](https://www.gbmb.org/): 数据单位转换。
- [tools](https://tools.fun/): 在线工具合集。
- [github1s](https://github1s.com/): 用网页版 VS Code 在线阅读 GitHub 代码。
- [visualgo](https://visualgo.net/en): 算法可视化网站。
- [DataStructureVisual](http://www.rmboot.com/): 数据结构可视化网站。
- [Data Structure Visualizations](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html): 数据结构与算法的可视化网站。
- [learngitbranching](https://learngitbranching.js.org/?locale=zh_CN): 可视化学习 git。
- [UnicodeCharacter](https://unicode-table.com/en/): Unicode 字符集网站。
## 学习网站
- [HFS](https://hepsoftwarefoundation.org/training/curriculum.html): 各类软件教程。
- [os-wiki](https://wiki.osdev.org/Main_Page): 操作系统技术资源百科全书。
- [Shadertoy](https://www.shadertoy.com/): 编写各式各样的 shader。
- [comments-for-awesome-courses](https://conanhujinming.github.io/comments-for-awesome-courses/): 名校公开课评价网。
- [codetop](https://codetop.cc/home): 企业题库。
- [cs-video-courses](https://github.com/Developer-Y/cs-video-courses): 带有视频讲座的计算机科学课程列表。
- [bootlin](https://elixir.bootlin.com/linux/v2.6.39.4/source/include/linux): 在线阅读 Linux 源码。
- [ecust-CourseShare](https://github.com/tianyilt/ecnu-PGCourseShare): 华东师范大学研究生课程攻略共享计划。
- [REKCARC-TSC-UHT](https://github.com/PKUanonym/REKCARC-TSC-UHT): 清华大学计算机系课程攻略。
- [seu-master](https://github.com/oneman233/seu-master): 东南大学研究生课程资料整理。
- [菜鸟教程](https://www.runoob.com/): 计算机相关知识的简要的教程。
- [FreeBSD 从入门到跑路](https://book.bsdcn.org/): 一本 FreeBSD 的中文教程。
- [MDN Web Docs](https://developer.mozilla.org/zh-CN/docs/Learn): MDN 网络开发入门手册。
- [Hello 算法](https://www.hello-algo.com/): 动画图解、能运行、可提问的数据结构与算法快速入门教程。
## 百科网站/词典性质的网站
- [os-wiki](https://wiki.osdev.org/Main_Page): 操作系统技术资源百科全书。
- [FreeBSD Documentation](https://docs.freebsd.org/en/): FreeBSD 官方文档。
- [Python3 Documentation](https://docs.python.org/zh-cn/3/): Python3 官方中文文档。
- [C++ Reference](https://en.cppreference.com/w/): C++ 参考手册。
- [OI Wiki](https://oi-wiki.org/): 编程竞赛知识整合站点。
- [Microsoft Learn](https://learn.microsoft.com/zh-cn/): 微软官方的学习平台,包含了绝大多数微软产品的文档。
- [Arch Wiki](https://wiki.archlinux.org/): 专为 Arch Linux 而写的 Wiki包含了大量 Linux 相关的知识。
- [Qt Wiki](https://wiki.qt.io/Main): Qt 官方 Wiki。
- [OpenCV 中文文档](https://opencv.apachecn.org/#/): OpenCV 的社区版中文文档。
- [npm Docs](https://docs.npmjs.com/): npm 官方文档。
## 交流平台
- [GitHub](https://github.com/): 许多开源项目的托管平台,也是许多开源项目的主要交流平台,通过查看 issue 可以解决许多问题。
- [StackExchange](https://stackexchange.com/): Stack Exchange 是由 181 个问答社区组成(其中包括 Stack Overflow的编程社区。
- [StackOverflow](https://stackoverflow.com/): Stack Overflow 是一个与程序相关的 IT 技术问答网站。
- [Gitee](https://gitee.com/): 一个类似于 GitHub 的代码托管平台,可以在对应项目的 issue 里查找一些常见问题的解答。
- [知乎](https://www.zhihu.com/): 一个类似于 Quora 的问答社区,可以在其中提问,一些问答包含有计算机的知识。
- [博客园](https://www.cnblogs.com/): 一个面向开发者的知识分享社区,拥有一些常见问题的博客,正确率不能保证,请谨慎使用。
- [CSDN](https://blog.csdn.net/): 拥有一些常见问题的博客,正确率不能保证,请谨慎使用。
## 杂项
- [tophub](https://tophub.today/): 新闻热榜合集(综合了知乎、微博、百度、微信等)。
- [feedly](https://feedly.com/): 著名的 RSS 订阅源阅读器。
- [speedtest](https://www.speedtest.net/zh-Hans): 在线网络测速网站。
- [public-apis](https://github.com/public-apis/public-apis): 公共 API 合集列表。
- [numberempire](https://zh.numberempire.com/derivativecalculator.php): 函数求导工具。
- [sustech-application](https://sustech-application.com/#/grad-application/computer-science-and-engineering/README): 南方科技大学经验分享网。
- [vim-adventures](https://vim-adventures.com/): 一款基于 vim 键盘快捷键的在线游戏。
- [vimsnake](https://vimsnake.com/): 利用 vim 玩贪吃蛇。
- [keybr](https://www.keybr.com/): 学习盲打的网站。
- [Awesome C++](https://cpp.libhunt.com/): 很棒的 C/C++ 框架、库、资源精选列表。
- [HelloGitHub](https://hellogithub.com/): 分享 GitHub 上有趣、入门级的开源项目。

View File

@@ -0,0 +1,121 @@
> Contributed by [@HardwayLinka](https://github.com/HardwayLinka)
The field of computer science is vast and rapidly evolving, making lifelong learning crucial. However, our sources of knowledge in daily development and learning are complex and fragmented. We encounter extensive documentation manuals, brief blogs, and even snippets of news and public accounts on our phones that may contain interesting knowledge. Therefore, it's vital to use various tools to create a learning workflow that suits you, integrating these knowledge fragments into your personal knowledge base for easy reference and review. After two years of learning alongside work, I have developed the following learning workflow:
![](https://raw.githubusercontent.com/HardwayLinka/image/master/Drawing 2022-10-20 11.23.41.excalidraw.png)
## Core Logic
Initially, when learning new knowledge, I referred to Chinese blogs but often found bugs and gaps in my code practice. Gradually, I realized that the information I referred to might be incorrect, as the threshold for posting blogs is low and their credibility is not high. So, I started consulting some related Chinese books.
Chinese books indeed provide a comprehensive and systematic explanation of concepts. However, given the rapid evolution of computer technology and the US's leadership in CS, content in Chinese books often lags behind the latest knowledge. This led me to realize the importance of firsthand information. Some Chinese books are translations of English ones, and translation can take a year or two, causing a delay in information transmission and loss during translation. If a Chinese book is not a translation, it likely references other books, introducing biases in interpreting the original English text.
Therefore, I naturally started reading English books. The quality of English books is generally higher than that of Chinese ones. As I delved deeper into my studies, I discovered a hierarchy of information reliability: `source code` > `official documentation` > `English books` > `English blogs` > `Chinese blogs`. This led me to create an "Information Loss Chart":
![](https://cdn.sspai.com/2022/10/11/bf07c1965a2e5bdf3f00644737789e2e.png)
Although firsthand information is crucial, subsequent iterations (N-th hand information) are not useless. They include the author's transformation of the source knowledge — such as logical organization (flow charts, mind maps) or personal interpretations (abstractions, analogies, extensions to other knowledge points). These transformations can help us quickly grasp and consolidate core knowledge, like using guidebooks in school. Moreover, interacting with others' interpretations during learning is important, allowing us to benefit from various perspectives. Hence, it's advisable to first choose high-quality, less distorted sources of information while also considering multiple sources for a more comprehensive and accurate understanding.
In real-life work and study, learning rarely follows a linear, deep dive into a single topic. Often, it involves other knowledge points, such as new jargon, classic papers not yet read, or unfamiliar code snippets. This requires us to think deeply and "recursively" learn, establishing connections between multiple knowledge points.
## Choosing the Right Note-taking Software
The backbone of the workflow is built around the core logic of "multiple references for a single knowledge point and building connections among various points." This is similar to writing academic papers. Papers usually have footnotes explaining keywords and multiple references at the end. But our daily notes are much more casual, hence the need for a more flexible method.
I'm accustomed to jumping to related functions and implementations in an IDE. It would be great if notes could also be interlinked like code. Current "double-link note-taking software," such as Roam Research, Logseq, Notion, and Obsidian, addresses this need. I chose Obsidian for the following reasons:
- Obsidian is based locally, with fast opening speeds, and can store many e-books. My laptop, an Asus TUF Gaming FX505 with 32GB of RAM, runs Obsidian very smoothly.
- Obsidian is Markdown-based. This is an advantage because if a note-taking software uses a proprietary format, it's inconvenient for third-party extensions and opening notes with other software.
- Obsidian has a rich and active plugin ecosystem, allowing for an "all in one" effect, meaning various knowledge sources can be integrated in one place.
## Information Sources
Obsidian's plugins support PDF formats, and it naturally supports Markdown. To achieve "all in one," you can convert other file formats to PDF or Markdown. This presents two questions:
- What formats are there?
- How to convert them to PDF or Markdown?
![](https://cdn.sspai.com/2022/10/11/3801b1c9b94286566fe677e3b12cc7b0.png)
### Formats
File formats depend on their display platforms. Before considering formats, let's list the sources of information I usually access:
![](https://cdn.sspai.com/2022/10
/11/07e97f372850054958d4961a3787a93f.png)
The main categories are `articles`, `papers`, `e-books`, and `courses`, primarily including formats like `web pages`, `PDFs`, `MOBI`, `AZW`, and `AZW3`.
### Conversion to PDF or Markdown
Online articles and courses are mostly presented as web pages. To convert web pages to Markdown, I use the clipping software "Simplified Read," which can clip articles from nearly all platforms into Markdown and import them into Obsidian.
![](https://cdn.sspai.com/2022/10/11/211cffa78f20a9e7286a7419e9e0b878.png)
For papers and e-books, if the format is already PDF, it's straightforward. Otherwise, I use Calibre for conversion:
![](https://cdn.sspai.com/2022/10/11/51575f65f6f4c6edfa6c5b97fd16d625.png)
Now, using Obsidian's PDF plugin and native Markdown support, I can seamlessly take notes and reference across these documents (see "Information Processing" below for details).
![](https://cdn.sspai.com/2022/10/11/d64a9a2d6406d2d367dcb505ede69c83.png)
### Managing Information Sources
For file resources like PDFs, I use local or cloud storage. For web resources, I categorize and save them in browser bookmarks or clip them into Markdown notes. However, browsers don't support mobile web bookmarking. To enable cross-platform web bookmarking, I use Cubox. With a swipe on my phone, I can save interesting web pages in one place. Although the free version limits to 100 bookmarks, it's usually sufficient and prompts me to process these pages promptly.
![](https://cdn.sspai.com/2022/10/11/ad7ebfcb4619f64a41d328b88e0e3a12.png)
Moreover, many of the web pages we bookmark are not from fully-featured blog platforms like Zhihu or Juejin but personal sites without mobile apps. These can be easily overlooked in browser bookmarks, and we might miss new article notifications. Here, `RSS` comes into play.
`RSS` (Rich Site Summary) is a type of web feed that allows users to access updates to online content in a standardized format. On desktops, `RSSHub Radar` helps discover and generate `RSS` feeds, which can be subscribed to using `Feedly` (both have official Chrome browser plugins).
![](https://cdn.sspai.com/2022/10/11/5df6cd9d967f190df35928e781f9185f.png)
With this, the information collection process is comprehensive. But no matter how well categorized, information needs to be internalized to be useful. After collecting information, the next step is processing it — reading, understanding the semantics (especially for English sources), highlighting key sentences or paragraphs, noting queries, brainstorming related knowledge points, and writing summaries. What tools are needed for this process?
## Information Processing
### English Sources
For English materials, I initially used "Youdao Dictionary" for word translation, Google Translate for sentences, and "Deepl" for paragraphs. Eventually, I realized this was too slow and inefficient. Ideally, a single tool that can handle word, sentence, and paragraph translation would be optimal. After researching, I chose "Quicker" + "Saladict" for translation.
![](https://cdn.sspai.com/2022/10/11/a7ebb1d3c46702b56bd6d171dfcfc075.png)
This combo allows translation outside browsers and supports words, sentences, and paragraphs, offering results from multiple translation platforms. For non-urgent word lookups, the "Collins Advanced" dictionary is helpful as it explains English words in English, providing context to aid understanding.
![](https://cdn.sspai.com/2022/10/11/article/827c9a8048c83e504ccb15893702bf09)
### Multimedia Information
After processing text-based information, it's important to consider how to handle multimedia information. Specifically, I'm referring to English videos, as I don't have a habit of learning through podcasts or recordings and I rarely watch Chinese tutorials anymore. Many renowned universities offer open courses in video format. Wouldn't it be helpful if you could take notes on these videos? Have you ever thought it would be great if you could convert the content of a lecture into text, since we usually read faster than a lecturer speaks? Fortunately, the software `Language Reactor` can export subtitles from YouTube and Netflix videos, along with Chinese translations.
We can copy the subtitles exported by `Language Reactor` into `Obsidian` and read them as articles. Besides learning purposes, you can also use this plugin while watching YouTube videos. It displays subtitles in both English and Chinese, and you can click on unfamiliar words in the subtitles to see their definitions.
![](https://cdn.sspai.com/2022/10/11/364c8e6ed263affa84d9eee61338b4af.png)
However, reading texts isn't always the most efficient way to learn about some abstract concepts. As the saying goes, "A picture is worth a thousand words." What if we could link a segment of text to corresponding images or even video operations? While browsing the `Obsidian` plugin marketplace, I discovered a plugin called `Media Extended`. This plugin allows you to add links in your notes that jump to specific times in a video, effectively connecting your notes to the video! This works well with the video subtitles mentioned earlier, where each line of subtitles corresponds to a time stamp, allowing for jumps to specific parts of the video. This means you don't have to cut specific video segments; instead, you can jump directly within the article!
![](https://cdn.sspai.com/2022/10/11/17554cfdf662d5719ada453674012fdb.gif)
`Obsidian` also has a powerful plugin called `Annotator`, which allows you to jump from notes to the corresponding section in a PDF.
![](https://cdn.sspai.com/2022/10/11/article/b56994bf9a306830d8b0b8112677d3ec)
Now, with `Obsidian`'s built-in double-chain feature, we can achieve inter-note linking, and with the above plugins, we can extend these links to multimedia. This completes the process of information handling. Learning often involves both a challenging ascent and a familiar descent. So, how can we incorporate the review process into this workflow?
## Information Review
`Obsidian` already has a plugin that connects to `Anki`, the renowned spaced repetition-based memory software. With this plugin, you can export segments of your notes to `Anki` as flashcards, each containing a link back to the original note.
![](https://cdn.sspai.com/2022/10/11/1f7cebd8dd28f664d77cbf0ab228c406.gif)
## Conclusion
This workflow evolved over two years of learning in my spare time. Frustration with repetitive processes led to specific needs, which were fortunately met by tools I discovered online. Don't force tools into your workflow just for the sake of satisfaction; life is short, so focus on what's truly important.
By the way, this article discusses the evolution of the workflow. If you're interested in the details of how this workflow is implemented, I recommend reading the following articles in order after this one:
1. [3000+ Hours Accumulated Learning Workflow](https://sspai.com/post/75969)
2. [Advanced Techniques in Obsidian | Creating Notes that Link to Any File Format](https://juejin.cn/post/7145351315705577485)

View File

@@ -0,0 +1,99 @@
# Information Retrieval
## Introduction
> When encountering a problem, remember the first thing is to **read the documentation**. Don't start by searching online or asking others directly. Reviewing FAQs may quickly provide the answer.
Information retrieval, as I understand it, is essentially about skillfully using search engines to quickly find the information you need, including but not limited to programming.
The most important thing in programming is STFW (search the fucking web) and RTFM (read the fucking manual). First, you should read the documentation, and second, learn to search. With so many resources online, how you use them depends on your information retrieval skills.
To understand how to search effectively, we first need to understand how search engines work.
## How Search Engines Work
The working process of a search engine can generally be divided into three stages: [^1]
1. Crawling and Fetching: Search engine spiders visit web pages by tracking links, obtain the HTML code of the pages, and store it in a database.
2. Preprocessing: The indexing program processes the fetched web page data by extracting text, segmenting Chinese words, indexing, etc., preparing for the ranking program.
3. Ranking: When users enter keywords, the ranking program uses the indexed data to calculate relevance and then generates the search results page in a specific format.
The first step involves web crawlers, often exaggerated in Python courses. It can be simply understood as using an automated program to download all text, images, and related information from websites and store them locally.
The second step is the core of a search engine, but not critical for users to understand. It can be roughly understood as cleaning data and indexing pages, each with keywords for easy querying.
The third step is closely related to us. Whether it's Google, Baidu, Bing, or others, you input keywords or queries, and the search engine returns results. This article teaches you how to obtain better results.
## Basic Search Techniques
Based on the above working principles, we can roughly understand that a search engine can be treated as a smart database. Using better query conditions can help you find the information you need faster. Here are some search techniques:
### Use English
First, it's important to know that in programming, it's best to search in English. Reasons include:
1. In programming and various software operations, English resources are of higher quality than those in Chinese or other languages.
2. Due to translation issues, English terms are more accurate and universally applicable than Chinese.
3. Chinese search engines' word segmentation systems can lead to ambiguity. For example, Google searches in Chinese may not yield many useful results.
If your English is not strong, use translation tools like Baidu or Sogou; they are sufficient.
### Refine Keywords
Don't search whole sentences. Although search engines automatically segment words, searching with whole sentences versus keywords can yield significantly different results in accuracy and order. Search engines are machines, not your teachers or colleagues. As mentioned above, searching is actually querying a database crawled by the search engine, so it's better to break down into keywords or phrases.
For example, if you want to know how to integrate vcpkg into a project instead of globally, searching for "如何将vcpkg集成到项目中而不是全局" in a long sentence may not yield relevant results. It's better to break it down into keywords like "vcpkg 集成 项目 全局".
### Replace Keywords
If you can't find what you're looking for, try replacing "项目" with "工程" or remove "集成". If that doesn't work, try advanced searching.
### Advanced Searching
Most search engines support advanced searching, including Google, Bing, Baidu, Ecosia, etc. Common formats include:
* Exact Match: Enclose the search term in quotes for precise matching.
* Exclude Keywords: Use a minus sign (-) to exclude specific words.
* Include Keywords: Use a plus sign (+) to ensure a keyword is included.
* Search Specific File Types: Use `filetype:pdf` to search for PDF files directly.
* Search Specific Websites: Use `site:stackoverflow.com` to search within a specific site.
Refer to the website instructions for specific syntax, such as [Baidu Advanced Search](https://baike.baidu.com/item/高级搜索/1743887?fr=aladdin) or [Bing Advanced Search Keywords](https://help.bing.microsoft.com/#apex/bing/zh-CHS/10001/-1).
#### GitHub Advanced Search
Use [GitHub's Advanced Search page](https://github.com/search/advanced) or refer to [GitHub Query Syntax](https://zhuanlan.zhihu.com/p/273766377) for advanced searches on GitHub. Examples include searching by repository name, description, readme, stars, fork count, size, update/creation date, license, language, user, and organization. These can be
used in combination.
### More Tips
Depending on the context, I recommend specific sites for certain queries:
* For language-specific queries (e.g., C++/Qt/OpenGL), add `site:stackoverflow.com`.
* For specific business/development environments or software-related issues, first check BugLists, IssueLists, or relevant forums.
* QQ groups are also a place to ask questions, but make sure your queries are meaningful.
* Chinese platforms like Zhihu, Jian Shu, Blog Park, and CSDN have a wealth of Chinese notes and experiences.
### About Baidu
Many programmers advise against using Baidu, preferring Google or Bing International. However, if you really need it, consider using alternatives like Ecosia or Yandex. For Chinese searches, Baidu might actually be the best option due to its database and indexing policies.
## Code Search
In addition to search engines, you might also need to search for code, either your own or from projects. Here are some recommended tools:
### Local Code Search
* ACK or ACK2, well-established search tools written in Perl.
* The Silver Searcher, implemented in C.
* The Platinum Searcher, implemented in Go.
* FreeCommander's built-in search, efficient on solid-state drives.
* IDE's built-in search, though not always the most user-friendly.
### Open Source Code Search
* [Searchcode](https://searchcode.com) for searching open source code, known for speed.
* [一行代码](https://www.alinecode.com) a useful Chinese tool for code search.
[^1]: [Introduction to How Search Engines Work - Zhihu](https://zhuanlan.zhihu.com/p/301641935)

View File

@@ -0,0 +1,122 @@
# 信息检索
## 前言
<em>碰到问题,记住第一件事是 **翻阅文档** 不要一开始就直接搜索或者找人问翻阅FAQ可能会快速找到答案。</em>
信息检索,我的理解来说,实际上就是灵活运用搜索引擎中,方便快捷的搜到需要的信息,包括但不限于编程。
编程最重要的,就是 STFW(search the fucking web) 和 RTFM(read the fucking Manual) ,首先要读文档,第二要学会搜索,网上那么多资源,怎么用,就需要信息检索。
要搜索,我们首先要搞清楚搜索引擎是如何工作的:
## 搜索引擎工作原理
搜索引擎的工作过程大体可以分成三阶段:[^1]
1. 爬行和抓取:搜索引擎蜘蛛通过跟踪链接访问网页,获取网页 HTML 代码存入数据库。
1. 预处理:索引程序对抓取来的网页数据进行文字提取,中文分词,索引等处理,以备排名程序调用。
1. 排名:用户输入关键词后,排名程序调用索引库数据,计算相关性,然后按一定格式生成搜索结果页面。
第一步,就是大家经常听说的网络爬虫,一般 Python 卖课的都会吹这个东西。简单可以理解为,我用一个自动的程序,下载网站中的所有文本、图片等相关信息,然后存入本地的磁盘。
第二步是搜索引擎的核心,但是对于我们使用来说,并不是特别关键,大致可以理解为洗干净数据,然后入库页面,每个页面加入关键字等信息方便我们查询。
第三步跟我们息息相关,不管是什么搜索网站, google 、百度、 Bing ,都一样,输入关键字或者需要查询的内容,搜索引擎会给你返回结果。本文就是教你如何获取更好的结果。
## 基础搜索技巧
根据上述的工作原理,我们大致就能明白,其实可以把搜索引擎当作一个比较聪明的数据库,更好的使用查询条件就能更快速的找到你想要的信息,下面介绍一些搜索的技巧:
### 使用英文
首先我们要知道一件事,编程中,最好使用英文搜索。原因主要有几点:
1. 编程和各种软件操作中,英文资料质量比中文资料和其他语言资料高,英文通用性还是更好些
2. 因为翻译问题,英文的名词比中文准确通用
3. 中文搜索中,分词系统不准会导致歧义,比如 Google 搜中文可能会搜不出几条有用结果
如果你英文不好,用百度翻译或者搜狗翻译,足够了。
当然下面的文档为了举例方便,都还是用中文例子。
### 提炼关键词
搜索时不要搜索整句话,虽然搜索引擎会自动帮助我们分词检索,但是整句和关键字搜索出来的结果再准确度和顺序上会有很大差别。搜索引擎是机器,并不是你的老师或者同事,看上面的流程,搜索实际上是去检索搜索引擎爬出来的数据库,你可以理解为关键字比模糊检索要快而且准确。
我们需要提炼问题,确定我们到底需要解决什么问题。
例如,我想知道 vcpkg 如何集成到工程上而不是全局中,那么搜索 `vcpkg如何集成到工程上而不是全局中` 这种长句可能无法找到相关的结果,最好是拆分成单词,`vcpkg 集成到 工程 全局` 这样的搜索。其实这里只是举个例子,针对本条其实都能搜索出相关信息,但是越具体的问题,机器分词越可能出问题,所以最好是拆分关键字,使用词组或者断句来进行搜索。
### 替换关键字
还是上面那个例子,如果搜不出来,可以试试把工程换成项目,或者移出集成,如果不行,试一下高级搜索。
### 高级搜索
普通搜索引擎一般都支持高级搜索,包括 google bing ,百度, ecosia ,等等,大部分都支持,不过可能语法不同,一般通用的表示:
* 精准匹配: 精准匹配能保证搜索关键词完全被匹配上,一般是用双引号括起来
* 比如搜索线性代数,可以在输入框内输入 "线性代数",搜索引擎将只匹配完整包含 “线性代数” 的页面,而不会搜索拆分成线性和代数两个词的页面
* 不包含关键字: 用 - 减号连接关键字,用于排除某些干扰词
* 包含关键字: 用 + 加号连接关键字
* 搜索特定文件类型: `filetype:pdf` 直接搜索 pdf 文件
* 搜索特定网址: `site:stackoverflow.com` 只搜索特定网站内的页面
一般可以参照网站说明,比如百度可以参照 [高级搜索](https://baike.baidu.com/item/高级搜索/1743887?fr=aladdin) Bing 可以参照 [高级搜索关键字](https://help.bing.microsoft.com/#apex/bing/zh-CHS/10001/-1) 和 [高级搜索选项](https://help.bing.microsoft.com/apex/index/18/zh-CHS/10002)。
#### GitHub 的高级搜索
可以直接用 [高级搜索页面](https://github.com/search/advanced) 进行搜索,也可以参照 [Github查询语法](https://zhuanlan.zhihu.com/p/273766377) 进行查找,简单说几个:
* `in:name <关键字>` 仓库名称带关键字查询
* `in:description <关键字>` 仓库描述带关键字查询
* `in:readme <关键字>` README 文件带关键字查询
* `stars(fork): >(=) <数字> <关键字>` star 或 fork 数大于(或等于)指定数字的带关键字查询
* `stars(fork): 10..20 <关键词>` star 或 fork 数在 10 到 20 之间的带关键字查询
* `size:>=5000 <关键词>` 限定仓库大于等于 5000K 的带关键字查询
* `pushed(created):>2019-11-15 <关键字>` 更新 或 创建 日期在 2019 年 11 月 16 日之后的带关键字查询
* `license:apache-2.0 <关键字>` LICENSE 为 apache-2.0 的带关键字查询
* `language:java <关键词>` 仓库语言为 Java 的带关键字查询
* `user:<用户名>` 查询某个用户的项目
* `org:<组织名>` 查询某个组织的项目
这些可以混合使用,也可以先查找某一类的 awesome 仓库,然后从 awesome 库里找相关的资源github 里有很多归纳仓库,可以先看看已有的收集,有时候会节省很多时间
### 更多技巧
使用中,实际上我会去特定网站找一些问题:
* 如果是语言本身相关,比如 c++/Qt/OpenGL 如何实现什么功能,可以直接加上 `site:stackoverflow.com`
* 如果是具体的业务/开发环境或者软件相关,可以先在 BugList 、IssueList ,或者相关论坛里先找一下,比如 Qt 的问题就可以直接去 Qt 论坛QGis 或者 GDAL 相关问题可以在 stackExchange 里去搜
* QQ 群也是一个提问的地方,但是需要你提的问题有意义,否则大部分人不会回你,而且 QQ 群回复并不及时。
* 知乎专栏、简书、博客园、 CSDN 中有大量中文笔记,这些都是别人嚼烂了的东西,基本是别人踩坑的经验
### 关于百度
大部分编程人都会告诉你别用百度,用 Google 或者 Bing 国际版,但是 Bing 中文搜索的准确率并不高, Google 需要科学上网,如果真的需要,可以使用 Ecosia 、 Yandex 之类的搜索引擎。而且中文搜索来说,百度可能还真是最好的。
百度的问题主要在于排序算法,可能两页都没啥对的内容,但是收录比 Bing 还是好一些的(百度以前并不遵守 robots.txt ,会抓取所有页面,所以有些个人网站甚至专门对百度做了屏蔽),甚至有时候比 Google 好。从数据库来说,百度比 Google 和 Bing 收录的中文内容要多,如果你碰到的时中文相关的问题而且确实找不到相关内容,那么就用百度,搜索引擎是工具,能用好用才是王道。
## 代码搜索
我们除了搜索引擎查找问题,还有可能会搜一些代码,可能是自己写的,也可能是项目中的,下面推荐一些工具:
代码检索有两种,第一是本地的代码检索,第二是要写个啥算法,需要在网上搜索
### 本地代码搜索
* ACK 或者 ACK2老牌搜索工具perl 写的
* The Silver Searcher c 实现的
* The Platinum Searcher go 实现的
* FreeCommander 自带的搜索,如果是固态硬盘速度还不错
* IDE 自带的,搜索有些时候并不太好用
### 开源代码搜索
* [Searchcode](https://searchcode.com) 搜索开源代码,速度比较快
* [一行代码](https://www.alinecode.com) 国产的,有些国产工具很好用
[^ 1]: [搜索引擎工作原理简介 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/301641935)

View File

@@ -0,0 +1,3 @@
# GFW
[This link](https://wallesspku.space/) appears here purely as a random combination of binary bits and has nothing to do with me.

View File

@@ -25,7 +25,7 @@ Although it is tough, Stanford, Berkeley, JHU and many other top U.S. colleges h
- Course Website: <https://cs162.org/>
- Lecture Videos: <https://www.youtube.com/watch?v=YfHY0pvpRkk>, videos for each lecture can be found on the course website.
- Textbook: [Operating Systems: Principles and Practice (2nd Edition)](http://ospp.cs.washington.edu/)
- Assignments: <https://cs162.org/>, 6 Homework, 3 Projects, the course website has specific requirements
- Assignments: <https://cs162.org/>, 6 Homework, 3 Projects, the course website has specific requirements.
## Personal Resources

View File

@@ -0,0 +1,29 @@
# HIT OS: Operating System
## Course Introduction
- University: Harbin Institute of Technology
- Prerequisites: C Language
- Programming Languages: C Language, Assembly
- Course Difficulty: 🌟🌟🌟🌟
- Estimated Study Hours: 100 hours+
If you search on Zhihu for questions like "how to self-study operating systems", "recommended open courses for operating systems", "computer courses you wish you had discovered earlier", etc., the operating systems course by Professor Li Zhijun of Harbin Institute of Technology (HIT) is likely to appear in the high-rated answers. It's a relatively well-known and popular Chinese computer course.
This course excels at gently guiding students from their perspective. For instance, it starts from "humbly asking, what is an operating system" to "lifting the lid of the operating system piano", deriving the concept of processes from intuitive CPU management, and introducing memory management by initially "letting the program enter memory".
The course emphasizes the combination of theory and practice. Operating systems are tangible, and Professor Li repeatedly stresses the importance of doing experiments. You won't fully grasp operating systems if you just watch videos and theorize. The course explains and conducts experiments based on actual Linux 0.11 source code (around 20,000 lines in total), with eight small labs and four projects.
Of course, this course also has minor imperfections. For example, Linux 0.11 is very early industrial code and not designed for teaching. Thus, there are some unavoidable obscure and difficult parts of the codebase in the projects, but they don't contribute much to the understanding of operating systems.
## Course Resources
- Course Website: <https://www.icourse163.org/course/HIT-1002531008>
- Course Videos: <https://www.bilibili.com/video/BV19r4y1b7Aw/?p=1>
- Course Textbook 1: [Complete Annotation of Linux Kernel](https://book.douban.com/subject/1231236//)
- Course Textbook 2: [Operating System Principles, Implementation, and Practice](https://book.douban.com/subject/30391722/)
- Course Assignments: <https://www.lanqiao.cn/courses/115>
## Complementary Resources
@NaChen95 has compiled the principles and implementations of the eight experimental assignments in this course at [NaChen95 / Linux0.11](https://github.com/NaChen95/Linux0.11).

View File

@@ -0,0 +1,29 @@
# HIT OS: Operating System
## 课程简介
- 所属大学:哈尔滨工业大学
- 先修要求C 语言
- 编程语言C 语言、汇编
- 课程难度:🌟🌟🌟🌟
- 预计学时100 小时+
如果你在知乎上搜索“操作系统如何自学”、“操作系统的公开课推荐”、“有哪些让你相见恨晚的计算机课程”等问题,哈工大李治军老师的操作系统课程大概率都会在某条高赞回答的推荐里。这是一门知名度较高、颇受欢迎的中文计算机课程。
这门课善于站在学生角度循循善诱。例如,课程从“弱弱地问,什么是操作系统”来“揭开操作系统钢琴的盖子”,从 CPU 的直观管理引出进程概念,从“那就首先让程序进入内存”引出内存管理。
这门课注重理论和实践相结合。操作系统是看得见摸得着的东西,李老师反复强调一定要做实验,如果只看视频纸上谈兵,是学不好操作系统的。课程基于实际的 Linux 0.11 源码(总代码量约两万行)进行讲解和实验,共有八个小实验,四个大实验。
当然这门课也有一些瑕不掩瑜的地方。例如Linux 0.11 是很早期工业界的代码,不是为了教学而设计的。因此在实验过程中会有一些避不开的晦涩难懂的原生代码,但它们对理解操作系统其实并没有太大帮助。
## 课程资源
- 课程网站:<https://www.icourse163.org/course/HIT-1002531008>
- 课程视频:<https://www.bilibili.com/video/BV19r4y1b7Aw/?p=1>
- 课程教材一:[《Linux 内核完全注释》](https://book.douban.com/subject/1231236//)
- 课程教材二:[《操作系统原理、实现与实践》](https://book.douban.com/subject/30391722/)
- 课程作业:<https://www.lanqiao.cn/courses/115>
## 资源汇总
@NaChen95 在学习这门课中的八个实验作业的原理分析和实现都汇总在 [NaChen95 / Linux0.11](https://github.com/NaChen95/Linux0.11) 中。

View File

@@ -30,6 +30,7 @@ In the second half of the course, the instructors will discuss a couple of class
- [Detailed Explanation of xv6](https://space.bilibili.com/1040264970/)
- [xv6 Documentation(Chinese)](https://th0ar.gitbooks.io/xv6-chinese/content/index.html)
- [line-by-line walk-through of key xv6 source codes](https://www.youtube.com/playlist?list=PLbtzT1TYeoMhTPzyTZboW_j7TPAnjv9XB)
## Complementary Resources
@@ -45,7 +46,7 @@ All resources used and assignments implemented by @PKUFlyingPig when learning th
### Some Blogs for References
- [doraemonzzz](http://doraemonzzz.com/tags/6-S081/)
- [Xiao Fan (樊潇)](https://fanxiao.tech/posts/MIT-6S081-notes/)
- [Xiao Fan (樊潇)](https://fanxiao.tech/posts/2021-03-02-mit-6s081-notes/)
- [Miigon's blog](https://blog.miigon.net/categories/mit6-s081/)
- [Zhou Fang](https://walkerzf.github.io/categories/6-S081/index.html)
- [Yichun's Blog](https://www.yichuny.page/tags/Operating%20System)

View File

@@ -30,6 +30,7 @@
- [xv6 操作系统的深入讲解](https://space.bilibili.com/1040264970/)
- [xv6 中文文档](https://th0ar.gitbooks.io/xv6-chinese/content/index.html)
- [xv6 关键源码逐行解读 + 整体架构分析](https://www.youtube.com/playlist?list=PLbtzT1TYeoMhTPzyTZboW_j7TPAnjv9XB)
## 资源汇总
@@ -45,7 +46,7 @@
### 一些可以参考的博客
- [doraemonzzz](http://doraemonzzz.com/tags/6-S081/)
- [Xiao Fan (樊潇)](https://fanxiao.tech/posts/MIT-6S081-notes/)
- [Xiao Fan (樊潇)](https://fanxiao.tech/posts/2021-03-02-mit-6s081-notes/)
- [Miigon's blog](https://blog.miigon.net/categories/mit6-s081/)
- [Zhou Fang](https://walkerzf.github.io/categories/6-S081/index.html)
- [Yichun's Blog](https://www.yichuny.page/tags/Operating%20System)

View File

@@ -0,0 +1,30 @@
# NJU OS: Operating System Design and Implementation
## Course Introduction
- **University**: Nanjing University
- **Prerequisites**: Computer Architecture + Solid C programming skills
- **Programming Language**: C
- **Course Difficulty**: 🌟🌟🌟🌟
- **Estimated Study Time**: 150 hours
I had always heard that the operating system course taught by Professor Yanyan Jiang at Nanjing University was excellent. This semester, I had the opportunity to watch his lectures on Bilibili and gained a lot. As a young professor with rich coding experience, his teaching is full of a hacker's spirit. Often in class, he would start coding in the command line on a whim, and many important points were illustrated with vivid and straightforward code examples. What struck me most was when he implemented a mini executable file and a series of binary tools to help students better understand the design philosophy of dynamic link libraries, solving many problems that had puzzled me for years.
In the course, Prof. Jiang starts from the perspective that "programs are state machines" to establish an explainable model for the "root of all evil" concurrent programs. Based on this, he discusses common methods of concurrency control and strategies for dealing with concurrency bugs. Then, he views the operating system as a series of objects (processes/threads, address spaces, files, devices, etc.) and their APIs (system calls), combined with rich practical examples to show how operating systems use these objects to virtualize hardware resources and provide various services to application software. In the final part about persistence, he builds up various storage devices from 1-bit storage media and abstracts a set of interfaces through device drivers to facilitate the design and implementation of file systems. Although I have taken many operating system courses before, this unique approach has given me many unique perspectives on system software.
In addition to its innovative theoretical instruction, the course's emphasis on practice is a key feature of Prof. Jiang's teaching. In class and through programming assignments, he subtly cultivates the ability to read source code and consult manuals, which are essential skills for computer professionals. During the fifth MiniLab, I read Microsoft's FAT file system manual in detail for the first time, gaining a very valuable experience.
The programming assignments consist of 5 MiniLabs and 4 OSLabs. Unfortunately, the grading system is only open to students at Nanjing University. However, Professor Jiang generously allowed me to participate after I emailed him. I completed the 5 MiniLabs, and the overall experience was excellent. Particularly, the second coroutine experiment left a deep impression on me, where I experienced the beauty and "terror" of context switching in a small experiment of less than a hundred lines. Also, the MiniLabs can be easily tested locally, so the lack of a grading system should not hinder self-learning. Therefore, I hope others will not collectively "harass" the professor for access.
Finally, I want to thank Professor Jiang again for designing and offering such an excellent operating system course, the first independently developed computer course from a domestic university included in this book. It's thanks to young, new-generation teachers like Professor Jiang, who teach with passion despite the heavy Tenure track evaluation, that many students have an unforgettable undergraduate experience. I also look forward to more such high-quality courses in China, which I will include in this book for the benefit of more people.
## Course Resources
- Course Website: <https://jyywiki.cn/OS/2022/index.html>
- Course Videos: <https://space.bilibili.com/202224425/channel/collectiondetail?sid=192498>
- Course Textbook: <http://pages.cs.wisc.edu/~remzi/OSTEP/>
- Course Assignments: <https://jyywiki.cn/OS/2022/index.html>
## Resource Summary
As per Professor Jiang's request, my assignment implementations are not open-sourced.

View File

@@ -10,7 +10,7 @@
之前一直听说南大的蒋炎岩老师开设的操作系统课程讲得很好,久闻不如一见,这学期有幸在 B 站观看了蒋老师的课程视频,确实收获良多。蒋老师作为非常年轻的老师,有着丰富的一线代码的经验,因此课程讲授有着满满的 Hacker 风格,课上经常“一言不合”就在命令行里开始写代码,很多重要知识点也都配有生动直白的代码示例。让我印象最为深刻的就是老师为了让学生更好地理解动态链接库的设计思想,甚至专门实现了一个迷你的可执行文件与一系列的二进制工具,让很多困扰我多年的问题都得到了解答。
这门课的讲授思路也非常有趣蒋老师先从“程序就是状态机”这一视角入手为“万恶之源”并发程序建立了状态机的转化模型并在此基础上讲授了并发控制的常见手段以及并发bug的应对方法。接着蒋老师将操作系统看作一系列对象进程/线程、地址空间、文件、设备等等)以及操作它们的 API (系统调用)并结合丰富的实际例子介绍了操作系统是如何利用这系列对象虚拟化硬件资源并给应用软件提供各类服务的。最后的可持久化部分,蒋老师从 1-bit 的存储介质讲起,一步步构建起各类存储设备,并通过设备驱动抽象出一组接口来方便地设计与实现文件系统。我之前虽然上过许多门操作系统的课程,但这种讲法确实独此一家,让我收获了很多独到的视角来看待系统软件。
这门课的讲授思路也非常有趣,蒋老师先从“程序就是状态机”这一视角入手,为“万恶之源”并发程序建立了状态机的转化模型,并在此基础上讲授了并发控制的常见手段以及并发 bug 的应对方法。接着蒋老师将操作系统看作一系列对象(进程/线程、地址空间、文件、设备等等)以及操作它们的 API (系统调用)并结合丰富的实际例子介绍了操作系统是如何利用这系列对象虚拟化硬件资源并给应用软件提供各类服务的。最后的可持久化部分,蒋老师从 1-bit 的存储介质讲起,一步步构建起各类存储设备,并通过设备驱动抽象出一组接口来方便地设计与实现文件系统。我之前虽然上过许多门操作系统的课程,但这种讲法确实独此一家,让我收获了很多独到的视角来看待系统软件。
这门课除了在理论知识的讲授部分很有新意外,注重实践也是蒋老师的一大特点。在课堂和编程作业里,蒋老师会有意无意地培养大家阅读源码、查阅手册的能力,这也是计算机从业者必备的技能。在完成第五个 MiniLab 期间,我第一次仔仔细细阅读了微软的 FAT 文件系统手册,收获了一次非常有价值的经历。
@@ -20,10 +20,10 @@
## 课程资源
- 课程网站:<http://jyywiki.cn/OS/2022/>
- 课程网站:<https://jyywiki.cn/OS/2022/index.html>
- 课程视频:<https://space.bilibili.com/202224425/channel/collectiondetail?sid=192498>
- 课程教材:<http://pages.cs.wisc.edu/~remzi/OSTEP/>
- 课程作业:<http://jyywiki.cn/OS/2022/>
- 课程作业:<https://jyywiki.cn/OS/2022/index.html>
## 资源汇总

View File

@@ -10,7 +10,7 @@
Gilbert Strang, a great mathematician at MIT, still insists on teaching in his eighties. His classic text book [Introduction to Linear Algebra](https://math.mit.edu/~gs/linearalgebra/) has been adopted as an official textbook by Tsinghua University. After reading the PDF version, I felt deeply guilty and spent more than 200 yuan to purchase a genuine version in English as collection. The cover of this book is attached below. If you can fully understand the mathematical meaning of the cover picture, then your understanding of linear algebra will definitely reach a new height.
![image](https://math.mit.edu/~gs/linearalgebra/linearalgebra5_Front.jpg)
![image](https://math.mit.edu/~gs/linearalgebra/ila5/linearalgebra5_Front.jpg)
In addition to the course materials, the famous Youtuber **3Blue1Brown**'s video series [The Essence of Linear Algebra](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab) are also great learning resources.

View File

@@ -10,7 +10,7 @@
数学大牛 Gilbert Strang 老先生年逾古稀仍坚持授课,其经典教材 [Introduction to Linear Algebra](https://math.mit.edu/~gs/linearalgebra/) 已被清华采用为官方教材。我当时看完盗版 PDF 之后深感愧疚,含泪花了两百多买了一本英文正版收藏。下面附上此书封面,如果你能完全理解封面图的数学含义,那你对线性代数的理解一定会达到新的高度。
![image](https://math.mit.edu/~gs/linearalgebra/linearalgebra5_Front.jpg)
![image](https://math.mit.edu/~gs/linearalgebra/ila5/linearalgebra5_Front.jpg)
配合油管数学网红 **3Blue1Brown** 的[线性代数的本质](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)系列视频食用更佳。

View File

@@ -1,4 +1,4 @@
# The Information Theory, Patter Recognition, and Neural Networks
# The Information Theory, Pattern Recognition, and Neural Networks
## Descriptions

View File

@@ -1,4 +1,4 @@
# The Information Theory, Patter Recognition, and Neural Networks
# The Information Theory, Pattern Recognition, and Neural Networks
## 课程简介

View File

@@ -0,0 +1,65 @@
# CMU 15-445: Database Systems
## Descriptions
- Offered by: CMU
- Prerequisites: C++, Data Structures and Algorithms
- Programming Languages: C++
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 100 hours
As an introductory course to databases at CMU, this course is taught by Andy Pavlo, a leading figure in the database field (quoted as saying, "There are only two things I care about in this world, one is my wife, the second is the database").
This is a high-quality, resource-rich introductory course to Databases.
The faculty and the CMU Database Group behind the course have open-sourced all the corresponding infrastructure (Autograder, Discord) and course materials (Lectures, Notes, Homework), enabling any student who is willing to learn about databases to enjoy an experience almost equivalent to that of a CMU student.
One of the highlights of this course is the relational database [Bustub](https://github.com/cmu-db/bustub), which was specifically developed by the CMU Database Group for teaching purposes. It requires you to modify various components of this database and implement their functionalities.
Specifically, in 15-445, you will need to implement some key components in `Bustub`, a traditional disk-oriented relational database, through the progression of four Projects.
These components include the Buffer Pool Manager (for memory management), B Plus Tree (storage engine), Query Executors & Query Optimizer (operators & optimizer), and Concurrency Control, corresponding to `Project #1` through `Project #4`.
Worth mentioning is that, during the implementation process, students can compile `bustub-shell` through `shell.cpp` to observe in real-time whether their implemented components are correct. The feedback is very sufficient.
Furthermore, as a medium-sized project written in C++, bustub covers many requirements such as program construction, code standards, unit testing, etc., making it an excellent open-source project for learning.
## Resources
- Course Website: [Fall 2019](https://15445.courses.cs.cmu.edu/fall2019/schedule.html), [Fall 2020](https://15445.courses.cs.cmu.edu/fall2020/schedule.html), [Fall 2021](https://15445.courses.cs.cmu.edu/fall2021/schedule.html), [Fall 2022](https://15445.courses.cs.cmu.edu/fall2022/schedule.html), [Spring 2023](https://15445.courses.cs.cmu.edu/spring2023/schedule.html)
- Recording: The course website is freely accessible, and the [Youtube Lectures](https://www.youtube.com/playlist?list=PLSE8ODhjZXjaKScG3l0nuOiDTTqpfnWFf) for Fall 2022 are fully open-source.
- Textbook: Database System Concepts
- Assignments: Five Projects and Five Homework
In Fall 2019, `Project #2` involved creating a hash index, and `Project #4` focused on logging and recovery.
In Fall 2020, `Project #2` was centered on `B-trees`, while `Project #4` dealt with concurrency control.
In Fall 2021, `Project #1` required the creation of a buffer pool manager, `Project #2` involved a hash index, and `Project #4` focused on concurrency control.
In Fall 2022, the curriculum was similar to that of Fall 2021, with the only change being that the hash index was replaced by a B+ tree index, and everything else remained the same.
In Spring 2023, the overall content was largely identical to Fall 2022 (buffer pool, B+ tree index, operators, concurrency control), except `Project #0` shifted to `Copy-On-Write Trie`. Additionally, a fun task of registering uppercase and lowercase functions was introduced, which allows you to see the actual effects of the functions you write directly in the compiled `bustub-shell`, providing a great sense of achievement.
It's important to note that the versions of bustub prior to 2020 are no longer maintained.
The last `Logging & Recovery` Project in Fall 2019 is broken (it may still run on the `git head` from 2019, but Gradescope doesn't provide a public version, so it is not recommended to work on it, it is sufficient to just review the code and handout).
Perhaps in the Fall 2023 version, the recovery features will be fixed, and there may also be an entirely new `Recovery Project`. Let's wait and see 🤪.
If you have the energy, I highly recommend giving all of them a try, or if there's something in the book that you don't quite understand, attempting the corresponding project can deepen your understanding (I personally suggest completing all of them, as I believe it will definitely be beneficial).
## Personal Resources
The unofficial [Discord](https://discord.com/invite/YF7dMCg) is a great platform for discussion. The chat history practically documents the challenges that other students have encountered. You can also raise your own questions or help answer others', which I believe will be a great reference.
For a guidance to get through Spring 2023, you can refer to [this article](https://zhuanlan.zhihu.com/p/637960746) by [@xzhseh](https://github.com/xzhseh) on [Zhihu](https://www.zhihu.com/) (Note: Since the article is originally written in Chinese, you may need a translator to read it :) ). It covers all the tools you need to succeed, along with guides and, most importantly, pitfalls that I've encountered, seen, or stepped into during the process of doing the Project.
All the resources and assignments used by [@ysj1173886760](https://github.com/ysj1173886760) in this course are maintained in [ysj1173886760/Learning:db - GitHub](https://github.com/ysj1173886760/Learning/tree/master/db).
Due to Andy's request, the repository does not contain the source code for the project, only the solution for homework. In particular, for Homework1, [@ysj1173886760](https://github.com/ysj1173886760) wrote a shell script to help you evaluate your solution automatically.
After the course, it is recommended to read the paper [Architecture Of a Database System](https://github.com/ysj1173886760/paper_notes/tree/master/db). This paper provides an overview of the overall architecture of database systems so that you can have a more comprehensive view of the database.
## Advanced courses
[CMU15-721](https://15721.courses.cs.cmu.edu/spring2020/) is a graduate-level course on advanced database system topics. It mainly focuses on the in-memory database, and each class has a corresponding paper to read. It is suitable for those who wish to do research in the field of databases. [@ysj1173886760](https://github.com/ysj1173886760) is currently following up on this course and will create a pull request here after completing it to provide advanced guidance.

View File

@@ -3,31 +3,56 @@
## 课程简介
- 所属大学CMU
- 先修要求C++,数据结构与算法
- 先修要求C++,数据结构与算法CMU 15-213 (A.K.A. CS:APP这也是 CMU 内部对每年 Enroll 同学的先修要求)
- 编程语言C++
- 课程难度:🌟🌟🌟🌟
- 预计学时100 小时
作为 CMU 数据库的入门课,这门课由数据库领域的大牛 Andy Pavlo 讲授(“这个世界上我只在乎两件事,一是我的老婆,二就是数据库”)。15-445 会自底向上地教你数据库系统的基本组成部分:存储、索引、查询,以及并发事务控制。
这门课的亮点在于 CMU db 专门为此课开发了一个教学用的关系型数据库 [bustub](https://github.com/cmu-db/bustub),并要求你对这个数据库的组成部分进行修改,实现上述部件的功能。此外 bustub 作为一个 C++ 编写的中小型项目涵盖了程序构建、代码规范、单元测试等众多要求,可以作为一个优秀的开源项目学习。
作为 CMU 数据库的入门课,这门课由数据库领域的大牛 Andy Pavlo 讲授(“这个世界上我只在乎两件事,一是我的老婆,二就是数据库”)。
这是一门质量极高,资源极齐全的 Database 入门课,这门课的 Faculty 和背后的 CMU Database Group 将课程对应的基础设施 (Autograder, Discord) 和课程资料 (Lectures, Notes, Homework) 完全开源,让每一个愿意学习数据库的同学都可以享受到几乎等同于 CMU 本校学生的课程体验。
这门课的亮点在于 CMU Database Group 专门为此课开发了一个教学用的关系型数据库 [bustub](https://github.com/cmu-db/bustub),并要求你对这个数据库的组成部分进行修改,实现上述部件的功能。
具体来说,在 15-445 中你需要在四个 Project 的推进中,实现一个面向磁盘的传统关系型数据库 Bustub 中的部分关键组件。
包括 Buffer Pool Manager (内存管理), B Plus Tree (存储引擎), Query Executors & Query Optimizer (算子们 & 优化器), Concurrency Control (并发控制),分别对应 `Project #1``Project #4`
值得一提的是,同学们在实现的过程中可以通过 `shell.cpp` 编译出 `bustub-shell` 来实时地观测自己实现部件的正确与否,正反馈非常足。
此外 bustub 作为一个 C++ 编写的中小型项目涵盖了程序构建、代码规范、单元测试等众多要求,可以作为一个优秀的开源项目学习。
## 课程资源
- 课程网站:[Fall2019](https://15445.courses.cs.cmu.edu/fall2019/schedule.html), [Fall2020](https://15445.courses.cs.cmu.edu/fall2020/schedule.html), [Fall2021](https://15445.courses.cs.cmu.edu/fall2021/schedule.html)
- 课程视频:课程网站免费观看
- 课程网站:[Fall 2019](https://15445.courses.cs.cmu.edu/fall2019/schedule.html), [Fall 2020](https://15445.courses.cs.cmu.edu/fall2020/schedule.html), [Fall 2021](https://15445.courses.cs.cmu.edu/fall2021/schedule.html), [Fall 2022](https://15445.courses.cs.cmu.edu/fall2022/schedule.html), [Spring 2023](https://15445.courses.cs.cmu.edu/spring2023/schedule.html)
- 课程视频:课程网站免费观看, Fall 2022 的 [Youtube 全开源 Lectures](https://www.youtube.com/playlist?list=PLSE8ODhjZXjaKScG3l0nuOiDTTqpfnWFf)
- 课程教材Database System Concepts
- 课程作业:4 个 Project
- 课程作业:5 个 Project 和 5 个 Homework
在 Fall2019 中,第二个 Project 是做哈希索引,第四个 Project 是做日志与恢复。
在 Fall 2019 中,`Project #2` 是做哈希索引,`Project #4` 是做日志与恢复。
在 Fall2020 中,第二个 Project 是做 B 树,第四个 Project 是做并发控制。
在 Fall 2020 中,`Project #2` 是做 B 树,`Project #4` 是做并发控制。
在 Fall2021 中,第二个 Project 是做缓存池管理,第三个 Project 是做哈希索引,第四个 Project 是做并发控制。
在 Fall 2021 中,`Project #1` 是做缓存池管理,`Project #2` 是做哈希索引,`Project #4` 是做并发控制。
如果大家有精力的话可以都去尝试一下,或者在对书中内容理解不是很透彻的时候,尝试用代码写一个会加深你的理解
在 Fall 2022 中,与 Fall 2021 相比只有哈希索引换成了 B+ 树索引,其余都一样
在 Spring 2023 中,大体内容和 Fall 2022 一样缓存池B+ 树索引,算子,并发控制),只不过 `Project #0` 换成了 `Copy-On-Write Trie`,同时增加了很好玩的注册大小写函数的 Task可以直接在编译出的 `bustub-shell` 中看到自己写的函数的实际效果,非常有成就感。
值得注意的是,现在 bustub 在 2020 年以前的 version 都已经停止维护。
Fall 2019 的最后一个 `Logging & Recovery` 的 Project 已经 broken 了在19年的 `git head` 上也许还可以跑,但尽管如此 Gradescope 应该也没有提供公共的版本,所以并不推荐大家去做,只看看代码和 Handout 就可以了)。
或许在 Fall 2023 的版本 Recovery 相关的功能会被修复,届时也可能有全新的 `Recovery Project`,让我们试目以待吧🤪
如果大家有精力的话可以都去尝试一下,或者在对书中内容理解不是很透彻的时候,尝试做一做对应的 Project 会加深你的理解(个人建议还是要全部做完,相信一定对你有帮助)。
## 资源汇总
非官方的 [Discord](https://discord.com/invite/YF7dMCg) 是一个很好的交流平台,过往的聊天记录几乎记载了其他同学踩过的坑,你也可以提出你的问题,或者帮忙解答别人的问题,相信这是一份很好的参考。
关于 Spring 2023 的通关指南,可以参考 [@xzhseh](https://github.com/xzhseh) 的这篇[CMU 15-445/645 (Spring 2023) Database Systems 通关指北](https://zhuanlan.zhihu.com/p/637960746),里面涵盖了全部你需要的通关道具,和通关方式建议,以及最重要的,我自己在做 Project 的过程中遇到的,看到的,和自己亲自踩过的坑。
@ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在 [ysj1173886760/Learning: db - GitHub](https://github.com/ysj1173886760/Learning/tree/master/db) 中。
由于 Andy 的要求,仓库中没有 Project 的实现,只有 Homework 的 Solution。特别的对于 Homework1@ysj1173886760 还写了一个 Shell 脚本来帮大家执行自动判分。

View File

@@ -0,0 +1,28 @@
# CMU 15-799: Special Topics in Database Systems
## Course Introduction
- **University**: Carnegie Mellon University (CMU)
- **Prerequisites**: CMU 15-445
- **Programming Language**: C++
- **Course Difficulty**: 🌟🌟🌟
- **Estimated Study Time**: 80 hours
This course has only been offered twice so far, in Fall 2013 and Spring 2022, and it discusses some cutting-edge topics in the field of databases. The Fall 2013 session covered topics like Streaming, Graph DB, NVM, etc., while the Spring 2022 session mainly focused on Self-Driving DBMS, with relevant papers provided.
The tasks for the Spring 2022 version of the course included:
1. **Task One**: Manual performance tuning based on `PostgreSQL`.
2. **Task Two**: Improving the Self-Driving DBMS based on [NoisePage Pilot](https://github.com/cmu-db/noisepage-pilot), with no limitations on features.
The teaching style is more akin to a seminar, with fewer programming assignments. This course can broaden the horizons for general students and may be particularly beneficial for those specializing in databases.
## Course Resources
- **Course Homepages**:
- [CMU15-799 - Special Topics in Database Systems (Fall 2013)](https://15799.courses.cs.cmu.edu/fall2013)
- [CMU15-799 - Special Topics: Self-Driving Database Management Systems (Spring 2022)](https://15799.courses.cs.cmu.edu/spring2022/)
- **Course Videos**: Not available
- **Course Assignments**: 2 Projects + 1 Group Project

View File

@@ -0,0 +1,31 @@
# CMU 15-799: Special Topics in Database Systems
## 课程简介
- 所属大学CMU
- 先修要求CMU 15-445
- 编程语言C++
- 课程难度:🌟🌟🌟
- 预计学时80 小时
    这门课目前只开了两次fall2013 和 spring2022讨论了数据库领域的一些前沿主题。fall2013 讨论了 Streaming、Graph DB、NVM 等spring2022 主要讨论 Self-Driving DBMS都提供有相关论文。
    spring2022 版课程任务:
    任务一:基于 `PostgreSQL` 进行手动性能调优;
    任务二:基于 [NoisePage Pilot](https://github.com/cmu-db/noisepage-pilot) 改进 Self-Driving DBMS不限特性。
    授课更贴近讲座的形式,编程任务较少。对一般同学可以开拓一下视野,对专精数据库的同学可能帮助较大。
## 课程资源
- 课程主页
- [CMU15-799 - Special Topics in Database Systems](https://15799.courses.cs.cmu.edu/fall2013)
- [CMU15-799 - Special Topics: Self-Driving Database Management Systems](https://15799.courses.cs.cmu.edu/spring2022/)
- 课程视频:暂无
- 课程作业2 Projects + 1 Group Project

View File

@@ -0,0 +1,41 @@
# Caltech CS 122: Database System Implementation
## Course Introduction
- **University**: California Institute of Technology (Caltech)
- **Prerequisites**: None
- **Programming Language**: Java
- **Course Difficulty**: 🌟🌟🌟🌟🌟
- **Estimated Study Time**: 150 hours
Caltech's course, unlike CMU15-445 which does not offer SQL layer functionality, focuses on the implementation at the SQL layer in its CS122 course labs. It covers various modules of a query optimizer, such as SQL parsing, translation, implementation of joins, statistics and cost estimation, subquery implementation, and the implementation of aggregations and group by operations. Additionally, there are experiments related to B+ trees and Write-Ahead Logging (WAL). This course is suitable for students who have completed the CMU15-445 course and are interested in query optimization.
Below is an overview of the first three assignments or lab experiments of this course:
### Assignment 1
- Provide support for delete and update statements in NanoDB.
- Add appropriate pin/unpin code to the Buffer Pool Manager.
- Improve the performance of insert statements without excessively inflating the size of the database file.
### Assignment 2
- Implement a simple plan generator to convert various parsed SQL statements into executable plans.
- Implement join plan nodes that support inner and outer joins using the nested-loop join algorithm.
- Add unit tests to ensure the correct implementation of inner and outer joins.
### Assignment 3
- Complete the collection of table statistics.
- Perform plan cost calculation for various plan nodes.
- Calculate the selectivity of various predicates that may appear in the execution plan.
- Update the tuple statistics of the plan nodes' outputs based on predicates.
For the remaining Assignments and Challenges, please refer to the course description. It is recommended to use IDEA to open the project and Maven for building, keeping in mind the log-related configurations.
## Course Resources
- Course Website: <http://courses.cms.caltech.edu/cs122/>
- Course Code: <https://gitlab.caltech.edu/cs122-19wi>
- Course Textbook: None
- Course Assignments: 7 Assignments + 2 Challenges

View File

@@ -0,0 +1,30 @@
# Stanford CS 346: Database System Implementation
## Course Introduction
- **University**: Stanford
- **Prerequisites**: None
- **Programming Language**: C++
- **Course Difficulty**: 🌟🌟🌟🌟🌟
- **Estimated Study Time**: 150 hours
RedBase, the project for CS346, involves the implementation of a simplified database system and is highly structured. The project can be divided into the following parts, which also correspond to the four labs that need to be completed:
1. **The Record Management Component**: This involves the implementation of record management functionalities.
2. **The Index Component**: Focuses on the management of B+ tree indexing.
3. **The System Management Component**: Deals with DDL statements, command-line tools, data loading commands, and metadata management.
4. **The Query Language Component**: In this part, students are required to implement the RQL Redbase Query Language, including select, insert, delete, and update statements.
5. **Extension Component**: Beyond the basic components of a database system, students must implement an extension component, which could be a Blob type, network module, join algorithms, CBO optimizer, OLAP, transactions, etc.
RedBase is an ideal follow-up project for students who have completed CMU 15-445 and wish to learn other components of a database system. Due to its manageable codebase, it allows for convenient expansion as needed. Furthermore, as it is entirely written in C++, it also serves as good practice for C++ programming skills.
## Course Resources
- Course Website: <https://web.stanford.edu/class/cs346/2015/>
- Course Code: <https://github.com/junkumar/redbase.git>
- Course Textbook: None
- Course Assignments: 4 Projects + 1 Extension

View File

@@ -0,0 +1,30 @@
# Stanford CS 346: Database System Implementation
## 课程简介
- 所属大学Stanford
- 先修要求:无
- 编程语言C++
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时150 小时
RedBase 是 cs346 的一个项目,实现了一个简易的数据库系统,项目是高度结构化的。整个项目能够被分为以下几个部分(同时也是 4 个需要完善的 lab
1. The record management component记录管理组件。
2. The index componentB+ 索引管理。
3. The System Management Componentddl语句、命令行工具、数据加载命令、元数据管理。
4. The Query Language Component在这个部分需要实现 RQL Redbase 查询语言。RQL 要实现 select、insert、delete、update 语句。
5. Extension Component除了上述数据库系统的基本功能组件还需要实现一个扩展组件可以是 Blob 类型、 网络模块、连接算法、CBO 优化器、OLAP、事务等。
RedBase 适合在学完 CMU 15-445 后继续学习数据库系统中的其他组件,因为其代码量不多,可以方便的根据需要扩展代码。同时代码完全由 C++ 编写,也可以用于练习 C++ 编程技巧。
## 课程资源
- 课程网站:<https://web.stanford.edu/class/cs346/2015/>
- 课程代码:<https://github.com/junkumar/redbase.git>
- 课程教材:无
- 课程作业4 Projects + 1 Extension

View File

@@ -3,7 +3,7 @@
## Description
- Offered by: UC Berkeley
- Prerequisites: CS61A, Linear Algebra
- Prerequisites: Data8, CS61A, Linear Algebra
- Programming Languages: Python
- Difficulty: 🌟🌟🌟
- Class Hour: 80 hours
@@ -11,7 +11,7 @@
This is Berkeley's introductory course in data science, covering the basics of data cleaning, feature extraction, data visualization, machine learning and inference, as well as common data science tools such as Pandas, Numpy, and Matplotlib. The course is also rich in interesting programming assignments, which is one of the highlights of the course.
## Resources
- Course Website: <https://ds100.org/fa21/>
- Course Website: <https://ds100.org>
- Records: refer to the course website
- Textbook: <https://www.textbook.ds100.org/intro.html>
- Assignments: refer to the course website

View File

@@ -3,7 +3,7 @@
## 课程简介
- 所属大学UC Berkeley
- 先修要求CS61A线性代数
- 先修要求:Data8, CS61A线性代数
- 编程语言Python
- 课程难度:🌟🌟🌟
- 预计学时80 小时
@@ -12,7 +12,7 @@
## 课程资源
- 课程网站:<https://ds100.org/fa21/>
- 课程网站:<https://ds100.org/>
- 课程视频:参见课程网站
- 课程教材:<https://www.textbook.ds100.org/intro.html>
- 课程作业:参见课程网站

View File

@@ -0,0 +1,20 @@
# MIT 6.006: Introduction to Algorithms
## Descriptions
- Offered by: MIT
- Prerequisites: Introductory level courses of programming (CS50/CS61A/CS106A or equivalent)
- Programming Languages: Python
- Difficulty: 🌟🌟🌟🌟🌟
- Class Hour: 100 hours+
Probably the most precious course from the EECS department of MIT. Taught by Erik Demaine, one of the geniuses in Algorithms.
Compared with CS106B/X (Data structures and algorithms using C++), 6.006 emphasizes the algorithms more. It also covers several classical data structures such as AVL trees. You may use it to learn more about algorithms after CS106B/X.
## Course Resources
- Course Website: [Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/)
- Recordings: [Fall 2011](https://www.bilibili.com/video/BV1b7411e7ZP)
- Textbooks: Introduction to Algorithms (CLRS)
- Assignments: [Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/pages/assignments/)

View File

@@ -0,0 +1,20 @@
# MIT 6.006: Introduction to Algorithms
## 课程简介
- 所属大学MIT
- 先修要求:计算机导论(CS50/CS61A or equivalent)
- 编程语言Python
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时100h+
MIT-EECS 系的瑰宝。授课老师之一是算法届的奇才 Erik Demaine. 相比较于斯坦福的 [CS106B/X](../编程入门/CS106B_CS106X.md)(基于 C++ 的数据结构与算法课程),该课程更侧重于算法方面的详细讲解。课程也覆盖了一些经典的数据结构,如 AVL 树等。个人感觉在讲解方面比 CS106B 更加详细,也弥补了 CS106B 在算法方面讲解的不足。适合在 CS106B 入门之后巩固算法知识。
不过该课程也是出了名的难,大家需要做好一定的心理准备。
## 课程资源
- 课程网站:[Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/)
- 课程视频:[Fall 2011](https://www.bilibili.com/video/BV1b7411e7ZP)
- 课程教材Introduction to Algorithms (CLRS)
- 课程作业:[Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/pages/assignments/)

View File

@@ -0,0 +1,22 @@
# MIT 6.046: Design and Analysis of Algorithms
## Descriptions
- Offered by: MIT
- Prerequisites: Introductory level courses of Algorithms (6.006/CS61B/CS106B/CS106X or equivalent)
- Programming Languages: Python
- Difficulty: 🌟🌟🌟🌟🌟
- Class Hour: 100 hours+
Part 2 of the MIT Algorithms Trilogy. Taught by Erik Demaine, Srini Devadas, and Nancy Lynch.
Compared with 6.006 where you just learn and use the algorithms directly, in 6.046 you will be required to learn a methodology to "Design and analyze" algorithms to solve certain problems. There are few programming exercises in this course, and most of the assignmnets are about proposing an algorithm and do some mathematical proofs. Therefore, it would be much harder than 6.006.
Part 3 of the MIT Algorithms Trilogy is 6.854 Advanced Algorithms. But for the most of the exercises you'll encounter in tests and job-hunting, 6.046 is definitely enough.
## Course Resources
- Course Website: [Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/)
- Recordings: [Spring 2015](https://www.bilibili.com/video/BV1A7411E737)
- Textbooks: Introduction to Algorithms (CLRS)
- Assignments: [Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/pages/assignments/)

View File

@@ -0,0 +1,22 @@
# MIT 6.046: Design and Analysis of Algorithms
## 课程简介
- 所属大学MIT
- 先修要求:算法入门(6.006/CS61B/CS106B/CS106X or equivalent)
- 编程语言Python
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时100h+
6.006的后续课程。授课老师依旧是 Erik Demaine 和 Srini Devadas此外还有一位新老师 Nancy Lynch.
相比较于“现学现用”的6.0066.046更加侧重于如何运用课上所学到的内容举一反三,设计出一套完备的算法并能够证明该算法能解决相应的问题。虽然该课程在板书以及作业中的编程语言为 Python但基本上没有编程作业绝大部分的作业都是提出要求然后需要学生进行算法设计以及合理性证明。所以该课程的难度又提高了一大截:)
在该门课程后还有一门 6.854 高级算法但对于绝大多数考试以及应聘来说学完该课程基本上已经能覆盖99%的题目了。
## 课程资源
- 课程网站:[Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/)
- 课程视频:[Spring 2015](https://www.bilibili.com/video/BV1A7411E737)
- 课程教材Introduction to Algorithms (CLRS)
- 课程作业:[Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/pages/assignments/)

View File

@@ -0,0 +1,22 @@
# CS229: Machine Learning
## Descriptions
- Offered by: Stanford
- Prerequisite requirements: Advanced Mathematics, Probability Theory, Python, Solid mathematics skills
- Programming Languages: None
- Difficulty:🌟🌟🌟🌟
- Class Hour: 100 hours
This is another ML course offered by Andrew Ng. Since it is graduate-level, it focuses more on the mathematical theory behind machine learning. If you are not satisfied with using off-the-shelf tools but want to understand the essence of the algorithm, or aspire to engage in theoretical research on machine learning, you can take this course. All the lecture notes are provided on the course website, written in a professional and theoretical way, requiring a solid mathematical background.
## Resources
- Course Website: <http://cs229.stanford.edu/syllabus.html>
- Recordings: <https://www.bilibili.com/video/BV1JE411w7Ub>
- Textbook: None, but the lecture notes is excellent.
- Assignments: Not open to the public.
## Personal Resources
All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS229 - GitHub](https://github.com/PKUFlyingPig/CS229).

View File

@@ -0,0 +1,32 @@
# Intelligent Computing Systems
## Course Overview
- University: University of Chinese Academy of Sciences
- Prerequisites: Computer Architecture, Deep Learning
- Programming Languages: Python, C++, BCL
- Course Difficulty: 🌟🌟🌟
- Estimated Hours: 100+ hours
Intelligent computing systems serve as the backbone for global AI, producing billions of devices annually, including smartphones, servers, and wearables. Training professionals for these systems is critical for China's AI industry competitiveness. Understanding intelligent computing systems is vital for computer science students, shaping their core skills.
Prof. Yunji Chen's course, taught in various universities, uses experiments to provide a holistic view of the AI tech stack. Covering deep learning frameworks, coding in low-level languages, and hardware design, the course fosters a systematic approach.
Personally, completing experiments 2-5 enhanced my grasp of deep learning frameworks. The BCL language experiment in chapter five is reminiscent of CUDA for those familiar.
I recommend the textbook for a comprehensive tech stack understanding. Deep learning-savvy students can start from chapter five to delve into deep learning framework internals.
Inspired by the course, I developed a [simple deep learning framework](https://github.com/ysj1173886760/PyToy) and plan a tutorial. Written in Python, it's code-light, suitable for students with some foundation. Future plans include more operators and potential porting to C++ for balanced performance and efficiency.
## Course Resources
- Course Website[Official Website](https://novel.ict.ac.cn/aics/)
- Course Videos[bilibili](https://space.bilibili.com/494117284)
- Course Textbook"Intelligent Computing Systems" by Chen Yunji
- Course Assignments6 experiments (including writing a convolutional operator, adding operators to TensorFlow, writing operators in BCL and integrating them into TensorFlow, etc.) (specific content can be found on the official website)
- Experiment Manual[Experiment 2.0 Guide Manual](https://forum.cambricon.com/index.php?m=content&c=index&a=show&catid=155&id=708)
- Study Notes<https://sanzo.top/categories/AI-Computing-Systems/>, notes summarized based on the experiment manual
## Resource Compilation
All resources and homework implementations used by @ysj1173886760 in this course are consolidated in [ysj1173886760/Learning: ai-system - GitHub](https://github.com/ysj1173886760/Learning/tree/master/ai-system)

View File

@@ -26,7 +26,7 @@
- 课程视频:[bilibili](https://space.bilibili.com/494117284)
- 课程教材:智能计算系统(陈云霁)
- 课程作业6 个实验(包括编写卷积算子,为 TensorFlow 添加算子,用 BCL 编写算子并集成到 TensorFlow 中等)(具体内容在官网可以找到)
- 实验手册:<http://forum.cambricon.com/show-8-708-1.html>,实验 2.0 指导手册
- 实验手册:[实验 2.0 指导手册](https://forum.cambricon.com/index.php?m=content&c=index&a=show&catid=155&id=708)
- 学习笔记:<https://sanzo.top/categories/AI-Computing-Systems/>,参考实验手册总结的笔记
## 资源汇总

View File

@@ -0,0 +1,28 @@
# CMU 10-414/714: Deep Learning Systems
## Course Overview
- University: Carnegie Mellon University (CMU)
- Prerequisites: Introduction to Systems (e.g., 15-213), Basics of Deep Learning,
Fundamental Mathematical Knowledge
- Programming Languages: Python, C++
- Difficulty: 🌟🌟🌟
- Estimated Hours: 100 hours
The rise of deep learning owes much to user-friendly frameworks like PyTorch and TensorFlow. Yet, many users remain unfamiliar with these frameworks' internals. If you're curious or aspiring to delve into deep learning framework development, this course is an excellent starting point.
Covering the full spectrum of deep learning systems, the curriculum spans top-level framework design, autodifferentiation principles, hardware acceleration, and real-world deployment. The hands-on experience includes five assignments, building a deep learning library called Needle. Needle supports automatic differentiation, GPU acceleration, and various neural networks like CNNs, RNNs, LSTMs, and Transformers.
Even for beginners, the course gradually covers simple classification and backpropagation optimization. Detailed Jupyter notebooks accompany complex neural networks, providing insights. For those with foundational knowledge, assignments post autodifferentiation are approachable, offering new understandings.
Instructors [Zico Kolter](https://zicokolter.com/) and [Tianqi Chen](https://tqchen.com/) released open-source content. Online evaluations and forums are closed, but local testing in framework code remains. Hope for an online version next fall.
## Course Resources
- Course Website<https://dlsyscourse.org>
- Course Videos<https://www.youtube.com/watch?v=qbJqOFMyIwg>
- Course Assignments<https://dlsyscourse.org/assignments/>
## Resource Compilation
All resources and assignment implementations used by @PKUFlyingPig in this course are consolidated in [PKUFlyingPig/CMU10-714 - GitHub](https://github.com/PKUFlyingPig/CMU10-714)

View File

@@ -4,9 +4,9 @@
- 所属大学CMU
- 先修要求:系统入门(eg.15-213)、深度学习入门、基本的数学知识
- 编程语言:N/A据课程主页要求熟悉Python、C/C++
- 课程难度:N/A
- 预计学时:N/A
- 编程语言Python, C++
- 课程难度:🌟🌟🌟
- 预计学时:100小时
<!-- 用一两段话介绍这门课程,内容包括但不限于:
1课程覆盖的知识点范围
@@ -15,15 +15,20 @@
4自学这门课的注意点踩过的坑、难度预警等等
5... ...
-->
这是 CMU 2022年秋季学期开设的一门新课聚焦于深度学习框架的具体实现课程 Project 会实现一个迷你的类似于 Pytorch 深度学习框架。课程免费提供了面向非 CMU 学生的在线版本9月13日正式授课作者持续跟进中
深度学习的快速发展和广泛使用很大程度上得益于一系列简单好用且强大的编程框架,例如 Pytorch 和 Tensorflow 等等。但大多数从业者只是这些框架的“调包侠”,对于这些框架内部的细节实现却了解甚少。如果你希望从事深度学习底层框架的开发,或者只是像我一样好奇这些框架的内部实现,那么这门课将会是一个很好的起点
课程的内容大纲覆盖了深度学习系统“全栈”的知识体系。从现代深度学习系统框架的顶层设计到自微分算法的原理和实现再到底层硬件加速和实际生产部署。为了更好地掌握理论知识学生将会在5个课程作业中从头开始设计和实现一个完整的深度学习库 Needle使其能对计算图进行自动微分能在 GPU 上实现硬件加速,并且支持各类损失函数、数据加载器和优化器。在此基础上,学生将实现几类常见的神经网络,包括 CNNRNNLSTMTransformer 等等。
即使你是深度学习领域的小白也不必过于担心,课程将会循序渐进地从简单分类问题和反向传播优化讲起,一些相对复杂的神经网络都会有配套的 jupyter notebook 详细地描述实现细节。如果你有一定的相关基础知识,那么在学习完自微分部分的内容之后便可以直接上手课程作业,难度虽然不大但相信一定会给你带来新的理解。
这门课两位授课教师 [Zico Kolter](https://zicokolter.com/) 和 [Tianqi Chen](https://tqchen.com/) 将所有课程内容都发布了对应的开源版本,但在线评测账号和课程论坛的注册时间已经结束,只剩下框架代码里的本地测试供大家调试代码。或许可以期待明年秋季学期的课程还会发布相应的在线版本供大家学习。
## 课程资源
- 课程网站:<https://dlsyscourse.org>
- 课程视频:N/A
- 课程教材N/A
- 课程作业TBA
- 课程视频:<https://www.youtube.com/watch?v=qbJqOFMyIwg>
- 课程作业:<https://dlsyscourse.org/assignments/>
## 资源汇总
TBA
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CMU10-714 - GitHub](https://github.com/PKUFlyingPig/CMU10-714) 中。

View File

@@ -0,0 +1,24 @@
# Machine Learning Compilation
## Course Overview
- University: Online course
- Prerequisites: Foundations in Machine Learning/Deep Learning
- Programming Language: Python
--Difficulty: 🌟🌟🌟
- Estimated Hours: 30 hours
This course, offered by top scholar Chen Tianqi during the summer of 2022, focuses on the field of machine learning compilation. As of now, this area remains cutting-edge and rapidly evolving, with no dedicated courses available domestically or internationally. If you're interested in gaining a comprehensive overview of machine learning compilation, this course is worth exploring.
The curriculum predominantly centers around the popular machine learning compilation framework [Apache TVM](https://tvm.apache.org/), co-founded by Chen Tianqi. It delves into transforming various machine learning models developed in frameworks like Tensorflow, Pytorch, and Jax into deployment patterns with higher performance and adaptability across different hardware. The course imparts knowledge at a relatively high level, presenting macro-level concepts. Each session is accompanied by a Jupyter Notebook that provides code-based explanations of the concepts. If you are involved in TVM-related programming and development, this course offers rich and standardized code examples for reference.
All course resources are open-source, with versions available in both Chinese and English. The course recordings can be found on both Bilibili and YouTube in both languages.
## Course Resources
- Course Website<https://mlc.ai/summer22-zh/>
- Course Videos[Bilibili][Bilibili_link]
- Course Notes<https://mlc.ai/zh/index.html>
- Course Assignments<https://github.com/mlc-ai/notebooks/blob/main/assignment>
[Bilibili_link]: https://www.bilibili.com/video/BV15v4y1g7EU?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349

View File

@@ -0,0 +1,13 @@
# CMU 10-708: Probabilistic Graphical Models
## Course Introduction
- **University**: Carnegie Mellon University (CMU)
- **Prerequisites**: Machine Learning, Deep Learning, Reinforcement Learning
- **Course Difficulty**: 🌟🌟🌟🌟🌟
- **Course Website**: [CMU 10-708](https://sailinglab.github.io/pgm-spring-2019/)
- **Course Resources**: The course website includes slides, notes, videos, homework, and project materials.
CMU's course on Probabilistic Graphical Models, taught by Eric P. Xing, is a foundational and advanced course on graphical models. The curriculum covers the basics of graphical models, their integration with neural networks, applications in reinforcement learning, and non-parametric methods, making it a highly rigorous and comprehensive course.
For students with a solid background in machine learning, deep learning, and reinforcement learning, this course provides a deep dive into the theoretical and practical aspects of probabilistic graphical models. The extensive resources available on the course website make it an invaluable learning tool for anyone looking to master this complex and rapidly evolving field.

View File

@@ -6,6 +6,6 @@
- 先修要求Machine Learning, Deep Learning, Reinforcement Learning
- 课程难度:🌟🌟🌟🌟🌟
- 课程网站:<https://sailinglab.github.io/pgm-spring-2019/>
- 这个网站包含了所有的资源slides, nots, video, homework, project
- 课程网站包含了所有的资源slides, notes, video, homework, and project
这门课程是 CMU 的图模型基础 + 进阶课,授课老师为 Eric P. Xing涵盖了图模型基础与神经网络的结合在强化学习中的应用以及非参数方法相当硬核
这门课程是 CMU 的图模型基础 + 进阶课,授课老师为 Eric P. Xing涵盖了图模型基础与神经网络的结合在强化学习中的应用以及非参数方法相当硬核

View File

@@ -0,0 +1,12 @@
# STATS214 / CS229M: Machine Learning Theory
## Course Introduction
- **University**: Stanford
- **Prerequisites**: Machine Learning, Deep Learning, Statistics
- **Course Difficulty**: 🌟🌟🌟🌟🌟🌟
- **Course Website**: [STATS214 / CS229M](http://web.stanford.edu/class/stats214/)
This course offers a rigorous blend of classical learning theory and the latest developments in deep learning theory, making it exceptionally challenging and comprehensive. Previously taught by Percy Liang, the course is now led by Tengyu Ma, ensuring a high level of expertise and insight into the theoretical aspects of machine learning.
The curriculum is designed for students with a solid foundation in machine learning, deep learning, and statistics, aiming to deepen their understanding of the underlying theoretical principles in these fields. This course is an excellent choice for anyone looking to gain a thorough understanding of both the traditional and contemporary theoretical approaches in machine learning.

View File

@@ -7,4 +7,4 @@
- 课程难度:🌟🌟🌟🌟🌟🌟
- 课程网站:<http://web.stanford.edu/class/stats214/>
经典学习理论 + 最新深度学习理论,非常硬核。授课老师之前是 Percy Liang现在是 Tengyu Ma
经典学习理论 + 最新深度学习理论,非常硬核。授课老师之前是 Percy Liang现在是 Tengyu Ma

View File

@@ -0,0 +1,14 @@
# STA 4273 Winter 2021: Minimizing Expectations
## Course Introduction
- **University**: University of Toronto
- **Prerequisites**: Bayesian Inference, Reinforcement Learning
- **Course Difficulty**: 🌟🌟🌟🌟🌟🌟🌟
- **Course Website**: [STA 4273 Winter 2021](https://www.cs.toronto.edu/~cmaddis/courses/sta4273_w21/)
"Minimizing Expectations" is an advanced Ph.D. level research course, focusing on the interplay between inference and control. The course is taught by Chris Maddison, a founding member of AlphaGo and a NeurIPS 2014 best paper awardee.
This course is notably challenging and is designed for students who have a strong background in Bayesian Inference and Reinforcement Learning. The curriculum explores deep theoretical concepts and their practical applications in the fields of machine learning and artificial intelligence.
Chris Maddison's expertise and his significant contributions to the field, particularly in the development of AlphaGo, make this course highly prestigious and insightful for Ph.D. students and researchers looking to deepen their understanding of inference and control in advanced machine learning contexts. The course website provides valuable resources for anyone interested in this specialized area of study.

View File

@@ -7,4 +7,4 @@
- 课程难度:🌟🌟🌟🌟🌟🌟🌟
- 课程网站:<https://www.cs.toronto.edu/~cmaddis/courses/sta4273_w21/>
这是一门较为进阶的 Ph.D. 研究课程,核心内容是 inference 和 control 之间的关系。授课老师为 Chris Maddison (AlphaGo founding member, NeurIPS 14 best paper)
这是一门较为进阶的 Ph.D. 研究课程,核心内容是 inference 和 control 之间的关系。授课老师为 Chris Maddison (AlphaGo founding member, NeurIPS 14 best paper)

View File

@@ -0,0 +1,14 @@
# Columbia STAT 8201: Deep Generative Models
## Course Introduction
- **University**: Columbia University
- **Prerequisites**: Machine Learning, Deep Learning, Graphical Models
- **Course Difficulty**: 🌟🌟🌟🌟🌟🌟
- **Course Website**: [STAT 8201](http://stat.columbia.edu/~cunningham/teaching/GR8201/)
"Deep Generative Models" is a Ph.D. level seminar course at Columbia University, taught by John Cunningham. This course is structured around weekly paper presentations and discussions, focusing on deep generative models, which represent the intersection of graphical models and neural networks and are one of the most important directions in modern machine learning.
The course is designed to explore the latest advancements and theoretical foundations in deep generative models. Participants engage in in-depth discussions about current research papers, fostering a deep understanding of the subject matter. This format not only helps students keep abreast of the latest developments in this rapidly evolving field but also sharpens their critical thinking and research skills.
Given the advanced nature of the course, it is ideal for Ph.D. students and researchers who have a solid foundation in machine learning, deep learning, and graphical models, and are looking to delve into the cutting-edge of deep generative models. The course website provides a valuable resource for accessing the curriculum and related materials.

View File

@@ -7,4 +7,4 @@
- 课程难度:🌟🌟🌟🌟🌟🌟
- 课程网站:<http://stat.columbia.edu/~cunningham/teaching/GR8201/>
这门课是一门 PhD 讨论班,每周的内容是展示 + 讨论论文,授课老师是 John Cunningham。Deep Generative Models (深度生成模型) 是图模型与神经网络的结合,也是现代机器学习最重要的方向之一
这门课是一门 PhD 讨论班,每周的内容是展示 + 讨论论文,授课老师是 John Cunningham。Deep Generative Models (深度生成模型) 是图模型与神经网络的结合,也是现代机器学习最重要的方向之一

View File

@@ -0,0 +1,56 @@
# Advanced Machine Learning
This learning path is suitable for students who have already learned the basics of machine learning (ML, NLP, CV, RL), such as senior undergraduates or junior graduate students, and have published at least one paper in top conferences (NeurIPS, ICML, ICLR, ACL, EMNLP, NAACL, CVPR, ICCV) and are interested in pursuing a research path in machine learning.
The goal of this path is to lay the theoretical groundwork for understanding and publishing papers at top machine learning conferences, especially in the track of Probabilistic Methods.
There can be multiple advanced learning paths in machine learning, and this one represents the best path as understood by the author [Yao Fu](https://franxyao.github.io/), focusing on probabilistic modeling methods under the Bayesian school and involving interdisciplinary knowledge.
## Essential Textbooks
- PRML: Pattern Recognition and Machine Learning by Christopher Bishop
- AoS: All of Statistics by Larry Wasserman
These two books respectively represent classic teachings of the Bayesian and frequentist schools, complementing each other nicely.
## Reference Books
- MLAPP: Machine Learning: A Probabilistic Perspective by Kevin Murphy
- Convex Optimization by Stephen Boyd and Lieven Vandenberghe
## Advanced Books
- W&J: Graphical Models, Exponential Families, and Variational Inference by Martin Wainwright and Michael Jordan
- Theory of Point Estimation by E. L. Lehmann and George Casella
## Reading Guidelines
### How to Approach
- Essential textbooks are a must-read.
- Reference books are like dictionaries: consult them when encountering unfamiliar concepts (instead of Wikipedia).
- Advanced books should be approached after completing the essential textbooks, which should be read multiple times for thorough understanding.
- Contrastive-comparative reading is crucial: open two books on the same topic, compare similarities, differences, and connections.
- Recall previously read papers during reading and compare them with textbook content.
### Basic Pathway
1. Start with AoS Chapter 6: Models, Statistical Inference, and Learning as a basic introduction.
2. Read PRML Chapters 10 and 11:
- Chapter 10 covers Variational Inference, and Chapter 11 covers MCMC, the two main routes for Bayesian inference.
- Consult earlier chapters in PRML or MLAPP for any unclear terms.
- AoS Chapter 8 (Parametric Inference) and Chapter 11 (Bayesian Inference) can also serve as references. Compare these chapters with the relevant PRML chapters.
3. After PRML Chapters 10 and 11, proceed to AoS Chapter 24 (Simulation Methods) and compare it with PRML Chapter 11, focusing on MCMC.
4. If foundational concepts are still unclear, review PRML Chapter 3 and compare it with AoS Chapter 11.
5. Read PRML Chapter 13 (skip Chapter 12) and compare it with MLAPP Chapters 17 and 18, focusing on HMM and LDS.
6. After completing PRML Chapter 13, move on to Chapter 8 (Graphical Models).
7. Cross-reference these topics with CMU 10-708 PGM course materials.
By this point, you should have a grasp of:
- Basic definitions of probabilistic models
- Exact inference - Sum-Product
- Approximate inference - MCMC
- Approximate inference - VI
Afterward, you can proceed to more advanced topics.

View File

@@ -2,18 +2,16 @@
此路线图适用于已经学过了基础机器学习 (ML, NLP, CV, RL) 的同学 (高年级本科生或低年级研究生),已经发表过至少一篇顶会论文 (NeurIPS, ICML, ICLR, ACL, EMNLP, NAACL, CVPR, ICCV) 想要走机器学习科研路线的选手。
此路线的目标是为读懂与发表机器学习顶会论文打下理论基础,特别是 Probabilistic Methods 这个 track 下的文章
此路线的目标是为读懂与发表机器学习顶会论文打下理论基础,特别是 Probabilistic Methods 这个 track 下的文章
机器学习进阶可能存在多种不同的学习路线,此路线只能代表作者 [Yao Fu](https://franxyao.github.io/) 所理解的最佳路径,侧重于贝叶斯学派下的概率建模方法,也会涉及到各项相关学科的交叉知识。
## 必读教材
- PRML: Pattern Recognition and Machine Learning. Christopher Bishop
- 经典贝叶斯学派教材
- AoS: All of Statistics. Larry Wasserman
- 经典频率学派教材
所以这两本书刚好相辅相成
这两本书分别是经典贝叶斯学派和经典频率学派的教材,刚好相辅相成
## 字典

View File

@@ -0,0 +1,27 @@
# CS224n: Natural Language Processing
## Course Overview
- UniversityStanford
- PrerequisitesFundations of Deep Learning + Python
- Programming LanguagePython
- Course Difficulty🌟🌟🌟🌟
- Estimated Hours80 hours
CS224n is an introductory course in Natural Language Processing (NLP) offered by Stanford and led by renowned NLP expert Chris Manning, the creator of the word2vec algorithm. The course covers core concepts in the field of NLP, including word embeddings, RNNs, LSTMs, Seq2Seq models, machine translation, attention mechanisms, Transformers, and more.
The course consists of 5 progressively challenging programming assignments covering word vectors, the word2vec algorithm, dependency parsing, machine translation, and fine-tuning a Transformer.
The final project involves training a Question Answering (QA) model on the well-known SQuAD dataset. Some students' final projects have even led to publications in top conferences.
## Course Resources
- Course Website<http://web.stanford.edu/class/cs224n/index.html>
- Course Videos: Search for 'CS224n' on Bilibili <https://www.bilibili.com/>
- Course TextbookN/A
- Course Assignments<http://web.stanford.edu/class/cs224n/index.html>5 Programming Assignments + 1 Final Project
## Resource Compilation
All resources and assignment implementations used by @PKUFlyingPig during the course are compiled in [PKUFlyingPig/CS224n - GitHub](https://github.com/PKUFlyingPig/CS224n)

View File

@@ -0,0 +1,18 @@
# CS224w: Machine Learning with Graphs
## Descriptions
- Offered by: Stanford
- Prerequisites: fundamental machine learning + Python
- Programming Language: Python, LaTeX
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 80 hours
Stanford's Introduction to Graph Neural Networks course, I haven't taken this course, but many friends who are focusing on GNN have recommended it to me, so I guess Stanford's course quality is still guaranteed as always. The instructor of this course is very young and handsome :)
## Course Resources
- Course Website: <http://web.stanford.edu/class/cs224w/>
- Lecture Videos: <https://www.youtube.com/watch?v=JAB_plj2rbA>
- Text Book: none
- Assignments: <http://web.stanford.edu/class/cs224w/>, with 6 programming assignments, 3 LaTeX written assignments

View File

@@ -0,0 +1,18 @@
# Coursera: Deep Learning
## Descriptions
- Offered by: Stanford
- Prerequisites: fundamental machine learning + Python
- Programming Language: Python
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 80 hours
Yet another popular online course offered by Andrew Ng on Coursera. It has attracted many learners and can be seen as the Bible of fundamental deep learning. The course provides well-covered projects, with clear but thorough instructions. The course starts from basic neural networks, to CNN, RNN, and all the way to Transformer, which has been a hot topic these days. After learning this course, you'll be equipped with the basic knowledge and skills for deep learning, and you may want to participate in [Kaggle](https://www.kaggle.com/) competitions to practice your skills with real tasks.
## Couse Resources
- Course Website: <https://www.coursera.org/specializations/deep-learning>
- Lecture Videos: <https://www.coursera.org/specializations/deep-learning>, can be found on Bilibili
- Text Book: none
- Assignments: <https://www.coursera.org/specializations/deep-learning>

View File

@@ -0,0 +1,18 @@
# CS231n: CNN for Visual Recognition
## Course Introduction
- Affiliated UniversitiesStanford
- Prerequisites: Foundations of Machine Learning
- Programming LanguagesPython
- Course Difficulty🌟🌟🌟🌟
- Estimated hours: 80 hours
Stanford's CV introductory class, led by the giant of the computer field, Fei-Fei Li (the research team of the epoch-making famous dataset ImageNet in CV field), but its content is relatively basic and friendly, if you have taken CS230, you can directly start the Project as practice.
## Course Resources
- Course Website<http://cs231n.stanford.edu/>
- Course Video<https://www.bilibili.com/video/BV1nJ411z7fe>
- Course Materials: None
- Coursework<http://cs231n.stanford.edu/schedule.html>3 Programming Assignments

View File

@@ -0,0 +1,22 @@
# CS285: Deep Reinforcement Learning
## Course Overview
- UniversityUC Berkeley
- PrerequisitesCS188, CS189
- Programming LanguagePython
- Course Difficulty🌟🌟🌟🌟
- Estimated Hours80 hours
The CS285 course, currently taught by Professor Sergey Levine, covers various aspects of deep reinforcement learning. It is suitable for students with a foundational understanding of machine learning, including concepts such as Markov Decision Processes (MDPs). The course involves a substantial amount of mathematical formulas, so a reasonable mathematical background is recommended. Additionally, the professor regularly updates the course content and assignments to reflect the latest research developments, making it a dynamic learning experience.
For course content access, as of the Fall 2022 semester, the teaching format involves pre-recorded videos for students to watch before class. The live sessions mainly focus on Q&A, where the professor discusses selected topics from the videos and answers students' questions. Therefore, the provided course video links already include all the content. The assignments consist of five programming projects, each involving the implementation and comparison of classical models. Occasionally, assignments may also include the reproduction of recent models. The final submission typically includes a report. Given that assignments provide a framework and often involve code completion based on hints, the difficulty level is not excessively high.
In summary, this course is suitable for beginners entering the field of deep reinforcement learning. Although the difficulty increases as the course progresses, it offers a rewarding learning experience.
## Course Resources
- Course Website: <http://rail.eecs.berkeley.edu/deeprlcourse/>
- Course Videos: <https://www.youtube.com/playlist?list=PL_iWQOsE6TfX7MaC6C3HcdOf1g337dlC9>
- Course Texbook: N/A
- Course Assignments: <http://rail.eecs.berkeley.edu/deeprlcourse/>, 5 programming assignments

View File

@@ -8,11 +8,17 @@
- 课程难度:🌟🌟🌟🌟
- 预计学时80 小时
伯克利的强化学习研究生课程所有课程录影、slides、作业代码均在网站开源。在我的收藏夹里吃灰很久了一直想找机会学习一下
CS285 这一课程现由 Sergey Levine 教授讲授课程内容覆盖了深度强化学习领域的各方面内容适合有一定机器学习基础的同学进行学习具体要求包括了解马尔可夫决策过程MDP等。整门课程中含有较多的公式上课前需要有一定的心理准备。此外教授会根据每年最新的研究进展更新课程内容以及作业课程中能感受到教授尝试将深度强化学习领域的所有基础知识以及最近的发展在短短的数节课中进行传达
有关课程内容获取22Fall 的授课方式为课前观看提前录制的视频,课上主要为 Q&A 环节教授选择部分或者所有视频内的知识进行讲解同时回答学生现场提出的问题因此所提供的课程视频链接实际上是已经包含了所有内容。课程作业则由5个编程作业组成每一次作业主要为复现经典模型以及进行模型间的对比偶尔也包含一些对最近提出的模型的复现最后递交一份报告。考虑到作业本身已经提供了框架且都是根据 hint 进行代码填空,因此作业难度并不大。
总的来说,该课程适合新手入门深度强化学习。虽然学到后面越来越感觉到难,但整门课下来个人感觉还是收获颇丰。
(另外 Levine 教授人真的很 nice
## 课程资源
- 课程网站:<http://rail.eecs.berkeley.edu/deeprlcourse/>
- 课程视频:<https://youtube.com/playlist?list=PL_iWQOsE6TfXxKgI1GgyV1B_Xa0DxE5eH>
- 课程视频:<https://www.youtube.com/playlist?list=PL_iWQOsE6TfX7MaC6C3HcdOf1g337dlC9>
- 课程教材:无
- 课程作业:<http://rail.eecs.berkeley.edu/deeprlcourse/>5个编程作业

View File

@@ -0,0 +1,60 @@
# UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision
## Course Introduction
- Offered by: UMich
- Prerequisites: Basic Python, Matrix Theory (familiarity with matrix derivation is sufficient), Calculus
- Programming Languages: Python
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 60 ~ 80 hours
The University of Michigan's Computer Vision course is of exceptionally high quality, with its videos and assignments covering an extensive range of topics.
The assignments gradually increase in difficulty and cover all stages of mainstream CV model development, making this an excellent introductory course for Computer Vision.
In each assignment, you'll build and train models or frameworks mentioned in the lectures, following the provided handouts.
You don't need any prior experience with deep learning frameworks.
The course will teach you from scratch how to use Pytorch in the early assignments, and it can subsequently serve as a reference book for you.
As each assignment deals with different themes, you'll not only gain a first-hand understanding of the development of mainstream CV models through these progressive assignments but also appreciate the impacts of different models and training methods on final performance and accuracy.
Moreover, you'll get hands-on experience in implementing them.
In Assignment 1 (A1), you'll learn how to use Pytorch and Google Colab.
In Assignment 2 (A2), you will build a Linear Classifier and a two-layer neural network. Finally, you'll have the opportunity to work with the MNIST dataset, on which you will train and evaluate your neural network.
In Assignment 3 (A3), you'll encounter the classic Convolutional Neural Network (CNN) and experience the power of convolutional neural networks.
In Assignment 4 (A4), you'll have the opportunity to build an object detection model from scratch, following the handout to implement a One-Stage Detector and a Two-Stage Detector from two research papers.
By Assignment 5 (A5), you'll transition from CNN to RNN. You'll have the opportunity to build two different attention-based models, RNNs (Vanilla RNN & LSTM), and the famous Transformer.
In the final assignment (A6), you'll get a chance to implement two more advanced models, VAE and GAN, and apply them to the MNIST dataset. Finally, you'll implement two very cool features: network visualization and style transfer.
Beyond the assignments, you can also implement a Mini-Project, building a complete deep learning pipeline. You can refer to the course homepage for specifics.
All the resources involved in the course, such as lectures, notes, and assignments, are open source.
The only downside is that the Autograder is only available to students enrolled at the University of Michigan.
However, given that the correctness of the implementation and the expected results can already be confirmed in the provided *.ipynb (i.e., the Handout), I personally feel that the absence of Autograder doesn't affect the learning process.
It's worth mentioning that the main lecturer for this course, Justin Johnson, is a Ph.D. graduate of Fei-Fei Li and currently an Assistant Professor at the University of Michigan.
The open-source 2017 version of Stanford's CS231N was taught by Justin Johnson.
Because CS231N was mainly developed by Justin Johnson and Andrej Karpathy, this course also adopts some materials from CS231N.
Therefore, students who have studied CS231N might find some materials in this course familiar.
Lastly, I recommend every student enrolled in this course to watch the lectures on YouTube. Justin Johnson's teaching style and content are very clear and easy to understand, making them a fantastic resource.
## Course Resources
- Course Website<https://web.eecs.umich.edu/~justincj/teaching/eecs498/WI2022/>
- Course Video<https://www.youtube.com/playlist?list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r>
- Course Materials: Only recommended textbooks, link: <https://www.deeplearningbook.org/>
- CourseworkSee the course homepage for details, six Assignments and one Mini-Project

View File

@@ -0,0 +1,48 @@
# UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision
## 课程简介
- 所属大学UMich
- 先修要求Python基础矩阵论(熟悉矩阵求导即可),微积分
- 编程语言Python
- 课程难度:🌟🌟🌟🌟
- 预计学时6080 小时
UMich 的 Computer Vision 课,课程视频和作业质量极高,涵盖的主题非常全,同时 Assignments 的难度由浅及深,覆盖了 CV 主流模型发展的全阶段,是一门非常好的 Computer Vision 入门课。
你在每个 Assignment 里会跟随 Handouts 搭建与训练 Lectures 中提到的模型/框架。
你不需要有任何的深度学习框架的使用经验,在开始的 Assignment 里,这门课会从零开始教导每个学生如何使用 Pytorch后续也可以当成工具书随时翻阅。
同时由于每个 Assignment 之间涉及到的主题都不同,你在递进式的 Assignment 中不仅可以亲身体会到 CV 主流模型的发展历程,领略到不同的模型和训练的方法对最终效果/准确率的影响,同时也能 Hands On 地实现它们。
在 A1 中,你会学习 Pytorch 和 Google Colab 的使用。
在 A2 中你会亲自搭建 Linear Classifier 以及一个两层的神经网络,最后你有机会亲自接触 MNIST 数据集并在此基础上训练并评估你搭建起的神经网络。
在 A3 中,你会接触到最为经典的 Convolutional Neural Network (A.K.A. CNN),亲自感受卷积神经网络的魅力。
而在 A4 中,你将实际触及搭建物体检测模型的全流程,同时跟随 Handout 实现两篇论文中的 One-Stage Detector 和 Two-Stage Detector。
到了 A5就是从 CNN 到 RNN 的时刻了你将有机会亲自搭建起两种不同的基于注意力的模型RNNs (Vanilla RNN & LSTM) 和大名鼎鼎的 Transfomer。
在最后一个 AssignmentA6你将有机会实现两种更为 Fancy 的模型VAE 和 GAN并应用在 MINST 数据集上。最后,你会实现网络可视化和风格迁移这两个非常酷炫的功能。
在 Assignments 之外,你还可以自己实现一个 Mini-Project亲自搭建起一个完整的深度学习 Pipeline具体可以参考课程主页。
课程所涉及的资源,如 Lectures/Notes/Assignments 都是开源的,美中不足的是 Autograder 只对本校 Enrolled 的学生开放,但因为在提供的 `*.ipynb`(也就是 Handout 中已经可以确定实现的正确性,以及预期的结果,所以我个人觉得 Autograder 的缺失没有任何影响。
值得一提的是,这门课的主讲教授 Justin Johnson 正是 Fei-Fei Li 的博士毕业生,现在在 UMich 当 Assistant Professor。
而现在开源的 2017 年版本的 Stanford CS231N 的主讲人就是 Justin Johnson。
同时因为 CS231N 主要是由 Justin Johnson 和 Andrej Karpathy 建设起来的,这门课也沿用了 CS231N 的一些材料,所以学过 CS231N 的同学可能会觉得这门课的某些材料比较熟悉。
最后,我推荐每一个 Enroll 这门课的同学都去看一看 Youtube 上面的 LecturesJustin Johnson 的讲课方式和内容都非常清晰和易懂,是非常棒的参考。
## 课程资源
- 课程网站:<https://web.eecs.umich.edu/~justincj/teaching/eecs498/WI2022/>
- 课程视频:<https://www.youtube.com/playlist?list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r>
- 课程教材:仅有推荐教材,链接:<https://www.deeplearningbook.org/>
- 课程作业见课程主页6 个 Assignment 和一个 Mini-Project

View File

@@ -0,0 +1,22 @@
# National Taiwan University: Machine Learning by Hung-yi Lee
## Course Overview
- University: National Taiwan University
- Prerequisites: Proficiency in Python
- Programming Language: Python
- Course Difficulty: 🌟🌟🌟🌟
- Estimated Hours80 hours
Professor Hung-yi Lee, a professor at National Taiwan University, is known for his humorous and engaging teaching style. He often incorporates fun elements like Pokémon into his slides, making the learning experience enjoyable.
Although labeled as a machine learning course, the breadth of topics covered is impressive. The course includes a total of 15 labs covering Regression, Classification, CNN, Self-Attention, Transformer, GAN, BERT, Anomaly Detection, Explainable AI, Attack, Adaptation, RL, Compression, Life-Long Learning, and Meta Learning. This wide coverage allows students to gain insights into various domains of deep learning, helping them choose areas for further in-depth study.
Don't be overly concerned about the difficulty of the assignments. All assignments come with example code from teaching assistants, guiding students through data processing, model building, and more. Students are required to make modifications based on the provided code. This presents an excellent opportunity to learn from high-quality code, and the assignments serve as valuable resources for those looking to breeze through course projects.
## Course Resources
- Course Websites<https://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.php>
- Course Videos<https://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.php>
- Course Textbook: N/A
- Course Assignments<https://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.php>, 15 labs covering a wide range of deep learning domains

Some files were not shown because too many files have changed in this diff Show More