diff --git a/docs/CS学习规划.md b/docs/CS学习规划.md index 5782fc69..b909a026 100644 --- a/docs/CS学习规划.md +++ b/docs/CS学习规划.md @@ -1,6 +1,6 @@ # 一个仅供参考的 CS 学习规划 -计算机领域方向庞杂,知识浩如烟海,每个细分领域如果深究下去都可以说学无止境。因此,一个清晰明确的学习规划是非常重要的。这一节的内容是对后续整本书的内容的一个概览,你可以将其看作是这本书的目录,按需选择自己感兴趣的内容进行学习。 +计算机领域方向庞杂,知识浩如烟海,每个细分领域如果深究下去都可以说学无止境。因此,一个清晰明确的学习规划是非常重要的。我在多年自学的尝试中也走过不少弯路,最终提炼出了下面的内容,供大家参考。 不过,在开始学习之前,先向小白们强烈推荐一个科普向系列视频 [Crash Course: Computer Science](https://www.bilibili.com/video/BV1EW411u7th),在短短 8 个小时里非常生动且全面地科普了关于计算机科学的方方面面:计算机的历史、计算机是如何运作的、组成计算机的各个重要模块、计算机科学中的重要思想等等等等。正如它的口号所说的 *Computers are not magic!*,希望看完这个视频之后,大家能对计算机科学有个全貌性地感知,从而怀着兴趣去面对下面浩如烟海的更为细致且深入的学习内容。 @@ -66,8 +66,6 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是 以下课程类别中除了含有 *基础* 和 *入门* 字眼的以外,并无明确的先后次序,大家只要满足某个课程的先修要求,完全可以根据自己的需要和喜好选择想要学习的课程。 -另外由于贡献者的不断增加,这份课程地图已经从最初我的学习经历,发展成为很多 CS 自学者的资源合集,其中难免有内容交叉甚至重复的。之所以都列出来,还是希望集百家之长,给大家尽可能多的选择与参考。 - ### 数学基础 #### 微积分与线性代数 @@ -217,7 +215,7 @@ 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://pkuos.systems)。 +[UCB CS162: Operating System](操作系统/CS162.md),伯克利的操作系统课,采用和 Stanford 同样的 Project —— 一个教学用操作系统 Pintos。我作为北京大学2022年春季学期操作系统实验班的助教,引入并改善了这个 Project,课程资源也会全部开源,具体参见[课程网站](https://https://pku-os.github.io/sp22/)。 [NJU: Operating System Design and Implementation](操作系统/NJUOS.md),南京大学的蒋炎岩老师开设的操作系统课程。蒋老师以其独到的系统视角结合丰富的代码示例将众多操作系统的概念讲得深入浅出,此外这门课的全部课程内容都是中文的,非常方便大家学习。 @@ -292,35 +290,24 @@ Berkeley 作为著名开源数据库 postgres 的发源地也不遑多让,[UCB ### 数据科学 -[UCB Data100: Principles and Techniques of Data Science](数据科学/Data100.md) +其实数据科学和机器学习与深度学习有着很紧密的联系,但可能更侧重于实践。Berkeley 的 [UCB Data100: Principles and Techniques of Data Science](数据科学/Data100.md) 通过丰富的编程练习让你在实践中掌握各类数据分析工具和算法,并带领你体验从海量的数据集中提取出想要的结果,并对未来的数据或用户的行为做出相应的预测。但这只是一门基础课,如果想学习工业级别的数据挖掘与分析技术,可以尝试 Stanford 的大数据挖掘课程 [CS246: Mining Massive Data Sets](https://web.stanford.edu/class/cs246/)。 ### 人工智能 -#### 入门课 - -[Harvard CS50’s Introduction to AI with Python](人工智能/CS50.md) - -#### 专业课 - -[UCB CS188: Introduction to Artificial Intelligence](人工智能/CS188.md) +近十年人工智能应该算是计算机界最火爆的领域。如果你不满足于整日听各路媒体争相报道人工智能相关的进展,而想真正一探究竟,那么非常推荐学习 Harvard 神课 CS50 系列的人工智能课程 [Harvard CS50: Introduction to AI with Python](人工智能/CS50.md)。课程短小精悍,覆盖了传统人工智能领域的几大分支,并配有丰富有趣的 Python 编程练习来巩固你对人工智能算法的理解。美中不足的是这门课因为面向在线自学者的缘故内容较为精简,并且不会涉及特别深入的数学理论,如果想要系统深入地学习还需要一门本科生难度的课程,例如 Berkeley 的 + [UCB CS188: Introduction to Artificial Intelligence](人工智能/CS188.md)。这门课的 Project 复刻了经典游戏糖豆人,让你运用人工智能算法玩游戏,非常有趣。 ### 机器学习 -#### 入门课 +机器学习领域近些年最重要的进展就是发展出了基于神经网络的深度学习分支,但其实很多基于统计学习的算法依然在数据分析领域有着广泛的应用。如果你之前从未接触过机器学习的相关知识,而且不想一开始就陷入艰深晦涩的数学证明,那么不妨先从 Andrew Ng (吴恩达)的 [Coursera: Machine Learning](机器学习/ML.md) 学起。这门课在机器学习领域基本无人不晓,吴恩达以其深厚的理论功底和出色的表达能力把很多艰深的算法讲得深入浅出,并且非常实用。其配套的作业也是质量相当上乘,可以帮助你快速入门。 -[Coursera: Machine Learning](机器学习/ML.md) - -#### 专业课 - -- [Stanford CS229: Machine Learning](机器学习/CS229.md) -- [UCB CS189: Introduction to Machine Learning](机器学习/CS189.md) +但上过这门课只能让你从宏观上对机器学习这一领域有一定了解,如果想真正理解那些“神奇”算法背后的数学原理甚至从事相关领域的科研工作,那么还需要一门更“数学”的课程,例如 [Stanford CS229: Machine Learning](机器学习/CS229.md) 或者 [UCB CS189: Introduction to Machine Learning](机器学习/CS189.md)。 ### 深度学习 -#### 入门课 +前几年 AlphaGo 的大热让深度学习进入了大众的视野,不少大学甚至专门成立了相关专业。很多计算机的其他领域也会借助深度学习的技术来做研究,因此基本不管你干啥多少都会接触到一些神经网络、深度学习相关的技术需求。如果想快速入门,同样推荐 Andrew Ng (吴恩达)的 [Coursera: Deep Learning](深度学习/CS230.md),质量无需多言,Coursera 上罕见的满分课程。此外如果你觉得英文课程学习起来有难度,推荐李宏毅老师的 [国立台湾大学:机器学习](深度学习/LHY.md) 课程。这门课打着机器学习的名号,却囊括了深度学习领域的几乎所有方向,非常全面,很适合你从宏观上对这个领域有一个大致的了解。而且老师本人也非常幽默,课堂金句频出。 -- [Coursera: Deep Learning](深度学习/CS230.md) -- [国立台湾大学:李宏毅机器学习](深度学习/LHY.md) +当然因为深度学习领域发展非常迅速,已经拥有了众多研究分支,如果想要进一步深入,可以按需学习下面罗列的代表课程, #### 计算机视觉 diff --git a/docs/并行与分布式系统/CS149.en.md b/docs/并行与分布式系统/CS149.en.md new file mode 100644 index 00000000..e79de46c --- /dev/null +++ b/docs/并行与分布式系统/CS149.en.md @@ -0,0 +1,24 @@ +# CMU 15-418/Stanford CS149: Parallel Computing + +## Descriptions + +- Offered by: CMU and Stanford +- Prerequisites: Computer Architecture, C++ +- Programming Languages: C++ +- Difficulty: 🌟🌟🌟🌟🌟 +- Class Hour: 150 hours + +The professor [Kayvon Fatahalian](http://www.cs.cmu.edu/~kayvonf) used to teach course 15-418 at CMU. After he became an assistant professor at Stanford, he offered a similar course, CS149 at Stanford. In general, the 15-418 version is more comprehensive and has lecture recordings, but CS149's programming assignments are more fashionable. Personally, I watched the recordings of 15-418 but completed the assignments of CS149. + +The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems, as well as to teach how to utilize hardwares and software programming frameworks (such as CUDA, MPI, OpenMP, etc.) for writing high-performance parallel programs. Due to the complexity of parallel computing architecture, this course involves a lot of advanced computer architecture and network communication content, the knowledge is quite low-level and hardcore. Meanwhile, the five assignments develop your understanding and application of upper-level abstraction through software, specifically by analyzing bottlenecks in parallel programs, writing multi-threaded synchronization code, learning CUDA programming, OpenMP programming, and the popular Spark framework, etc. It really combines theory and practice perfectly. + +## Resources + +- Course Website: [CMU15418](http://15418.courses.cs.cmu.edu/spring2016/), [CS149](https://gfxcourses.stanford.edu/cs149/fall21) +- Recordings: +- Textbook: None +- Assignments: , 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) diff --git a/docs/并行与分布式系统/MIT6.824.en.md b/docs/并行与分布式系统/MIT6.824.en.md new file mode 100644 index 00000000..11e8f91f --- /dev/null +++ b/docs/并行与分布式系统/MIT6.824.en.md @@ -0,0 +1,28 @@ +# MIT6.824: Distributed System + +## Descriptions + +- Offered by: MIT +- Prerequisites: Computer Architecture, Parallel Computing +- Programming Languages: Go +- Difficulty: 🌟🌟🌟🌟🌟🌟 +- Class Hour: 200 hours + +This course, the same as MIT 6.S081, comes from the renowned MIT PDOS Lab. The instructor, Professor Robert Morris, was once a famous hacker who created 'Morris', the first worm virus in the world. + +Each lecture will discuss a classic paper in the field of distributed systems, teaching you the important principles and key techniques of distributed systems design and implementation. The Project is known for its difficulty. In four programming assignments, you will implement a KV-store framework step by step based on the Raft consensus algorithm, allowing you to experience the randomness and complexity to implement and debug a distributed system. + +This course is so famous that you can easily have access to the project solutions on the Internet. It is highly recommended to implement the projects on your own. + +## Resources + +- Course Website: +- Assignments: refer to the course website +- Textbook: None +- Assignments: 4 torturing projects, the course website has specific requirements + +## Personal Resources + +All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/MIT6.824 - GitHub](https://github.com/PKUFlyingPig/MIT6.824) + +@[OneSizeFitsQuorum](https://github.com/OneSizeFitsQuorum) has written a [Lab Documentation](https://github.com/OneSizeFitsQuorum/MIT6.824-2021) that quite clearly describes many of the details to be considered when implementing lab 1-4 and challenge 1-2, you can read when you encounter bottlenecks ~ ~ diff --git a/docs/机器学习/CS189.en.md b/docs/机器学习/CS189.en.md new file mode 100644 index 00000000..4f665b46 --- /dev/null +++ b/docs/机器学习/CS189.en.md @@ -0,0 +1,18 @@ +# CS189: Introduction to Machine Learning + +## Descriptions + +- Offered by: UC Berkeley +- Prerequisites: CS188, CS70 +- Programming Languages: Python +- Difficulty: 🌟🌟🌟🌟 +- Class Hour: 100 Hours + +I did not take this course but used its lecture notes as reference books. From the course website, I think it is better than CS299 because all the assignments and autograder are open source. Also, this course is quite theoretical and in-depth. + +## Course Resources + +- Course Website: +- Recordings: +- Textbooks: +- Assignments: diff --git a/requirements.txt b/requirements.txt index f4b94b3c..42d42686 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ mkdocs-material==7.3.6 -mkdocs-minify-plugin >= 0.4.0 -mkdocs-git-revision-date-localized-plugin >= 0.9.3 +mkdocs-minify-plugin == 0.4.0 +mkdocs-git-revision-date-localized-plugin == 0.9.3 jinja2==3.0.0 mkdocs-static-i18n==0.46