diff --git a/docs/CS学习规划.md b/docs/CS学习规划.md index 4f6b20ed..b74476d9 100644 --- a/docs/CS学习规划.md +++ b/docs/CS学习规划.md @@ -241,11 +241,11 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是 #### 并行计算 -[CMU 15-418/Stanford CS149: Parallel Computing](并行与分布式系统/CS149.md) +[CMU 15-418/Stanford CS149: Parallel Computing](并行与分布式系统/CS149.md) 会带你深入理解现代并行计算架构的设计原则与必要权衡,并学会如何充分利用硬件资源以及软件编程框架(例如 CUDA,MPI,OpenMP 等)编写高性能的并行程序。 #### 分布式系统 -[MIT 6.824: Distributed System](并行与分布式系统/MIT6.824.md) +[MIT 6.824: Distributed System](并行与分布式系统/MIT6.824.md) 和 MIT 6.S081 一样,出品自 MIT 大名鼎鼎的 PDOS 实验室,授课老师 Robert Morris 教授曾是一位顶尖黑客,世界上第一个蠕虫病毒 Morris 病毒就是出自他之手。这门课每节课都会精读一篇分布式系统领域的经典论文,并由此传授分布式系统设计与实现的重要原则和关键技术。同时其课程 Project 也是以难度之大而闻名遐迩,4 个编程作业循序渐进带你实现一个基于 Raft 共识算法的 KV-store 框架,让你在痛苦的 debug 中体会并行与分布式带来的随机性和复杂性。 ### 系统安全 @@ -255,15 +255,11 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是 [UCB CS161: Computer Security](系统安全/CS161.md) 是伯克利的系统安全课程,会涵盖栈攻击、密码学、网站安全、网络安全等等内容。 -[ASU CSE365: Introduction to Cybersecurity](系统安全/CSE365.md) 亚利桑那州立大学的 Web 安全课程,主要涉及注入、汇编与密码学的内容。 +[SU SEED Labs](系统安全/SEEDLabs.md) 是雪城大学的网安课程,由 NSF 提供130万美元的资金支持,为网安教育开发了动手实践性的实验练习(称为 SEED Lab)。课程理论教学和动手实践并重,包含详细的开源讲义、视频教程、教科书(被印刷为多种语言)、开箱即用的基于虚拟机和 docker 的攻防环境等。目前全球有1050家研究机构在使用该项目。涵盖计算机和信息安全领域的广泛主题,包括软件安全、网络安全、Web 安全、操作系统安全和移动应用安全。 -[ASU CSE466: Computer Systems Security](系统安全/CSE466.md) 亚利桑那州立大学的系统安全课程,涉及内容全面。门槛较高,需要对 Linux, C 与 Python 充分熟悉。 +#### CTF 实践 -[SU SEED Labs](系统安全/SEEDLabs.md) 雪城大学的网安课程,由 NSF 提供130万美元的资金支持,为网安教育开发了动手实践性的实验练习(称为 SEED Lab)。课程理论教学和动手实践并重,包含详细的开源讲义、视频教程、教科书(被印刷为多种语言)、开箱即用的基于虚拟机和 docker 的攻防环境等。目前全球有1050家研究机构在使用该项目。涵盖计算机和信息安全领域的广泛主题,包括软件安全、网络安全、Web 安全、操作系统安全和移动应用安全。 - -#### 实践课程 - -掌握这些理论知识之后,还需要在实践中培养和锻炼这些“黑客素养”。[CTF 夺旗赛](https://ctf-wiki.org/)是一项比较热门的系统安全比赛,赛题中会融会贯通地考察你对计算机各个领域知识的理解和运用。北大今年也成功举办了[第 0 届和第 1 届](https://geekgame.pku.edu.cn/),鼓励大家后期踊跃参与,在实践中提高自己。下面列举一些我平时学习(摸鱼)用到的资源: +掌握这些理论知识之后,还需要在实践中培养和锻炼这些“黑客素养”。[CTF 夺旗赛](https://ctf-wiki.org/)是一项比较热门的系统安全比赛,赛题中会融会贯通地考察你对计算机各个领域知识的理解和运用。北大每年会举办[相关赛事](https://geekgame.pku.edu.cn/),鼓励大家踊跃参与,在实践中提高自己。下面列举一些我平时学习(摸鱼)用到的资源: - [CTF-wiki](https://ctf-wiki.org/) - [CTF-101](https://ctf101.org/) @@ -275,7 +271,7 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是 大名鼎鼎的 [Stanford CS144: Computer Network](计算机网络/CS144.md),8 个 Project 带你实现整个 TCP/IP 协议栈。 -如果你只是想在理论上对计算机网络有所了解,那么推荐计网著名教材《自顶向下方法》的配套学习资源 [Computer Networking: A Top-Down Approach](计算机网络/topdown.md)。 +如果你只是想在理论上对计算机网络有所了解,那么推荐阅读 [UCB CS168](计算机网络/CS168.md) 这门课程配套的[教材](https://textbook.cs168.io/)。 ### 数据库系统 @@ -289,22 +285,16 @@ Berkeley 作为著名开源数据库 postgres 的发源地也不遑多让,[UCB > 没有什么能比自己写个编译器更能加深对编译器的理解了。 -[Stanford CS143: Compilers](编译原理/CS143.md) 带你手写编译器。 +理论学习推荐阅读大名鼎鼎的《龙书》。当然动手实践才是掌握编译原理最好的方式,推荐[北京大学编译原理实践](./编译原理/PKU-Compilers.md)课程,丰富的实验配套和循序渐进的文档带你实现一个类C语言到 RISC-V 汇编的编译器。当然编译原理课程目录下也有众多其他优质实验供你选择。 -### Web开发 +### Web 开发 -前后端开发很少在计算机的培养方案里被重视,但其实掌握这项技能还是好处多多的,例如搭建自己的个人主页,抑或是给自己的课程项目做一个精彩的展示网页。 - -#### 两周速成版 - -[MIT web development course](Web开发/mitweb.md) - -#### 系统学习版 - -[Stanford CS142: Web Applications](Web开发/CS142.md) +前后端开发很少在计算机的培养方案里被重视,但其实掌握这项技能还是好处多多的,例如搭建自己的个人主页,抑或是给自己的课程项目做一个精彩的展示网页。如果你只是想两周速成,那么推荐 [MIT web development course](Web开发/mitweb.md)。如果想系统学习,推荐 [Stanford CS142: Web Applications](Web开发/CS142.md)。 ### 计算机图形学 +我本人对计算机图形学了解不多,这里收录了一些社区推荐的优质课程供大家选择: + - [Stanford CS148](计算机图形学/CS148.md) - [Games101](计算机图形学/GAMES101.md) - [Games103](计算机图形学/GAMES103.md) @@ -325,11 +315,13 @@ Berkeley 作为著名开源数据库 postgres 的发源地也不遑多让,[UCB 但上过这门课只能让你从宏观上对机器学习这一领域有一定了解,如果想真正理解那些“神奇”算法背后的数学原理甚至从事相关领域的科研工作,那么还需要一门更“数学”的课程,例如 [Stanford CS229: Machine Learning](机器学习/CS229.md) 或者 [UCB CS189: Introduction to Machine Learning](机器学习/CS189.md)。 +当然,如果你之后致力于从事机器学习理论相关的科学研究,那么可以参考 [Yao Fu](https://franxyao.github.io/) 分享的[进阶学习路线](./机器学习进阶/roadmap.md)学习一些更深入的研究生难度的课程。 + ### 深度学习 -前几年 AlphaGo 的大热让深度学习进入了大众的视野,不少大学甚至专门成立了相关专业。很多计算机的其他领域也会借助深度学习的技术来做研究,因此基本不管你干啥多少都会接触到一些神经网络、深度学习相关的技术需求。如果想快速入门,同样推荐 Andrew Ng (吴恩达)的 [Coursera: Deep Learning](深度学习/CS230.md),质量无需多言,Coursera 上罕见的满分课程。此外如果你觉得英文课程学习起来有难度,推荐李宏毅老师的 [国立台湾大学:机器学习](深度学习/LHY.md) 课程。这门课打着机器学习的名号,却囊括了深度学习领域的几乎所有方向,非常全面,很适合你从宏观上对这个领域有一个大致的了解。而且老师本人也非常幽默,课堂金句频出。 +前几年 AlphaGo 的大热让深度学习进入了大众的视野,不少大学专门成立了相关专业。很多计算机的其他领域也会借助深度学习的技术来做研究,因此基本不管你干啥多少都会接触到一些神经网络、深度学习相关的技术需求。如果想快速入门,同样推荐 Andrew Ng (吴恩达)的 [Coursera: Deep Learning](深度学习/CS230.md),质量无需多言,Coursera 上罕见的满分课程。此外如果你觉得英文课程学习起来有难度,推荐李宏毅老师的 [国立台湾大学:机器学习](深度学习/LHY.md) 课程。这门课打着机器学习的名号,却囊括了深度学习领域的几乎所有方向,非常全面,很适合你从宏观上对这个领域有一个大致的了解。而且老师本人也非常幽默,课堂金句频出。 -当然因为深度学习领域发展非常迅速,已经拥有了众多研究分支,如果想要进一步深入,可以按需学习下面罗列的代表课程, +当然因为深度学习领域发展非常迅速,已经拥有了众多研究分支,如果想要进一步深入,可以按需学习下面罗列的代表课程: #### 计算机视觉 @@ -349,6 +341,17 @@ Berkeley 作为著名开源数据库 postgres 的发源地也不遑多让,[UCB [UCB CS285: Deep Reinforcement Learning](深度学习/CS285.md) + +### 深度学习系统 + +随着深度学习模型的重要性和资源需求越来越大,针对其训练和推理相关的底层系统优化也越发重要。如果想入门这个领域,推荐 [CMU 10-414/714: Deep Learning Systems](./机器学习系统/CMU10-414.md),内容覆盖了深度学习系统“全栈”的知识体系。从现代深度学习系统框架的顶层设计,到自微分算法的原理和实现,再到底层硬件加速和实际生产部署。为了更好地掌握理论知识,学生将会在课程作业中从头开始设计和实现一个完整的深度学习库 Needle,使其能对计算图进行自动微分,能在 GPU 上实现硬件加速,并且支持各类损失函数、数据加载器和优化器。在此基础上,学生将实现几类常见的神经网络,包括 CNN,RNN,LSTM,Transformer 等等。有一定基础后,还可以学习 [Song Han](https://hanlab.mit.edu/songhan) 老师开设的 [MIT6.5940: TinyML and Efficient Deep Learning Computing](./机器学习系统/EML.md) 课程,了解让神经网络轻量化的各种关键技术,例如剪枝、量化、蒸馏、网络架构搜索等等。此外,课程中还会涉及很多更前沿的深度学习模型例如大语言模型相关的系统优化。 + +### 深度生成模型 + +随着大语言模型的爆火,了解其背后的原理才能紧跟时代潮流。可以参考笔者推荐的[学习路线](./深度生成模型/roadmap.md)进行学习。 + + + ## 定制属于你的课程地图 > 授人以鱼不如授人以渔。