├── .editorconfig ├── .github └── workflows │ └── ci.yml ├── .gitignore ├── LICENSE ├── README.md ├── docs ├── CNAME ├── CS学习规划.en.md ├── CS学习规划.md ├── Web开发 │ ├── CS142.en.md │ ├── CS142.md │ ├── CS571.en.md │ ├── CS571.md │ ├── fullstackopen.en.md │ ├── fullstackopen.md │ ├── mitweb.en.md │ └── mitweb.md ├── images │ ├── favicon.ico │ ├── logo.png │ ├── mobile_icon.png │ ├── sponsor.png │ └── title.png ├── index.en.md ├── index.md ├── 人工智能 │ ├── CS188.en.md │ ├── CS188.md │ ├── CS50.en.md │ └── CS50.md ├── 体系结构 │ ├── CA.en.md │ ├── CA.md │ ├── CS61C.en.md │ ├── CS61C.md │ ├── DDCA.en.md │ ├── DDCA.md │ ├── N2T.en.md │ └── N2T.md ├── 使用指南.en.md ├── 使用指南.md ├── 后记.md ├── 好书推荐.md ├── 并行与分布式系统 │ ├── CS149.en.md │ ├── CS149.md │ ├── MIT6.824.en.md │ └── MIT6.824.md ├── 必学工具 │ ├── CMake.en.md │ ├── CMake.md │ ├── Docker.en.md │ ├── Docker.md │ ├── Emacs.en.md │ ├── Emacs.md │ ├── GNU_Make.en.md │ ├── GNU_Make.md │ ├── Git.en.md │ ├── Git.md │ ├── GitHub.en.md │ ├── GitHub.md │ ├── LaTeX.md │ ├── Latex.en.md │ ├── Scoop.en.md │ ├── Scoop.md │ ├── Vim.en.md │ ├── Vim.md │ ├── thesis.en.md │ ├── thesis.md │ ├── tools.en.md │ ├── tools.md │ ├── workflow.en.md │ ├── workflow.md │ ├── 信息检索.en.md │ ├── 信息检索.md │ ├── 翻墙.en.md │ └── 翻墙.md ├── 操作系统 │ ├── CS162.en.md │ ├── CS162.md │ ├── HITOS.en.md │ ├── HITOS.md │ ├── MIT6.S081.en.md │ ├── MIT6.S081.md │ ├── NJUOS.en.md │ └── NJUOS.md ├── 数学基础 │ ├── MITLA.en.md │ ├── MITLA.md │ ├── MITmaths.en.md │ ├── MITmaths.md │ ├── information.en.md │ └── information.md ├── 数学进阶 │ ├── 6.042J.en.md │ ├── 6.042J.md │ ├── CS126.en.md │ ├── CS126.md │ ├── CS70.en.md │ ├── CS70.md │ ├── The_Information_Theory_Pattern_Recognition_and_Neural_Networks.en.md │ ├── The_Information_Theory_Pattern_Recognition_and_Neural_Networks.md │ ├── convex.en.md │ ├── convex.md │ ├── numerical.en.md │ └── numerical.md ├── 数据库系统 │ ├── 15445.en.md │ ├── 15445.md │ ├── 15799.en.md │ ├── 15799.md │ ├── CS122.en.md │ ├── CS122.md │ ├── CS186.en.md │ ├── CS186.md │ ├── CS346.en.md │ └── CS346.md ├── 数据科学 │ ├── Data100.en.md │ └── Data100.md ├── 数据结构与算法 │ ├── 6.006.en.md │ ├── 6.006.md │ ├── 6.046.en.md │ ├── 6.046.md │ ├── Algo.en.md │ ├── Algo.md │ ├── CS170.en.md │ ├── CS170.md │ ├── CS61B.en.md │ └── CS61B.md ├── 机器学习 │ ├── CS189.en.md │ ├── CS189.md │ ├── CS229.en.md │ ├── CS229.md │ ├── ML.en.md │ └── ML.md ├── 机器学习系统 │ ├── AICS.en.md │ ├── AICS.md │ ├── CMU10-414.en.md │ ├── CMU10-414.md │ ├── EML.en.md │ ├── EML.md │ ├── MLC.en.md │ └── MLC.md ├── 机器学习进阶 │ ├── CMU10-708.en.md │ ├── CMU10-708.md │ ├── CS229M.en.md │ ├── CS229M.md │ ├── STA4273.en.md │ ├── STA4273.md │ ├── STAT8201.en.md │ ├── STAT8201.md │ ├── roadmap.en.md │ └── roadmap.md ├── 深度学习 │ ├── CS224n.en.md │ ├── CS224n.md │ ├── CS224w.en.md │ ├── CS224w.md │ ├── CS230.en.md │ ├── CS230.md │ ├── CS231.en.md │ ├── CS231.md │ ├── CS285.en.md │ ├── CS285.md │ ├── EECS498-007.en.md │ ├── EECS498-007.md │ ├── LHY.en.md │ └── LHY.md ├── 电子基础 │ ├── EE16.en.md │ ├── EE16.md │ ├── Signals_and_Systems_AVO.en.md │ ├── Signals_and_Systems_AVO.md │ ├── signal.en.md │ └── signal.md ├── 系统安全 │ ├── CS161.en.md │ ├── CS161.md │ ├── CSE365.en.md │ ├── CSE365.md │ ├── CSE466.en.md │ ├── CSE466.md │ ├── MIT6.1600.en.md │ ├── MIT6.1600.md │ ├── MIT6.858.en.md │ ├── MIT6.858.md │ ├── SEEDLabs.en.md │ └── SEEDLabs.md ├── 编程入门 │ ├── C │ │ ├── CS50.en.md │ │ ├── CS50.md │ │ ├── Duke-Coursera-Intro-C.en.md │ │ └── Duke-Coursera-Intro-C.md │ ├── DeCal.en.md │ ├── DeCal.md │ ├── Functional │ │ ├── CS3110.en.md │ │ ├── CS3110.md │ │ ├── Haskell-MOOC.en.md │ │ └── Haskell-MOOC.md │ ├── Java │ │ ├── MIT 6.092.en.md │ │ └── MIT 6.092.md │ ├── MIT-Missing-Semester.en.md │ ├── MIT-Missing-Semester.md │ ├── Python │ │ ├── CS50P.en.md │ │ ├── CS50P.md │ │ ├── CS61A.en.md │ │ ├── CS61A.md │ │ ├── MIT6.100L.en.md │ │ └── MIT6.100L.md │ ├── Rust │ │ ├── CS110L.en.md │ │ ├── CS110L.md │ │ ├── cs220.en.md │ │ ├── cs220.md │ │ ├── cs431.en.md │ │ └── cs431.md │ └── cpp │ │ ├── AUT1400.en.md │ │ ├── AUT1400.md │ │ ├── CS106B_CS106X.en.md │ │ ├── CS106B_CS106X.md │ │ ├── CS106L.en.md │ │ └── CS106L.md ├── 编程语言设计与分析 │ ├── CS242.en.md │ ├── CS242.md │ ├── Cambridge-Semantics.en.md │ ├── Cambridge-Semantics.md │ ├── NJU-SoftwareAnalysis.en.md │ ├── NJU-SoftwareAnalysis.md │ ├── PKU-SoftwareAnalysis.en.md │ └── PKU-SoftwareAnalysis.md ├── 编译原理 │ ├── CS143.en.md │ ├── CS143.md │ ├── CS420.en.md │ ├── CS420.md │ ├── NJU-Compilers.en.md │ ├── NJU-Compilers.md │ ├── PKU-Compilers.en.md │ ├── PKU-Compilers.md │ ├── USTC-Compilers.en.md │ └── USTC-Compilers.md ├── 计算机图形学 │ ├── 15462.en.md │ ├── 15462.md │ ├── CS148.en.md │ ├── CS148.md │ ├── GAMES101.en.md │ ├── GAMES101.md │ ├── GAMES103.en.md │ ├── GAMES103.md │ ├── GAMES202.en.md │ ├── GAMES202.md │ ├── USTC ComputerGraphics.en.md │ └── USTC ComputerGraphics.md ├── 计算机系统基础 │ ├── CS110.en.md │ ├── CS110.md │ ├── CSAPP.en.md │ └── CSAPP.md ├── 计算机网络 │ ├── CS144.en.md │ ├── CS144.md │ ├── topdown.en.md │ ├── topdown.md │ ├── topdown_ustc.en.md │ └── topdown_ustc.md └── 软件工程 │ ├── 17803.en.md │ ├── 17803.md │ ├── 6031.en.md │ ├── 6031.md │ ├── CS169.en.md │ └── CS169.md ├── mkdocs.yml ├── overrides └── partials │ └── comments.html ├── requirements.txt ├── template.en.md └── template.md /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.yml] 13 | indent_size = 2 14 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | - main 8 | 9 | jobs: 10 | deploy: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | with: 15 | fetch-depth: 0 16 | 17 | - uses: actions/setup-python@v2 18 | with: 19 | python-version: 3.x 20 | 21 | - run: pip3 install -U -r requirements.txt 22 | - run: mkdocs gh-deploy --force 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .vscode/ 3 | 4 | /venv 5 | /site 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright © <2021> 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | csdiy.wiki -------------------------------------------------------------------------------- /docs/Web开发/CS142.en.md: -------------------------------------------------------------------------------- 1 | # Stanford CS142: Web Applications 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Stanford 6 | - Prerequisites: CS107 and CS108 7 | - Programming Languages: JavaScript/HTML/CSS 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | This is Stanford's Web Application course covers HTML, CSS, JavaScript, ReactJs, NodeJS, ExpressJS, Web Security, and more. Eight projects will enhance your web development skills in practice. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Recordings: 17 | - Assignments: 18 | -------------------------------------------------------------------------------- /docs/Web开发/CS142.md: -------------------------------------------------------------------------------- 1 | # Stanford CS142: Web Applications 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:有一定的编程经验 7 | - 编程语言:JavaScript/HTML/CSS 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 斯坦福的 Web 应用开发课程,内容覆盖了 HTML, CSS, JavaScript, ReactJs, NodeJS, ExpressJS, Web安全等等。8 个 Project 会让你在实战中锻炼自己的 Web 开发技巧。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频: 17 | - 课程教材:无 18 | - 课程作业: 19 | -------------------------------------------------------------------------------- /docs/Web开发/CS571.md: -------------------------------------------------------------------------------- 1 | # CS571 Building UI (React & React Native) 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:威斯康星大学麦迪逊分校(University of Wisconsin, Madison) 6 | - 先修要求:CS400(高级 Java,但个人觉得先修不必要,掌握至少一门编程语言即可) 7 | - 编程语言:JavaScript/HTML/CSS 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:每周 2 小时(讲座)+ 每周 4–10 小时(作业),持续 12 周 10 | 11 | 该课程提供了 React 前端开发和 React Native 移动端开发的最佳实践介绍,完整的同时又提纲挈领。采用 React 和 React Native 的最新版本,课程网站每学期都会更新。对于各门工具迭出的前端开发难能可贵。 12 | 13 | 同时,该课程也提供了很好的训练机会。在整个学期中,需要为较大作业量做好准备。作业所涉及的技术和知识点会在课上讲解,但不会手把手写代码(个人认为手把手写代码效率非常低,而 Udemy 上多为此类型)。由于不是保姆级课程,如果写作业时对于 React 的某些功能不确定怎么写,建议在动手之前多花些时间仔细阅读 [react.dev](https://react.dev/reference/react) 上的相关章节。作业的 starter code 提供的训练起点也恰好合适,不用为配 Node.js 环境伤脑筋。 14 | 15 | 尽管这门课程不要求预先会 Javascript/HTML/CSS,课堂上对 syntax 的介绍比较有限,建议学习和写码遇到语法问题时勤查勤问。 16 | 17 | 此外,本课程还对 Google 旗下的 ChatBot 开发工具 Dialog Flow 有较为深入的介绍和练习。还对 UX Design 的实用原则和技术有所讲解。 18 | 19 | 所有课程资料和作业都是开源的,但你需要向授课教师 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)。 20 | 21 | ## 课程资源 22 | 23 | - 课程网站: 24 | - 课程视频:请参考课程网站上标有“R”的链接 25 | - 课程作业:请参考课程网站上的相关信息 -------------------------------------------------------------------------------- /docs/Web开发/fullstackopen.en.md: -------------------------------------------------------------------------------- 1 | # University of Helsinki: Full Stack open 2022 2 | 3 | ## Descriptions 4 | 5 | - Offered by: University of Helsinki 6 | - Prerequisites: Good programming skills, basic knowledge of web programming and databases, and have mastery of the Git version management system. 7 | - Programming Languages: JavaScript/HTML/CSS/NoSQL/SQL 8 | - Difficulty: 🌟🌟 9 | - Class Hour: Varying according to the learner 10 | 11 | This course serves as an introduction to modern web application development with JavaScript. The main focus is on building single page applications with ReactJS that use REST APIs built with Node.js. The course also contains a section on GraphQL, a modern alternative to REST APIs. 12 | 13 | The course covers testing, configuration and environment management, and the use of MongoDB for storing the application’s data. 14 | 15 | ## Resources 16 | - Course Website: 17 | - Assignments: refer to the course website 18 | - Course group on Discord: 19 | - Course group on Telegram: 20 | -------------------------------------------------------------------------------- /docs/Web开发/fullstackopen.md: -------------------------------------------------------------------------------- 1 | # University of Helsinki: Full Stack open 2022 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:University of Helsinki 6 | - 先修要求:具备良好的编程技能、基本的网络编程和数据库知识,并且了解使用 Git 这个版本控制系统的基础知识。 7 | - 编程语言:JavaScript/HTML/CSS/NoSQL/SQL 8 | - 课程难度:🌟🌟 9 | - 预计学时:因人而异 10 | 11 | 本课程是介绍如何使用 JavaScript 开发现代Web应用程序。 课程的重点是使用 ReactJS 构建单页面应用程序(SPA),并使用由 Node.js 构建 REST API。该课程还包含介绍 GraphQL 的部分,这是 REST API 的现代替代方案。 12 | 13 | 课程还包括测试、配置和环境管理,以及使用 MongoDB 来存储应用的数据。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站: 18 | - 课程作业:参见课程网站 19 | - 课程 Discord 群组: 20 | - 课程 Telegram 群组: 21 | -------------------------------------------------------------------------------- /docs/Web开发/mitweb.en.md: -------------------------------------------------------------------------------- 1 | # MIT Web Development Crash Course 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: better if you are already proficient in a programming language 7 | - Programming Languages: JavaScript/HTML/CSS/NoSQL 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: Varying according to the learner 10 | 11 | [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. 12 | 13 | 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. 14 | 15 | ## Resources 16 | 17 | - Course Website: 18 | - Recordings: refer to the course website. 19 | - Assignments: refer to the course website. 20 | -------------------------------------------------------------------------------- /docs/Web开发/mitweb.md: -------------------------------------------------------------------------------- 1 | # MIT Web Development Crash Course 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:掌握至少一门编程语言 7 | - 编程语言:JavaScript/HTML/CSS/NoSQL 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:因人而异 10 | 11 | MIT 在每年 1 月份会有一个为期 4 周的 [Independent Activities Period](https://elo.mit.edu/iap/) (IAP),在这个月里,MIT 的学生和老师可以自由地开设很多有趣的课程,而这门网站开发课程就是其中之一。 12 | 13 | 在一个月的时间里,你会从零开始掌握一个网站的设计、搭建、美化、交互等等核心内容,基本覆盖了 Web 开发的前后端大部分技术栈。如果你不需要系统地学习网络开发,而只是出于兴趣想把它加入自己的技能包里,那么这门课将非常适合你。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站: 18 | - 课程视频:参见课程网站链接 19 | - 课程作业:参见课程 Schedule 20 | -------------------------------------------------------------------------------- /docs/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PKUFlyingPig/cs-self-learning/229499d1bfe51eb9ab823bcbc47928cb8cab39c2/docs/images/favicon.ico -------------------------------------------------------------------------------- /docs/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PKUFlyingPig/cs-self-learning/229499d1bfe51eb9ab823bcbc47928cb8cab39c2/docs/images/logo.png -------------------------------------------------------------------------------- /docs/images/mobile_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PKUFlyingPig/cs-self-learning/229499d1bfe51eb9ab823bcbc47928cb8cab39c2/docs/images/mobile_icon.png -------------------------------------------------------------------------------- /docs/images/sponsor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PKUFlyingPig/cs-self-learning/229499d1bfe51eb9ab823bcbc47928cb8cab39c2/docs/images/sponsor.png -------------------------------------------------------------------------------- /docs/images/title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PKUFlyingPig/cs-self-learning/229499d1bfe51eb9ab823bcbc47928cb8cab39c2/docs/images/title.png -------------------------------------------------------------------------------- /docs/人工智能/CS188.en.md: -------------------------------------------------------------------------------- 1 | # CS188: Introduction to Artificial Intelligence 2 | 3 | ## Course Overview 4 | 5 | - University:UC Berkeley 6 | - Prerequisites:CS70 7 | - Programming Language:Python 8 | - Course Difficulty:🌟🌟🌟 9 | - Estimated Hours:50 hours 10 | 11 | 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. 12 | 13 | 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. 14 | 15 | ## Course Resources 16 | 17 | - Course Websites:[Fall 2022](https://inst.eecs.berkeley.edu/~cs188/fa22/), [Fall 2018](https://inst.eecs.berkeley.edu/~cs188/fa18/index.html) 18 | - 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 19 | - Course Textbook:Artificial intelligence: A Modern Approach 20 | - Course Assignments:Online assessments for written assignments and projects, details available on the course website 21 | -------------------------------------------------------------------------------- /docs/人工智能/CS188.md: -------------------------------------------------------------------------------- 1 | # CS188: Introduction to Artificial Intelligence 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS70 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:50 小时 10 | 11 | 伯克利的人工智能入门课,课程 notes 写得非常深入浅出,基本不需要观看课程视频。课程内容的安排基本按照人工智能的经典教材 *Artificial intelligence: A Modern Approach* 的章节顺序,覆盖了搜索剪枝、约束满足问题、马尔可夫决策过程、强化学习、贝叶斯网络、隐马尔可夫模型以及基础的机器学习和神经网络的相关内容。 12 | 13 | 目前Spring 2024是最新一期视频与资料完整、开放了旁听gradescope的版本,大家可以在线完成书面作业并实时得到测评结果。同时课程的 6 个 Project 也是质量爆炸,复现了经典的 Packman(吃豆人)小游戏,会让你利用学到的 AI 知识,去实现相关算法,让你的吃豆人在迷宫里自由穿梭,躲避鬼怪,收集豆子。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站:[Spring 2024](https://inst.eecs.berkeley.edu/~cs188/sp24/) 18 | - 课程视频:每节课的链接详见课程网站 19 | - 课程教材:Artificial intelligence: A Modern Approach 20 | - 课程作业:在线测评书面作业和 Projects,详见课程网站 21 | -------------------------------------------------------------------------------- /docs/人工智能/CS50.en.md: -------------------------------------------------------------------------------- 1 | # Harvard's CS50: Introduction to AI with Python 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Harvard University 6 | - Prerequisites: Basic knowledge of probability theory and Python 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 30 10 | 11 | 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. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Recordings: 17 | - Textbooks: No textbook is needed in this course. 18 | - Assignments: with 12 programming labs of high quality mentioned above. 19 | 20 | ## Personal Resources 21 | 22 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/cs50_ai - GitHub](https://github.com/PKUFlyingPig/cs50_ai). 23 | -------------------------------------------------------------------------------- /docs/人工智能/CS50.md: -------------------------------------------------------------------------------- 1 | # CS50’s Introduction to AI with Python 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Harvard 6 | - 先修要求:基本概率论 + Python 基础 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:30 小时 10 | 11 | 一门非常基础的 AI 入门课,让人眼前一亮的是 12 个设计精巧的编程作业,都会用学到的 AI 知识去实现一个简易的游戏 AI,比如用强化学习训练一个 Nim 游戏的 AI,用 alpha-beta 剪枝去扫雷等等,非常适合新手入门或者大佬休闲。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频: 17 | - 课程教材:无 18 | - 课程作业:,12个精巧的编程作业 19 | 20 | ## 资源汇总 21 | 22 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/cs50_ai - GitHub](https://github.com/PKUFlyingPig/cs50_ai) 中。 23 | -------------------------------------------------------------------------------- /docs/体系结构/CA.md: -------------------------------------------------------------------------------- 1 | # ETH: Computer Architecture 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:ETH Zurich 6 | - 先修要求:[DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/DDCA/) 7 | - 编程语言:C/C++,verilog 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:70 小时 + 10 | 11 | 讲解计算机体系结构,授课教师是 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的补充。所提供的阅读材料十分丰富,相当于听了一学期讲座。 12 | 13 | 以下是官网的介绍: 14 | >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. 15 | 16 | 编程实践采取 Verilog 设计和模拟类 MIPS 流水线处理器的寄存器传输(RT)实现,以此加强对理论课程的理解。因此前几个实验会有 verilog 的 CPU 流水线编程。同时还将使用C语言开发一个周期精确的处理器模拟器,并使用该模拟器探索处理器设计选项。 17 | 18 | 19 | ## 课程资源 20 | 21 | - 课程网站:[2020 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start), [2022 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start) 22 | - 课程视频:官方视频详见课程网站。B站有个[2020年版本搬运](https://www.bilibili.com/video/BV1Vf4y1i7YG/?vd_source=77d47fcb2bac41ab4ad02f265b3273cf)。 23 | - 课程教材:无指定教材,每个 lecture 都有大量文献可供阅读 24 | - 课程作业:5 个 Project ,大多与内存和cache相关,具体内容见[课程网站的lab界面](https://safari.ethz.ch/architecture/fall2022/doku.php?id=labs) 25 | 26 | ## 资源汇总 27 | 国内有高校引入了这门课,因此有需要的同学可以搜索到一些资源。 28 | 29 | 30 | -------------------------------------------------------------------------------- /docs/体系结构/CS61C.en.md: -------------------------------------------------------------------------------- 1 | # CS61C: Great Ideas in Computer Architecture 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: CS61A, CS61B 7 | - Programming Languages: C 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | This is the last course in Berkeley's CS61 series, which dives into the internal of computer architecture and will make you understand how the C language is translated into RISC-V assembly language and executed on the CPU. Unlike [Nand2Tetris](https://github.com/PKUFlyingPig/cs-self-learning/blob/master/docs/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/N2T.md), this course is much more difficult and more in-depth, covering pipelining, cache, virtual memory, and concurrency-related content. 12 | 13 | The projects are very innovative and interesting. Project1 is a warmup assignment in C. In 2020Fall, you will implement the famous *Game of Life*. Project2 requires you to write a fully-connected neural network in RISC-V assembly to classify handwritten digits in MNIST dataset, which is a great exercise to write assembly code. In Project3, you will use Logisim, a digital circuit simulation software, to build a two-stage pipeline CPU from scratch and run RISC-V assembly code on it. In Project4 you will implement a toy version of Numpy, using OpenMP, SIMD, and other techniques to speed up matrix operations. 14 | 15 | In a word, this is the best computer architecture course I have ever taken. 16 | 17 | ## Course Resources 18 | 19 | - Course Website: 20 | - Recordings: [Youtube](https://www.youtube.com/playlist?list=PLDoI-XvXO0aqgoMQvogzmf7CKiSMSUS3M) 21 | - Textbook: None 22 | - Assignments: 11 Labs, 4 Projects, the course website has specific requirements. 23 | 24 | ## Personal Resources 25 | 26 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS61C-summer20 - GitHub](https://github.com/PKUFlyingPig/CS61C-summer20). 27 | -------------------------------------------------------------------------------- /docs/体系结构/CS61C.md: -------------------------------------------------------------------------------- 1 | # CS61C: Great Ideas in Computer Architecture 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS61A, CS61B 7 | - 编程语言:C 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 伯克利 CS61 系列的最后一门课程,深入计算机的硬件细节,带领学生逐步理解 C 语言是如何一步步转化为 RISC-V 汇编并在 CPU 上执行的。和 [Nand2Tetris](./N2T.md) 不同,这门课 12 | 在难度和深度上都会提高很多,具体会涉及到流水线、Cache、虚存以及并发相关的内容。 13 | 14 | 这门课的 Project 也非常新颖有趣。Project1 会让你用 C 语言写一个小程序,20 年秋季学期是著名的游戏 *Game of Life*。Project2 会让你用 RISC-V 汇编编写一个神经网络,用来 15 | 识别 MNIST 手写数字,非常锻炼你对汇编代码的理解和运用。Project3 中你会用 Logisim 这个数字电路模拟软件搭建出一个二级流水线的 CPU,并在上面运行 RISC-V 汇编代码。Project4 16 | 会让你使用 OpenMP, SIMD 等方法并行优化矩阵运算,实现一个简易的 Numpy。 17 | 18 | 总而言之,这是个人上过的最好的计算机体系结构的课程。 19 | 20 | ## 课程资源 21 | 22 | - 课程网站: 23 | - 课程视频:[B 站](https://www.bilibili.com/video/BV1fC4y147iZ), [Youtube](https://www.youtube.com/playlist?list=PLDoI-XvXO0aqgoMQvogzmf7CKiSMSUS3M) 24 | - 课程教材:无 25 | - 课程作业:11 个 Lab,4 个 Project,具体要求详见课程网站 26 | 27 | ## 资源汇总 28 | 29 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS61C-summer20 - GitHub](https://github.com/PKUFlyingPig/CS61C-summer20) 中。 30 | -------------------------------------------------------------------------------- /docs/体系结构/DDCA.en.md: -------------------------------------------------------------------------------- 1 | # Digital Design and Computer Architecture 2 | 3 | ## Descriptions 4 | 5 | - Offered by: ETH Zurich 6 | - Prerequisites: CS50 or same level course; Better have a basic knowledge of C 7 | - Programming Languages: C, Verilog, MIPS, LC3 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | In this course, Onur Mutlu, a great expert in the field of Computer Architecture, will teach you about digital circuits and computer architecture. The course is entirely from the perspective of a computer designer, starting with transistors and logic gates and extending to microarchitecture, caches, and virtual memory. It also covers many of the latest research advances in the field of computer architecture. After learning, you will master digital circuits, hardware description language Verilog, MIPS instruction set, CPU design and performance analysis, pipelining, cache, virtual memory, and so on. 12 | 13 | There are 9 labs in the course. You will use the Basys 3 FPGA board and [Vivado](https://china.xilinx.com/products/design-tools/vivado.html) to design and synthesize the circuits, starting from combinational and sequential circuits, and eventually assembly into a complete CPU. Except for assignment solutions, all the course materials are open source. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: 18 | - Recordings: 19 | - Textbook1: Patt and Patel, Introduction to Computing Systems 20 | - Textbook2: Harris and Harris, Digital Design and Computer Architecture (MIPS Edition) 21 | - Assignments: refer to the course website. 22 | -------------------------------------------------------------------------------- /docs/体系结构/DDCA.md: -------------------------------------------------------------------------------- 1 | # ETH Zurich:Digital Design and Computer Architecture 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:ETH Zurich 6 | - 先修要求:CS50 或同阶课程,最好有 C 语言基础。 7 | - 编程语言:C,Verilog,MIPS 汇编,LC3 汇编 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 体系结构领域的大牛 Onur Mutlu 来教你数字电路和计算机体系结构。课程完全从计算机设计的角度出发,从晶体管、逻辑门开始,一直讲解到微架构、缓存和虚拟内存,还会介绍 12 | 很多体系结构领域最新的研究进展。课程共有 9 个 lab,使用 Basys 3 FPGA 开发板(可自行购买)和 Xilinx 公司的 [Vivado 软件](https://china.xilinx.com/products/design-tools/vivado.html)(可在官网免费下载使用)进行电路设计,从组合电路 13 | 和时序电路开始,一直到最后部署一个完整的 CPU。课程资料除了 lab 答案和当期考试答案之外全部开源,学完之后你可以掌握计算机相关的数字电路,Verilog 硬件描述语言,MIPS 与 C 之间的转换关系,MIPS 单周期多周期流水线 CPU 的设计和性能分析,缓存,虚拟内存等重要概念。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站:[2020](https://safari.ethz.ch/digitaltechnik/spring2020/),[2023](https://safari.ethz.ch/digitaltechnik/spring2023/) 18 | - 课程视频:[youtube](https://www.youtube.com/playlist?list=PL5Q2soXY2Zi_FRrloMa2fUYWPGiZUBQo2), [B站2020年版本搬运](https://www.bilibili.com/video/BV1MA411s7qq/?vd_source=77d47fcb2bac41ab4ad02f265b3273cf) 19 | - 课程教材1:Patt and Patel, Introduction to Computing Systems 20 | - 课程教材2:Harris and Harris, Digital Design and Computer Architecture (MIPS Edition) 21 | 中文译本为《数字设计和计算机体系结构(原书第2版)》 22 | - 课程实验:9 个实验从零开始设计 MIPS CPU,详见课程网站 23 | -------------------------------------------------------------------------------- /docs/体系结构/N2T.md: -------------------------------------------------------------------------------- 1 | # Coursera: Nand2Tetris 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:希伯来大学 6 | - 先修要求:无 7 | - 编程语言:任选一个编程语言 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:40 小时 10 | 11 | [Coursera](https://www.coursera.org) 上被数万人评为满分,在全球四百多所高校、高中被采用,让一个完全没有计算机基础的人从与非门开始造一台计算机,并在上面运行俄罗斯方块小游戏。 12 | 13 | 听起来就很酷对不对?实现起来更酷!这门课分为硬件和软件两个部分。在硬件部分,你将进入 01 的世界,用与非门构造出逻辑电路,并逐步搭建出一个 CPU 来运行一套课程作者定义的简易汇编代码。在软件部分,你将编写一个编译器,将作者开发的一个名为Jack的高级语言编译为可以运行在虚拟机上的字节码,然后进一步翻译为汇编代码。你还将开发一个简易的 OS,让你的计算机支持输入输出图形界面。至此,你可以用 Jack 开发一个俄罗斯方块的小游戏,将它编译为汇编代码,运行在你用与非门搭建出的 CPU 上,通过你开发的 OS 进行交互。学完这门课程,你将对整个计算机的体系结构有一个全局且深刻的理解,对于你后续课程的学习有着莫大的帮助。 14 | 15 | 你也许会担心课程会不会很难,但这门课面向的人群是完全没有计算机基础的人,课程作者的目标是让高中生都能理解。因此,只要你按部就班跟着课程规划走,一个月内学完应该绰绰有余。麻雀虽小但是五脏俱全,这门课很好地提取出了计算机的本质,而不过多地陷于现代计算机为了性能而设计出的众多复杂细节。让学习者能在轻松愉快的学习体验中感受计算机的优雅与神奇。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[Nand2Tetris I](https://www.coursera.org/learn/build-a-computer/home/week/1), [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome) 20 | - 课程视频:详见课程网站 21 | - 课程教材:[计算机系统要素:从零开始构建现代计算机][book] 22 | - 课程作业:10 个 Project 带你造台计算机,具体要求详见课程网站 23 | 24 | [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 25 | 26 | ## 资源汇总 27 | 28 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/NandToTetris - GitHub](https://github.com/PKUFlyingPig/NandToTetris) 中。 29 | -------------------------------------------------------------------------------- /docs/后记.md: -------------------------------------------------------------------------------- 1 | # 后记 2 | 3 | 从最初的想法开始,到断断续续完成这本书,再到树洞的热烈反响,我很激动,但也五味杂陈。原来在北大这个园子里,也有那么多人,对自己的本科生涯并不满意。而这里,可是囊括了中国非常优秀的一帮年轻人。所以问题出在哪里?我不知道。 4 | 5 | 我只是个籍籍无名的本科生呀,只是一个单纯的求学者,我的目标只是想快乐地、自由地、高质量地掌握那些专业知识,我想,正在看这本书的大多数本科生也是如此,谁想付出时间但却收效甚微呢?又是谁迫使大家带着痛苦去应付呢?我不知道。 6 | 7 | 我写这本书绝不是为了鼓励大家翘课自学,试问谁不想在课堂上和那么多优秀的同学济济一堂,热烈讨论呢?谁不想遇到问题直接找老师答疑解惑呢?谁不想辛苦学习的成果可以直接化作学校承认的学分绩点呢?可如果一个兢兢业业、按时到堂的学生收获的却是痛苦,而那个一学期只有考试会出席的学生却学得自得其乐,这公平吗?我不知道。 8 | 9 | 我只是不甘,不甘心这些通过高考战胜无数人进入高校的学子本可以收获一个更快乐的本科生涯,但现实却留给了他们遗憾。我反问自己,本科教育究竟应该带给我们什么呢?是学完所有这些课程吗?倒也未必,它也许只适合我这种nerd。但我觉得,本科教育至少得展现它应有的诚意,一种分享知识的诚意,一种以人为本的诚意,一种注重学生体验的诚意。它至少不应该是一种恶意,一种拼比知识的恶意,一种胜者为王的恶意,一种让人学无所得的恶意。但这一切能改变吗?我不知道。 10 | 11 | 我只知道我做了应该做的事情,学生们会用脚投票,树洞的关注量和回帖数证明了这样一份资料是有价值的,也道出了国内CS本科教育和国外的差距。也许这样的改变是微乎其微的,但别忘了我只是一个籍籍无名的本科生,是北大信科一千多名本科生中的普通一员,是中国几百万在读本科生中的一分子,如果有更多的人站出来,每个人做一点点,也许是分享一个帖子,也许是当一门课的助教,也许是精心设计一门课的lab,更或许是将来获得教职之后开设一门高质量的课程,出版一本经典的教材。本科教育真的有什么技术壁垒吗?我看未必,教育靠的是诚意,靠的是育人之心。 12 | 13 | 今天是2021年12月12日,我期待在不久的将来这个帖子会被遗忘,大家可以满心欢喜地选着自己培养方案上的课程,做着学校自行设计的各类编程实验,课堂没有签到也能济济一堂,学生踊跃地发言互动,大家的收获可以和努力成正比,那些曾经的遗憾和痛苦可以永远成为历史。我真的很期待那一天,真的真的真的很期待。 14 | 15 |

PKUFlyingPig

16 |

2021年12月12日写于燕园

17 | -------------------------------------------------------------------------------- /docs/并行与分布式系统/CS149.md: -------------------------------------------------------------------------------- 1 | # CMU 15-418/Stanford CS149: Parallel Computing 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:CMU 和 Stanford 6 | - 先修要求:计算机体系结构,熟悉 C++ 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | [Kayvon Fatahalian](http://www.cs.cmu.edu/~kayvonf) 教授此前在 CMU 开了 15-418 这门课,后来他成为 Stanford 的助理教授后又开了类似的课程 CS149。但总体来说,15-418 包含的课程内容更丰富,并且有课程回放,但 CS149 的编程作业更 fashion 一些。我个人是观看的 15-418 的课程录影但完成的 CS149 的作业。 12 | 13 | 这门课会带你深入理解现代并行计算架构的设计原则与必要权衡,并学会如何充分利用硬件资源以及软件编程框架(例如 CUDA,MPI,OpenMP 等)编写高性能的并行程序。由于并行计算架构的复杂性,这门课会涉及诸多高级体系结构与网络通信的内容,知识点相当底层且硬核。与此同时,5 个编程作业则是从软件的层面培养学生对上层抽象的理解与运用,具体会让你分析并行程序的瓶颈、编写多线程同步代码、学习 CUDA 编程、OpenMP 编程以及前段时间大热的 Spark 框架等等。真正意义上将理论与实践完美地结合在了一起。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站:[CMU15418](http://15418.courses.cs.cmu.edu/spring2016/), [CS149](https://gfxcourses.stanford.edu/cs149/fall21) 18 | - 课程视频:[CMU15418](http://15418.courses.cs.cmu.edu/spring2016/lectures), [CS149](https://youtube.com/playlist?list=PLoROMvodv4rMp7MTFr4hQsDEcX7Bx6Odp&si=txtQiRDZ9ZZUzyRn) 19 | - 课程教材:无 20 | - 课程作业:,5 个编程作业 21 | 22 | ## 资源汇总 23 | 24 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS149-parallel-computing - GitHub](https://github.com/PKUFlyingPig/CS149-parallel-computing) 中。 25 | -------------------------------------------------------------------------------- /docs/并行与分布式系统/MIT6.824.en.md: -------------------------------------------------------------------------------- 1 | # MIT6.824: Distributed System 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: Computer Architecture, Parallel Computing 7 | - Programming Languages: Go 8 | - Difficulty: 🌟🌟🌟🌟🌟🌟 9 | - Class Hour: 200 hours 10 | 11 | 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. 12 | 13 | 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. 14 | 15 | 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. 16 | 17 | ## Resources 18 | 19 | - Course Website: 20 | - Assignments: refer to the course website. 21 | - Textbook: None 22 | - Assignments: 4 torturing projects, the course website has specific requirements. 23 | 24 | ## Personal Resources 25 | 26 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/MIT6.824 - GitHub](https://github.com/PKUFlyingPig/MIT6.824). 27 | 28 | @[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 ~ ~ 29 | -------------------------------------------------------------------------------- /docs/并行与分布式系统/MIT6.824.md: -------------------------------------------------------------------------------- 1 | # MIT6.824: Distributed System 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:计算机体系结构,并行编程 7 | - 编程语言:Go 8 | - 课程难度:🌟🌟🌟🌟🌟🌟 9 | - 预计学时:200 小时 10 | 11 | 这门课和 MIT 6.S081 一样,出品自 MIT 大名鼎鼎的 PDOS 实验室,授课老师 Robert Morris 教授曾是一位顶尖黑客,世界上第一个蠕虫病毒 Morris 病毒就是出自他之手。 12 | 13 | 这门课每节课都会精读一篇分布式系统领域的经典论文,并由此传授分布式系统设计与实现的重要原则和关键技术。同时其课程 Project 也是以其难度之大而闻名遐迩,4 个编程作业循序渐进带你实现一个基于 Raft 共识算法的 KV-store 框架,让你在痛苦的 debug 中体会并行与分布式带来的随机性和复杂性。 14 | 15 | 同样,这门课由于太过出名,网上答案无数,希望大家不要参考,而是力图自主实现整个 Project。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站: 20 | - 课程视频:参见课程网站链接 21 | - 课程视频中文翻译: 22 | - 课程教材:无,以阅读论文为主 23 | - 课程作业:4 个非常虐的 Project,具体要求参见课程网站 24 | 25 | ## 资源汇总 26 | 27 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.824 - GitHub](https://github.com/PKUFlyingPig/MIT6.824) 中。 28 | 29 | @[OneSizeFitsQuorum](https://github.com/OneSizeFitsQuorum) 的 [Lab 文档](https://github.com/OneSizeFitsQuorum/MIT6.824-2021) 较为清晰地介绍了实现 lab 1-4 和 challenge 1-2 时需要考虑的许多细节,在遇到瓶颈期时可以阅读一下~~ 30 | -------------------------------------------------------------------------------- /docs/必学工具/CMake.en.md: -------------------------------------------------------------------------------- 1 | # CMake 2 | 3 | ## Why CMake 4 | 5 | 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. 6 | 7 | ## How to learn CMake 8 | 9 | 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. 10 | -------------------------------------------------------------------------------- /docs/必学工具/CMake.md: -------------------------------------------------------------------------------- 1 | # CMake 2 | 3 | ## 为什么学习 CMake 4 | 5 | CMake 是类似于 GNU make 的跨平台自动软件构建工具,使用 CMakeLists.txt 定义构建规则,相比于 make 它提供了更多的功能,在各种软件构建上广泛使用。**强烈建议学习使用 GNU Make 和熟悉 `Makefile` 后再学习 CMake**。 6 | 7 | ## 如何学习 CMake 8 | 9 | `CMakeLists.txt` 比 `Makefile` 更为抽象,理解和使用难度也更大。现阶段很多 IDE (如 Visual Studio, CLion) 提供了自动生成 `CMakeLists.txt` 的功能,但掌握 `CMakeLists.txt` 的基本用法仍然很有必要。除了 [CMake 官方 Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html) 外,上海交通大学 IPADS 组新人培训也提供了[大约一小时的视频教程](https://www.bilibili.com/video/BV14h41187FZ)。 10 | -------------------------------------------------------------------------------- /docs/必学工具/Docker.en.md: -------------------------------------------------------------------------------- 1 | # Docker 2 | 3 | ## Why Docker 4 | 5 | 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. 6 | 7 | [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. 8 | 9 | ## How to learn Docker 10 | 11 | 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. 12 | 13 | If you're like me, reinventing the wheel, consider building a [Mini Docker](https://github.com/PKUFlyingPig/rubber-docker) yourself to deepen your understanding. 14 | 15 | [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. 16 | -------------------------------------------------------------------------------- /docs/必学工具/Docker.md: -------------------------------------------------------------------------------- 1 | # Docker 2 | 3 | ## 为什么使用 Docker 4 | 5 | 使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。 6 | 7 | [Docker](https://www.docker.com/) 的出现让环境配置变得(或许)不再折磨。简单来说 Docker 使用轻量级的“容器”(container)而不是整个操作系统去支持一个应用的配置。应用自身连同它的环境配置被打包为一个个 image 可以自由运行在不同平台的一个个 container 中,这极大地节省了所有人的时间成本。 8 | 9 | ## 如何学习 Docker 10 | 11 | [Docker 官方文档](https://docs.docker.com/)当然是最好的初学教材,但最好的导师一定是你自己——尝试去使用 Docker 才能享受它带来的便利。Docker 在工业界发展迅猛并已经非常成熟,你可以下载它的桌面端并使用图形界面。 12 | 13 | 当然,如果你像我一样,是一个疯狂的造轮子爱好者,那不妨自己亲手写一个[迷你 Docker](https://github.com/PKUFlyingPig/rubber-docker) 来加深理解。 14 | 15 | [KodeKloud Docker for the Absolute Beginner](https://kodekloud.com/courses/docker-for-the-absolute-beginner/) 全面的介绍了 Docker 的基础功能,并且有大量的配套练习,同时提供免费的云环境来完成练习。其余的云相关的课程如 Kubernetes 需要付费,但个人强烈推荐:讲解非常仔细,适合从 0 开始的新手;有配套的 Kubernetes 的实验环境,不用被搭建环境劝退。 16 | -------------------------------------------------------------------------------- /docs/必学工具/Emacs.md: -------------------------------------------------------------------------------- 1 | # Emacs 2 | 3 | ## 为什么学习 Emacs 4 | 5 | Emacs 是一个与 Vim 齐名的强大编辑器,事实上 Emacs 几乎具有 Vim 的所有好处,例如: 6 | 7 | - 只需要键盘就可以完成所有操作,大量使用快捷键,具有极高的编辑效率。 8 | - 既可以在终端无图形界面的场景下使用,也可使用有图形界面的版本获得更现代、更美观的体验。 9 | 10 | 此外,Emacs 与其它大部分编辑器最大的不同就在于其强大的扩展性。Emacs 的内核没有对用户做出任何限制,使用 Emacs Lisp 编程语言可以为 Emacs 编写任意逻辑的插件来扩展 Emacs 的功能。经过几十年的积累,Emacs 的插件生态可谓编辑器中最为丰富和强大的生态之一。有一种说法是,“Emacs 表面上是个编辑器,其实是一个操作系统”。只要稍作学习,你也可以编写属于自己的 Emacs 扩展。 11 | 12 | Emacs 对 Vim 用户也十分友好,有一个叫 [evil](https://github.com/emacs-evil/evil) 的插件可以让用户在 Emacs 中使用 Vim 的基本操作,只需要很低的迁移成本即可从 Vim 转到 Emacs。曾经有统计显示有相当一部分用户会从 Vim 转到 Emacs,但几乎没有用户从 Emacs 转到 Vim。事实上,Emacs 相对 Vim 最大的不足是纯文本编辑方面不如 Vim 的多模态编辑效率高,但凭借其强大的扩展性,Emacs 可以扬长避短,把 Vim 吸收进来,结合了二者的长处。 13 | 14 | ## 如何学习 Emacs 15 | 16 | 与 Vim 相同,Emacs 的学习曲线也比较陡峭,但一旦理解了 Emacs 的使用逻辑,就会爱不释手。然而,网上的 Emacs 资料大多不细致、不够准确,甚至有哗众取宠的嫌疑。 17 | 18 | 这里给大家推荐一个较新的中文教程[《专业 Emacs 入门》](https://www.zhihu.com/column/c_1440829147212279808),这篇教程比较系统和全面,且讲述相对比较耐心细致,在讲解 Emacs 基本逻辑的同时也给出了成套的插件推荐,读完后可以获得一个功能完善的、接近 IDE 的 Emacs,因此值得一读。学完教程只是刚刚开始,学会之后要经常使用,在使用中遇到问题勤于搜索和思考,最终才能得心应手。 19 | 20 | ## 关于键位映射 21 | 22 | Emacs 的唯一缺点便是对 Ctrl 键的使用过多,对小手指不是很友好,强烈建议更改 Ctrl 键的键盘映射。更改映射的方式与 [Vim 教程](Vim.md)中的方法相同,这里不做赘述。 23 | 24 | -------------------------------------------------------------------------------- /docs/必学工具/GNU_Make.en.md: -------------------------------------------------------------------------------- 1 | # GNU Make 2 | 3 | ## Why GNU Make 4 | 5 | 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? 6 | 7 | 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. 8 | 9 | ## How to learn GNU Make 10 | 11 | Here is a well-written [document] (https://seisman.github.io/how-to-write-makefile/overview.html) for in-depth and accessible understanding. 12 | 13 | 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. 14 | -------------------------------------------------------------------------------- /docs/必学工具/GNU_Make.md: -------------------------------------------------------------------------------- 1 | # GNU Make 2 | 3 | ## 为什么学 GNU Make 4 | 5 | 大家第一次写 hello world 程序的时候一定都记得,在编辑完 `helloworld.c` 之后,需要用 `gcc` 编译生成可执行文件,然后再执行(如果你不理解前面这段话,请先自行谷歌 *gcc 编译* 并理解相关内容)。但如果你的项目由成百上千个 C 源文件组成,并且星罗棋布在各个子目录下,你该如何将它们编译链接到一起呢?假如你的项目编译一次需要半个小时(大型项目相当常见),而你只修改了一个分号,是不是还需要再等半个小时呢? 6 | 7 | 这时候 GNU Make 就闪亮登场了,它能让你在一个脚本里(即所谓的 `Makefile`)定义整个编译流程以及各个目标文件与源文件之间的依赖关系,并且只重新编译你的修改会影响到的部分,从而降低编译的时间。 8 | 9 | ## 如何学习 GNU Make 10 | 11 | 这里有一篇写得深入浅出的[文档](https://seisman.github.io/how-to-write-makefile/overview.html)供大家参考。 12 | 13 | GNU Make 掌握起来相对容易,但用好它需要不断的练习。将它融入到自己的日常开发中,勤于学习和模仿其他优秀开源项目里的 `Makefile` 的写法,总结出适合自己的 template,久而久之,你对 GNU Make 的使用会愈加纯熟。 14 | -------------------------------------------------------------------------------- /docs/必学工具/Git.en.md: -------------------------------------------------------------------------------- 1 | # Git 2 | 3 | ## Why Git 4 | 5 | Git is a distributed version control system. The father of Linux, Linus Torvalds developed Git to maintain the version control of Linux, replacing the centralized version control tools which were difficult and costly to use. 6 | 7 | The design of Git is very elegant, but beginners usually find it very difficult to use without understanding its internal logic. It is very easy to mess up the version history if misusing the commands. 8 | 9 | Git is a powerful tool and when you finally master it, you will find all the effort paid off. 10 | 11 | ## How to learn Git 12 | 13 | Different from Vim, I don't suggest beginners use Git rashly without fully understanding it, because its inner logic can not be acquainted by practicing. Here is my recommended learning path: 14 | 15 | 1. Read this [Git tutorial](https://missing.csail.mit.edu/2020/version-control/) in English, or you can watch this [Git tutorial (by 尚硅谷)](https://www.bilibili.com/video/BV1vy4y1s7k6) in Chinese. 16 | 2. Read Chap1 - Chap5 of this open source book [Pro Git](https://git-scm.com/book/en/v2). Yes, to learn Git, you need to read a book. 17 | 3. Now that you have understood its principles and most of its usages, it's time to consolidate those commands by practicing. How to use Git properly is a kind of philosophy. I recommend reading this blog [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/). 18 | 4. You are now in love with Git and are not content with only using it, you want to build a Git by yourself! Great, that's exactly what I was thinking. [This tutorial](https://wyag.thb.lt/) will satisfy you! 19 | 5. What? Building your own Git is not enough? Seems that you are also passionate about reinventing the wheels. These two GitHub projects, [build-your-own-x](https://github.com/danistefanovic/build-your-own-x) and [project-based-learning](https://github.com/tuvtran/project-based-learning), collected many wheel-reinventing tutorials, e.g., text editor, virtual machine, docker, TCP and so on. 20 | -------------------------------------------------------------------------------- /docs/必学工具/Git.md: -------------------------------------------------------------------------------- 1 | # Git 2 | 3 | ## 为什么使用 Git 4 | 5 | Git 是一款分布式的代码版本控制工具,Linux 之父 Linus 嫌弃当时主流的中心式的版本控制工具太难用还要花钱,就自己开发出了 Git 用来维护 Linux 的版本(给大佬跪了)。 6 | 7 | Git 的设计非常优雅,但初学者通常因为很难理解其内部逻辑因此会觉得非常难用。对 Git 不熟悉的初学者很容易出现因为误用命令将代码给控制版本控制没了的状况(好吧是我)。 8 | 9 | 但相信我,和 Vim 一样,Git 是一款你最终掌握之后会感叹“它值得!”的神器。 10 | 11 | ## 如何学习 Git 12 | 13 | 和 Vim 不同,我不建议初学者在一知半解的情况下贸然使用 Git,因为它的内部逻辑并不能熟能生巧,而是需要花时间去理解。我推荐的学习路线如下: 14 | 15 | 1. 阅读这篇 [Git tutorial](https://missing.csail.mit.edu/2020/version-control/),视频的话可以看这个[尚硅谷Git教程](https://www.bilibili.com/video/BV1vy4y1s7k6) 16 | 2. 阅读这本开源书籍 [Pro Git](https://git-scm.com/book/en/v2) 的 Chapter1 - Chapter5,是的没错,学 Git 需要读一本书(捂脸)。 17 | 3. 此时你已经掌握了 Git 的原理和绝大部分用法,接下来就可以在实践中反复巩固 Git 的命令了。但用好它同样是一门哲学,我个人觉得这篇[如何写好 Commit Message](https://chris.beams.io/posts/git-commit/) 的博客非常值得一读。 18 | 4. 好的此时你已经爱上了 Git,你已经不满足于学会它了,你想自己实现一个 Git!巧了,我当年也有这样的想法,[这篇 tutorial](https://wyag.thb.lt/) 可以满足你! 19 | 5. 什么?光实现一个 Git 无法满足你?小伙子/小仙女有前途,巧的是我也喜欢造轮子,这两个 GitHub 项目 [build-your-own-x](https://github.com/danistefanovic/build-your-own-x) 和 [project-based-learning](https://github.com/tuvtran/project-based-learning) 收录了你能想到的各种造轮子教程,比如:自己造个编辑器、自己写个虚拟机、自己写个 docker、自己写个 TCP 等等等等。 20 | -------------------------------------------------------------------------------- /docs/必学工具/GitHub.md: -------------------------------------------------------------------------------- 1 | # GitHub 2 | 3 | ## GitHub 是什么 4 | 5 | 从功能上来说,GitHub 是一个在线代码托管平台。你可以将你的本地 Git 仓库托管到 GitHub 上,供多人同时开发浏览。但现如今 GitHub 的意义已远不止如此,它已经演变为一个非常活跃且资源极为丰富的开源交流社区。全世界的软件开发者在 GitHub 上分享各式各样种类繁多的开源软件。大到工业级的深度学习框架 PyTorch, TensorFlow,小到几十行的实用脚本,既有硬核的知识分享,也有保姆级的教程指导,甚至很多技术书籍也在 GitHub上开源(例如诸位正在看的这本——如果我厚着脸皮勉强称之为书的话)。闲来无事逛逛 GitHub 已经成为了我日常生活的一部分。 6 | 7 | 在 GitHub 里,星星是对一个项目至高无上的肯定,如果你觉得这本书对你有用的话,欢迎通过右上角的链接进入仓库主页献出你宝贵的星星✨。 8 | 9 | ## 如何使用 GitHub 10 | 11 | 如果你还从未在 GitHub 上建立过自己的远程仓库,也没有克隆过别人的代码,那么我建议你从 [GitHub的官方教程](https://docs.github.com/cn/get-started)开始自己的开源之旅。 12 | 13 | 如果你想时刻关注 GitHub 上一些有趣的开源项目,那么我向你重磅推荐 [HelloGitHub](https://hellogithub.com/) 这个网站以及它的同名微信公众号。它会定期收录 GitHub 上近期开始流行的或者非常有趣的开源项目,让你有机会第一时间接触各类优质资源。 14 | 15 | GitHub 之所以成功,我想是得益于“我为人人,人人为我”的开源精神,得益于知识分享的快乐。如果你也想成为下一个万人敬仰的开源大佬,或者下一个 star 破万的项目作者。那就把你在开发过程中灵感一现的 idea 化作代码,展示在 GitHub 上吧~ 16 | 17 | 不过需要提醒的是,开源社区不是法外之地,很多开源软件并不是可以随意复制分发甚至贩卖的,了解各类[开源协议](https://www.runoob.com/w3cnote/open-source-license.html)并遵守,不仅是法律的要求,更是每个开源社区成员的责任。 18 | -------------------------------------------------------------------------------- /docs/必学工具/LaTeX.md: -------------------------------------------------------------------------------- 1 | # LaTeX 2 | 3 | ## 为什么学 LaTeX 4 | 5 | 如果你需要写论文,那么请直接跳到下一节,因为你不学也得学。 6 | 7 | LaTeX 是一种基于 TeX 的排版系统,由图灵奖得主 Lamport 开发,而 Tex 则是由 Knuth 最初开发,这两位都是计算机界的巨擘。当然开发者强并不是我们学习 LaTeX 的理由,LaTeX 和常见的所见即所得的 Word 文档最大的区别就是用户只需要关注写作的内容,而排版则完全交给软件自动完成。这让没有任何排版经验的普通人得以写出排版非常专业的论文或文章。 8 | 9 | Berkeley 计算机系教授 Christos Papadimitriou 曾说过一句半开玩笑的话: 10 | 11 | > Every time I read a LaTeX document, I think, wow, this must be correct! 12 | 13 | ## 如何学习 LaTeX 14 | 15 | 推荐的学习路线如下: 16 | 17 | - LaTeX 的环境配置是个比较头疼的问题。如果你本地配置 LaTeX 环境出现了问题,可以考虑使用 [Overleaf] 这个在线 LaTeX 编辑网站。站内不仅有各种各样的 LaTeX 模版供你选择,还免去了环境配置的难题。 18 | - 阅读下面三篇 Tutorial: [Part-1], [Part-2], [Part-3]。 19 | - 学习 LaTeX 最好的方式当然是写论文,不过从一门数学课入手用 LaTeX 写作业也是一个不错的选择。 20 | 21 | [Overleaf]: https://www.overleaf.com 22 | [Part-1]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-1 23 | [Part-2]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-2 24 | [Part-3]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-3 25 | 26 | 其他值得推荐的入门学习资料如下: 27 | 28 | - 一份简短的安装 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)] 可以帮助你完成安装和环境配置过程 29 | - 一份(不太)简短的 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 开发小组翻译的,可以帮助你快速准确地入门,建议通读一遍 30 | - 刘海洋的《LaTeX 入门》,可以当作工具书来阅读,有问题再查找,跳过 CTEX 套装部分 31 | - [现代 LaTeX 入门讲座](https://github.com/stone-zeng/latex-talk) 32 | - [一份其实很短的 LaTeX 入门文档](https://liam.page/2014/09/08/latex-introduction/) 33 | -------------------------------------------------------------------------------- /docs/必学工具/Scoop.md: -------------------------------------------------------------------------------- 1 | # Scoop 2 | 3 | ## 为什么使用 Scoop 4 | 5 | 在 Windows 下,搭建开发环境一直是一个复杂且困难的问题。由于没有一个统一的标准,导致各种开发环境的安装方式差异巨大,需要付出很多不必要的时间成本。而 Scoop 可以帮助你统一安装并管理常见的开发软件,省去了手动下载安装,配置环境变量等繁琐步骤。 6 | 7 | 例如安装 python 和 nodejs 只需要执行: 8 | 9 | ```powershell 10 | scoop install python 11 | scoop install nodejs 12 | ``` 13 | 14 | ## 安装 Scoop 15 | 16 | Scoop 需要 [Windows PowerShell 5.1](https://aka.ms/wmf5download) 或者 [PowerShell](https://aka.ms/powershell) 作为运行环境,如果你使用的是 Windows 10 及以上版本,Windows PowerShell 是内置在系统中的。而 Windows 7 内置的 Windows PowerShell 版本过于陈旧,你需要手动安装新版本的 PowerShell。 17 | 18 | > 由于发现很多同学在设置 Windows 用户时使用了中文用户名,导致了用户目录也变成了中文名。如果按照 Scoop 的默认方式将软件安装到用户目录下,可能会造成部分软件执行错误。所以这里推荐安装到自定义目录,如果需要其他安装方式请参考: [ScoopInstaller/Install](https://github.com/ScoopInstaller/Install) 19 | 20 | ```powershell 21 | # 设置 PowerShell 执行策略 22 | Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 23 | # 下载安装脚本 24 | irm get.scoop.sh -outfile 'install.ps1' 25 | # 执行安装, --ScoopDir 参数指定 Scoop 安装路径 26 | .\install.ps1 -ScoopDir 'C:\Scoop' 27 | ``` 28 | 29 | ## 使用 Scoop 30 | 31 | Scoop 的官方文档对于新手非常友好,相对于在此处赘述更推荐阅读 [官方文档](https://github.com/ScoopInstaller/Scoop) 或 [快速入门](https://github.com/ScoopInstaller/Scoop/wiki/Quick-Start) 。 32 | 33 | ## Q&A 34 | 35 | ### Scoop 能配置镜像源吗? 36 | 37 | Scoop 社区仅维护安装配置,所有的软件都是从该软件官方提供的下载链接进行下载,所以无法提供镜像源。如果因为你的网络环境导致多次下载失败,那么你需要一点点 [魔法](翻墙.md)。 38 | 39 | ### 为什么找不到 Java8? 40 | 41 | 原因同上,官方已不再提供 Java8 的下载链接,推荐使用 [ojdkbuild8](https://github.com/ScoopInstaller/Java/blob/master/bucket/ojdkbuild8.json) 替代。 42 | 43 | ### 我需要安装 python2 该如何操作? 44 | 45 | 对于已经过时弃用的软件,Scoop 社区会将其从 [ScoopInstaller/Main](https://github.com/ScoopInstaller/Main) 中移除并将其添加到 [ScoopInstaller/Versions](https://github.com/ScoopInstaller/Versions) 中。如果你需要这些软件的话需要手动添加 bucket: 46 | 47 | ```powershell 48 | scoop bucket add versions 49 | scoop install python27 50 | ``` 51 | 52 | -------------------------------------------------------------------------------- /docs/必学工具/thesis.md: -------------------------------------------------------------------------------- 1 | # 毕业论文 2 | 3 | ## 为什么写这份教程 4 | 5 | 2022年,我本科毕业了。在开始动手写毕业论文的时候,我尴尬地发现,我对 Word 的掌握程度仅限于调节字体、保存导出这些傻瓜功能。曾想转战 Latex,但论文的段落格式要求调整起来还是用 Word 更为方便,经过一番痛苦缠斗之后,总算是有惊无险地完成了论文的写作和答辩。为了不让后来者重蹈覆辙,遂把相关资源整理成一份开箱即用的文档,供大家参考。 6 | 7 | ## 如何用 Word 写毕业论文 8 | 9 | 正如将大象装进冰箱需要三步,用 Word 写毕业论文也只需要简单三步: 10 | 11 | - 确定论文的格式要求:通常学院都会下发毕业论文的格式要求(各级标题的字体字号、图例和引用的格式等等),如果更为贴心的话甚至会直接给出论文模版(如是此情况请直接跳转到下一步)。很不幸的是,我的学院并没有下发标准的论文格式要求,还提供了一份格式混乱几乎毫无用处的论文模版膈应我,被逼无奈之下我找到了北京大学研究生的[论文格式要求](https://github.com/PKUFlyingPig/Thesis-Template/blob/master/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%94%9F%E5%AD%A6%E4%BD%8D%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C%E6%8C%87%E5%8D%97.pdf),并按照其要求制作了[一份模版](https://github.com/PKUFlyingPig/Thesis-Template/blob/master/%E8%AE%BA%E6%96%87%E6%A8%A1%E7%89%88.docx),大家需要的话自取,本人不承担无法毕业等任何责任。 12 | 13 | - 学习 Word 排版:到达这一步的童鞋分为两类,一是已经拥有了学院提供的标准模版,二是只有一份虚无缥缈的格式要求。那现在当务之急就是学习基础的 Word 排版技术,对于前者可以学会使用模版,对于后者则可以学会制作模版。此时切记不要雄心勃勃地选择一个十几个小时的 Word 教学视频开始头悬梁锥刺股,因为生产一份应付毕业的学术垃圾只要学半小时能上手就够了。我当时看的[一个 B 站的教学视频](https://www.bilibili.com/video/BV1YQ4y1M73G?p=1&vd_source=a4d76d1247665a7e7bec15d15fd12349),短小精悍非常实用,全长半小时极速入门。 14 | 15 | - 生产学术垃圾:最容易的一步,大家八仙过海,各显神通吧,祝大家毕业顺利~~ 16 | -------------------------------------------------------------------------------- /docs/必学工具/翻墙.en.md: -------------------------------------------------------------------------------- 1 | # GFW 2 | 3 | [This link](https://wallesspku.space/) appears here purely as a random combination of binary bits and has nothing to do with me. -------------------------------------------------------------------------------- /docs/必学工具/翻墙.md: -------------------------------------------------------------------------------- 1 | # 翻墙 2 | 3 | [此链接](https://wallesspku.space/)出现在这里纯属二进制 bit 的随意组合,与本人毫无关系。 4 | -------------------------------------------------------------------------------- /docs/操作系统/CS162.md: -------------------------------------------------------------------------------- 1 | # CS162: Operating System 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS61A, CS61B, CS61C 7 | - 编程语言:C, x86汇编 8 | - 课程难度:🌟🌟🌟🌟🌟🌟 9 | - 预计学时:200 小时+,上不封顶 10 | 11 | 这门课让我记忆犹新的有两个部分: 12 | 13 | 首先是教材,这本书用的教材 *Operating Systems: Principles and Practice (2nd Edition)* 一共四卷,写得非常深入浅出,很好地弥补了 MIT6.S081 在理论知识上的些许空白,非常建议大家阅读。相关资源会分享在本书的经典书籍推荐模块。 14 | 15 | 其次是这门课的 Project —— Pintos。Pintos 是由 Ben Pfaff 等人在 x86 平台上编写的教学用操作系统,Ben Pfaff 甚至专门发了篇 [paper](https://benpfaff.org/papers/pintos.pdf) 来阐述 Pintos 的设计思想。 16 | 17 | 和 MIT 的 xv6 小而精的 lab 设计理念不同,Pintos 更注重系统的 Design and Implementation。Pintos 本身仅一万行左右,只提供了操作系统最基本的功能。而 4 个Project,就是让你在这个极为精简的操作系统之上,分别为其增加线程调度机制 (Project1),系统调用 (Project2),虚拟内存 (Project3) 以及文件系统 (Project4)。所有的 Project 都给学生留有很大的设计空间,总代码量在 2000 行左右。根据 Stanford 学生[自己的反馈][quora_link],在 3-4 人组队的情况下,后两个 Project 的人均耗时也在 40 个小时以上。 18 | 19 | [quora_link]: https://www.quora.com/What-is-it-like-to-take-CS-140-Operating-Systems-at-Stanford 20 | 21 | 虽然难度很大,但 Stanford, Berkeley, JHU 等多所美国顶尖名校的操统课程均采用了 Pintos。如果你真的对操作系统很感兴趣,Pintos 会极大地提高你编写和 debug 底层系统代码的能力。在本科阶段,能自己设计、实现并 debug 一个大型系统,是一段非常珍贵的经历。 22 | 23 | 北大 2022 年春季学期的操作系统实验班也将会首次引入 Pintos 作为课程 Project。我和该课程的[另一位助教](https://github.com/AlfredThiel)整理并完善了 Pintos 的[实验文档](https://pkuflyingpig.gitbook.io/pintos),并利用 Docker 配置了跨平台的实验环境,想自学的同学可以按文档自行学习。在毕业前的最后一个学期,希望能用这样的尝试,让更多人爱上系统领域,为国内的系统研究添砖加瓦。 24 | 25 | ## 课程资源 26 | 27 | - 课程网站: 28 | - 课程视频:,每节课的链接参见课程网站 29 | - 课程教材:[Operating Systems: Principles and Practice (2nd Edition)](http://ospp.cs.washington.edu/) 30 | - 课程作业:,6 个 Homework, 3 个 Project,具体要求参见课程网站 31 | 32 | ## 资源汇总 33 | 34 | 由于北大的操统实验班采用了该课程的 Project,为了防止代码抄袭,我的代码实现没有开源。 35 | -------------------------------------------------------------------------------- /docs/操作系统/HITOS.md: -------------------------------------------------------------------------------- 1 | # HIT OS: Operating System 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:哈尔滨工业大学 6 | - 先修要求:C 语言 7 | - 编程语言:C 语言、汇编 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100 小时+ 10 | 11 | 如果你在知乎上搜索“操作系统如何自学”、“操作系统的公开课推荐”、“有哪些让你相见恨晚的计算机课程”等问题,哈工大李治军老师的操作系统课程大概率都会在某条高赞回答的推荐里。这是一门知名度较高、颇受欢迎的中文计算机课程。 12 | 13 | 这门课善于站在学生角度循循善诱。例如,课程从“弱弱地问,什么是操作系统”来“揭开操作系统钢琴的盖子”,从 CPU 的直观管理引出进程概念,从“那就首先让程序进入内存”引出内存管理。 14 | 15 | 这门课注重理论和实践相结合。操作系统是看得见摸得着的东西,李老师反复强调一定要做实验,如果只看视频纸上谈兵,是学不好操作系统的。课程基于实际的 Linux 0.11 源码(总代码量约两万行)进行讲解和实验,共有八个小实验,四个大实验。 16 | 17 | 当然,这门课也有一些瑕不掩瑜的地方。例如,Linux 0.11 是很早期工业界的代码,不是为了教学而设计的。因此在实验过程中会有一些避不开的晦涩难懂的原生代码,但它们对理解操作系统其实并没有太大帮助。 18 | 19 | ## 课程资源 20 | 21 | - 课程网站: 22 | - 课程视频: 23 | - 课程教材一:[《Linux 内核完全注释》](https://book.douban.com/subject/1231236//) 24 | - 课程教材二:[《操作系统原理、实现与实践》](https://book.douban.com/subject/30391722/) 25 | - 课程作业: 26 | 27 | ## 资源汇总 28 | 29 | @NaChen95 在学习这门课中的八个实验作业的原理分析和实现都汇总在 [NaChen95 / Linux0.11](https://github.com/NaChen95/Linux0.11) 中。 -------------------------------------------------------------------------------- /docs/操作系统/NJUOS.md: -------------------------------------------------------------------------------- 1 | # NJU OS: Operating System Design and Implementation 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:南京大学 6 | - 先修要求:体系结构 + 扎实的 C 语言功底 7 | - 编程语言:C 语言 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | 之前一直听说南大的蒋炎岩老师开设的操作系统课程讲得很好,久闻不如一见,这学期有幸在 B 站观看了蒋老师的课程视频,确实收获良多。蒋老师作为非常年轻的老师,有着丰富的一线代码的经验,因此课程讲授有着满满的 Hacker 风格,课上经常“一言不合”就在命令行里开始写代码,很多重要知识点也都配有生动直白的代码示例。让我印象最为深刻的就是老师为了让学生更好地理解动态链接库的设计思想,甚至专门实现了一个迷你的可执行文件与一系列的二进制工具,让很多困扰我多年的问题都得到了解答。 12 | 13 | 这门课的讲授思路也非常有趣,蒋老师先从“程序就是状态机”这一视角入手,为“万恶之源”并发程序建立了状态机的转化模型,并在此基础上讲授了并发控制的常见手段以及并发 bug 的应对方法。接着蒋老师将操作系统看作一系列对象(进程/线程、地址空间、文件、设备等等)以及操作它们的 API (系统调用)并结合丰富的实际例子介绍了操作系统是如何利用这系列对象虚拟化硬件资源并给应用软件提供各类服务的。最后的可持久化部分,蒋老师从 1-bit 的存储介质讲起,一步步构建起各类存储设备,并通过设备驱动抽象出一组接口来方便地设计与实现文件系统。我之前虽然上过许多门操作系统的课程,但这种讲法确实独此一家,让我收获了很多独到的视角来看待系统软件。 14 | 15 | 这门课除了在理论知识的讲授部分很有新意外,注重实践也是蒋老师的一大特点。在课堂和编程作业里,蒋老师会有意无意地培养大家阅读源码、查阅手册的能力,这也是计算机从业者必备的技能。在完成第五个 MiniLab 期间,我第一次仔仔细细阅读了微软的 FAT 文件系统手册,收获了一次非常有价值的经历。 16 | 17 | 编程作业共由 5个 MiniLab 和 4个 OSLab 组成。美中不足的是作业的评测机是不对校外开放的,不过在邮件“骚扰”后蒋老师还是非常慷慨地让我成功蹭课。由于课余时间有限我只完成了 5个 MiniLab,总体体验非常棒。尤其是第二个协程实验让我印象最为深刻,在不到百行的小实验里深刻体验了上下文切换的美妙与“可怕”。另外其实几个 MiniLab 都能非常方便地进行本地测试,就算没有评测机也不影响自学,因此希望大家不要聚众“骚扰”老师以图蹭课。 18 | 19 | 最后再次感谢蒋老师设计并开放了这样一门非常棒的操作系统课程,这也是本书收录的第一门国内高校自主开设的计算机课程。正是有蒋老师这些年轻的新生代教师在繁重的 Tenure 考核之余的用爱发电,才让无数学子收获了难忘的本科生涯。也期待国内能有更多这样的良心好课,我也会第一时间收录进本书中让更多人受益。 20 | 21 | ## 课程资源 22 | 23 | - 课程网站: 24 | - 课程视频: 25 | - 课程教材: 26 | - 课程作业: 27 | 28 | ## 资源汇总 29 | 30 | 按蒋老师的要求,我的作业实现没有开源。 31 | -------------------------------------------------------------------------------- /docs/数学基础/MITLA.en.md: -------------------------------------------------------------------------------- 1 | # MIT18.06: Linear Algebra 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: English 7 | - Programming languages: None 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: Varying from person to person 10 | 11 | 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. 12 | 13 | ![image](https://math.mit.edu/~gs/linearalgebra/ila5/linearalgebra5_Front.jpg) 14 | 15 | 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. 16 | 17 | ## Resources 18 | 19 | - Course Website: [fall2011](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/syllabus/) 20 | - Recordings: refer to the course website 21 | - Textbook: Introduction to Linear Algebra, Gilbert Strang 22 | - Assignments: refer to the course website 23 | 24 | On May 15th, 2023, revered mathematics professor Gilbert Strang capped his 61-year career as a faculty member at MIT by delivering his [final 18.06 Linear Algebra lecture](https://ocw.mit.edu/courses/18-06sc-linear-algebra-fall-2011/pages/final-1806-lecture-2023/) before retiring at the age of 88. In addition to a brief review for the course final exam, the overflowing audience (both in person and on the live YouTube stream) heard recollections, appreciations, and congratulations from Prof. Strang’s colleagues and former students. A rousing standing ovation concluded this historic event. -------------------------------------------------------------------------------- /docs/数学基础/MITLA.md: -------------------------------------------------------------------------------- 1 | # MIT18.06: Linear Algebra 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:英文 7 | - 编程语言:无 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:因人而异 10 | 11 | 数学大牛 Gilbert Strang 老先生年逾古稀仍坚持授课,其经典教材 [Introduction to Linear Algebra](https://math.mit.edu/~gs/linearalgebra/) 已被清华采用为官方教材。我当时看完盗版 PDF 之后深感愧疚,含泪花了两百多买了一本英文正版收藏。下面附上此书封面,如果你能完全理解封面图的数学含义,那你对线性代数的理解一定会达到新的高度。 12 | 13 | 14 | 15 | 配合油管数学网红 **3Blue1Brown** 的[线性代数的本质](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)系列视频食用更佳。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[fall2011](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/syllabus/) 20 | - 课程视频:参见课程网站 21 | - 课程教材:Introduction to Linear Algebra. Gilbert Strang 22 | - 课程作业:参见课程网站 23 | 24 | 2023年5月15日,Gilbert Strang 上完了他在 18.06 的[最后一课](https://ocw.mit.edu/courses/18-06sc-linear-algebra-fall-2011/pages/final-1806-lecture-2023/),以88岁高龄结束了在其 MIT 61年的教学及科研生涯。但他的线性代数课已经并且还将继续影响一代代青年学子,让我们向老先生致以最崇高的敬意。 -------------------------------------------------------------------------------- /docs/数学基础/MITmaths.en.md: -------------------------------------------------------------------------------- 1 | # MIT Calculus Course 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: English 7 | - Programming Languages: None 8 | - Difficulty: 🌟🌟 9 | - Class Hour: Varying from person to person 10 | 11 | The calculus course at MIT consists of MIT18.01: Single Variable Calculus and MIT18.02: Multivariable Calculus. If you are confident in your math, you can just read the course notes, which are written in a very simple and vivid way, so that you will not be tired of doing homework but can really see the essence of calculus. 12 | 13 | In addition to the course materials, the famous Youtuber **3Blue1Brown**'s video series [The Essence of Calculus](https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr) are also great learning resources. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: [18.01](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/syllabus/), [18.02](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/) 18 | - Recordings: refer to course website 19 | - Textbook: refer to course website 20 | - Assignments: refer to course website 21 | -------------------------------------------------------------------------------- /docs/数学基础/MITmaths.md: -------------------------------------------------------------------------------- 1 | # MIT Calculus Course 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:英语 7 | - 编程语言:无 8 | - 课程难度:🌟🌟 9 | - 预计学时:因人而异 10 | 11 | MIT 的微积分课由 MIT18.01: Single Variable Calculus 和 MIT18.02: Multivariable Calculus 两门课组成。对自己数学基础比较自信的同学可以只看课程 notes,写得非常浅显生动并且抓住本质,让你不再疲于做题而是能够真正窥见微积分的本质魅力。 12 | 13 | 配合油管数学网红 **3Blue1Brown** 的[微积分的本质](https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr)系列视频食用更佳。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站:[18.01](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/syllabus/), [18.02](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/) 18 | - 课程视频:参见课程网站 19 | - 课程教材:参见课程 notes 20 | - 课程作业:书面作业及答案参见课程网站 21 | -------------------------------------------------------------------------------- /docs/数学基础/information.en.md: -------------------------------------------------------------------------------- 1 | # MIT6.050J: Information theory and Entropy 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: None 7 | - Programming Languages: None 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | This is MIT's introductory information theory course for freshmen, Professor Penfield has written a special [textbook](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/syllabus/MIT6_050JS08_textbook.pdf) for this course as course notes, which is in-depth and interesting. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: [spring2008](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/index.htm) 16 | - Textbook: [Information and Entropy](https://ocw.mit.edu/courses/6-050j-information-and-entropy-spring-2008/resources/mit6_050js08_textbook/) 17 | - Assignments: see the course website for details, including written assignments and Matlab programming assignments. 18 | -------------------------------------------------------------------------------- /docs/数学基础/information.md: -------------------------------------------------------------------------------- 1 | # MIT6.050J: Information theory and Entropy 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:无 7 | - 编程语言:无 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | MIT 面向大一新生的信息论入门课程,Penfield 教授专门为这门课写了一本[教材][textbook]作为课程 notes,内容深入浅出,生动有趣。 12 | 13 | [textbook]: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/syllabus/MIT6_050JS08_textbook.pdf 14 | 15 | ## 课程资源 16 | 17 | - 课程网站:[spring2008](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/index.htm) 18 | - 课程教材:[Information and Entropy](https://ocw.mit.edu/courses/6-050j-information-and-entropy-spring-2008/resources/mit6_050js08_textbook/) 19 | - 课程作业:详见课程网站,包含书面作业与 Matlab 编程作业。 20 | -------------------------------------------------------------------------------- /docs/数学进阶/6.042J.en.md: -------------------------------------------------------------------------------- 1 | # MIT 6.042J: Mathematics for Computer Science 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: Calculus, Linear Algebra 7 | - Programming Languages: Python preferred 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 50-70 hours 10 | 11 | This is MIT‘s discrete mathematics and probability course taught by the notable Tom Leighton (co-founder of Akamai). It is very useful for learning algorithms subsequently. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: [spring2015](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-spring-2015/), [fall2010](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/), [fall2005](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2005/) 16 | - Recordings: Refer to the course website 17 | - Assignments: Refer to the course website 18 | -------------------------------------------------------------------------------- /docs/数学进阶/6.042J.md: -------------------------------------------------------------------------------- 1 | # MIT 6.042J: Mathematics for Computer Science 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:Calculus, Linear Algebra 7 | - 编程语言:Python preferred 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:50-70 小时 10 | 11 | MIT 的离散数学以及概率综合课程,导师是大名鼎鼎的 **Tom Leighton** ( Akamai 的联合创始人之一)。学完之后对于后续的算法学习大有裨益。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站:[spring2015](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-spring-2015/), [fall2010](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/), [fall2005](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2005/) 16 | - 课程视频:[spring2015](https://www.bilibili.com/video/BV1n64y1i777/?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349), [fall2010](https://www.bilibili.com/video/BV1L741147VX/?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349) 17 | - 课程作业:参考课程网站 18 | -------------------------------------------------------------------------------- /docs/数学进阶/CS126.en.md: -------------------------------------------------------------------------------- 1 | # UCB CS126 : Probability theory 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: CS70, Calculus, Linear Algebra 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | This is Berkeley's advanced probability course, which involves relatively advanced theoretical content such as statistics and stochastic processes, so a solid mathematical foundation is required. But as long as you stick with it you will certainly take your mastery of probability theory to a new level. 12 | 13 | The course is designed by Professor Jean Walrand, who has written an accompanying textbook, [Probability in Electrical Engineering and Computer Science](https://link.springer.com/book/10.1007/978-3-030-49995-2), in which each chapter uses a specific algorithm as a practical example to demonstrate the application of theory in practice. Such as PageRank, Route Planing, Speech Recognition, etc. The book is open source and can be downloaded as a free PDF or Epub version. 14 | 15 | Jean Walrand has also created accompanying Python implementations of the examples throughout the book, which are published online as [Jupyter Notebook](https://jeanwalrand.github.io/PeecsJB/intro.html) that readers can modify, debug and run them online interactively. 16 | 17 | In addition to the Homework, nine Labs will allow you to use probability theory to solve practical problems in Python. 18 | 19 | ## Course Resources 20 | 21 | - Course Website: 22 | - Textbook: [PDF](https://link.springer.com/content/pdf/10.1007%2F978-3-030-49995-2.pdf), [Epub](https://link.springer.com/download/epub/10.1007%2F978-3-030-49995-2.epub), [Jupyter Notebook](https://jeanwalrand.github.io/PeecsJB/intro.html) 23 | - Assignments: refer to the course website. 24 | 25 | ## Personal Resources 26 | 27 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/EECS126 - GitHub](https://github.com/PKUFlyingPig/EECS126) 28 | -------------------------------------------------------------------------------- /docs/数学进阶/CS126.md: -------------------------------------------------------------------------------- 1 | # UCB CS126 : Probability theory 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS70、微积分、线性代数 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 伯克利的概率论进阶课程,涉及到统计学、随机过程等理论相对深入的内容,需要相当的数学基础,我在上这门课的时候也感到有些吃力,不过坚持下来一定会让你对概率论的掌握达到一个新的高度。 12 | 13 | 同时这门课非常强调理论与实践的结合,课程设计者 Jean Walrand 教授专门写了一本配套的教材[Probability in Electrical Engineering and Computer Science](https://link.springer.com/book/10.1007/978-3-030-49995-2),书中每个章节都会以一个具体的算法实践作为例子来展示理论在实际当中的运用,例如 PageRank, Route Planing, Speech Recognition 等等,并且全书开源,可以免费下载 PDF 或者 Epub 版。 14 | 15 | 这还不算完,Jean Walrand 还为整本书里的例子设计了配套的 Python 实现,以 [Jupyter Notebook](https://jeanwalrand.github.io/PeecsJB/intro.html) 的形式在线发布,读者可以在线修改、调试和运行。 16 | 17 | 与此同时,这门课除了理论作业之外,还有 9 个编程作业,会让你用概率论的知识解决实际问题。 18 | 19 | ## 课程资源 20 | 21 | - 课程网站: 22 | - 课程教材:[PDF], [Epub], [Jupyter Notebook][Jupyter_Notebook] 23 | - 课程作业:14 个书面作业 + 9 个编程作业,具体要求参见课程网站。 24 | 25 | [PDF]: https://link.springer.com/content/pdf/10.1007%2F978-3-030-49995-2.pdf 26 | [Epub]: https://link.springer.com/download/epub/10.1007%2F978-3-030-49995-2.epub 27 | [Jupyter_Notebook]: https://jeanwalrand.github.io/PeecsJB/intro.html 28 | 29 | ## 资源汇总 30 | 31 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/EECS126 - GitHub](https://github.com/PKUFlyingPig/EECS126) 中。 32 | -------------------------------------------------------------------------------- /docs/数学进阶/CS70.en.md: -------------------------------------------------------------------------------- 1 | # UCB CS70: Discrete Math and Probability Theory 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: None 7 | - Programming Languages: None 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 60 hours 10 | 11 | This is Berkeley's introductory discrete mathematics course. The biggest highlight of this course is that it not only teaches you theoretical knowledge, but also introduce the applications of theoretical knowledge in practical algorithms in each module. In this way, students majoring in CS can understand the essence of theoretical knowledge and use it in practice rather than struggle with cold formal mathematical symbols. 12 | 13 | Specific theory-algorithm correspondences are listed below. 14 | 15 | - Logic proof: stable matching algorithm 16 | - Graph theory: network topology design 17 | - Basic number theory: RSA algorithm 18 | - Polynomial ring: error-correcting code design 19 | - Probability theory: Hash table design, load balancing, etc. 20 | 21 | The course notes are also written in a very in-depth manner, with derivations of formulas and practical examples, providing a good reading experience. 22 | 23 | ## Course Resources 24 | 25 | - Course Website: 26 | - Textbook: refer to the course website 27 | - Assignments: refer to the course website 28 | 29 | ## Personal Resources 30 | 31 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/UCB-CS70 - GitHub](https://github.com/PKUFlyingPig/UCB-CS70) 32 | -------------------------------------------------------------------------------- /docs/数学进阶/CS70.md: -------------------------------------------------------------------------------- 1 | # UCB CS70 : discrete Math and probability theory 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:无 7 | - 编程语言:无 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | 伯克利的离散数学入门课程,个人觉得这门课最大的亮点在于并不是单纯的理论知识的讲授,而是在每个模块都会介绍理论知识在实际算法中的运用,让计算机系的学生在夯实理论基础的同时,跳脱出冰冷形式化的数学符号,在实际应用中感受和体会理论的本质。 12 | 13 | 具体的理论与算法的对应关系列举如下: 14 | 15 | - 逻辑证明:稳定匹配算法 16 | - 图论:网络拓扑设计 17 | - 基础数论:RSA 算法 18 | - 多项式环:纠错码设计 19 | - 概率论:哈希表设计、负载均衡等等 20 | 21 | 课程 notes 也写得非常深入浅出,公式推导与实际例子星罗棋布,阅读体验很好。 22 | 23 | ## 课程资源 24 | 25 | - 课程网站: 26 | - 课程教材:参见课程 notes 27 | - 课程作业:参见课程 Schedule 28 | 29 | ## 资源汇总 30 | 31 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-CS70 - GitHub](https://github.com/PKUFlyingPig/UCB-CS70) 中。 32 | -------------------------------------------------------------------------------- /docs/数学进阶/The_Information_Theory_Pattern_Recognition_and_Neural_Networks.en.md: -------------------------------------------------------------------------------- 1 | # The Information Theory, Pattern Recognition, and Neural Networks 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Cambridge 6 | - Prerequisites: Calculus, Linear Algebra, Probabilities and Statistics 7 | - Programming Languages: Anything would be OK, Python preferred 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 30-50 hours 10 | 11 | This is a course on information theory taught by Sir David MacKay at the University of Cambridge. The professor is a very famous scholar in information theory and neural networks, and the textbook for the course is a classic work in the field of information theory. Unfortunately, those whom God loves die young ... 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Recordings: 17 | - Textbooks: Information Theory, Inference, and Learning Algorithms 18 | - Assignments: At the end of each lesson video, there are post-lesson exercises from the textbook 19 | 20 | ## R.I.P Prof. David MacKay 21 | -------------------------------------------------------------------------------- /docs/数学进阶/The_Information_Theory_Pattern_Recognition_and_Neural_Networks.md: -------------------------------------------------------------------------------- 1 | # The Information Theory, Pattern Recognition, and Neural Networks 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Cambridge 6 | - 先修要求:Calculus, Linear Algebra, Probabilities and Statistics 7 | - 编程语言:Anything would be OK, Python preferred 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:30-50 小时 10 | 11 | 剑桥大学 Sir David MacKay 教授的信息论课程。教授是一位十分精通信息论与神经网络的学者,课程对应教材也是信息论领域的一部经典著作。可惜天妒英才... 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频: 17 | - 课程教材:Information Theory, Inference, and Learning Algorithms 在课程网站可以下载到免费的电子版 18 | - 课程作业:在每一节课视频的最后会留教材上的课后习题 19 | 20 | ## R.I.P Prof. David MacKay 21 | -------------------------------------------------------------------------------- /docs/数学进阶/convex.en.md: -------------------------------------------------------------------------------- 1 | # Stanford EE364A: Convex Optimization 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Stanford 6 | - Prerequisites: Python, Calculus, Linear Algebra, Probability Theory, Numerical Analysis 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Class Hour: 150 hours 10 | 11 | Professor [Stephen Boyd](http://web.stanford.edu/~boyd) is a great expert in the field of convex optimization and his textbook **Convex Optimization** has been adopted by many prestigious universities. His team has also developed a programming framework for solving common convex optimization problems in Python, Julia, and other popular programming languages, and its homework assignments also use this programming framework to solve real-life convex optimization problems. 12 | 13 | In practice, you will deeply understand that for the same problem, a small change in the modeling process can make a world of difference in the difficulty of solving the equation. It is an art to make the equations you formulate "convex". 14 | 15 | ## Course Resources 16 | 17 | - Course Website: 18 | - Recordings: 19 | - Textbook: [Convex Optimization](https://stanford.edu/~boyd/cvxbook/) 20 | - Assignments: refer to the course website 21 | 22 | ## Personal Resources 23 | 24 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPic/Standford_CVX101 - GitHub](https://github.com/PKUFlyingPig/Standford_CVX101) 25 | -------------------------------------------------------------------------------- /docs/数学进阶/convex.md: -------------------------------------------------------------------------------- 1 | # Stanford EE364A: Convex Optimization 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:Python,微积分,线性代数,概率论,数值分析 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | [Stephen Boyd](http://web.stanford.edu/~boyd) 教授是凸优化领域的大牛,其编写的 **Convex Optimization** 这本教材被众多名校采用。另外其研究团队还专门开发了一个用于求解常见凸优化问题的编程框架,支持 Python, Julia 等主流编程语言,其课程作业也是采用这个编程框架去解决实际生活当中的凸优化问题。 12 | 13 | 在实际运用当中,你会深刻体会到对于同一个问题,建模过程中一个细小的改变,其方程的求解难度会有天壤之别,如何让你建模的方程是“凸”的,是一门艺术。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站: 18 | - 课程视频: 19 | - 课程教材:[Convex Optimization](https://stanford.edu/~boyd/cvxbook/) 20 | - 课程作业:9 个 Python 编程作业 21 | 22 | ## 资源汇总 23 | 24 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/Standford_CVX101 - GitHub](https://github.com/PKUFlyingPig/Standford_CVX101) 中。 25 | -------------------------------------------------------------------------------- /docs/数学进阶/numerical.en.md: -------------------------------------------------------------------------------- 1 | # MIT18.330 : Introduction to numerical analysis 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: Calculus, Linear Algebra, Probability theory 7 | - Programming Languages: Julia 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Class Hour: 150 hours 10 | 11 | While the computational power of computers has been helping people to push boundaries of science, there is a natural barrier between the discrete nature of computers and this continuous world, and how to use discrete representations to estimate and approximate those mathematically continuous concepts is an important theme in numerical analysis. 12 | 13 | This course will explore various numerical analysis methods in the areas of floating-point representation, equation solving, linear algebra, calculus, and differential equations, allowing you to understand (1) how to design estimation (2) how to estimate errors (3) how to implement algorithms in Julia. There are also plenty of programming assignments to practice these ideas. 14 | 15 | The designers of this course have also written an open source textbook for this course (see the link below) with plenty of Julia examples. 16 | 17 | ## Course Resources 18 | 19 | - Course Website: 20 | - Textbook: 21 | - Assignments: 10 problem sets 22 | 23 | ## Personal Resources 24 | 25 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPic/MIT18.330 - GitHub](https://github.com/PKUFlyingPig/MIT18.330) 26 | -------------------------------------------------------------------------------- /docs/数学进阶/numerical.md: -------------------------------------------------------------------------------- 1 | # MIT18.330 : Introduction to numerical analysis 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:微积分,线性代数,概率论 7 | - 编程语言:Julia 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | 计算机强大的计算能力帮助人们在科学领域不断突破边界,不过计算机的离散本质和这个连续的世界有着天然鸿沟,而如何用离散的表示去估计和逼近那些数学上连续的概念,则是数值分析的重要主题。 12 | 13 | 这门课会在浮点表示、方程求解、线性代数、微积分、微分方程等领域探讨各类数值分析方法,让你在 Julia 的编程实践中反复体悟(1)如何建立估计(2)如何估计误差(3)如何用算法实现估计 这一系列步骤。 14 | 15 | 这门课的设计者还编写了配套的开源教材(参见下方链接),里面有丰富的 Julia 实例。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站: 20 | - 课程教材: 21 | - 课程作业:10 个 Julia 编程作业 22 | 23 | ## 资源汇总 24 | 25 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT18.330 - GitHub](https://github.com/PKUFlyingPig/MIT18.330) 中。 26 | -------------------------------------------------------------------------------- /docs/数据库系统/15799.en.md: -------------------------------------------------------------------------------- 1 | # CMU 15-799: Special Topics in Database Systems 2 | 3 | ## Course Introduction 4 | 5 | - **University**: Carnegie Mellon University (CMU) 6 | - **Prerequisites**: CMU 15-445 7 | - **Programming Language**: C++ 8 | - **Course Difficulty**: 🌟🌟🌟 9 | - **Estimated Study Time**: 80 hours 10 | 11 | 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. 12 | 13 | The tasks for the Spring 2022 version of the course included: 14 | 15 | 1. **Task One**: Manual performance tuning based on `PostgreSQL`. 16 | 2. **Task Two**: Improving the Self-Driving DBMS based on [NoisePage Pilot](https://github.com/cmu-db/noisepage-pilot), with no limitations on features. 17 | 18 | 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. 19 | 20 | ## Course Resources 21 | 22 | - **Course Homepages**: 23 | - [CMU15-799 - Special Topics in Database Systems (Fall 2013)](https://15799.courses.cs.cmu.edu/fall2013) 24 | - [CMU15-799 - Special Topics: Self-Driving Database Management Systems (Spring 2022)](https://15799.courses.cs.cmu.edu/spring2022/) 25 | 26 | - **Course Videos**: Not available 27 | 28 | - **Course Assignments**: 2 Projects + 1 Group Project -------------------------------------------------------------------------------- /docs/数据库系统/15799.md: -------------------------------------------------------------------------------- 1 | # CMU 15-799: Special Topics in Database Systems 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:CMU 6 | - 先修要求:CMU 15-445 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 |     这门课目前只开了两次:fall2013 和 spring2022,讨论了数据库领域的一些前沿主题。fall2013 讨论了 Streaming、Graph DB、NVM 等,spring2022 主要讨论 Self-Driving DBMS,都提供有相关论文。 12 | 13 |     spring2022 版课程任务: 14 | 15 |     任务一:基于 `PostgreSQL` 进行手动性能调优; 16 | 17 |     任务二:基于 [NoisePage Pilot](https://github.com/cmu-db/noisepage-pilot) 改进 Self-Driving DBMS,不限特性。 18 | 19 |     授课更贴近讲座的形式,编程任务较少。对一般同学可以开拓一下视野,对专精数据库的同学可能帮助较大。 20 | 21 | ## 课程资源 22 | 23 | - 课程主页 24 | 25 | - [CMU15-799 - Special Topics in Database Systems](https://15799.courses.cs.cmu.edu/fall2013) 26 | 27 | - [CMU15-799 - Special Topics: Self-Driving Database Management Systems](https://15799.courses.cs.cmu.edu/spring2022/) 28 | 29 | - 课程视频:暂无 30 | 31 | - 课程作业:2 Projects + 1 Group Project 32 | -------------------------------------------------------------------------------- /docs/数据库系统/CS122.md: -------------------------------------------------------------------------------- 1 | # Caltech CS 122: Database System Implementation 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Caltech 6 | - 先修要求:无 7 | - 编程语言:Java 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | 加州理工的这门课,不同于没有提供 SQL 层功能的 CMU15-445 课程。CS122 课程 Lab 的侧重点在于 SQL 层的相关实现,涉及查询优化器的各个模块,比如SQL的解析,Translate,如何实现 Join,统计信息以及代价估计,子查询实现,Agg,Group By 的实现等。除此之外,还有 B+树,WAL 相关实验。本门课程适合在学完 CMU15-445 课程之后,对查询优化相关内容有兴趣的同学。 12 | 13 | 下面介绍一下这门课的前 3 个 Assignment 也就是实验 Lab 所要实现的功能: 14 | 15 | ### Assignment1 16 | 17 | - 为 NanoDB 提供 delete,update 语句的支持。 18 | - 为 Buffer Pool Manager 添加合适的 pin/unpin 代码。 19 | - 提升 insert 语句的性能, 同时不使数据库文件大小过分膨胀。 20 | 21 | ### Assignment2 22 | 23 | - 实现一个简单的计划生成器,将各种已经 Parser 过的 SQL 语句转化为可执行的执行计划。 24 | - 使用 nested-loop join 算法,实现支持 inner- and outer-join 的 Join 计划节点。 25 | - 添加一些单元测试, 保证 inner- and outer-join 功能实现正确。 26 | 27 | ### Assignment3 28 | 29 | - 完成收集表的统计信息。 30 | - 完成各种计划节点的计划成本计算。 31 | - 计算可出现在执行计划中的各种谓词的选择性。 32 | - 根据谓词更新计划节点输出的元组统计信息。 33 | 34 | 剩余 Assignment 和 Challenges 可以查看课程介绍,推荐使用 IDEA 打开工程,Maven 构建,注意日志相关配置。 35 | 36 | ## 课程资源 37 | 38 | - 课程网站: 39 | - 课程代码: 40 | - 课程教材:无 41 | - 课程作业:7 Assignments + 2 Challenges 42 | -------------------------------------------------------------------------------- /docs/数据库系统/CS186.en.md: -------------------------------------------------------------------------------- 1 | # UCB CS186: Introduction to Database System 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: CS61A, CS61B, CS61C 7 | - Programming Languages: Java 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Class Hour: 150 hours 10 | 11 | How to write SQL queries? How are SQL commands disassembled, optimized, and transformed into on-disk query commands step by step? How to implement a high-concurrency database? How to implement database failure recovery? What is NoSQL? This course elaborates on the internal details of relational databases. Besides the theoretical knowledge, you will use Java to implement a real relational database that supports SQL concurrent query, B+ tree index, and failure recovery. 12 | 13 | From a practical point of view, you will have the opportunity to write SQL queries and NoSQL queries in course projects, which is very helpful for building full-stack projects. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: 18 | - Recordings: 19 | - Assignments: 20 | 21 | ## Personal Resources 22 | 23 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS186 - GitHub](https://github.com/PKUFlyingPig/CS186). 24 | -------------------------------------------------------------------------------- /docs/数据库系统/CS186.md: -------------------------------------------------------------------------------- 1 | # UCB CS186: Introduction to Database System 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS61A, CS61B, CS61C 7 | - 编程语言:Java 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | 如何编写 SQL 查询?SQL 命令是如何被一步步拆解、优化、转变为一个个磁盘查询指令的?如何实现高并发的数据库?如何实现数据库的故障恢复?什么又是非关系型数据库?这门课会带你深入理解关系型数据库的内部细节,并在掌握理论知识之后,动手用 Java 实现一个支持 SQL 并发查询、B+ 树 Index 和故障恢复的关系型数据库。 12 | 13 | 从实用角度来说,这门课还会在编程作业中锻炼你编写 SQL 查询以及 NoSQL 查询的能力,对于构建一些全栈的工程项目很有帮助。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站: 18 | - 课程视频: 19 | - 课程教材:无 20 | - 课程作业:6 个 Project 21 | 22 | ## 资源汇总 23 | 24 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS186 - GitHub](https://github.com/PKUFlyingPig/CS186) 中。 25 | -------------------------------------------------------------------------------- /docs/数据库系统/CS346.en.md: -------------------------------------------------------------------------------- 1 | # Stanford CS 346: Database System Implementation 2 | 3 | ## Course Introduction 4 | 5 | - **University**: Stanford 6 | - **Prerequisites**: None 7 | - **Programming Language**: C++ 8 | - **Course Difficulty**: 🌟🌟🌟🌟🌟 9 | - **Estimated Study Time**: 150 hours 10 | 11 | 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: 12 | 13 | 1. **The Record Management Component**: This involves the implementation of record management functionalities. 14 | 15 | 2. **The Index Component**: Focuses on the management of B+ tree indexing. 16 | 17 | 3. **The System Management Component**: Deals with DDL statements, command-line tools, data loading commands, and metadata management. 18 | 19 | 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. 20 | 21 | 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. 22 | 23 | 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. 24 | 25 | ## Course Resources 26 | 27 | - Course Website: 28 | - Course Code: 29 | - Course Textbook: None 30 | - Course Assignments: 4 Projects + 1 Extension -------------------------------------------------------------------------------- /docs/数据库系统/CS346.md: -------------------------------------------------------------------------------- 1 | # Stanford CS 346: Database System Implementation 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:无 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | RedBase 是 cs346 的一个项目,实现了一个简易的数据库系统,项目是高度结构化的。整个项目能够被分为以下几个部分(同时也是 4 个需要完善的 lab): 12 | 13 | 1. The record management component:记录管理组件。 14 | 15 | 2. The index component:B+ 索引管理。 16 | 17 | 3. The System Management Component:ddl语句、命令行工具、数据加载命令、元数据管理。 18 | 19 | 4. The Query Language Component:在这个部分需要实现 RQL Redbase 查询语言。RQL 要实现 select、insert、delete、update 语句。 20 | 21 | 5. Extension Component:除了上述数据库系统的基本功能组件,还需要实现一个扩展组件,可以是 Blob 类型、 网络模块、连接算法、CBO 优化器、OLAP、事务等。 22 | 23 | RedBase 适合在学完 CMU 15-445 后继续学习数据库系统中的其他组件,因为其代码量不多,可以方便的根据需要扩展代码。同时代码完全由 C++ 编写,也可以用于练习 C++ 编程技巧。 24 | 25 | ## 课程资源 26 | 27 | - 课程网站: 28 | - 课程代码: 29 | - 课程教材:无 30 | - 课程作业:4 Projects + 1 Extension 31 | -------------------------------------------------------------------------------- /docs/数据科学/Data100.en.md: -------------------------------------------------------------------------------- 1 | # UCB Data100: Principles and Techniques of Data Science 2 | 3 | ## Description 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: Data8, CS61A, Linear Algebra 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 80 hours 10 | 11 | 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. 12 | 13 | ## Resources 14 | - Course Website: 15 | - Records: refer to the course website 16 | - Textbook: 17 | - Assignments: refer to the course website 18 | -------------------------------------------------------------------------------- /docs/数据科学/Data100.md: -------------------------------------------------------------------------------- 1 | # UCB Data100: Principles and Techniques of Data Science 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:Data8, CS61A,线性代数 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 | 伯克利的数据科学入门课程,内容相对基础,覆盖了数据清洗、特征提取、数据可视化以及机器学习和推理的基础内容,也会讲授 Pandas, Numpy, Matplotlib 等数据科学常用工具。其丰富有趣的编程作业也是这门课的一大亮点。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频:参见课程网站 17 | - 课程教材: 18 | - 课程作业:参见课程网站 19 | -------------------------------------------------------------------------------- /docs/数据结构与算法/6.006.en.md: -------------------------------------------------------------------------------- 1 | # MIT 6.006: Introduction to Algorithms 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: Introductory level courses of programming (CS50/CS61A/CS106A or equivalent) 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Class Hour: 100 hours+ 10 | 11 | Probably the most precious course from the EECS department of MIT. Taught by Erik Demaine, one of the geniuses in Algorithms. 12 | 13 | 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. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: [Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/) 18 | - Recordings: [Fall 2011](https://www.bilibili.com/video/BV1b7411e7ZP) 19 | - Textbooks: Introduction to Algorithms (CLRS) 20 | - Assignments: [Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/pages/assignments/) 21 | -------------------------------------------------------------------------------- /docs/数据结构与算法/6.006.md: -------------------------------------------------------------------------------- 1 | # MIT 6.006: Introduction to Algorithms 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:计算机导论(CS50/CS61A or equivalent) 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:100h+ 10 | 11 | MIT-EECS 系的瑰宝。授课老师之一是算法届的奇才 Erik Demaine. 相比较于斯坦福的 [CS106B/X](../编程入门/cpp/CS106B_CS106X.md)(基于 C++ 的数据结构与算法课程),该课程更侧重于算法方面的详细讲解。课程也覆盖了一些经典的数据结构,如 AVL 树等。个人感觉在讲解方面比 CS106B 更加详细,也弥补了 CS106B 在算法方面讲解的不足。适合在 CS106B 入门之后巩固算法知识。 12 | 13 | 不过该课程也是出了名的难,大家需要做好一定的心理准备。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站:[Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/) 18 | - 课程视频:[Fall 2011](https://www.bilibili.com/video/BV1b7411e7ZP) 19 | - 课程教材:Introduction to Algorithms (CLRS) 20 | - 课程作业:[Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/pages/assignments/) 21 | -------------------------------------------------------------------------------- /docs/数据结构与算法/6.046.en.md: -------------------------------------------------------------------------------- 1 | # MIT 6.046: Design and Analysis of Algorithms 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: Introductory level courses of Algorithms (6.006/CS61B/CS106B/CS106X or equivalent) 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Class Hour: 100 hours+ 10 | 11 | Part 2 of the MIT Algorithms Trilogy. Taught by Erik Demaine, Srini Devadas, and Nancy Lynch. 12 | 13 | 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. 14 | 15 | 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. 16 | 17 | ## Course Resources 18 | 19 | - Course Website: [Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/) 20 | - Recordings: [Spring 2015](https://www.bilibili.com/video/BV1A7411E737) 21 | - Textbooks: Introduction to Algorithms (CLRS) 22 | - Assignments: [Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/pages/assignments/) 23 | -------------------------------------------------------------------------------- /docs/数据结构与算法/6.046.md: -------------------------------------------------------------------------------- 1 | # MIT 6.046: Design and Analysis of Algorithms 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:算法入门(6.006/CS61B/CS106B/CS106X or equivalent) 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:100h+ 10 | 11 | 6.006的后续课程。授课老师依旧是 Erik Demaine 和 Srini Devadas,此外还有一位新老师 Nancy Lynch. 12 | 13 | 相比较于“现学现用”的6.006,6.046更加侧重于如何运用课上所学到的内容举一反三,设计出一套完备的算法并能够证明该算法能解决相应的问题。虽然该课程在板书以及作业中的编程语言为 Python,但基本上没有编程作业;绝大部分的作业都是提出要求,然后需要学生进行算法设计以及合理性证明。所以该课程的难度又提高了一大截:) 14 | 15 | 在该门课程后还有一门 6.854 高级算法,但对于绝大多数考试以及应聘来说,学完该课程基本上已经能覆盖99%的题目了。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/) 20 | - 课程视频:[Spring 2015](https://www.bilibili.com/video/BV1A7411E737) 21 | - 课程教材:Introduction to Algorithms (CLRS) 22 | - 课程作业:[Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/pages/assignments/) 23 | -------------------------------------------------------------------------------- /docs/数据结构与算法/Algo.md: -------------------------------------------------------------------------------- 1 | # Coursera: Algorithms I & II 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Princeton 6 | - 先修要求:CS61A 7 | - 编程语言:Java 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | 这是 [Coursera](https://www.coursera.org) 上评分最高的算法课程。Robert Sedgewick 教授有一种魔力,可以将无论多么复杂的算法讲得极为生动浅显。实不相瞒,困扰我多年的 KMP 以及网络流算法都是在这门课上让我茅塞顿开的,时隔两年我甚至还能写出这两个算法的推导与证明。 12 | 13 | 你是否觉得算法学了就忘呢?我觉得让你完全掌握一个算法的核心在于理解三点: 14 | 15 | - 为什么这么做?(正确性推导,抑或是整个算法的核心本质) 16 | - 如何实现它?(光学不用假把式) 17 | - 用它解决实际问题(学以致用才是真本事) 18 | 19 | 这门课的构成就非常好地契合了上述三个步骤。观看课程视频并且阅读教授的[开源课本](https://algs4.cs.princeton.edu/home/)有助于你理解算法的本质,让你也可以用非常 20 | 生动浅显的话语向别人讲述为什么这个算法得长这个样子。 21 | 22 | 在理解算法之后,你可以阅读教授对于课程中讲授的所有数据结构与算法的[代码实现](https://algs4.cs.princeton.edu/code/)。 23 | 注意,这些实现可不是 demo 性质的,而是工业级的高效实现,从注释到变量命名都非常严谨,模块化也做得相当好,是质量很高的代码。我从这些代码中收获良多。 24 | 25 | 最后,就是这门课最激动人心的部分了,10 个高质量的 Project,并且全都有实际问题的背景描述,丰富的测试样例,自动的评分系统(代码风格也是评分的一环)。让你在实际生活中 26 | 领略算法的魅力。 27 | 28 | ## 课程资源 29 | 30 | - 课程网站:[Algorithm I](https://www.coursera.org/learn/algorithms-part1), [Algorithm II](https://www.coursera.org/learn/algorithms-part2) 31 | - 课程视频:详见课程网站 32 | - 课程教材: 33 | - 课程作业:10个Project,具体要求详见课程网站 34 | 35 | ## 资源汇总 36 | 37 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/Princeton-Algorithm - GitHub](https://github.com/PKUFlyingPig/Princeton-Algorithm) 中。 38 | -------------------------------------------------------------------------------- /docs/数据结构与算法/CS170.en.md: -------------------------------------------------------------------------------- 1 | # CS170: Efficient Algorithms and Intractable Problems 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: CS61B, CS70 7 | - Programming Languages: LaTeX 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 60 hours 10 | 11 | This is Berkeley's algorithm design and analysis course. It focuses on the theoretical foundations and complexity analysis of algorithms, covering Divide-and-Conquer, Graph Algorithms, Shortest Paths, Spanning Trees, Greedy Algorithms, Dynamic programming, Union Finds, Linear Programming, Network Flows, NP-Completeness, Randomized Algorithms, Hashing, etc. 12 | 13 | The textbook for this course is well written and very suitable as a reference book. In addition, this class has written assignments and is recommended to use LaTeX. You can take this opportunity to practice your LaTeX skills. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: 18 | - Recordings: 19 | - Recordings: refer to the course website 20 | - Assignments: refer to the course website 21 | 22 | ## Personal Resources 23 | 24 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/UCB-CS170 - GitHub](https://github.com/PKUFlyingPig/UCB-CS170) 25 | -------------------------------------------------------------------------------- /docs/数据结构与算法/CS170.md: -------------------------------------------------------------------------------- 1 | # CS170: Efficient Algorithms and Intractable Problems 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS61B, CS70 7 | - 编程语言:LaTeX 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | 伯克利的算法设计课,更注重算法的理论基础与复杂度分析。课程内容涵盖了分治、图算法、最短路、生成树、贪心、动规、并查集、线性规划、网络流、NP 问题、随机算法、哈希算法等等。 12 | 13 | 这门课的教材写的很好,证明浅显易懂,非常适合作为工具书查阅。另外,这门课只有书面作业,并且推荐用 LaTeX 编写,大家可以借此机会锻炼自己的 LaTeX 技巧。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站: 18 | - 课程视频: 19 | - 课程教材:详见课程网站 notes 20 | - 课程作业:13 次书面作业,用 LaTeX 编写 21 | 22 | ## 资源汇总 23 | 24 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-CS170 - GitHub](https://github.com/PKUFlyingPig/UCB-CS170) 中。 25 | -------------------------------------------------------------------------------- /docs/数据结构与算法/CS61B.md: -------------------------------------------------------------------------------- 1 | # CS61B: Data Structures and Algorithms 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS61A 7 | - 编程语言:Java 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | 伯克利 CS61 系列的第二门课程,注重数据结构与算法的设计,同时让学生有机会接触上千行的工程代码,通过 Java 初步领会软件工程的思想。 12 | 13 | 我上的是 2018 年春季学期的版本,该课的开课老师 Josh Hug 教授慷慨地将 autograder 开源了,大家可以通过网站公开的邀请码在 [gradescope](https://gradescope.com/) 14 | 免费加入课程,从而方便地测评自己的代码。 15 | 16 | 这门课所有的编程作业都是使用 Java 完成的。没有 Java 基础的同学也不用担心,课程会有保姆级的教程,从 IDEA(一款主流的 Java 编程环境)的配置讲起,把 Java 的核心语法与特性事无巨细地讲授,大家完全不用担心跟不上的问题。 17 | 18 | 这门课的作业质量也是绝绝子。14 个 lab 会让你自己实现课上所讲的绝大部分数据结构,10 个 Homework 会让你运用数据结构和算法解决实际问题, 19 | 另外还有 3 个 Project 更是让你有机会接触上千行的工程代码,在实战中磨练自己的 Java 能力。 20 | 21 | ## 课程资源 22 | 23 | - 课程网站:[spring2024](https://sp24.datastructur.es/), [fall2023](https://fa23.datastructur.es/), [spring2023](https://sp23.datastructur.es/), [spring2018](https://sp18.datastructur.es/) 24 | - 课程视频:原版视频参见课程网站,B站有中文翻译搬运。 25 | - 课程教材:无 26 | - 课程作业:每年略有不同,18 年春季学期有 14 个 Lab,10 个 Homework以及 3 个 Project,具体要求详见课程网站。 27 | 28 | ## 资源汇总 29 | 30 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS61B - GitHub](https://github.com/PKUFlyingPig/CS61B) 中。 31 | 32 | @InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 [InsideEmpire/CS61B-PathwayToSuccess - GitHub](https://github.com/InsideEmpire/CS61B-PathwayToSuccess.git) 中。 33 | -------------------------------------------------------------------------------- /docs/机器学习/CS189.en.md: -------------------------------------------------------------------------------- 1 | # CS189: Introduction to Machine Learning 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: CS188, CS70 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 100 Hours 10 | 11 | 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. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Recordings: 17 | - Textbooks: 18 | - Assignments: 19 | -------------------------------------------------------------------------------- /docs/机器学习/CS189.md: -------------------------------------------------------------------------------- 1 | # CS189: Introduction to Machine Learning 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS188, CS70 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 这门课我没有系统上过,只是把它的课程 notes 作为工具书查阅。不过从课程网站上来看,它比 CS229 好的是开源了所有 homework 的代码以及 gradescope 的 autograder。同样,这门课讲得相当理论且深入。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频: 17 | - 课程教材: 18 | - 课程作业: 19 | -------------------------------------------------------------------------------- /docs/机器学习/CS229.en.md: -------------------------------------------------------------------------------- 1 | # CS229: Machine Learning 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Stanford 6 | - Prerequisite requirements: Advanced Mathematics, Probability Theory, Python, Solid mathematics skills 7 | - Programming Languages: None 8 | - Difficulty:🌟🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | 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. 12 | 13 | ## Resources 14 | 15 | - Course Website: 16 | - Recordings: 17 | - Textbook: None, but the lecture notes is excellent. 18 | - Assignments: Not open to the public. 19 | 20 | ## Personal Resources 21 | 22 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS229 - GitHub](https://github.com/PKUFlyingPig/CS229). 23 | -------------------------------------------------------------------------------- /docs/机器学习/CS229.md: -------------------------------------------------------------------------------- 1 | # CS229: Machine Learning 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:高数,概率论,Python,需要较深厚的数学功底 7 | - 编程语言:无 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 同样是吴恩达讲授,但是这是一门研究生课程,所以更偏重数学理论,不满足于调包而想深入理解算法本质,或者有志于从事机器学习理论研究的同学可以学习这门课程。课程网站上提供了所有的课程 notes,写得非常专业且理论,需要一定的数学功底。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频: 17 | - 课程教材:无,课程 notes 写得非常好 18 | - 课程作业:不对公众开放 19 | 20 | ## 资源汇总 21 | 22 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS229 - GitHub](https://github.com/PKUFlyingPig/CS229) 中。 23 | -------------------------------------------------------------------------------- /docs/机器学习/ML.md: -------------------------------------------------------------------------------- 1 | # Coursera: Machine Learning 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:AI 入门 + 熟练使用 Python 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 说起吴恩达,在 AI 届应该无人不晓。他是著名在线教育平台 [Coursera](https://www.coursera.org) 的创始人之一,同时也是 Stanford 的网红教授。这门机器学习入门课应该算得上是他的成名作之一(另一个是深度学习课程),在 Coursera 上拥有数十万的学习者(注意这是花钱买了证书的人,一个证书几百刀),白嫖学习者数量应该是另一个数量级了。 12 | 13 | 这门课对新手极其友好,吴恩达拥有把机器学习讲成 1+1=2 一样直白的能力。你将会学习到线性回归、逻辑回归、支持向量机、无监督学习、降维、异常检测和推荐系统等等知识,并且在编程实践中夯实自己的理解。作业质量自然不必多言,保姆级代码框架,作业背景也多取自生活,让人学以致用。 14 | 15 | 当然,这门课作为一个公开慕课,难度上刻意放低了些,很多数学推导大多一带而过,如果你有志于从事机器学习理论研究,想要深究这些算法背后的数学理论,可以参考 [CS229](./CS229.md) 和 [CS189](./CS189.md)。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站: 20 | - 课程视频:参见课程网站 21 | - 课程教材:无 22 | - 课程作业:参见课程网站 23 | 24 | ## 资源汇总 25 | 26 | 当时重装系统误删了文件,我的代码实现消失在了磁盘的 01 串中。不过这门课由于太过出名,网上想搜不到答案都难,相关课程资料 Coursera 上也一应俱全。 27 | -------------------------------------------------------------------------------- /docs/机器学习系统/AICS.md: -------------------------------------------------------------------------------- 1 | # 智能计算系统 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:中国科学院大学 6 | - 先修要求:体系结构,深度学习 7 | - 编程语言:Python, C++, BCL 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:100 小时+ 10 | 11 | 智能计算系统是智能的核心物质载体,每年全球要制造数以十亿计的智能计算系统(包括智能手机、智能服务器、智能可穿戴设备等),需要大量的智能计算系统的设计者和开发者。智能计算系统人才的培养直接关系到我国智能产业的核心竞争力。因此,对智能计算系统的认识和理解是智能时代计算机类专业学生培养方案中不可或缺的重要组成部分,是计算机类专业学生的核心竞争力。 12 | 13 | 国内的陈云霁老师开的课,在其他若干个大学也都有开对应的课程。这门课用一个个实验带大家以一个完整的视野理解人工智能的技术栈。从上层的深度学习框架,到用底层语言编写算子,再到硬件中 MLU 的设计,让大家形成系统思维,体会自上而下,融会贯通的乐趣。 14 | 15 | 我做了其中的 2,3,4,5 这几个实验,其中综合实验和硬件实验没有做,如果有做了的同学欢迎大家补上你的链接。 16 | 17 | 个人体会是第三章实现算子的实验让我对深度学习框架的了解加深了很多。第五章的实验BCL语言编写算子如果了解 CUDA 的话会感觉很熟悉。 18 | 19 | 推荐去买一本教材看一看,会让我们理解整体的技术栈。熟悉深度学习的同学可以直接从第五章开始看,看看深度学习框架底层到底是什么样的。 20 | 21 | 我因为这门课的启发,参考一本书(书名在仓库中)写了一个简易的[深度学习框架](https://github.com/ysj1173886760/PyToy)。在这个框架里可以看到智能计算系统实验中的一些影子。同时受到 build-your-own-x 系列的启发,我也打算写一下教程,教大家写一个自己的深度学习框架。代码用 Python 写的,代码量较少,适合有一定基础的同学阅读。之后打算添加更多的算子,有望实现一个较为全面的框架,并希望移植到 C++ 中,以兼顾性能与开发效率。 22 | 23 | ## 课程资源 24 | 25 | - 课程网站:[官网](https://novel.ict.ac.cn/aics/) 26 | - 课程视频:[bilibili](https://space.bilibili.com/494117284) 27 | - 课程教材:智能计算系统(陈云霁) 28 | 29 | ## 资源汇总 30 | 31 | ### 2024年新版实验 32 | 33 | - 2024 年的智能计算系统实验内容对知识体系、实验题目及实验手册进行了大范围的调整,调整内容包括全面使用 PyTorch ,不再使用 TensorFlow 以及添加大模型相关实验等。 34 | 35 | - 由于新版实验题目及实验手册未在寒武纪论坛进行更新,因此提供以下存储仓库,用于存储新版智能计算系统的实验题目、实验手册以及个人的实验答案 36 | - 新版实验的资源跟随国科大 2024 年春季学期的课程进度进行更新,预计 2024 年 6 月更新完毕 37 | - @Yuichi 编写的 2024 新版实验题目、手册及答案:https://github.com/Yuichi1001/2024-AICS-EXP 38 | 39 | ### 旧版实验 40 | 41 | - 旧版课程作业:6 个实验(包括编写卷积算子,为 TensorFlow 添加算子,用 BCL 编写算子并集成到 TensorFlow 中等)(具体内容在官网可以找到) 42 | - 旧版实验手册:[实验 2.0 指导手册](https://forum.cambricon.com/index.php?m=content&c=index&a=show&catid=155&id=708) 43 | - 学习笔记:,参考实验手册总结的笔记(已失效) 44 | - @ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在 [ysj1173886760/Learning: ai-system - GitHub](https://github.com/ysj1173886760/Learning/tree/master/ai-system) 中。 45 | 46 | -------------------------------------------------------------------------------- /docs/机器学习系统/CMU10-414.en.md: -------------------------------------------------------------------------------- 1 | # CMU 10-414/714: Deep Learning Systems 2 | 3 | ## Course Overview 4 | 5 | - University: Carnegie Mellon University (CMU) 6 | - Prerequisites: Introduction to Systems (e.g., 15-213), Basics of Deep Learning, 7 | Fundamental Mathematical Knowledge 8 | - Programming Languages: Python, C++ 9 | - Difficulty: 🌟🌟🌟 10 | - Estimated Hours: 100 hours 11 | 12 | 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. 13 | 14 | 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. 15 | 16 | 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. 17 | 18 | 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. 19 | 20 | ## Course Resources 21 | 22 | - Course Website: 23 | - Course Videos: 24 | - Course Assignments: 25 | 26 | ## Resource Compilation 27 | 28 | All resources and assignment implementations used by @PKUFlyingPig in this course are consolidated in [PKUFlyingPig/CMU10-714 - GitHub](https://github.com/PKUFlyingPig/CMU10-714) 29 | -------------------------------------------------------------------------------- /docs/机器学习系统/CMU10-414.md: -------------------------------------------------------------------------------- 1 | # CMU 10-414/714: Deep Learning Systems 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:CMU 6 | - 先修要求:系统入门(eg.15-213)、深度学习入门、基本的数学知识 7 | - 编程语言:Python, C++ 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:100小时 10 | 11 | 18 | 深度学习的快速发展和广泛使用很大程度上得益于一系列简单好用且强大的编程框架,例如 Pytorch 和 Tensorflow 等等。但大多数从业者只是这些框架的“调包侠”,对于这些框架内部的细节实现却了解甚少。如果你希望从事深度学习底层框架的开发,或者只是像我一样好奇这些框架的内部实现,那么这门课将会是一个很好的起点。 19 | 20 | 课程的内容大纲覆盖了深度学习系统“全栈”的知识体系。从现代深度学习系统框架的顶层设计,到自微分算法的原理和实现,再到底层硬件加速和实际生产部署。为了更好地掌握理论知识,学生将会在5个课程作业中从头开始设计和实现一个完整的深度学习库 Needle,使其能对计算图进行自动微分,能在 GPU 上实现硬件加速,并且支持各类损失函数、数据加载器和优化器。在此基础上,学生将实现几类常见的神经网络,包括 CNN,RNN,LSTM,Transformer 等等。 21 | 22 | 即使你是深度学习领域的小白也不必过于担心,课程将会循序渐进地从简单分类问题和反向传播优化讲起,一些相对复杂的神经网络都会有配套的 jupyter notebook 详细地描述实现细节。如果你有一定的相关基础知识,那么在学习完自微分部分的内容之后便可以直接上手课程作业,难度虽然不大但相信一定会给你带来新的理解。 23 | 24 | 这门课两位授课教师 [Zico Kolter](https://zicokolter.com/) 和 [Tianqi Chen](https://tqchen.com/) 将所有课程内容都发布了对应的开源版本,但在线评测账号和课程论坛的注册时间已经结束,只剩下框架代码里的本地测试供大家调试代码。或许可以期待明年秋季学期的课程还会发布相应的在线版本供大家学习。 25 | 26 | ## 课程资源 27 | 28 | - 课程网站: 29 | - 课程视频: 30 | - 课程作业: 31 | 32 | ## 资源汇总 33 | 34 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CMU10-714 - GitHub](https://github.com/PKUFlyingPig/CMU10-714) 中。 35 | -------------------------------------------------------------------------------- /docs/机器学习系统/EML.md: -------------------------------------------------------------------------------- 1 | # MIT6.5940: TinyML and Efficient Deep Learning Computing 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:体系结构、深度学习基础、 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:50小时 10 | 11 | 这门课由 MIT 的 [Song Han](https://hanlab.mit.edu/songhan) 教授讲授,侧重于高效的机器学习训练、推理技术。学生需要有一定的深度学习方面的知识基础。 12 | 13 | 课程主要分为三个部分,首先讲授了让神经网络轻量化的各种关键技术,例如剪枝、量化、蒸馏、网络架构搜索等等。有了这些基础之后,课程第二部分会讲授面向特定领域场景的各种高效优化技术,涉及了目前深度学习最前沿热门的各个方向,例如大语言模型的推理、长上下文支持、后训练加速、多模态大语言模型、GAN、扩散模型等等。课程第三部分主要涉及各类高效训练技术,例如大规模分布式并行、自动并行优化、梯度压缩、边缘训练等等。Song Han 教授的讲解深入浅出,覆盖的知识面很广,且都是当前热门的领域方向,如果是想对大语言模型有初步了解也可以重点关注第二和第三部分的内容。 14 | 15 | 课程内容和资源都可以在课程网站上找到,视频在油管上有官方版本,B站也有生肉和熟肉搬运,可以自行查找。课程作业一共有5个,前三个分别考察了量化、剪枝和 NAS,后两个主要是对大语言模型的压缩和高效部署,总体难度相对简单,但能很好地巩固核心知识。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[2024fall](https://hanlab.mit.edu/courses/2024-fall-65940), [2023fall](https://hanlab.mit.edu/courses/2023-fall-65940) 20 | - 课程视频:[2024fall](https://www.youtube.com/playlist?list=PL80kAHvQbh-qGtNc54A6KW4i4bkTPjiRF), [2023fall](https://www.youtube.com/playlist?list=PL80kAHvQbh-pT4lCkDT53zT8DKmhE0idB) 21 | - 课程教材:无 22 | - 课程作业:共5个实验,具体要求见课程网站 23 | 24 | ## 资源汇总 25 | 26 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.5940_TinyML - GitHub](https://github.com/PKUFlyingPig/MIT6.5940_TinyML) 中。 -------------------------------------------------------------------------------- /docs/机器学习系统/MLC.en.md: -------------------------------------------------------------------------------- 1 | # Machine Learning Compilation 2 | 3 | ## Course Overview 4 | 5 | - University: Online course 6 | - Prerequisites: Foundations in Machine Learning/Deep Learning 7 | - Programming Language: Python 8 | --Difficulty: 🌟🌟🌟 9 | - Estimated Hours: 30 hours 10 | 11 | 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. 12 | 13 | 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. 14 | 15 | 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. 16 | 17 | ## Course Resources 18 | 19 | - Course Website: 20 | - Course Videos:[Bilibili][Bilibili_link] 21 | - Course Notes: 22 | - Course Assignments: 23 | 24 | [Bilibili_link]: https://www.bilibili.com/video/BV15v4y1g7EU?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349 25 | -------------------------------------------------------------------------------- /docs/机器学习系统/MLC.md: -------------------------------------------------------------------------------- 1 | # Machine Learning Compilation 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Bilibili 大学 6 | - 先修要求:机器学习/深度学习基础 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:30小时 10 | 11 | 18 | 19 | 这门课是机器学习编译领域的顶尖学者陈天奇在2022年暑期开设的一门在线课程。其实机器学习编译无论在工业界还是学术界仍然是一个非常前沿且快速更迭的领域,国内外此前还没有为这个方向专门开设的相关课程。因此如果对机器学习编译感兴趣想有个全貌性的感知的话,可以学习一下这门课。 20 | 21 | 本课程主要以 [Apache TVM](https://tvm.apache.org/) 这一主流的机器学习编译框架为例(陈天奇是这个框架的创始人之一),聚焦于如何将开发模式下(如 Tensorflow, Pytorch, Jax)的各类机器学习模型,通过一套普适的抽象和优化算法,变换为拥有更高性能并且适配各类底层硬件的部署模式。课程讲授的知识点都是相对 High-Level 的宏观概念,同时每节课都会有一个配套的 Jupyter Notebook 来通过具体的代码讲解知识点,因此如果从事 TVM 相关的编程开发的话,这门课有丰富且规范的代码示例以供参考。 22 | 23 | 所有的课程资源全部开源并且有中文和英文两个版本,B站和油管分别有中文和英文的课程录影。 24 | 25 | ## 课程资源 26 | 27 | - 课程网站: 28 | - 课程视频:[Bilibili][Bilibili_link] 29 | - 课程笔记: 30 | - 课程作业: 31 | 32 | [Bilibili_link]: https://www.bilibili.com/video/BV15v4y1g7EU?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349 33 | -------------------------------------------------------------------------------- /docs/机器学习进阶/CMU10-708.en.md: -------------------------------------------------------------------------------- 1 | # CMU 10-708: Probabilistic Graphical Models 2 | 3 | ## Course Introduction 4 | 5 | - **University**: Carnegie Mellon University (CMU) 6 | - **Prerequisites**: Machine Learning, Deep Learning, Reinforcement Learning 7 | - **Course Difficulty**: 🌟🌟🌟🌟🌟 8 | - **Course Website**: [CMU 10-708](https://sailinglab.github.io/pgm-spring-2019/) 9 | - **Course Resources**: The course website includes slides, notes, videos, homework, and project materials. 10 | 11 | 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. 12 | 13 | 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. -------------------------------------------------------------------------------- /docs/机器学习进阶/CMU10-708.md: -------------------------------------------------------------------------------- 1 | # CMU 10-708: Probabilistic Graphical Models 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:CMU 6 | - 先修要求:Machine Learning, Deep Learning, Reinforcement Learning 7 | - 课程难度:🌟🌟🌟🌟🌟 8 | - 课程网站: 9 | - 课程网站包含了所有的资源:slides, notes, video, homework, and project 10 | 11 | 这门课程是 CMU 的图模型基础 + 进阶课,授课老师为 Eric P. Xing,涵盖了图模型基础,与神经网络的结合,在强化学习中的应用,以及非参数方法,相当硬核。 12 | -------------------------------------------------------------------------------- /docs/机器学习进阶/CS229M.en.md: -------------------------------------------------------------------------------- 1 | # STATS214 / CS229M: Machine Learning Theory 2 | 3 | ## Course Introduction 4 | 5 | - **University**: Stanford 6 | - **Prerequisites**: Machine Learning, Deep Learning, Statistics 7 | - **Course Difficulty**: 🌟🌟🌟🌟🌟🌟 8 | - **Course Website**: [STATS214 / CS229M](http://web.stanford.edu/class/stats214/) 9 | 10 | 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. 11 | 12 | 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. -------------------------------------------------------------------------------- /docs/机器学习进阶/CS229M.md: -------------------------------------------------------------------------------- 1 | # STATS214 / CS229M: Machine Learning Theory 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:Machine Learning, Deep Learning, Statistics 7 | - 课程难度:🌟🌟🌟🌟🌟🌟 8 | - 课程网站: 9 | 10 | 经典学习理论 + 最新深度学习理论,非常硬核。授课老师之前是 Percy Liang,现在是 Tengyu Ma。 11 | -------------------------------------------------------------------------------- /docs/机器学习进阶/STA4273.en.md: -------------------------------------------------------------------------------- 1 | # STA 4273 Winter 2021: Minimizing Expectations 2 | 3 | ## Course Introduction 4 | 5 | - **University**: University of Toronto 6 | - **Prerequisites**: Bayesian Inference, Reinforcement Learning 7 | - **Course Difficulty**: 🌟🌟🌟🌟🌟🌟🌟 8 | - **Course Website**: [STA 4273 Winter 2021](https://www.cs.toronto.edu/~cmaddis/courses/sta4273_w21/) 9 | 10 | "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. 11 | 12 | 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. 13 | 14 | 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. -------------------------------------------------------------------------------- /docs/机器学习进阶/STA4273.md: -------------------------------------------------------------------------------- 1 | # STA 4273 Winter 2021: Minimizing Expectations 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:U Toronto 6 | - 先修要求:Bayesian Inference, Reinforcement Learning 7 | - 课程难度:🌟🌟🌟🌟🌟🌟🌟 8 | - 课程网站: 9 | 10 | 这是一门较为进阶的 Ph.D. 研究课程,核心内容是 inference 和 control 之间的关系。授课老师为 Chris Maddison (AlphaGo founding member, NeurIPS 14 best paper)。 11 | -------------------------------------------------------------------------------- /docs/机器学习进阶/STAT8201.en.md: -------------------------------------------------------------------------------- 1 | # Columbia STAT 8201: Deep Generative Models 2 | 3 | ## Course Introduction 4 | 5 | - **University**: Columbia University 6 | - **Prerequisites**: Machine Learning, Deep Learning, Graphical Models 7 | - **Course Difficulty**: 🌟🌟🌟🌟🌟🌟 8 | - **Course Website**: [STAT 8201](http://stat.columbia.edu/~cunningham/teaching/GR8201/) 9 | 10 | "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. 11 | 12 | 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. 13 | 14 | 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. -------------------------------------------------------------------------------- /docs/机器学习进阶/STAT8201.md: -------------------------------------------------------------------------------- 1 | # Columbia STAT 8201: Deep Generative Models 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Columbia University 6 | - 先修要求:Machine Learning, Deep Learning, Graphical Models 7 | - 课程难度:🌟🌟🌟🌟🌟🌟 8 | - 课程网站: 9 | 10 | 这门课是一门 PhD 讨论班,每周的内容是展示 + 讨论论文,授课老师是 John Cunningham。Deep Generative Models (深度生成模型) 是图模型与神经网络的结合,也是现代机器学习最重要的方向之一。 11 | -------------------------------------------------------------------------------- /docs/深度学习/CS224n.en.md: -------------------------------------------------------------------------------- 1 | # CS224n: Natural Language Processing 2 | 3 | ## Course Overview 4 | 5 | - University:Stanford 6 | - Prerequisites:Fundations of Deep Learning + Python 7 | - Programming Language:Python 8 | - Course Difficulty:🌟🌟🌟🌟 9 | - Estimated Hours:80 hours 10 | 11 | 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. 12 | 13 | The course consists of 5 progressively challenging programming assignments covering word vectors, the word2vec algorithm, dependency parsing, machine translation, and fine-tuning a Transformer. 14 | 15 | 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. 16 | 17 | ## Course Resources 18 | 19 | - Course Website: 20 | - Course Videos: Search for 'CS224n' on Bilibili 21 | - Course Textbook:N/A 22 | - Course Assignments:,5 Programming Assignments + 1 Final Project 23 | 24 | ## Resource Compilation 25 | 26 | All resources and assignment implementations used by @PKUFlyingPig during the course are compiled in [PKUFlyingPig/CS224n - GitHub](https://github.com/PKUFlyingPig/CS224n) 27 | 28 | -------------------------------------------------------------------------------- /docs/深度学习/CS224n.md: -------------------------------------------------------------------------------- 1 | # CS224n: Natural Language Processing 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:深度学习基础 + Python 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 | Stanford 的 NLP 入门课程,由自然语言处理领域的巨佬 Chris Manning 领衔教授(word2vec 算法的开创者)。内容覆盖了词向量、RNN、LSTM、Seq2Seq 模型、机器翻译、注意力机制、Transformer 等等 NLP 领域的核心知识点。 12 | 13 | 5 个编程作业难度循序渐进,分别是词向量、word2vec 算法、Dependency parsing、机器翻译以及 Transformer 的 fine-tune。 14 | 15 | 最终的大作业是在 Stanford 著名的 SQuAD 数据集上训练 QA 模型,有学生的大作业甚至直接发表了顶会论文。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站: 20 | - 课程视频:B 站搜索 CS224n 21 | - 课程教材:无 22 | - 课程作业:,5 个编程作业 + 1 个 Final Project 23 | 24 | ## 资源汇总 25 | 26 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS224n - GitHub](https://github.com/PKUFlyingPig/CS224n) 中。 27 | -------------------------------------------------------------------------------- /docs/深度学习/CS224w.en.md: -------------------------------------------------------------------------------- 1 | # CS224w: Machine Learning with Graphs 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Stanford 6 | - Prerequisites: fundamental machine learning + Python 7 | - Programming Language: Python, LaTeX 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 80 hours 10 | 11 | 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 :) 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Lecture Videos: 17 | - Text Book: none 18 | - Assignments: , with 6 programming assignments, 3 LaTeX written assignments -------------------------------------------------------------------------------- /docs/深度学习/CS224w.md: -------------------------------------------------------------------------------- 1 | # CS224w: Machine Learning with Graphs 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:深度学习基础 + Python 7 | - 编程语言:Python, LaTeX 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 | Stanford 的图神经网络入门课,这门课我没有上过,但众多做 GNN 的朋友都向我力荐过这门课,想必 Stanford 的课质量还是一如既往地有保证的。另外就是这门课的授课老师非常年轻帅气:) 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频: 17 | - 课程教材:无 18 | - 课程作业:,6 个编程作业,3 个 LaTeX 书面作业 19 | -------------------------------------------------------------------------------- /docs/深度学习/CS230.en.md: -------------------------------------------------------------------------------- 1 | # Coursera: Deep Learning 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Stanford 6 | - Prerequisites: fundamental machine learning + Python 7 | - Programming Language: Python 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 80 hours 10 | 11 | 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. 12 | 13 | ## Couse Resources 14 | 15 | - Course Website: 16 | - Lecture Videos: , can be found on Bilibili 17 | - Text Book: none 18 | - Assignments: 19 | -------------------------------------------------------------------------------- /docs/深度学习/CS230.md: -------------------------------------------------------------------------------- 1 | # Coursera: Deep Learning 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:机器学习基础 + Python 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 | 吴恩达在 Coursera 开设的另一门网红课程,学习者无数,堪称圣经级的深度学习入门课。深入浅出的讲解,眼花缭乱的 Project。从最基础的神经网络,到 CNN, RNN,再到最近大热的 Transformer。学完这门课,你将初步掌握深度学习领域必备的知识和技能,并且可以在 [Kaggle](https://www.kaggle.com/) 中参加自己感兴趣的比赛,在实践中锻炼自己。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频:,B站有搬运 17 | - 课程教材:无 18 | - 课程作业: 19 | -------------------------------------------------------------------------------- /docs/深度学习/CS231.en.md: -------------------------------------------------------------------------------- 1 | # CS231n: CNN for Visual Recognition 2 | 3 | ## Course Introduction 4 | 5 | - Affiliated Universities:Stanford 6 | - Prerequisites: Foundations of Machine Learning 7 | - Programming Languages:Python 8 | - Course Difficulty:🌟🌟🌟🌟 9 | - Estimated hours: 80 hours 10 | 11 | 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. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Course Video: 17 | - Course Materials: None 18 | - Coursework:,3 Programming Assignments 19 | -------------------------------------------------------------------------------- /docs/深度学习/CS231.md: -------------------------------------------------------------------------------- 1 | # CS231n: CNN for Visual Recognition 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:机器学习基础 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 | Stanford 的 CV 入门课,由计算机领域的巨佬李飞飞院士领衔教授(CV 领域划时代的著名数据集 ImageNet 的研究团队),但其内容相对基础且友好,如果上过 CS230 的话可以直接上手 Project 作为练习。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频: 17 | - 课程教材:无 18 | - 课程作业:,3个编程作业 19 | -------------------------------------------------------------------------------- /docs/深度学习/CS285.en.md: -------------------------------------------------------------------------------- 1 | # CS285: Deep Reinforcement Learning 2 | 3 | ## Course Overview 4 | 5 | - University:UC Berkeley 6 | - Prerequisites:CS188, CS189 7 | - Programming Language:Python 8 | - Course Difficulty:🌟🌟🌟🌟 9 | - Estimated Hours:80 hours 10 | 11 | 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. 12 | 13 | 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. 14 | 15 | 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. 16 | 17 | ## Course Resources 18 | 19 | - Course Website: 20 | - Course Videos: 21 | - Course Texbook: N/A 22 | - Course Assignments: , 5 programming assignments 23 | -------------------------------------------------------------------------------- /docs/深度学习/CS285.md: -------------------------------------------------------------------------------- 1 | # CS285: Deep Reinforcement Learning 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS188, CS189 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 | CS285 这一课程现由 Sergey Levine 教授讲授,课程内容覆盖了深度强化学习领域的各方面内容,适合有一定机器学习基础的同学进行学习,具体要求包括了解马尔可夫决策过程(MDP)等。整门课程中含有较多的公式,上课前需要有一定的心理准备。此外,教授会根据每年最新的研究进展更新课程内容以及作业,课程中能感受到教授尝试将深度强化学习领域的所有基础知识以及最近的发展在短短的数节课中进行传达。 12 | 13 | 有关课程内容获取,22Fall 的授课方式为课前观看提前录制的视频,课上主要为 Q&A 环节,教授选择部分或者所有视频内的知识进行讲解同时回答学生现场提出的问题,因此所提供的课程视频链接实际上是已经包含了所有内容。课程作业则由5个编程作业组成,每一次作业主要为复现经典模型以及进行模型间的对比,偶尔也包含一些对最近提出的模型的复现,最后递交一份报告。考虑到作业本身已经提供了框架,且都是根据 hint 进行代码填空,因此作业难度并不大。 14 | 15 | 总的来说,该课程适合新手入门深度强化学习。虽然学到后面越来越感觉到难,但整门课下来个人感觉还是收获颇丰。 16 | 17 | (另外 Levine 教授人真的很 nice) 18 | 19 | ## 课程资源 20 | 21 | - 课程网站: 22 | - 课程视频: 23 | - 课程教材:无 24 | - 课程作业:,5个编程作业 25 | -------------------------------------------------------------------------------- /docs/深度学习/LHY.en.md: -------------------------------------------------------------------------------- 1 | # National Taiwan University: Machine Learning by Hung-yi Lee 2 | 3 | ## Course Overview 4 | 5 | - University: National Taiwan University 6 | - Prerequisites: Proficiency in Python 7 | - Programming Language: Python 8 | - Course Difficulty: 🌟🌟🌟🌟 9 | - Estimated Hours:80 hours 10 | 11 | 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. 12 | 13 | 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. 14 | 15 | 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. 16 | 17 | ## Course Resources 18 | 19 | - Course Websites: 20 | - Course Videos: 21 | - Course Textbook: N/A 22 | - Course Assignments:, 15 labs covering a wide range of deep learning domains 23 | -------------------------------------------------------------------------------- /docs/深度学习/LHY.md: -------------------------------------------------------------------------------- 1 | # 国立台湾大学:李宏毅机器学习 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:國立台灣大學 6 | - 先修要求:熟练掌握 Python 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 | 李宏毅老师是国立台湾大学的教授,其风趣幽默的授课风格深受大家喜爱,并且尤其喜欢在 PPT 中插入宝可梦等动漫元素,是个非常可爱的老师。 12 | 13 | 这门课挂着机器学习的牌子,但其课程内容之广实在令人咋舌,其作业一共包含 15 个 lab,分别是 Regression、Classification、CNN、Self-Attention、Transformer、GAN、BERT、Anomaly Detection、Explainable AI、Attack、Adaptation、 14 | RL、Compression、Life-Long Learning 以及 Meta Learning。可谓是包罗万象,能让学生对于深度学习的绝大多数领域都有一定了解,从而可以进一步选择想要深入的方向进行学习。 15 | 16 | 大家也大可不必担心作业的难度,因为所有作业都会提供助教的示例代码,帮你完成数据处理、模型搭建等,你只需要在其基础上进行适量的修改即可。这也是一个学习别人优质代码的极好机会,大家需要水课程大作业的话,这里也是一个不错的资料来源。 17 | 18 | ## 课程资源 19 | 20 | - 课程网站: 21 | - 课程视频:,每节课的链接参见课程网站 22 | - 课程教材:无 23 | - 课程作业:,15 个 lab,几乎覆盖了主流深度学习的所有领域 24 | -------------------------------------------------------------------------------- /docs/电子基础/EE16.en.md: -------------------------------------------------------------------------------- 1 | # UCB EE16A&B: Designing Information Devices and Systems I&II 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: None 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 150 hours 10 | 11 | This introductory class for freshmen majoring in electronics at UC Berkeley teaches the fundamentals of circuitry. Through a variety of hands-on labs, students will experience collecting information from the environment through sensors and analyzing it to make predictions. Due to the COVID-19, all labs have remote online version, making them ideal for self-study. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: [EE16A](https://inst.eecs.berkeley.edu/~ee16a/su20/), [EE16B](https://eecs16b.org/) 16 | - Recordings: [EE16A](https://www.youtube.com/playlist?list=PL6nn4B7IPh8YwpxeJqCoNJ7wh0jme6WNr), [EE16B](https://www.youtube.com/playlist?list=PLfSttCKflps1UrUS1ZaV9KQJkoPFzdZAk) 17 | - Textbooks: [EE16A](https://inst.eecs.berkeley.edu/~ee16a/sp22/#notes), [EE16B](https://eecs16b.org/#notes) 18 | - Assignments: [EE16A](https://inst.eecs.berkeley.edu/~ee16a/sp22/hw-practice.html), [EE16B](https://eecs16b.org/hw-practice/?) 19 | 20 | ## Personal Resources 21 | 22 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/EE16A - GitHub](https://github.com/PKUFlyingPig/EE16A). 23 | -------------------------------------------------------------------------------- /docs/电子基础/EE16.md: -------------------------------------------------------------------------------- 1 | # UCB EE16A&B: Designing Information Devices and Systems I&II 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:无 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | UC Berkeley 电子系学生的大一入门课,通过电路基础知识的讲授,配合各类动手实操的 lab,让学生体验通过电路从环境中收集信息并进行分析,作出预测和反馈。由于疫情的缘故,所有 lab 都有远程在线版,非常适合大家在家自学。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站:[EE16A](https://inst.eecs.berkeley.edu/~ee16a/su20/), [EE16B](https://eecs16b.org/) 16 | - 课程视频:B 站搜索 17 | - 课程教材:参见课程 notes 18 | - 课程作业:参见课程主页 19 | 20 | ## 资源汇总 21 | 22 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/EE16A - GitHub](https://github.com/PKUFlyingPig/EE16A) 中。 23 | -------------------------------------------------------------------------------- /docs/电子基础/Signals_and_Systems_AVO.en.md: -------------------------------------------------------------------------------- 1 | # MIT 6.007 Signals and Systems 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: Calculus, Linear Algebra 7 | - Programming Languages: Matlab Preferred 8 | - Difficulty: 🌟🌟 9 | - Class Hour: 50-70 hours 10 | 11 | The name of the instructor: Prof. Alan V. Oppenheim 12 | 13 | Okay, enough reason to take this class. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: 18 | - Recordings: 19 | - Textbooks: Signals and Systems, 2nd Edition 20 | - Assignments: 21 | -------------------------------------------------------------------------------- /docs/电子基础/Signals_and_Systems_AVO.md: -------------------------------------------------------------------------------- 1 | # MIT 6.007 Signals and Systems 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:Calculus, Linear Algebra 7 | - 编程语言:Matlab Preferred 8 | - 课程难度:🌟🌟 9 | - 预计学时:50-70 小时 10 | 11 | 看到课程老师的名字:Prof. Alan V. Oppenheim 12 | 13 | 好的,上这门课的理由已经足够了。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站: 18 | - 课程视频: 19 | - 课程教材:Signals and Systems, 2nd Edition 20 | - 课程作业: 21 | -------------------------------------------------------------------------------- /docs/电子基础/signal.en.md: -------------------------------------------------------------------------------- 1 | # UCB EE120: Signal and Systems 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: CS61A, CS70, Calculus, Linear Algebra 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | The highlight of this course is the six exciting labs that will allow you to use signals and systems theory to solve practical problems in Python. For example, in lab3 you will implement the FFT algorithm and compare the performance with Numpy's official implementation. In lab4 you will infer the heart rate by processing the video of fingers. Lab5 is the most awesome one where you will reduce the noise in the photos taken by the Hubble telescope to recover the brilliant and bright starry sky. In lab6 you will build a feedback system to stabilize the pole on the cart. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Recordings: refer to the course website 17 | - Assignments: refer to the course website 18 | 19 | ## Personal Resources 20 | 21 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/UCB-EE120 - GitHub](https://github.com/PKUFlyingPig/UCB-EE120) 22 | -------------------------------------------------------------------------------- /docs/电子基础/signal.md: -------------------------------------------------------------------------------- 1 | # UCB EE120: Signal and Systems 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS61A, CS70,微积分,线性代数 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 这门课最精华的部分就是 6 个超有趣的编程作业了,会让你用 Python 通过学习到的信号与系统的理论知识,解决各类实际问题。例如 lab3 会让你实现 FFT 算法,并和 Numpy 的官方实现进行性能对比;lab4 会通过分析手指头的影像数据推断心率;lab5 就更牛了,会让你给哈勃望远镜拍到的照片进行降噪处理,恢复绚烂清晰的星空;lab6 会让你构造一个反馈系统,平衡小车上的细杆。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程教材:参见课程 notes 17 | - 课程作业:5 个书面作业 + 6 个编程作业 18 | 19 | ## 资源汇总 20 | 21 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-EE120 - GitHub](https://github.com/PKUFlyingPig/UCB-EE120) 中。 22 | -------------------------------------------------------------------------------- /docs/系统安全/CS161.en.md: -------------------------------------------------------------------------------- 1 | # UCB CS161: Computer Security 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: CS61A, CS61B, CS61C 7 | - Programming Languages: C, Go 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Class Hour: 150 Hours 10 | 11 | Computer Security course from UC Berkeley, devided into 5 parts: 12 | 13 | - Security principles: how to design a secure system 14 | - Memory safety: buffer overflow attack 15 | - Cryptography: symmetric encryption, asymmetric encryption, MAC, digital signature ......... 16 | - Web: SQL-injection, XSS, XSRF ....... 17 | - Networking: attacks for each layer 18 | 19 | The most impressive part to me is Project2, which requires you to design and implement a secure file sharing system in Go. It took me three full days to complete this extremely difficult project, with over 3 thousand lines of code. Such an intensive development experience can greatly enhance your ability to design and implement a secure system. 20 | 21 | In 2020 summer semester, the lecture recordings are posted publicly, which can be found in the links below. 22 | 23 | ## Course Resources 24 | 25 | - Course Website: 26 | - Recordings: refer to the course website 27 | - Textbooks: 28 | - Assignments: 7 online HWs + 3 Labs + 3 Projects 29 | 30 | ## Personal Resources 31 | 32 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/UCB-CS161 - GitHub](https://github.com/PKUFlyingPig/UCB-CS161). 33 | -------------------------------------------------------------------------------- /docs/系统安全/CS161.md: -------------------------------------------------------------------------------- 1 | # UCB CS161: Computer Security 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:CS61A, CS61B, CS61C 7 | - 编程语言:C, Go 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | 伯克利的计算机系统安全课程,课程内容分为5个部分: 12 | 13 | - Security principles: how to design a secure system 14 | - Memory safety: buffer overflow attack 15 | - Cryptography: symmetric encryption, asymmetric encryption, MAC, digital signature ......... 16 | - Web: SQL-injection, XSS, XSRF ....... 17 | - Networking: attacks for each layer 18 | 19 | 这门课让我印象最为深刻的部分是 Project2,让你用 Go 语言设计和实现一个安全的文件分享系统。我花了整整三天才完成了这个非常虐的 Project,总代码量超过 3k 行。这样密集型的开发过程,能极大地锻炼你设计和实现一个安全系统的能力。 20 | 21 | 2020 年夏季学期的版本开源了课程录影,大家可以在下面的课程网站链接里找到。 22 | 23 | ## 课程资源 24 | 25 | - 课程网站: 26 | - 课程视频:参见课程网站 27 | - 课程教材: 28 | - 课程作业:7 个在线 HW + 3 个 Lab + 3 个 Project 29 | 30 | ## 资源汇总 31 | 32 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-CS161 - GitHub](https://github.com/PKUFlyingPig/UCB-CS161) 中。 33 | -------------------------------------------------------------------------------- /docs/系统安全/CSE365.en.md: -------------------------------------------------------------------------------- 1 | # ASU CSE365: Introduction to Cybersecurity 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Arizona State University 6 | - Prerequisites: None 7 | - Programming Languages: C, Python, x86 assembly 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: Varying from person to person 10 | 11 | An introductory course on web security at Arizona State University, the course contains several modules, mainly including: 12 | 13 | - Program Misuse: Linux commandline, privilege escalation 14 | - Web fundamentals: http, server, intercept 15 | - Assembly: registers, memory, control flow 16 | - Cryptography: Symmetric/Asymmetric encryption, hashing, trust 17 | - Web security: Command/HTML/SQL/Stack injection 18 | 19 | The course is mainly based on challenges, supplemented by lectures and reading materials. The challenges are developed in the form of CTF, and the difficulty increases in order. 20 | 21 | For hackers with weak foundations, getting stuck is a normal phenomenon. If you encounter difficulties in solving the problem, you can seek help from the Discord Server given in the Chat column on the homepage. 22 | 23 | ## Course Resources 24 | 25 | - Course Website: 26 | - Recordings: See course website 27 | - Textbooks: None 28 | - Assignments: 8 modules (444 challenges) 29 | 30 | ## Personal Resources 31 | 32 | - Lectures on YouTube: 33 | - Live Broadcasts on Twitch: 34 | - Chat on Discord: 35 | - Open Source on GitHub: 36 | - Contact us via Email: 37 | 38 | In addition, due to an important factor in evaluating ASU students' course grades, the course does not encourage uploading problem-solving ideas, except for the first two challenges of each module. 39 | -------------------------------------------------------------------------------- /docs/系统安全/CSE365.md: -------------------------------------------------------------------------------- 1 | # ASU CSE365: Introduction to Cybersecurity 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Arizona State University 6 | - 先修要求:无 7 | - 编程语言:C, Python, x86 assembly 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:因人而异 10 | 11 | 亚利桑那州立大学 Web 安全的导论课,课程以模块化的形式构成,主要包含以下方面: 12 | 13 | - Program Misuse: Linux commandline, privilege escalation 14 | - Web fundamentals: http, server, intercept 15 | - Assembly: registers, memory, control flow 16 | - Cryptography: Symmetric/Asymmetric encryption, hashing, trust 17 | - Web security: Command/HTML/SQL/Stack injection 18 | 19 | 课程以 Challenge 为主,Lectures and Reading 为辅。Challenge 中的习题以 CTF 的形式展开,难度依次递增。 20 | 21 | 对于基础较弱的学习者,卡关是正常现象。如果在解题过程中遇到困难,可以在首页 Chat 栏目中给出的 Discord Server 寻求帮助。 22 | 23 | ## 课程资源 24 | 25 | - 课程网站: 26 | - 课程视频:参见课程网站 27 | - 课程教材:无 28 | - 课程作业:8 个模块(444 个 challenges) 29 | 30 | ## 资源汇总 31 | 32 | - Lectures on YouTube: 33 | - Live Broadcasts on Twitch: 34 | - Chat on Discord: 35 | - Open Source on GitHub: 36 | - Contact us via Email: 37 | 38 | 另外,出于评定 ASU 学生课程成绩的重要因素,官方不鼓励上传解题思路,每个模块的前两题除外。 39 | -------------------------------------------------------------------------------- /docs/系统安全/CSE466.md: -------------------------------------------------------------------------------- 1 | # ASU CSE466: Computer Systems Security 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Arizona State University 6 | - 先修要求:无 7 | - 编程语言:C, Python, x86 assembly 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:因人而异 10 | 11 | 亚利桑那州立大学系统安全的核心课,课程以模块化的形式构成,主要包含以下方面: 12 | 13 | - Linux commandline: Program misuse, program interaction 14 | - Shellcoding: Assembly, shellcode injection, prevention 15 | - Reverse Engineering: Function frame, static/dynamic reversing tools 16 | - Program Exploitation: Hijacking to shellcode, JIT spray 17 | - System Exploitation: Kernel modules, privilege escalation 18 | - Miscellaneous: Sandboxing, Memory Errors, Race conditions 19 | 20 | 与 CSE365 相同,课程以 Challenge 为主,Lectures and Reading 为辅。Challenge 中的习题以 CTF 的形式展开,难度依次递增。 21 | 22 | 习题质量挺高的,但某些模块难度较大,尤其是涉及到内核的部分,有的时候一天都写不出一道题。如果在解题过程中遇到困难,可以在首页 Chat 栏目中给出的 Discord Server 寻求帮助。 23 | 24 | ## 课程资源 25 | 26 | - 课程网站: 27 | - 课程视频:参见课程网站 28 | - 课程教材:无 29 | - 课程作业:13 个模块(358 个 challenge) 30 | 31 | ## 资源汇总 32 | 33 | - Lectures on YouTube: 34 | - Live Broadcasts on Twitch: 35 | - Chat on Discord: 36 | - Open Source on GitHub: 37 | - Contact us via Email: 38 | 39 | 另外,出于评定 ASU 学生课程成绩的重要因素,官方不鼓励上传解题思路,每个模块的前两题与逆向部分的 16 题除外。 40 | -------------------------------------------------------------------------------- /docs/系统安全/MIT6.1600.md: -------------------------------------------------------------------------------- 1 | # MIT6.1600: Foundations of Computer Security 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:离散数学,编程基础,计算机系统基础 7 | - 编程语言:Python3 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:50小时 10 | 11 | MIT 的计算机系统安全本科生课程,共分为 authentication, transport security, platform security, software security, 和 human/end-user security 五个模块。课程组织还是相当清晰的:authentication 关注于认证安全,即如何证明计算机世界的“你”确实是“你”。接着讲解大家了解较多的通信安全,例如数据传输的加密解密,密钥的交换等。但传输是一方面,代码最终需要在终端上执行,这就涉及到运行代码的平台本身甚至软件代码本身的安全性。最后课程还会讲一些关于隐私安全的内容,上升到社会学的范畴去讨论群体信息安全。学完该课程,你将会掌握计算机安全的很多重要基本概念,例如公钥私钥加密算法、哈希算法、电子签名、密钥交换算法等等。除了稍显复杂枯燥的数学和定理证明外,课程中还会结合具体知识点讲解很多现实发生的安全漏洞,让你对这些安全概念有更感性的认识。此外,还有6个课程实验让你通过编程实现很多漏洞的利用,在实际中加深对知识的理解,个人感觉还是很有意思的。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站:[fall23](https://61600.csail.mit.edu/2023/), [fall22](https://61600.csail.mit.edu/2022/) 16 | - 课程视频:参见课程网站 17 | - 课程教材:没有指定教材,每节课有 notes 18 | - 课程作业:一共6个实验,难度适中 19 | 20 | ## 资源汇总 21 | 22 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.1600 - GitHub](https://github.com/PKUFlyingPig/MIT6.1600) 中。 -------------------------------------------------------------------------------- /docs/系统安全/MIT6.858.md: -------------------------------------------------------------------------------- 1 | # MIT 6.858: Computer System Security 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:计算机体系结构,对计算机系统有初步了解 7 | - 编程语言:C, Python 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | MIT 的计算机系统安全课程,实验环境是一个 Web Application Zoobar。学生学习攻防技术并应用于该 Web Application。 12 | 13 | - Lab 1: you will explore the zoobar web application, and use buffer overflow attacks to break its security properties. 14 | - Lab 2: you will improve the zoobar web application by using privilege separation, so that if one component is compromised, the adversary doesn't get control over the whole web application. 15 | - Lab 3: you will build a program analysis tool based on symbolic execution to find bugs in Python code such as the zoobar web application. 16 | - Lab 4: you will improve the zoobar application against browser attacks. 17 | 18 | 这个课我主要是做了 Lab 3。Lab 3 是通过混合符号执行来遍历程序的所有分支,理解了符号执行的思想后 Lab 并不难做。这个 Lab 直观展示符号执行这种技术的使用方法。 19 | 20 | 这个课的 Final Project 是实现 [SecFS](https://github.com/mit-pdos/secfs-skeleton),一个远端文件系统,面对完全不可信的服务器,提供机密性和完整性。参考论文为 [SUNDR](https://www.usenix.org/legacy/event/osdi04/tech/full_papers/li_j/li_j.pdf)。 21 | 22 | ## 课程资源 23 | 24 | - 课程网站: 25 | - 课程视频:参见课程网站 26 | - 课程教材:无 27 | - 课程作业:4 个 Lab + Final Project / Lab5 28 | -------------------------------------------------------------------------------- /docs/系统安全/SEEDLabs.md: -------------------------------------------------------------------------------- 1 | # SEEDLabs 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:雪城大学 6 | - 先修要求:无 7 | - 编程语言:C,汇编 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | 雪城大学的网安课程,由 NSF 提供130万美元的资金支持,为网安教育开发了动手实践性的实验练习(称为 SEED Lab)。课程理论教学和动手实践并重,包含详细的 [开源讲义](https://github.com/seed-labs/seed-labs) 、视频教程、教科书(被印刷为多种语言)、开箱即用的基于虚拟机和 docker 的攻防环境等。目前全球有1050家研究机构在使用该项目。 12 | 13 | 涵盖计算机和信息安全领域的广泛主题,包括软件安全、网络安全、Web 安全、操作系统安全和移动应用安全。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站: 18 | - 课程视频: 19 | - 课程教材: 20 | - 课程作业:四十多个安全领域的lab,实验环境可由课程提供的定制虚拟机和 docker [快速搭建](https://seedsecuritylabs.org/labsetup.html),并且提供详细的原理讲解、实验指导。以 [缓冲区溢出实验](https://seedsecuritylabs.org/Labs_20.04/Software/Buffer_Overflow_Setuid/) 为例,该实验属于 [软件安全主题](https://seedsecuritylabs.org/Labs_20.04/Software/) ,这里是它的 [实验指导](https://seedsecuritylabs.org/Labs_20.04/Files/Buffer_Overflow_Setuid/Buffer_Overflow_Setuid.pdf) ,这里是它对应的 [教材内容](https://www.handsonsecurity.net/files/chapters/buffer_overflow_c.pdf) 21 | 22 | ## 资源汇总 23 | 24 | @LaPhilosophie 在学习这门课中用到的所有资源和作业实现都汇总在 [LaPhilosophie/seedlab - GitHub](https://github.com/LaPhilosophie/seedlab) 中。 25 | 26 | -------------------------------------------------------------------------------- /docs/编程入门/C/CS50.en.md: -------------------------------------------------------------------------------- 1 | # CS50: This is CS50x 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Harvard 6 | - Prerequisites: None 7 | - Programming Languages: C, Python, SQL, HTML, CSS, JavaScript 8 | - Difficulty: 🌟🌟 9 | - Class Hour: 20 hours 10 | 11 | This course has been voted the most popular public course by Harvard students for many years. Professor Malan is very passionate in class. I still remember the scene where he tears up the Yellow pages to explain the dichotomy method. Since this is a university-wide public course, the contents are pretty friendly to beginners and even if you already have some programming experience, all the programming assignments are quite exciting and worth a try. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: [2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/), [2024](https://cs50.harvard.edu/x/2024/), [2025](https://cs50.harvard.edu/x/2025/) 16 | - Recordings: [2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/), [2024](https://cs50.harvard.edu/x/2024/), [2025](https://cs50.harvard.edu/x/2025/) 17 | - Assignments: [2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/), [2024](https://cs50.harvard.edu/x/2024/), [2025](https://cs50.harvard.edu/x/2025/) 18 | 19 | ## Personal Resources 20 | 21 | All the resources and assignments used by @mancuoj in this course are maintained in [mancuoj/CS50x - GitHub](https://github.com/mancuoj/CS50x). 22 | -------------------------------------------------------------------------------- /docs/编程入门/C/CS50.md: -------------------------------------------------------------------------------- 1 | # CS50: This is CS50x 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Harvard 6 | - 先修要求:无 7 | - 编程语言:C, Python, SQL, HTML, CSS, JavaScript 8 | - 课程难度:🌟🌟 9 | - 预计学时:20 小时 10 | 11 | 连续多年被哈佛大学学生评为最受欢迎的公选课程。Malan 教授上课非常有激情,撕黄页讲二分法的场面让人记忆犹新(笑)。但因为它的入门以及全校公选的属性,课程内容难度比较温和,但是课程作业质量非常高而且全部免费开源,非常适合小白入门,或者大佬休闲。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站:[2025](https://cs50.harvard.edu/x/2025/), [2024](https://cs50.harvard.edu/x/2024/), [2023](https://cs50.harvard.edu/x/2023/), [2022](https://cs50.harvard.edu/x/2022/) 16 | - 课程视频:原版参考课程网站,也可以在 B 站找到[中文字幕版](https://www.bilibili.com/video/BV1HW4y1A7Yi/?spm_id_from=333.999.0.0&vd_source=a4d76d1247665a7e7bec15d15fd12349)。 17 | - 课程教材:无 18 | - 课程作业:参考课程网站。 19 | 20 | ## 资源汇总 21 | 22 | @mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 [mancuoj/CS50x - GitHub](https://github.com/mancuoj/CS50x) 中。 23 | 24 | @figuretu 将有价值的提问讨论以及相关学习资源整理在共享文档 [CS50 - 资源总目录](https://uufyjevghz.feishu.cn/docx/DP78d2U5TosTOTx9QCbcjp8GnBh) 中。 25 | -------------------------------------------------------------------------------- /docs/编程入门/C/Duke-Coursera-Intro-C.en.md: -------------------------------------------------------------------------------- 1 | # Introductory C Programming Specialization 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Duke 6 | - Prerequisites: None 7 | - Programming Languages: C 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 110 hours 10 | 11 | This is an excellent course which I benefited a lot from. 12 | 13 | - The course teaches fundamental concepts such as frame, stack memory, heap memory, etc. 14 | - There are great programming assignments to deepen and reinforce your understanding of the hardest part in C, like pointers. 15 | - The course provides excellent practice in GDB, Valgrind, and the assignments will cover some basic Git exercises. 16 | - The course instructor recommends using Emacs for homework, so it's a good opportunity to learn Emacs. If you already know how to use Vim, I suggest you use Evil. This way you don't lose the editing capabilities of Vim, and you get to experience the power of Emacs. Having both Emacs and Vim in your kit will increase your efficiency considerably. Emacs' org-mode, smooth integration of GDB, etc., are convenient for developers. 17 | - It may require payment, but I think it's worth it. 18 | - Although this is an introductory course, it has both breadth and depth. 19 | 20 | ## Course Resources 21 | 22 | - Course Website: 23 | - Recordings: refer to the course website 24 | - Textbook: refer to the course website 25 | - Assignments: refer to the course website 26 | 27 | ## Personal Resources 28 | 29 | All the resources and assignments used by in this course are maintained in [Duke Coursera Intro C](https://code.haidongji.com/Duke_Coursera_Intro_C/). Several assignments have not been completed so far for time reasons. 30 | -------------------------------------------------------------------------------- /docs/编程入门/C/Duke-Coursera-Intro-C.md: -------------------------------------------------------------------------------- 1 | # Introductory C Programming Specialization 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Duke 6 | - 先修要求:无 7 | - 编程语言:C 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:110 小时 10 | 11 | 非常好的课程,自我感觉收益非常大: 12 | 13 | - 侧重基础和基本概念:如 frame、stack memory、heap memory 等讲得很透。 14 | - 针对C最难掌握的指针,有好的练习和编程来加深和强化理解。 15 | - 非常好的 GDB,Valgrind 上手训练,作业也会涉及一些基本的 Git 练习。 16 | - 老师建议作业用 Emacs,所以对 Emacs 小白来说,是个不错的入门。如果你会用 Vim ,我建议你用 Evil 插件。这样你不会丢掉 Vim 的编辑功能,同时可以体会 Emacs 的强大。工具箱里同时有 Emacs 和 Vim 时,效率会有不少提高。Emacs 的 org-mode,和 GDB 的顺滑整合,等等等等,都会让你如虎添翼。 17 | - 虽然可能需要付费,但我觉得值。 18 | - 虽说课名是入门,但兼具广度和深度。 19 | 20 | ## 课程资源 21 | 22 | - 课程网站: 23 | - 课程视频:同上 24 | - 课程教材:同上 25 | - 课程作业:同上 26 | 27 | ## 资源汇总 28 | 29 | @haidongji 在学习这门课中的作业实现都汇总在 [Duke Coursera Intro C](https://code.haidongji.com/Duke_Coursera_Intro_C/) 中。因为时间关系,我最后一课最后一周的几个作业到目前还没有完成。 30 | -------------------------------------------------------------------------------- /docs/编程入门/DeCal.md: -------------------------------------------------------------------------------- 1 | # UCB: Sysadmin DeCal 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UCB 6 | - 先修要求:无 7 | - 编程语言:shell 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:20小时 10 | 11 | 来自 UCB 的一门讲解 Linux 的入门课程,比起定位相同的 MIT 的公开课 Missing Semester,Decal 讲解得更加系统、也更加清晰,这也是我推荐它的主要原因。比起 Missing Semester 更像是给已经开始编程但没有系统使用过这些工具的学生的查缺补漏,DeCal 更像是面向零基础的同学的课程。一共十二周的课程内容,包括 Linux 基础、shell 编程(还有tmux 、vim)、包管理、服务(Services)、基础计算机网络、网络服务、安全(密钥管理)、Git、Docker、Kubernetes、Puppet 和 CUDA。 十分适合新手了解和入门 Linux 环境相关内容。 12 | 13 | 美中不足的是部分课程作业需要在远程服务器操作,比如关于 ssh 的练习,需要 UCB 内部账号访问。但是大部分作业可以通过自己搭建的虚拟机 + 使用 Xshell 等工具或者直接使用 Linux 桌面版来操作练习,在听完完整课程和做完作业后,相信已经对 Linux 有最基本的了解了。 14 | 15 | 为弥补无法使用远程服务器的不足以及熟悉 linux 命令行的需求,在此推荐 [bandit](https://overthewire.org/wargames/bandit/) 。bandit 是一款来自OverTheWire 网站的 Wargame,为 CTF 爱好者提供免费的练习靶场。bandit 的前 15 个 level 都是基础的 linux 操作而不涉及任何 CTF 知识。这些练习也正好弥补了 DeCal 外校无法访问的部分(主要是远程链接、文件权限)等内容。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[官网](https://decal.ocf.berkeley.edu/) 20 | - 课程视频:原版视频见课程官网,[B站](https://space.bilibili.com/483435468/video)也有搬运。 21 | - 课程教材:无指定教材,但每一周的 labs 之中都有足够的阅读材料供你深入细节。 22 | - 课程作业:见课程官网 23 | 24 | -------------------------------------------------------------------------------- /docs/编程入门/Functional/CS3110.md: -------------------------------------------------------------------------------- 1 | # CS3110:OCaml Programming Correct + Efficient + Beautiful 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Cornell 6 | - 先修要求:了解一门命令式编程语言,类C语言 7 | - 编程语言:OCaml 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:40 小时 10 | 11 | ### 课程评价: modern SICP 12 | 13 | 如果说编程入门的最好的课程是 SICP。在其之后,就是 CS3110。 14 | 15 | 如果你不知道什么叫函数式编程语言,或者只是听过这个名词,那么这门课程,正如它的名字,会让你体会到什么叫正确,高效和美。 16 | 17 | CS3110 不仅局限于函数式编程,更是将理论和实用充分结合。课程内容更进一步,涵盖了 OCaml 语言基础,数据结构和算法,测试开发,形式证明,语言特性实现等诸多内容。而且内容之间并不割裂,而是递进和互补,非常值得学习。 18 | 19 | 主讲老师 Michael Ryan Clarkson,浸淫编程多年,用词简单,表述清晰,内容环环相扣,剖析一针见血。课程视频甚至用来练听力,听不懂开英文字幕理解起来毫不费力。 20 | 21 | ### 课程简史,摘自课程教材 22 | 23 | CS3110 是康奈尔大学打磨 20 余年的课程。最初发源于 MIT6.001 SICP,在其基础上增加更严格方法和材料,涵盖函数式编程,环境模型,数据结构,算法和语言实现。2008 年,正式名称改为 CS3110,改用 OCaml 语言。2018 年秋季,开始编写[课程教材](https://cs3110.github.io/textbook)。现任课程的主讲老师于 2021 年在 youtube 上公布了[课程视频](https://www.youtube.com/playlist?list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU)。 24 | 25 | ## 课程资源 26 | 27 | - 课程视频油管: 28 | - 课程视频B站: 29 | - 课程教材: 30 | - 课程作业:课程教材中 exercises 自选,难度 1 至 4 星,注意 3 星至 4 星的难度跨越很大。 31 | 32 | ## 资源汇总 33 | 34 | @featherwit001 在学习这门课中用到的所有资源和作业实现都汇总在 [featherwit001/CS3110_OCaml_Programming - GitHub](https://github.com/featherwit001/CS3110_OCaml_Programming) 中。 35 | -------------------------------------------------------------------------------- /docs/编程入门/Functional/Haskell-MOOC.md: -------------------------------------------------------------------------------- 1 | # Haskell MOOC 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:University of Helsinki 6 | - 先修要求:无 7 | - 编程语言:Haskell 8 | - 课程难度:🌟🌟 9 | - 预计学时:因人而异 10 | 11 | 函数式编程正在越来越多的融合入现代编程语言。Java 的 Streams,JavaScript 的 Promises,以及在 ECMAScript 草案阶段的 Record & Tuple。在学习这些内容时,我总是感觉我在死记它们这些 api 的行为,虽然能够使用它们写出一些程序,但总感觉不到掌握了它们。究其原因,它们为什么存在?它们为什么是这样的?设计它们的思想是什么?学完函数式编程会给你答案。 12 | 13 | 虽然这门课的名字是 Haskell,但它的核心内容是函数式编程思想。就像学习面向对象程序设计,大概率不会选择 Java 之外的语言。 14 | 15 | 学习 Haskell,但重点不在于使用它。这门课会让你用刚刚够用的 Haskell 语法,刚刚够用的库函数,一丁点的工具,去解释核心的程序语义,也就是函数式编程的核心思想。这不会让你浪费时间陷入语言细节以及语言生态中,我觉得它是这门课的最大优势。 16 | 17 | 这门课覆盖的内容: 18 | 19 | - Pure Function 20 | - Lazy Evaluation 21 | - Strongly Typed 22 | - Type Inferred 23 | - Curry 24 | - Monoid / Functor / Monad / Applicative 25 | 26 | 如果你有编程经验,课程的 Part1 很简单,难度集中在 Part2 的十三章之后。课程的练习很棒,它有一种在做 [CS61a](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/CS61A/) 练习的感觉。练习的注释中有足够的提示,作业在你提交之后会给你标准答案,你还可以在官方的 Telegram 中提问或与他人讨论。 27 | 28 | ## 课程资源 29 | 30 | - 课程网站: 31 | - 课程视频:无 32 | - 课程教材: 33 | - 课程作业: 34 | - 社区: 35 | 36 | ## 资源汇总 37 | 38 | @showtheunli 在学习这门课中用到的所有资源和作业实现都汇总在 [showthesunli/haskell-mooc - GitHub](https://github.com/showthesunli/haskell-mooc) 中。(非常不建议在作业时,参考别人的实现) 39 | -------------------------------------------------------------------------------- /docs/编程入门/Java/MIT 6.092.md: -------------------------------------------------------------------------------- 1 | # MIT 6.092: Introduction To Programming In Java 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:无 7 | - 编程语言:Java 8 | - 课程难度:🌟🌟 9 | - 预计学时:少于 15 小时 10 | 11 | MIT 的 Java 入门课程,不需要有任何编程基础也可以开始学习。一节课是一小时 Lec (知识点讲解)+一小时 Lab (代码训练),整个课程是七节课。虽说是十四个小时的课时,真正学起来却很快,一天其实差不多就能结束。感觉是比较适合新手上手的强度。 12 | 13 | 课程内容包括了: 14 | 15 | 1. 快速入门 Java 所需的基础知识概念,如第一节课的 Java 编译原理、经典代码 "Hello world" 、八大基础类型等。 16 | 2. 如何拥有良好的代码风格,如第三节课强调的命名规范、缩进、空格使用等。 17 | 3. 如何 Debug :第六节课的使用 Eclipse warning, Assertion 和第七节课的 Exception 等。 18 | 19 | Lab 的 Assignment 倒不是很难,很多前一节课的 Assignment 后一节课 Lec 上就会讲到。唯一需要注意的就是代码是一个很注重实践的技能,新手入门写代码最重要的就是多写多练,无论是 Lec 还是 Lab 上的代码都不要偷懒不写。 20 | 21 | 学完这门课想要进阶的可以学习 [MIT 6.005/6.031](../../软件工程/6031.md) 。 22 | 23 | ## 课程资源 24 | 25 | - 课程网站:[Winter 2010](https://ocw.mit.edu/courses/6-092-introduction-to-programming-in-java-january-iap-2010/pages/syllabus/) 26 | - 课程教材:[How to Think Like a Computer Scientist - 如何像计算机科学家一样思考](https://greenteapress.com/wp/think-java/) 27 | - 课程作业: 28 | 29 | ## 资源汇总 30 | 31 | @SinanTang 在学习这门课中用到的所有资源和作业实现都汇总在 [SinanTang/MIT6092-Introduction-to-Programming-in-Java_problem-sets - GitHub](https://github.com/SinanTang/MIT6092-Introduction-to-Programming-in-Java_problem-sets) 中。 32 | 33 | @sirrice 在学习这门课中用到的所有资源和作业实现都汇总在 [sirrice/6092 - GitHub](https://github.com/sirrice/6092) 中。 34 | 35 | @Harbour-z 在学习这门课中用到的所有资源和作业实现都汇总在 [Harbour-z/MIT6.092 - Github](https://github.com/Harbour-z/Course_learning/tree/main/MIT6.092) 中。 36 | -------------------------------------------------------------------------------- /docs/编程入门/MIT-Missing-Semester.en.md: -------------------------------------------------------------------------------- 1 | # MIT: The Missing Semester of Your CS Education 2 | 3 | ## Descriptions 4 | 5 | - Offered by: MIT 6 | - Prerequisites: None 7 | - Programming Languages: Shell 8 | - Difficulty: 🌟🌟 9 | - Class Hour: 10 hours 10 | 11 | Just as the course name indicated, this course will teach the missing things in the university courses. It will cover shell programming, git, vim editor, tmux, ssh, sed, awk and even how to beautify your terminal. Trust me, this will be your first step to become a hacker! 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Recordings: 17 | - Assignments: Some exercises after each lecture, refer to the course website. 18 | -------------------------------------------------------------------------------- /docs/编程入门/MIT-Missing-Semester.md: -------------------------------------------------------------------------------- 1 | # MIT-Missing-Semester 2 | 3 | ## 课程简介 4 | 5 | - 先修要求:无 6 | - 编程语言:shell 7 | - 课程难度:🌟🌟 8 | - 预计学时:10 小时 9 | 10 | 正如课程名字所言:“计算机教学中消失的一个学期”,这门课将会教会你许多大学的课堂上不会涉及但却对每个 CSer 无比重要的工具或者知识点。例如 Shell 编程、命令行配置、Git、Vim、`tmux`、`ssh` 等等。如果你是一个计算机小白,那么我非常建议你学习一下这门课,因为它基本涉及了本书必学工具中的绝大部分内容。 11 | 12 | 除了 MIT 官方的学习资料外,北京大学图灵班开设的前沿计算实践中也开设了相关课程,资料位于[这个网站](http://vcl.pku.edu.cn/course/PFCII/2021-spring/index.html)下,供大家参考。 13 | 14 | ## 课程资源 15 | 16 | - 课程网站: 17 | - 课程中文网站: 18 | - 课程视频: 19 | - 课程中文字幕视频: 20 | - Missing_Semi_中译组(未完结): 21 | - 刘黑黑a(已完结): 22 | - 课程作业:一些随堂小练习,具体见课程网站。 23 | -------------------------------------------------------------------------------- /docs/编程入门/Python/CS50P.en.md: -------------------------------------------------------------------------------- 1 | # CS50P Introduction to Programming with Python 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Harvard University 6 | - Prerequisites: No prerequisites 7 | - Programming Languages: Python 8 | - Difficulty: 🌟🌟 9 | - Class Hour: 30-40 hours 10 | 11 | One of the CS50 families, taught by David J. Malan. You'll learn how to program in Python and "Pythonic" ways to deal with everything. The course also introduces libraries, code testing, and handling exceptions. 12 | 13 | No programming experiences are assumed. So it may be appropriate for anyone who wants to learn Python. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: [2022](https://cs50.harvard.edu/python/2022/) 18 | - Recordings: [2022](https://www.bilibili.com/video/BV1z5411X7wX) 19 | - Textbooks: No textbook required 20 | - Assignments: [2022](https://cs50.harvard.edu/python/2022/) 21 | 22 | ## Personal Resources 23 | 24 | All the resources and assignments used by @mancuoj in this course are maintained in [mancuoj/CS50P - GitHub](https://github.com/mancuoj/CS50P). 25 | -------------------------------------------------------------------------------- /docs/编程入门/Python/CS50P.md: -------------------------------------------------------------------------------- 1 | # CS50P Introduction to Programming with Python 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Harvard University 6 | - 先修要求:无 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟 9 | - 预计学时:30-40 hours 10 | 11 | CS50的番外篇,依旧由 David J. Malan 授课。在该课程中你将学会 Python 的基础与进阶语法,以及各种 “Pythonic” 的编程方法。此外对于 Python 特色的代码库、代码测试以及错误处理,该课程也会较为深入地探究。 12 | 13 | 该课程无需任何编程基础,且相对平易近人。适合所有想要快速入门 Python 语言的各阶段学生。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站:[2022](https://cs50.harvard.edu/python/2022/) 18 | - 课程视频:[2022](https://www.bilibili.com/video/BV1z5411X7wX) 19 | - 课程教材:无 20 | - 课程作业:[2022](https://cs50.harvard.edu/python/2022/) 21 | 22 | ## 资源汇总 23 | 24 | @mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 [mancuoj/CS50P - GitHub](https://github.com/mancuoj/CS50P) 中。 -------------------------------------------------------------------------------- /docs/编程入门/Python/CS61A.md: -------------------------------------------------------------------------------- 1 | # CS61A: Structure and Interpretation of Computer Programs 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:无 7 | - 编程语言:Python, Scheme, SQL 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:50 小时 10 | 11 | 伯克利 CS61 系列的第一门课程,也是我的 Python 入门课。 12 | 13 | CS61 系列是伯克利 CS 专业的入门课,其中: 14 | 15 | - CS61A: 强调抽象,让学生掌握用程序来解决实际问题,而不关注底层的硬件细节。 16 | - CS61B: 注重算法与数据结构以及大规模程序的构建,学生会用 Java 语言结合算法与数据结构的知识来构建千行代码级别的大型项目(一个简易的谷歌地图,一个二维版的 Minecraft)。 17 | - CS61C: 关注计算机体系结构,让学生理解高级语言(例如 C)是如何一步步转换为机器可以理解的 01 串并在 CPU 执行的,学生将会学习 RISC-V 架构并自己用 Logisim 实现一个 CPU。 18 | 19 | CS61B 和 CS61C 在本书中均有收录。 20 | 21 | 回到 CS61A,注意这不仅仅是一门编程语言课,而是会深入到程序构造与运行的原理。最后你将在第 4 个 Project 中用 Python 实现一个 Scheme 的解释器。此外,抽象将是这门课的一大主题,你将学习到函数式编程、数据抽象、面向对象等等知识来让你的代码更易读,更模块化。当然,学习编程语言也是这门课的一大内容,你将会掌握 Python、Scheme 和 SQL 这三种编程语言,在它们的学习和比较中,相信你会拥有快速掌握一门新的编程语言的能力。 22 | 23 | 注意:如果此前完全没有编程基础,直接上手 CS61A 需要一定的学习能力和自律要求。为避免课程难度过高而导致的信心挫折,可以选择一个更为友好的入门编程课程。例如伯克利的 [CS10](https://cs10.org/sp22/) 或者哈佛大学的 [CS50](https://csdiy.wiki/编程入门/C/CS50/)。 24 | 25 | ## 课程资源 26 | 27 | - [课程网站](https://cs61a.org) 28 | - 课程网站 (页面备份): [fall2024](https://insideempire.github.io/CS61A-Website-Archive/), [spring2022](https://cs61a.vercel.app/), [fall2022](https://web.archive.org/web/20220913035803/http://cs61a.org/), [fall2020](https://web.archive.org/web/20201219202644/https://cs61a.org/) 29 | - 课程视频: [spring2024](https://www.bilibili.com/video/BV1sy411z7nA/), [fall2022](https://www.bilibili.com/video/BV1GK411Q7qp/), [fall2020](https://www.bilibili.com/video/BV1s3411G7yM/) 30 | - [课程教材](https://www.composingprograms.com/) 31 | - [课程教材电子书](https://github.com/CC-bit/UCB-CS61A-Textbook/) 32 | - [课程教材中文翻译](https://composingprograms.netlify.app/) 33 | - 课程作业: [fall2024](https://github.com/InsideEmpire/CS61A-Assignments) 34 | 35 | ## 资源汇总 36 | 37 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS61A - GitHub](https://github.com/PKUFlyingPig/CS61A) 中。 38 | 39 | @InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 [InsideEmpire/CS61A - GitHub](https://github.com/InsideEmpire/CS61A-PathwayToSuccess/) 40 | -------------------------------------------------------------------------------- /docs/编程入门/Python/MIT6.100L.md: -------------------------------------------------------------------------------- 1 | # MIT6.100L: Introduction to CS and Programming using Python 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:无 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟 9 | - 预计学时:50h+ 10 | 11 | 这门课程是自2022年 MIT 课程改革以来,电气工程与计算机科学系的[计算机科学与工程](https://www.eecs.mit.edu/academics/undergraduate-programs/curriculum/6-3-computer-science-and-engineering/)、[人工智能与决策](https://www.eecs.mit.edu/academics/undergraduate-programs/curriculum/6-4-artificial-intelligence-and-decision-making/)和[电气工程与计算](https://www.eecs.mit.edu/academics/undergraduate-programs/curriculum/6-5-electrical-engineering-with-computing/)专业的入门必修编程课(与 6.100A 二选一)。课程涵盖了 6.100A 的全部内容,课程主题包括计算的基本概念、Python 编程语言、简单的算法和数据结构、测试与调试以及算法复杂度等。 12 | 13 | 授课教师 Ana Bell 教授在 EECS 系做了多年讲师,讲解深入浅出。这门课程共有26节课,课前提前下载好本课代码,与课程同步进行。课上课后作业练习充足,答案齐全(除 Problem Sets 不提供)。总体难度平滑,官网材料免费开源,适合计算机小白循序渐近地进入 CS 的世界。 14 | 15 | 16 | ## 课程资源 17 | 18 | - 课程网站:[fall2022](https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/material-by-lecture/) 19 | - 课程视频:原版视频参考官网,B站也有正在进行的[中文免费精翻](https://www.bilibili.com/video/BV1WE421V7bL?spm_id_from=333.788.videopod.sections&vd_source=3181deb7fb0c10621dd8dbdf8ab90a04),该版本说明见[此处](https://github.com/Alidme/MIT6.100L?tab=readme-ov-file#%E5%85%B3%E4%BA%8E%E4%B8%AD%E6%96%87%E7%B2%BE%E7%BF%BB%E7%9A%84%E8%AF%B4%E6%98%8E) 20 | - 课程教材:参考课程官网,有无教材基本不影响上课 21 | - 课程作业:课程官网已经将所有材料分类完全 22 | 23 | ## 资源汇总 24 | 25 | @Alidme 在学习这门课时,总结了关于此课程的相关文档 [MIT6.100L 食用指南(持续更新)](https://k14eszn58mj.feishu.cn/docx/NFxmd1JxPodkWjxeuHIcSK5Qnag)。此外,其在学习这门课的 Problem Sets 的实现都汇总在 [Alidme/MIT6.100L - GitHub](https://github.com/Alidme/MIT6.100L) 中。 26 | -------------------------------------------------------------------------------- /docs/编程入门/Rust/CS110L.md: -------------------------------------------------------------------------------- 1 | # CS110L: Safety in Systems Programming 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:最好有一定的编程背景并对计算机系统有初步的认识。 7 | - 编程语言:Rust 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:30 小时 10 | 11 | 在这门课中你将会学习 Rust 这门神奇的语言。 12 | 13 | 如果你学过 C 并接触过一些系统编程的话,应该对 C 的内存泄漏以及指针的危险有所耳闻,但 C 的底层特性以及高效仍然让它在系统级编程中无法被例如 Java 等自带垃圾收集机制的高级语言所替代。而 Rust 的目标则是希望在 C 的高效基础上,弥补其安全不足的缺点。因此 Rust 在设计之初,就有带有很多系统编程的观点。学习 Rust,也能让你之后能用 C 语言编写出更安全更优雅的系统级代码(例如操作系统等)。 14 | 15 | 这门课的后半部分关注在并发(concurrency)这一主题上,你将会系统地掌握多进程、多线程、基于事件驱动的并发等若干并发技术,并在第二个 Project 中比较它们各自的优劣。Rust 中 “futures” 的概念非常有趣和优雅,这些基础知识对你后续对计算机系统相关课程的学习很有帮助。另外,清华大学的操统实验 rCore 就是基于 Rust 编写的,具体参见[文档](https://rcore-os.github.io/rCore-Tutorial-Book-v3/index.html)。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站: 20 | - 课程视频: 21 | - 课程教材:无 22 | - 课程作业:共 6 个 Lab 和 2 个 Project,作业文档和代码框架详见课程网站。其中两个 Project 非常有趣,分别是: 23 | 1. 用 Rust 实现一个类似于 GDB 的 debugger 24 | 2. 用 Rust 实现一个负载均衡器 25 | 26 | > [CS 242: Programming Languages, Fall2019](https://stanford-cs242.github.io/f19/) week6 到 week9 关于 Rust 内容的讲解非常细致, 可以作为该课程的讲义补充。 另外, Ryan 在 中补充了 2020 版本缺失的关于 Futures Trait 内容的视频。 27 | 28 | ## 资源汇总 29 | 30 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS110L - GitHub](https://github.com/PKUFlyingPig/CS110L) 中。 31 | 32 | 在2022年 CS110L 没有开源作业源码的背景下,Rust 快速演进导致2020版本课程项目中所使用的库过于老旧。对此,[@fung-hwang](https://github.com/fung-hwang) 尝试进行了适配(时间为2022.11)。其适配过程和作业实现都汇总在 [fung-hwang/CS110L-2020spr - GitHub](https://github.com/fung-hwang/CS110L-2020spr) 中。也许当你开始本课程时 Rust 和这些库又发生了变化,但你仍可以参考并从中获得启发。 33 | -------------------------------------------------------------------------------- /docs/编程入门/Rust/cs220.md: -------------------------------------------------------------------------------- 1 | # CS220: Programming Principles 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:KAIST 6 | - 先修要求:其他任何一门编程语言 7 | - 编程语言:Rust 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:40 小时 10 | 11 | 来自 KAIST 的 [Jeehoon Kang](https://cp.kaist.ac.kr/jeehoon.kang) 以及他所领导的 [Concurrency and Parallelism Laboratory](https://cp.kaist.ac.kr/) 实验室似乎是 Rust 语言的忠实拥趸,csidy 之中的 [CS431](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/Rust/cs431/) 和 [CS420](https://csdiy.wiki/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86/CS420/) 都是他们的杰作。自然,他们肯定会开发一款针对 Rust 的入门课程,也就是本课程。课程涵盖了 Rust 入门所需的绝大多数知识点。 12 | 13 | 本课没有指定官方教材,课程主页推荐采用 [Rust book](https://doc.rust-lang.org/book/) 学习,并在 [slides](https://docs.google.com/presentation/d/17G3SwkE_tq0H3lTt9N0ysIbHhqDZBfHkoWD5LwwAKSo/edit#slide=id.p) 之中规划了大致的学习线路。虽然没有公开课程教学视频,不过完善的测试系统仍然可以使这门课作为 Rust 习题课来练手,部分习题可以作为 [CS110L](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/Rust/CS110L/) 的良好补充。如果在学习完 CS110L 之后仍然觉得需要更多练习,可以选择本课程。部分习题具有一定难度,Jeehoon Kang 对使用 AI 辅助编程持有鼓励态度,但是 AI 并不完美,核心工作仍需自己完成。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站:[Github 主页](https://github.com/kaist-cp/cs220) 18 | - 课程视频:无 19 | - 课程教材:[slides](https://docs.google.com/presentation/d/17G3SwkE_tq0H3lTt9N0ysIbHhqDZBfHkoWD5LwwAKSo/edit#slide=id.p) 20 | - 课程作业:[Github](https://github.com/kaist-cp/cs220/tree/main/src/assignments) 21 | 22 | ## 资源汇总 23 | 24 | 互联网上并没有公开的参考答案,也并不确定本课程主讲人是否赞同这种公开答案的行为。如果遇到困难,课程的 [ISSUE](https://github.com/kaist-cp/cs220/issues) 之中可以找到关于作业的讨论。 25 | -------------------------------------------------------------------------------- /docs/编程入门/Rust/cs431.en.md: -------------------------------------------------------------------------------- 1 | # CS431: Concurrent Programming 2 | 3 | ## Descriptions 4 | 5 | - Offered by: KAIST 6 | - Prerequisites: Basic Understanding of Concurrency and Rust Programming 7 | - Programming Languages: Rust 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 50 hours 10 | 11 | CS431 is a course about concurrent programming, mainly using Rust. The course consists of two parts: theory and practice. The theory part focuses on building a programming model under concurrent situations, while the practice part mainly focuses on understanding the implementation principles of locks and lock-free data structures in Rust-related libraries. 12 | 13 | This course is accompanied by a series of assignments with small code size but not simple to consolidate your understanding of concurrent programming, from the design of concurrent safe cache and linked list based on locks, to lock-free hash table and the famous [hazard pointer](https://ieeexplore.ieee.org/document/1291819). Like many high-quality courses, these assignments are of high quality and come with detailed local tests, which are suitable for self-study. 14 | 15 | This course is much more in-depth than I expected. The knowledge I know about spin locks and mutex locks is the most basic in this course, while the introduction of promising semantics, memory model and lock-free data structures gives me a deeper understanding of concurrency and Rust. 16 | 17 | ## Course Resources 18 | 19 | - Course Website:[Website](https://github.com/kaist-cp/cs431) 20 | - Recordings:[Youtube](https://www.youtube.com/playlist?list=PL5aMzERQ_OZ9j40DJNlsem2qAGoFbfwb4) 21 | - Textbooks: [Slides](https://docs.google.com/presentation/d/1NMg08N1LUNDPuMxNZ-UMbdH13p8LXgMM3esbWRMowhU/edit?usp=sharing) 22 | - Assignments: [Homework](https://github.com/kaist-cp/cs431/tree/main/homework) 23 | -------------------------------------------------------------------------------- /docs/编程入门/Rust/cs431.md: -------------------------------------------------------------------------------- 1 | # CS431: Concurrent Programming 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:KAIST 6 | - 先修要求:Rust 编程基础与对并发的初步了解 7 | - 编程语言:Rust 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:50 小时 10 | 11 | CS431是一门讨论并发编程的课程,主要使用 Rust 语言。课程内容主要包括理论与实践两个部分。理论部分聚焦于建立并发情形下的编程模型,而实践部分则主要是理解 Rust 相关库中锁与无锁数据结构的实现原理。 12 | 13 | 这门课程同时配有一系列代码量不大但并不简单的作业来巩固你对并发编程的理解,从基于锁的并发安全缓存设计和链表,到无锁的哈希表和著名的 [hazard pointer](https://ieeexplore.ieee.org/document/1291819). 和众多高质量课程一样,这些作业质量较高且配有详细的本地测试,适合自学。 14 | 15 | 这门课程比我预想的要深入的多,我所知晓的关于自旋锁,互斥锁的知识在该门课程中都是最基础的,而对于 promising semantics, 访存模型和无锁数据结构的介绍让我对并发和 Rust 都有更深入的理解。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[Website](https://github.com/kaist-cp/cs431) 20 | - 课程视频:[Youtube](https://www.youtube.com/playlist?list=PL5aMzERQ_OZ9j40DJNlsem2qAGoFbfwb4) 21 | - 课程教材:[Slides](https://docs.google.com/presentation/d/1NMg08N1LUNDPuMxNZ-UMbdH13p8LXgMM3esbWRMowhU/edit?usp=sharing) 22 | - 课程作业:[Homework](https://github.com/kaist-cp/cs431/tree/main/homework) 23 | -------------------------------------------------------------------------------- /docs/编程入门/cpp/AUT1400.en.md: -------------------------------------------------------------------------------- 1 | # Amirkabir University of Technology 1400-2: Advanced Programming Course 2 | 3 | ## Course Introduction 4 | 5 | - Affiliated University: Amirkabir University of Technology 6 | - Prerequisites: None 7 | - Programming Language: C++ 8 | - Course Difficulty: 🌟🌟🌟🌟🌟 9 | - Estimated Study Time: 50 hours 10 | 11 | This is an accidentally discovered C++ course. The quality of the homework assignments is outstanding, with each being independently structured and simple, complemented by comprehensive unit tests, making it highly suitable for learning C++ programming. The course includes a total of 7 homework assignments, as follows: 12 | 13 | 1. Implement a Matrix class and related functions. 14 | 15 | 2. Implement a program that simulates the operation of a cryptocurrency client/server. 16 | 17 | 3. Implement a Binary Search Tree (BST). 18 | 19 | 4. Implement SharedPtr and UniquePtr smart pointers in C++. 20 | 21 | 5. Use inheritance and polymorphism to implement multiple classes. 22 | 23 | 6. Solve 4 problems using the STL library. 24 | 25 | 7. There's a Python project, for those interested. 26 | 27 | The course homepage was not found, but the source code for the homework (named AP1400-2-HW) can be found on GitHub. 28 | 29 | ## Course Resources 30 | 31 | - Course Website: None 32 | - Course Code: 33 | - Course Textbook: None 34 | - Course Assignments: 7 homework assignments -------------------------------------------------------------------------------- /docs/编程入门/cpp/AUT1400.md: -------------------------------------------------------------------------------- 1 | # Amirkabir University of Technology 1400-2: Advanced Programming Course 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Amirkabir University of Technology 6 | - 先修要求:无 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:50 小时 10 | 11 | 无意中发现的一个 C++ 课程。课程的 homework 质量很高,每个 homework 相互独立结构简单,且有完善的单元测试,非常适合用来学习 C++ 的编程。本课程共 7 个 homework,如下所示: 12 | 13 | 1. 实现一个 Matrix 类以及相关函数。 14 | 15 | 2. 实现一个模拟加密货币客户端/服务端执行过程的程序。 16 | 17 | 3. 实现一个 Binary Search Tree (BST)。 18 | 19 | 4. 实现 C++ 中的 SharedPtr 和 UniquePtr 智能指针。 20 | 21 | 5. 使用继承和多态实现多个类。 22 | 23 | 6. 使用 STL 库解决 4 个问题。 24 | 25 | 7. 是个 python 项目,有兴趣的可以看看。 26 | 27 | 没找到课程的主页,只有在 github 有 homework 的源码(名字为 AP1400-2-HW 的那几个)。 28 | 29 | ## 课程资源 30 | 31 | - 课程网站:无 32 | - 课程代码: 33 | - 课程教材:无 34 | - 课程作业:7 homework 35 | 36 | -------------------------------------------------------------------------------- /docs/编程入门/cpp/CS106B_CS106X.md: -------------------------------------------------------------------------------- 1 | # Stanford CS106B/X: Programming Abstractions in C++ 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:计算机基础 (CS50/CS106A/CS61A or equivalent) 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟 9 | - 预计学时:50-70 小时 10 | 11 | Stanford 的进阶编程课,CS106X 在难度和深度上会比 CS106B 有所提高,但主体内容类似。主要通过 C++ 语言让学生在实际的编程作业里培养通过编程抽象解决实际问题的能力,同时也会涉及一些简单的数据结构和算法的知识,但总体来说没有一门专门的数据结构课那么系统。 12 | 13 | 课程内容包括很多基础但实用的数据结构和算法以及相关概念:collections, ADT, recursion, BFS, DFS, backtracking, sorting, hash, pointer, linked list, BST, OOP, pass by value, pass by reference, stack allocation, heap allocation, memory management。此外课程还会教授一些实用技巧,比如如何使用 debugger 排错,在 assignment8 中你会通过阅读 debugger 中的内容逃出迷宫。 14 | 15 | 和 CS61A 一样提供代码框架和测试程序,虽然没有 CS61A 测试的那么详细,但是作业中也有要求可以自己添加测试用例。每一个作业都会给出一份详细的文档,一步一步地实现每一个 milestone, 最后便可以在 starter code 给出的 GUI 中观察到自己的数据结构和算法实现的效果,非常有成就感。每一个作业都对应非常有趣又实际的案例,比如最后的任务是实现 huffman encoding 来压缩文件和解压文件。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[CS106B Latest](https://web.stanford.edu/class/cs106b/), [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/), [CS106X Latest](https://web.stanford.edu/class/cs106x/) 20 | - 课程教材: 21 | - 课程视频:[youtube spring 2015](https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d), [bilibili 2018 winter](https://www.bilibili.com/video/BV1G7411k7jG) 22 | - 课程作业:详见 [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/), 最重要的是9个 assignment 23 | 24 | ## 资源汇总 25 | 26 | @akun0311 在学习这门课中用到的所有资源和作业实现都汇总在 [akun0311/CS106B-X-CS106L - GitHub](https://github.com/akun0311/CS106B-X-CS106L-) 中。 27 | @Andy-xiaokang 在学习这门课中用到的所有资源和作业实现都汇总在 [Andy-xiaokang/CS106B - GitHub](https://github.com/Andy-xiaokang/CS106B) 中。 28 | 29 | 关于 assignments 中版本不兼容的问题可以详见 [readme](https://github.com/Andy-xiaokang/CS106B/blob/master/README.md#postscript) 30 | 课程视频我推荐 [youtube spring 2015](https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d) 这个版本,授课激情,并且可以看到老师和学生之间在提问环节的精彩交互(几百名优秀 compiler 的观察总会提出一些有趣的问题) 31 | -------------------------------------------------------------------------------- /docs/编程入门/cpp/CS106L.md: -------------------------------------------------------------------------------- 1 | # CS106L: Standard C++ Programming 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:最好掌握至少一门编程语言 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:20 小时 10 | 11 | 我从大一开始一直都是写的 C++ 代码,直到学完这门课我才意识到,我写的 C++ 代码大概只是 C 语言 + `cin`/`cout` 而已。 12 | 13 | 这门课会深入到很多标准 C++ 的特性和语法,让你编写出高质量的 C++ 代码。例如 auto binding, uniform initialization, lambda function, move semantics,RAII 等技巧都在我此后的代码生涯中被反复用到,非常实用。 14 | 15 | 值得一提的是,这门课的作业里你会实现一个 HashMap(类似于 STL 中的 `unordered_map`), 这个作业几乎把整个课程串联了起来,非常考验代码能力。特别是 `iterator` 的实现,做完这个作业我开始理解为什么 Linus 对 C/C++ 嗤之以鼻了,因为真的很难写对。 16 | 17 | 总的来讲这门课并不难,但是信息量很大,需要你在之后的开发实践中反复巩固。Stanford 之所以单开一门 C++ 的编程课,是因为它后续的很多 CS 课程 Project 都是基于 C++的。例如 CS144 计算机网络和 CS143 编译器。这两门课在本书中均有收录。 18 | 19 | ## 课程资源 20 | 21 | - 课程网站: 22 | - 课程视频: 23 | - 课程教材: 24 | - Assignment1下载网址: 25 | - Assignment2下载网址: 26 | - 课程作业:具体内容见课程网站,我做的时候一共是两个: 27 | 1. 实现一个 WikiRacer 的小游戏 28 | 2. 实现一个类似 STL 库的 HashMap 29 | 30 | ## 资源汇总 31 | 32 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS106L - GitHub](https://github.com/PKUFlyingPig/CS106L) 中。 33 | -------------------------------------------------------------------------------- /docs/编程语言设计与分析/CS242.md: -------------------------------------------------------------------------------- 1 | # CS242 Programming Languages 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:对计算机系统和编程语言理论有初步了解 7 | - 编程语言:OCaml, Rust 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | CS242是一门讲程序语言 (Programming Language, PL) 的课程,但不是传统意义上的纯理论导向。这门课程首先介绍了如 Lambda 演算,类型系统这样的经典 PL 理论,然后借助系统编程的思想和实际的编程语言来驱动学生理解这些理论,展示了它们是如何在实际编程中帮助开发者避免各种错误。 12 | 13 | 主讲老师 Will Crichton 还将他的课程设计思想写成了论文 [From Theory to Systems: A Grounded Approach to Programming Language Education](https://arxiv.org/abs/1904.06750),阐述了这条从理论走向系统的教学路线。 14 | 15 | 我们通过简单介绍每个作业来帮助读者了解这门课程的具体内容: 16 | 17 | - 对 JSON 的形式化与证明 18 | - PL 中经典的 Lambda 演算 19 | - 以 OCaml 为例的函数式编程入门 20 | - 使用 OCaml 实现一个函数式语言的类型检查器和解释器,同样是 PL 的经典作业 21 | - WebAssembly 的理论与实践 22 | - Linear Type 和 Rust 的所有权机制 23 | - Rust 的异步编程基础 24 | - 利用 Rust 类型系统设计状态机和实现 session-typed TCP 库 25 | - 最后的大作业有四个可选项: 26 | 1. 使用 Lean 进行定理证明 27 | 2. 使用 Rust 实现 Read-Log-Update 同步机制 28 | 3. 利用 F* 语言验证文件系统的正确性 29 | 4. 在程序语言视角下使用 OCaml 实现一个深度学习框架 30 | 31 | 这些作业涵盖知识跨度非常大,从最经典的编程语言理论证明和实践到以 Rust 为例的编程语言对于编程和系统设计的影响,再到最后各有特色的大作业。几乎所有的编程作业都有详尽的本地测试,尤其是大作业中的深度学习框架更有超过 200 个测试,适合自学。 32 | 33 | 前面几次的作业偏 PL 理论,后面几次的作业偏系统编程。 34 | 如果你觉得前面几次的课程内容和作业过于理论,可以重点尝试使用 OCaml 实现解释器的作业,它既能让你对之前的理论有更深刻的理解,又能让你实战一个函数式语言的类型检查和解释。 35 | 36 | 而后面的作业则更倾向于利用理论来指导系统编程与设计,尤其是 Rust 和它独特的所有权机制与类型系统。虽然我们要经常与编译器搏斗,但这也恰好说明了类型系统和理论对于编程和设计的意义。 37 | 38 | 个人自学过程中感觉作业还是偏难的,但收获很大,在后续作业的编程实践和前面所学的理论知识产生交集时会有恍然大悟的愉悦。如果你在完成作业时遇到了困难,这是十分正常的,请静下心来认真思考,或者再读一遍实验指导。 39 | 40 | ## 课程资源 41 | 42 | - 课程网站:[官网](https://stanford-cs242.github.io/f19/) 43 | - 课程视频:无,主要学习途径是课程笔记和完成作业 44 | - 课程教材:前半部分是著名的[TAPL](https://www.cis.upenn.edu/~bcpierce/tapl/),后半部分则无固定教材 45 | - 课程作业:[实验指导](https://stanford-cs242.github.io/f19/assignments/)与[作业仓库](https://github.com/stanford-cs242/f19-assignments) 46 | -------------------------------------------------------------------------------- /docs/编程语言设计与分析/Cambridge-Semantics.md: -------------------------------------------------------------------------------- 1 | # Cambridge: Semantics of Programming Languages 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:University of Cambridge 6 | - 先修要求:基础离散数学 7 | - 编程语言:OCaml/ML 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:20 至 30 小时 10 | 11 | 这门课程系统性地讲述了编程语言中的语义学 (Semantics)。它在定义和设计语言的背景下,为编程语言的构造和规范声明提供了一个非常适合初学者,但同样严谨且形式化的介绍。这也是为数不多的提供公开视频的编程语言理论课程之一。 12 | 13 | 课程内容涵盖了从操作语义 (Operational Semantics) 到指称语义 (Denotational Semantics) 的各个主题。课程开始会先介绍一个使用 BNF 约束的简单命令式语言的基本操作语义,然后逐步引入形式类型系统,使用归纳法,特别是结构归纳法 (Structural Induction) 来构建基于规则的归纳证明,介绍了程序语言语义学中的许多基本性质及其证明。然后讨论在函数式编程视角下如何操作数据,并介绍着重子类型和函数处理。最后讨论语义等价性、一致性性质以及在并发环境下的语义学。 14 | 15 | 这门课在校内面向二年级本科生,难度不高,但同时引入了一些非常重要的概念。它将是进一步研究类型理论、范畴理论、霍尔逻辑和模型检测的关键要素。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[Latest](https://www.cl.cam.ac.uk/teaching/2324/Semantics/) 20 | - 课程视频:[YouTube](https://www.youtube.com/playlist?list=PL-2hPK7m5S3hVagseKDPxCBZEqg0PqZhs) 21 | - 课程教材: 22 | - Pierce, B.C. (2002). _Types and programming languages_. MIT Press. 23 | - Winskel, G. (1993). _The formal semantics of programming languages_. MIT Press. 24 | - 课程作业:考试真题中的相关题目汇总在 [这里](https://www.cl.cam.ac.uk/teaching/exams/pastpapers/t-SemanticsofProgrammingLanguages.html),但是相关作业题 (Cambridge 内部的 supervision) 以及所有题目的答案均不公开。 25 | -------------------------------------------------------------------------------- /docs/编程语言设计与分析/NJU-SoftwareAnalysis.md: -------------------------------------------------------------------------------- 1 | # NJU 软件分析 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:南京大学 6 | - 先修要求:数据结构与算法,至少熟悉一门编程语言 7 | - 编程语言:Java 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | 软件分析是由南京大学李樾老师和谭添老师共同开设的一门课程,主要介绍了程序分析,在这里特指静态分析的理论与实践。 12 | 静态分析的理念是在不运行程序的情况下,通过分析其源代码和各种表示来获得关于程序特定性质的**近似**结论。 13 | 这门课从程序的抽象语法树,控制流图和中间表示这些基础知识开始介绍,再到数据流分析和指针分析的理论与实践,最后介绍了若干高级主题,如 IFDS 等。 14 | 15 | 这门课程值得学习的原因在我看来有两部分: 16 | 17 | - 授课。程序分析一般来说并不太好上手,但两位老师讲的尤其细致入微,还会在课上带你一步一步走某一个算法的流程。个人认为只要认真听课,对于课上的知识不存在学不懂或者讲的不清楚的问题。 18 | 19 | - 作业。作业围绕其自创的 Java 程序分析框架太阿进行。 20 | 八个作业涵盖多种静态分析技术,包括编译优化(活跃变量分析、常量传播、死代码检测),基础程序分析(程序调用图构建、非/上下文敏感指针分析),以及程序分析在软件安全性的应用(污点分析)。 21 | 课程同时还提供**所有人**可用的在线评测系统,适合自学。 22 | 23 | 作业主要是实现课上的伪代码算法,从而更好的帮助你理解课上所讲的知识。我感觉难度并不是特别大,特别适合在上完课后完成对应的实验来检验自己对课上知识的掌握程度。 24 | 不过想要通过每个作业的所有测试点还是很有难度的。 25 | 26 | ## 课程资源 27 | 28 | - 课程网站:[主页](https://tai-e.pascal-lab.net/lectures.html) 29 | - 课程视频:[Bilibili](https://www.bilibili.com/video/BV1b7411K7P4/?spm_id_from=333.999.0.0&vd_source=b58da8cd0259ee873ef3dc2c9aa36d74) 30 | - 课程教材:无 31 | - 课程作业:[实验主页](https://tai-e.pascal-lab.net/intro/overview.html) 32 | - 在线评测: [OJ](https://oj.pascal-lab.net/problem) 33 | -------------------------------------------------------------------------------- /docs/编程语言设计与分析/PKU-SoftwareAnalysis.en.md: -------------------------------------------------------------------------------- 1 | # PKU Software Analysis 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Peking University 6 | - Prerequisite: Data Structures and Algorithms, familiar with at least one programming language 7 | - Programming Languages: Java, Python 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Learning Hours: 60 hours 10 | 11 | Software Analysis is a course offered by Prof. Yingfei Xiong from Peking University. The course mainly covers the following topics: 12 | 13 | 1. Program analysis based on abstract interpretation (data flow analysis, inter-procedural analysis, pointer analysis, abstract interpretation, etc.) 14 | 2. Program analysis based on constraint solving (SAT, SMT, symbolic execution, etc.) 15 | 3. Software analysis applications (program synthesis, bug localization, bug repair, etc.) 16 | 17 | Compared with the [Software Analysis course of Nanjing University](./NJU-SoftwareAnalysis.en.md), this course covers **more comprehensive** theoretical and practical content of program analysis, and is more difficult. My main way of learning this course is to listen to the course. Prof. Xiong's lectures are very interesting. In addition to the theoretical content, he occasionally tells some academic related stories :) 18 | 19 | The course project of this experiment is to implement a pointer analysis system on Java and a program synthesis tool, which is also a very interesting practice. 20 | 21 | ## Resources 22 | 23 | - Course Website: [Homepage](https://xiongyingfei.github.io/SA/2020/main.htm) This is the course homepage of 2020. More course content can be found on [Prof. Xiong's homepage](https://xiongyingfei.github.io/). 24 | - Course Video: [2020](https://liveclass.org.cn/cloudCourse/#/courseDetail/8mI06L2eRqk8GcsW) 25 | - Course Textbook: None 26 | -------------------------------------------------------------------------------- /docs/编程语言设计与分析/PKU-SoftwareAnalysis.md: -------------------------------------------------------------------------------- 1 | # 北京大学 软件分析技术 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:北京大学 6 | - 先修要求:数据结构与算法,至少熟悉一门编程语言 7 | - 编程语言:Java, Python 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | 软件分析技术是由北京大学熊英飞老师开设的一门课程,主要介绍了以下内容: 12 | 13 | 1. 基于抽象解释的程序分析(数据流分析、过程间分析、指针分析、抽象解释等) 14 | 2. 基于约束求解的程序分析(SAT、SMT、符号执行等) 15 | 3. 软件分析应用(程序合成、缺陷定位、缺陷修复等) 16 | 17 | 和南京大学的[软件分析课程](./NJU-SoftwareAnalysis.md)对比,这门课程的特点是讲了**更多更全面**的程序分析的理论与实践相关内容,难度也更大。这门课程我的主要的学习途径是听课,熊老师上课十分有趣,除了理论内容讲的很好偶尔也会讲一些学术相关的小段子:) 18 | 19 | 而本实验的的课程项目是实现一个Java上的指针分析系统和一个程序合成工具,也是十分有趣的实践。 20 | 21 | ## 课程资源 22 | 23 | - 课程网站:[主页](https://xiongyingfei.github.io/SA/2020/main.htm) 这是 2020 年的课程主页,在[熊老师的主页](https://xiongyingfei.github.io/)上可以找到更多年份的课程内容。 24 | - 课程视频:[2020 燕云直播](https://liveclass.org.cn/cloudCourse/#/courseDetail/8mI06L2eRqk8GcsW) 25 | - 课程教材:无 26 | -------------------------------------------------------------------------------- /docs/编译原理/CS143.en.md: -------------------------------------------------------------------------------- 1 | # Stanford CS143: Compilers 2 | 3 | ## Descriptions 4 | 5 | - Offered by: Stanford University 6 | - Prerequisite: Computer Architecture 7 | - Programming Languages: Java or C++ 8 | - Difficulty: 🌟🌟🌟🌟🌟 9 | - Learning Hours: 150 10 | 11 | This course aims to impart the principles of compiler construction for programming languages to students. The instructors have designed a “COOL language”, namely Classroom-Object-Oriented-Language. By study and practice, you will design and implement a compiler, which can translate the human-readable COOL language into machine-readable MIPS assembly which can be run on the SPIM emulator. 12 | 13 | Following the Dragon Book, the theoretical part of the course covers lexical analysis, syntax analysis, semantics analysis, runtime environments, register allocation, optimization, and code generation. The practical part, accordingly, is divided into 4 steps: 3 for the frontend and 1 for the backend. The difficulty is considered gradual, increasing at a proper rate. Should you have enough time and interest even after completing all the required work, there’s a huge room left for you to do optimization. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: 18 | - Recordings: 19 | - Textbook: Compilers: Principles, Techniques and Tools (Dragon Book) 20 | - Assignments: 5 written assignments + 5 programming labs 21 | 22 | ## Collection of Course Resources 23 | 24 | @skyzluo has been maintaining a repo of course resources used and reference implementations of programming labs: [skyzluo/CS143-Compilers-Stanford - GitHub](https://github.com/skyzluo/CS143-Compilers-Stanford). 25 | -------------------------------------------------------------------------------- /docs/编译原理/CS143.md: -------------------------------------------------------------------------------- 1 | # Stanford CS143: Compilers 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:计算机体系结构 7 | - 编程语言:Java 或 C++ 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | 斯坦福的编译原理课程,设计者开发了一个 Classroom-Object-Oriented-Language,简称 COOL 语言。这门课的核心就是通过理论知识的学习,为 COOL 语言实现一个编译器,将 COOL 高级语言编译为 MIPS 汇编并在 Spim 这个 MIPS 模拟器上成功执行。 12 | 13 | 理论部分基本按照龙书的顺序覆盖了词法分析、语法分析、语义分析、运行时环境、寄存器分配、代码优化与生成等内容,实践部分则相应地分为词法分析、语法分析、语义分析、代码生成四个阶段,难度循序渐进,并在优化部分给学生留下了很大的设计空间。 14 | 15 | ## 课程资源 16 | 17 | - 课程网站: 18 | - 课程视频: 19 | - 课程教材:龙书 20 | - 课程作业:5 个书面作业 + 5 个编程作业带你实现一个编译器 21 | 22 | ## 资源汇总 23 | 24 | @skyzluo 在学习这门课中用到的所有资源和作业实现都汇总在 [skyzluo/CS143-Compilers-Stanford - GitHub](https://github.com/skyzluo/CS143-Compilers-Stanford) 中。 25 | -------------------------------------------------------------------------------- /docs/编译原理/CS420.en.md: -------------------------------------------------------------------------------- 1 | # CS420: Compiler Design 2 | 3 | ## Descriptions 4 | 5 | - Offered by:·KAIST 6 | - Prerequisites: Data Structures, Basic Understanding of Computer Systems and Rust Programming 7 | - Programming Languages: Rust 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 80 hours 10 | 11 | This course provides a compiler framework code called KECC(KAIST Educational C Compiler) written in Rust, based on which students build some core parts of the compiler, include AST print, SSA-based IR generation, IR optimization and RISC-V assembly generation. Compared to other compiler courses, this course has the following main characteristics: 12 | 13 | - The course focuses on the real C language rather than a custom toy language, and uses C language fuzzing tools(Csmith) for testing. 14 | - This course emphasizes on practicality. It does not talk much about the theory of compiler frontend and the assignments start with the traversal of AST so you do not need to build the frontend yourself. The course mainly focuses on IR design, generation and optimization, as well as RISC-V assembly code generation. This course is also helpful for understanding and learning LLVM. 15 | - The course comes with accompanying videos that provide detailed code tours, which is beginner-friendly. 16 | 17 | ## Course Resources 18 | 19 | - Course Website: 20 | - Recordings: 21 | - Textbooks: 22 | - Assignments: 23 | -------------------------------------------------------------------------------- /docs/编译原理/CS420.md: -------------------------------------------------------------------------------- 1 | # CS420: Compiler Design 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:KAIST 6 | - 先修要求:数据结构、计算机系统基础、Rust 编程基础 7 | - 编程语言:Rust 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:80小时 10 | 11 | 这门课程提供了一个 Rust 语言编写的编译器 KECC(KAIST Educational C Compiler) 框架代码,在此基础上构建编译器的一些核心部分,包括语法树打印、SSA中间代码生成、中间代码优化(包括 CFG 简化,GVN 等)以及目标代码生成。与其他编译器课程相比,本课程主要有以下特点: 12 | 13 | - 该课程面向真实的 C 语言而非自定义的玩具语言,并且会使用 C 语言 Fuzzing 工具 (Csmith) 进行测试。 14 | - 该课程注重实用性,对编译器前端理论涉及很少,第一个实验也是直接从抽象语法树的遍历开始,并不要求你手动完成前端。课程重点关注于 IR 的设计、生成和优化,以及 RISC-V 汇编代码生成。本课程对于理解和学习 LLVM 也很有帮助。 15 | - 课程配套视频有详细的代码讲解,对初学者友好。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站: 20 | - 课程视频: 21 | - 课程教材: 22 | - 课程作业: 23 | -------------------------------------------------------------------------------- /docs/编译原理/NJU-Compilers.md: -------------------------------------------------------------------------------- 1 | # NJU 编译原理 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:南京大学 6 | 7 | - 先修要求:离散数学 8 | 9 | - 编程语言:Java 10 | 11 | - 课程难度:🌟🌟🌟 12 | 13 | - 预计学时:80 小时 14 | 15 | 16 | 17 | 南京大学的编译原理课程,设计者选用了当下热门的 ANTLR (ANother Tool for Language Recognition) v4 编程语言解析生成工具辅助教学,能让使用者专心词法或者语法分析的设计,而让 ANTLR 4 来生成重复的模板代码。IDE 也有其插件,装上后,可以实现即时的可视化语法树,方便学生理解。 18 | 19 | ANTLR 4 是 LL 解析器生成器,比起 LR 和 LALR 解析器生成器,它可处理语法的范围相对狭窄。但另一方面其生成的解析器有易于理解和使用的优势。此外,因为其支持“无限长的 token 超前扫描”,所以可处理语法范围狭窄的问题也得到了很好的改善。 20 | 21 | 老师通过适当的图解和生活例子,幽默风趣地讲述编译原理,让人听来不算乏闷。尤其是今年这版,采取先实际使用 ANTLR 4 完成一些小例子,再补足理论知识的方式。让人能带着问题去找到适配的理论,更让人印象深刻。通过理论知识的学习,逐渐揭开 C 语言的“神秘面纱”。 22 | 23 | 理论部分基本按照龙书节奏叙述。包括词法分析、语法分析、语义分析、运行时环境、寄存器分配、代码优化与生成等内容。 24 | 25 | 实践则是本课程的亮点,一步步的,由简单到复杂地实现一个属于自己的编译器。 26 | 27 | 教授本课的老师极为慷慨,校外学生同样能享受到 Online Judge 以及参与课程讨论,老师还极为细心地整理历年来的学习资料,在课程网站里十分容易找到。 28 | 29 | 老师还把教学班的 [Zulip](https://2024-compilers-at-software-nju.zulipchat.com/join/wxwq3fib56ltlff2mk6qyrz5/) 地址公开(若有变更,在课程网站也能找到),这意味着你有任何问题,都能在上面提问,同时你也能看到跟你一起学习的南大学生的问题,这些问题都会得到助教和老师的回答,所以我并不用再赘述踩了哪些坑或者经验,因为你能在一个平台上,和一帮正在学习相同内容的人,一起交流问题。 30 | 31 | 最大感受是,心里不再对实现一个编译器有畏难情绪,也不再无从下手,学完课程,会有一套初步的行之有效的思路,让我们面对挑战。 32 | 33 | ## 课程资源 34 | 35 | - 课程网站: 36 | - 课程视频: 37 | - 课程教材:龙书等 38 | - 课程作业:10 个书面作业 + 8 ~ 10 个编程作业带你实现一个编译器 39 | 40 | -------------------------------------------------------------------------------- /docs/编译原理/PKU-Compilers.md: -------------------------------------------------------------------------------- 1 | # PKU 编译原理实践 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:北京大学 6 | - 先修要求:计算机系统基础、数据结构与算法、编程基础 7 | - 编程语言:C/C++/Rust 任选其一 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | 北京大学的编译原理实践课程旨在实现一个从精简版的 C 语言 —— SysY 编译到 RISC-V 汇编的编译器。和其他提供了框架代码的课程不同,该课程给予了你极大的自由度,测试程序只会对你输出的汇编代码的正确性进行测试,而不会对你编译器的具体设计甚至使用的编程语言做任何限制。你需要从一个空文件夹开始一步步构建出独属于你自己的编译器。但平地起高楼即使对于北大的同学也是相当有难度的,因此课程助教 [@MaxXing](https://github.com/MaxXSoft) 在2022年对课程实验进行重大升级,为课程专门设计了一种中间表示 Koopa IR (intermediate representation)。Koopa IR 在设计上更为合理,在形式上类似于 LLVM IR,但简化了相当多的内容,只专注于实践需要的部分。与此同时,还为 Koopa IR 设计了配套的运行时库,你可以借助这套运行时库轻松地解析/生成/修改/输出 Koopa IR,完全不需要对其他无用的细节做过多考虑。另外,还有一份保姆级的文档将构建编译器这样一个大工程循序渐进地拆分成了9个小步骤,让任何愿意花时间的同学都可以更容易地实现自己的编译器。 12 | 13 | 以下内容摘自 @MaxXing 在其 [Blog](https://blog.maxxsoft.net/index.php/archives/145/) 中对该课程实验的介绍: 14 | 15 | --- 16 | 17 | 你可能已经见过无数个教你写编译器的教程了,但它们也许或多或少存在各种问题,导致你看了它们之后,依然觉得无从下手: 18 | 19 | - 教程并非面向“零编译器基础”的人群,理解起来比较费劲。 20 | - 只教了怎么做一个编译器,但没教为什么这么做,读完之后还是觉得一头雾水。 21 | - 开始编码之前,需要复杂的环境配置,开局劝退。 22 | - 上来先做和“编译一个程序”这件事八竿子打不着的东西,跟着教程学一个月才能看到自己的编译器编出一个能跑的程序,反馈周期过长。 23 | - 最终写出来的只是个解释器,或者不能编译到真实的 ISA(例如输出了某种字节码),或者高度依赖其他框架(例如 LLVM),让人体会不到那种“我真的写出个编译器”的成就感,以及“所有事情都由自己实现”的酣畅感。 24 | - 实现的编译器只能编译一些过于简单的程序,比如排序算法等等,看起来非常无聊。谁会没事干排序玩啊? 25 | - 教程及其配套资源非中文,或需要付费,且不开源。 26 | 27 | 研究生期间,我一直在担任本科编译原理课程的助教。为了让本科生更好地理解编译器工作的原理,在参考多个其他教程之后,我设计了一套全新的,教你从零开始写个编译器的教程: 28 | 29 | - 你可以使用 C/C++/Rust 开发你的编译器,教程只要求你具备使用这些语言编程的能力,不要求任何编译原理的基础和相关实践经验。 30 | - 教程除了告诉你要如何写一个编译器,还会告诉你为什么这么做,以及除此之外还能怎么做。 31 | - 教程采用增量式、迭代式的思路,引导你从一个只能处理 main 函数的编译器开始,逐步扩展实现一个能处理包括控制流、函数调用、数组在内的,类 C 语言的编译器。编译器可以输出 RISC-V 汇编。 32 | - 提供基于 Docker 的实验环境,一键配置。环境中还附带自动测试脚本,一键测试你写的编译器。 33 | - 教程介绍了相关工具,可以为你代劳一些枯燥的苦力活,比如生成 lexer/parser,解析和生成 IR 等等。剩下的事情,如构建 AST、语义分析、生成 IR 以及生成目标代码,完全由你自己编程实现。 34 | - 你最终实现的编译器足以编译很多复杂的程序,例如 Mandelbrot 集绘制程序,或者 Lisp 解释器(这个解释器甚至可以解释另一个 Lisp 解释器)。我们会提供这些程序,让你用你写的编译器体验到最真实的快乐。 35 | - 教程及其配套工具、实验环境等,全部开源,完全免费! 36 | - 你可以从 GitHub Pages 上访问到这个教程:[北京大学编译实践课程在线文档](https://pku-minic.github.io/online-doc/#/)。如果你之前从来没有尝试过自己写一个编译器,不如现在就来试一下吧! 37 | 38 | 我的愿望是,让每个人都感受到写编译器的快乐。 39 | 40 | --- 41 | 42 | 最后,向 @MaxXing 致以我崇高的敬意。—— from PKUFlyingPig -------------------------------------------------------------------------------- /docs/编译原理/USTC-Compilers.en.md: -------------------------------------------------------------------------------- 1 | # USTC: Principles and Techniques of Compiler 2 | 3 | ## Descriptions 4 | 5 | - Offered by: University of Science and Technology of China (USTC) 6 | - Prerequisites: 7 | - Programming Languages: 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | The theoretical part of this course covers a wide range of topics, including lexical analysis, syntax analysis, syntax-directed translation, and intermediate code translation from traditional compiler principles courses, as well as runtime management and both machine-independent and machine-specific code optimization. The practical component provides C++ code for the Cminusf compiler framework, allowing students to progressively build a fully functional modern compiler over six labs. Unlike other compiler courses, this course uses a subset of modern LLVM as the intermediate code, offering a forward-looking approach and including backend code generation and intermediate code optimization, making it a world-class compiler course. 12 | 13 | - The course labs use scripts to provide comprehensive automated testing, with complete tutorials available on the course homepage. 14 | - The course includes a full set of open-source course materials, lab framework code, and lab tutorials, making it beginner-friendly. 15 | - The labs progress gradually, increasing in difficulty, ensuring that students with varying levels of prior knowledge can benefit. 16 | - In Lab 1, Flex and Bison are used to implement the compiler frontend. Lab 2 involves generating intermediate code with LightIR (a subset of LLVM). Lab 3 covers backend code generation for the Loongson assembly language. Lab 4 focuses on intermediate code optimization. Lab 5 implements machine-independent optimization, and Lab 6 deals with register allocation. 17 | 18 | ## Course Resources 19 | 20 | - Course Website: 21 | - Recordings: 22 | - Textbook: See the course website 23 | - Assignments: -------------------------------------------------------------------------------- /docs/编译原理/USTC-Compilers.md: -------------------------------------------------------------------------------- 1 | # USTC: Principles and Techniques of Compiler 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:中国科学技术大学 6 | - 先修要求:数据结构、计算机系统基础、C++ 编程基础 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100小时 10 | 11 | 这门课程的理论部分内容广泛,既涵盖了传统编译原理课程的词法分析、语法分析、语法制导翻译、中间代码翻译,又覆盖了运行时管理、机器无关与面向机器的代码优化。实验部分则提供了 C++ 语言编写的Cminusf编译器框架代码,于6个实验中逐步构建一个具备现代完整流程的编译器。与其他编译原理课程的实验不同的是,本课程的实验采用现代LLVM的子集作为中间代码,更具前瞻性,同时包括了后端代码的生成和中间代码优化的部分,堪称国际一流的编译原理课程。 12 | 13 | - 课程实验使用脚本提供全面的自动化测试,并于课程主页提供了完整的教程。 14 | - 课程包含全套开源的课件、实验框架代码、实验教程,对初学者友好。 15 | - 课程实验循序渐进,逐渐增加难度,能让不同基础的学生都有收获。 16 | - 课程实验中Lab1使用Flex和Bison实现编译器前端,Lab2实现LightIR(LLVM子集)中间代码生成,Lab3实现后端代码生成龙芯汇编语言,Lab4实现中间代码优化,Lab5实现机器无关优化,Lab6实现寄存器分配。 17 | 18 | ## 课程资源 19 | 20 | - 课程网站: 21 | - 课程视频: 22 | - 课程教材:见课程网站 23 | - 课程作业: 24 | -------------------------------------------------------------------------------- /docs/计算机图形学/15462.md: -------------------------------------------------------------------------------- 1 | # CMU 15-462 : COMPUTER GRAPHICS 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:CMU 6 | - 先修要求:基础的向量微积分和线性代数 , 基础的 C/C++ 编程能力。 7 | - 编程语言:C/C++ 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 本课程全面介绍了计算机图形学。它侧重于基本概念和技术,以及它们与图形中多个问题领域(渲染、动画、几何、成像)的交叉关系。主题包括:采样、混叠、插值、光栅化、几何变换、参数化、可见性、合成、过滤、卷积、曲线和曲面、几何数据结构、细分、网格划分、空间层次结构、光线追踪、辐射测量、反射率、光场、几何光学,蒙特卡洛渲染,重要性采样,相机模型,高性能光线追踪,微分方程,时间积分,数值微分,基于物理的动画,优化,数值线性代数,逆运动学,傅立叶方法,数据拟合. 12 | 13 | ## 课程资源 14 | 15 | - 课程网站:[http://15462.courses.cs.cmu.edu/fall2022/](http://15462.courses.cs.cmu.edu/fall2022/) 16 | - 课程视频: 17 | - [Youtube](https://www.youtube.com/watch?v=W6yEALqsD7k&list=PL9_jI1bdZmz2emSh0UQ5iOdT2xRHFHL7E&index=1) 18 | - [bilibili](https://www.bilibili.com/video/BV1QZ4y1K7ga) 19 | - 课程教材:15-462 没有唯一的课本, 提供了各种书籍供你参考. 如下: 20 | - [Fundamentals of Computer Graphics. A K Peters, 2009](http://www.amazon.com/Fundamentals-Computer-Graphics-Peter-Shirley/dp/1568814690) 21 | - [Computer Graphics: Principles and Practice](http://www.amazon.com/Computer-Graphics-Principles-Practice-3rd/dp/0321399528/ref=sr_1_2?s=books&ie=UTF8&qid=1440872554&sr=1-2&keywords=foundations+of+3d+computer+graphics) 22 | - [Physically Based Rendering: From Theory to Implementation](http://www.amazon.com/gp/product/0123750792?ie=UTF8&tag=pharr-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0123750792) 23 | - 课程作业:参见课程主页 24 | -------------------------------------------------------------------------------- /docs/计算机图形学/CS148.en.md: -------------------------------------------------------------------------------- 1 | # Stanford CS148 2 | 3 | ## Course Introduction 4 | 5 | - **University**: Stanford 6 | - **Prerequisites**: Linear Algebra, Advanced Mathematics, Python 7 | - **Programming Language**: Python 8 | - **Course Difficulty**: 🌟🌟🌟 9 | - **Estimated Study Time**: 40 hours 10 | 11 | Official Description: 12 | 13 | This introductory course in computer graphics begins with using Blender to generate images and understanding the underlying mathematical concepts, including triangles, normals, interpolation, texture mapping, bump mapping, and more. It then delves into light and color and how they affect computer displays and printing. The course also covers BRDF and some basic lighting and shading models. Towards the end, topics like ray tracing, anti-aliasing, and acceleration structures are introduced. 14 | 15 | For more detailed information, you can visit the [course website](https://web.stanford.edu/class/cs148/index.html). 16 | 17 | This course is somewhat less in-depth compared to GAMES101 and uses Python, making it more accessible for students who are not familiar with C++. 18 | 19 | ## Course Resources 20 | 21 | - **Course Website**: [CS148](https://web.stanford.edu/class/cs148/index.html) 22 | - **Course Videos**: None, the [lectures](https://web.stanford.edu/class/cs148/lectures.html) themselves are sufficient. GAMES101 videos can also be referenced. 23 | - **Course Textbook**: Fundamentals of Computer Graphics 24 | - **Course Assignments**: [8 Homework Assignments, 1 Final Project](https://web.stanford.edu/class/cs148/assignments.html) -------------------------------------------------------------------------------- /docs/计算机图形学/CS148.md: -------------------------------------------------------------------------------- 1 | # Stanford CS148 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:线性代数,高等数学,Python 7 | - 编程语言:Python 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:40 小时 10 | 11 | 官方介绍: 12 | 13 | 这是一门计算机图形学的入门课程,这门课的一开始使用 Blender 去生成图像,并且理解底层的数学知识,包括三角形、法向量、插值、纹理映射、凹凸贴图等等。之后会介绍光线和颜色以及它们如何影响计算机的显示和打印。同时也会介绍 BRDF 以及一些基本的光照和着色模型。课程的最后,会涉及到光线追踪、反走样、加速结构等内容。 14 | 15 | 具体课程信息可以查看[课程网站](https://web.stanford.edu/class/cs148/index.html)。 16 | 17 | 这门课程比起 GAMES101 浅一些,编程语言使用的是 Python,对于不熟悉 C++ 的同学比较友好。 18 | 19 | ## 课程资源 20 | 21 | - 课程网站:[CS148](https://web.stanford.edu/class/cs148/index.html) 22 | - 课程视频:无,直接看[lecture](https://web.stanford.edu/class/cs148/lectures.html)就可以了,也可以参考 GAMES101 视频 23 | - 课程教材:Fundamentals of Computer Graphics 24 | - 课程作业:[8 个 hw, 1 个 final project](https://web.stanford.edu/class/cs148/assignments.html) 25 | -------------------------------------------------------------------------------- /docs/计算机图形学/GAMES101.md: -------------------------------------------------------------------------------- 1 | # GAMES101 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UCSB 6 | - 先修要求:线性代数,高等数学,C++ 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:80 小时 10 | 11 | 官方介绍: 12 | 13 | > 本课程将全面而系统地介绍现代计算机图形学的四大组成部分:(1)光栅化成像,(2)几何表示,(3)光的传播理论,以及(4)动画与模拟。每个方面都会从基础原理出发讲解到实际应用,并介绍前沿的理论研究。通过本课程,你可以学习到计算机图形学背后的数学和物理知识,并锻炼实际的编程能力。 14 | > 作为入门,本课程会尽可能的覆盖图形学的方方面面,把每一部分的基本概念都尽可能说清楚,让大家对计算机图形学有一个完整的、自上而下的全局把握。全局的理解很重要,学完本课程后,你会了解到图形学不等于 OpenGL,不等于光线追踪,而是一套生成整个虚拟世界的方法。从本课程的标题,大家还可以看到“现代”二字,也就是说,这门课所要给大家介绍的都是现代化的知识,也都是现代图形学工业界需要的图形学基础。 15 | 16 | GAMES101 是国内相当有名的图形学公开课。和大家印象中满是数学和算法的图形学不同,这门课以十分生动的方式带我们进入了图形学这个领域的大门。 17 | 18 | 每个project代码量都不会很多,但是却都十分有趣。在做这些project的过程中,我们会实现简单的光栅化,并渲染一个简易的模型,我们还会实现光线追踪,以追求渲染更好的质量。每个project中还有选做的拓展作业,可以让我们渲染的模型具有更好的质量,更快的渲染速度。 19 | 20 | 喜欢玩游戏的同学应该对实时光线追踪有一定的了解,这门课的老师闫令琪就对这一技术有直接的推动作用。 21 | 22 | 跟着课程的视频,做完每一个project,相信你会和我一样对图形学,以及现代的渲染技术产生浓厚的兴趣。 23 | 24 | ## 课程资源 25 | 26 | - 课程网站:[GAMES101](http://games-cn.org/intro-graphics/), [GAMES101](https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html) 27 | - 课程视频:[bilibili](https://www.bilibili.com/video/BV1X7411F744?p=1), [官网](http://games-cn.org/graphics-intro-ppt-video/) 28 | - 课程教材:Fundamentals of Computer Graphics 29 | - 课程作业:[8 个 project](http://games-cn.org/forums/topic/allhw/) 30 | 31 | ## 资源汇总 32 | 33 | @ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在[ysj1173886760/Learning: graphics/GAMES101 - GitHub](https://github.com/ysj1173886760/Learning/tree/master/graphics/GAMES101) 中。 34 | -------------------------------------------------------------------------------- /docs/计算机图形学/GAMES103.md: -------------------------------------------------------------------------------- 1 | # GAMES103 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Style3D/OSU 6 | - 先修要求:线性代数,高等数学,大学物理,编程能力,基本图形知识 7 | - 编程语言:C# 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:50 小时 10 | 11 | 官方介绍: 12 | 13 | > 本课程将作为基于物理的计算机动画技术入门,着重介绍各种基础的物理动画模拟技术。 14 | > 15 | > 该课程主要涵盖四个方向,分别为:1)刚体模拟;2)质点弹簧、约束与布料模拟;3)基于有限元的弹性体模拟;4)流体模拟。 16 | > 17 | > 本课程内容将不会涉及具体的物理模拟引擎,但会讨论各种引擎背后的技术,以及它们的优缺点等等。由于开发学习物理模拟需要一定的数学基础,课程初始阶段也会花一定的时间复习必备的数学知识。顺利完成课程之后,同学们应该会对基础的物理模拟技术有深入理解,对高级的模拟技术也会有部分接触。 18 | > 19 | 20 | 图形学可粗略分为渲染、模拟、几何三个领域。GAMES101 和 GAMES202 主要以渲染为主,而对于物理模拟,GAMES103 则是很棒的学习资源。 21 | 22 | ## 课程资源 23 | 24 | - 课程网站:[GAMES103](http://games-cn.org/games103/) 25 | - 课程视频:[bilibili](https://www.bilibili.com/video/BV12Q4y1S73g) 26 | - 参考资料:[课程PPT](https://www.aliyundrive.com/s/YGuzfDCzw4n/folder/61824d985307bbf3920044b4afd48abb633441f6) 27 | - 课程作业:共四次作业,可见官方BBS小程序或非官方的Repo:[GAMES103 HW](https://github.com/indevn/GAMES103/tree/main/HW) 28 | 29 | ## 资源汇总 30 | 31 | @indevn 在学习这门课中用到的所有资源和作业要求都汇总在 [GAMES103 Unoffical](https://github.com/indevn/GAMES103) 中。对于作业的具体实现,在知乎上有很多相关文章进行了细致讲解可以参考。 32 | -------------------------------------------------------------------------------- /docs/计算机图形学/GAMES202.md: -------------------------------------------------------------------------------- 1 | # GAMES202 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UCSB 6 | - 先修要求:线性代数,高等数学,C++,GAMES101 7 | - 编程语言:C++ 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:60 小时 10 | 11 | 官方介绍: 12 | 13 | > 本课程将全面地介绍现代实时渲染中的关键问题与解决方法。由于实时渲染 (>30 FPS) 对速度要求极高,因此本课程的关注点将是在苛刻的时间限制下,人们如何打破速度与质量之间的权衡,同时保证实时的高速度与照片级的真实感。 14 | > 15 | > 本课程将以专题的形式呈现,课程内容会覆盖学术界与工业界的前沿内容,包括:(1)实时软阴影的渲染;(2)环境光照;(3)基于预计算或无预计算的全局光照;(4)基于物理的着色模型与方法;(5)实时光线追踪;(6)抗锯齿与超采样;以及一些常见的加速方式等等。 16 | > 17 | > 除了最新最全的内容之外,本课程与其它任何实时渲染的教程还有一个重要的区别,那就是本课程不会讲授任何与游戏引擎的使用相关的内容,并且不会特别强调具体的着色器实现技术,而主要讲授实时渲染背后的科学与知识。本课程的目标是在你学习完这门课的时候,你将有深厚的功底去开发一个属于你自己的实时渲染引擎。 18 | 19 | 作为 GAMES101 的进阶课程,难度有一定的提升,但不会很大,相信完成了 GAMES101 的同学都有能力完成这门课程。每个 project 代码量都不会很多,但是都需要一定的思考。 20 | 21 | ## 课程资源 22 | 23 | - 课程网站:[GAMES202](https://sites.cs.ucsb.edu/~lingqi/teaching/games202.html) 24 | - 课程视频:[bilibili](https://www.bilibili.com/video/BV1YK4y1T7yY) 25 | - 课程教材:Real-Time Rendering, 4th edition. 26 | - 课程作业:[5个project](http://games-cn.org/forums/topic/games202zuoyehuizong/) 27 | -------------------------------------------------------------------------------- /docs/计算机图形学/USTC ComputerGraphics.en.md: -------------------------------------------------------------------------------- 1 | # USTC Computer Graphics 2 | 3 | ## Descriptions 4 | 5 | - Offered by: USTC 6 | - Prerequisites: Calculus, Linear Algebra, C/C++ Programming, Data Structures 7 | - Programming Languages: C/C++ 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | Mr. Liu Ligang from the School of Mathematics at USTC uploaded the course during the 2020 epidemic, and I personally feel that it is more comprehensive compared to Games101's focus on rendering, with content such as discrete geometry processing that the latter does not have, and it seems to be more mathematical, so it can be complemented with Games101, and the course materials are fully open to the public. 12 | 13 | ## Course Resources 14 | 15 | - Course Website:http://staff.ustc.edu.cn/~lgliu/Courses/ComputerGraphics_2020_spring-summer/default.htm 16 | - Recordings:https://www.bilibili.com/video/BV1iT4y1o7oM/?spm_id_from=333.880.my_history.page.click&vd_source=eea47a16439992e41b232bc5d5684e27 17 | - Textbooks:E. Angel, Interactive Computer Graphics — A top-down approach using OpenGL™, 6th ed., 2011.(This course does not prescribe the use of a prescribed textbook, and focuses on cutting-edge academic papers; the following textbooks are for reference only) 18 | - Assignments:http://staff.ustc.edu.cn/~lgliu/Courses/ComputerGraphics_2020_spring-summer/default.htm, 9 homework and 1 project 19 | 20 | -------------------------------------------------------------------------------- /docs/计算机图形学/USTC ComputerGraphics.md: -------------------------------------------------------------------------------- 1 | # USTC Computer Graphics 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:中国科学技术大学 6 | - 先修要求:微积分,线性代数,C/C++编程,数据结构 7 | - 编程语言:C/C++ 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:100小时 10 | 11 | 中科大数学学院的刘利刚老师在20年疫情期间上传的课程,个人感觉跟 Games101 的注重渲染相比在内容上更全面,有着后者所没有的离散几何处理等内容,看起来更加数学化,可以与 Games101 进行互补,课程资料全面公开。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站:http://staff.ustc.edu.cn/~lgliu/Courses/ComputerGraphics_2020_spring-summer/default.htm 16 | - 课程视频:https://www.bilibili.com/video/BV1iT4y1o7oM/?spm_id_from=333.880.my_history.page.click&vd_source=eea47a16439992e41b232bc5d5684e27 17 | - 课程教材:本课程不规定使用规定教材,以学术前沿论文为主,以下教材仅仅为参考 E. Angel, Interactive Computer Graphics — A top-down approach using OpenGL™, 6th ed., 2011. (中文翻译版:交互式计算机图形学—基于 OpenGL 的自顶向下方法(第五版),电子工业出版社,2012) 18 | - 课程作业:http://staff.ustc.edu.cn/~lgliu/Courses/ComputerGraphics_2020_spring-summer/default.htm ,九个作业加一个 Project ,具体看官网 19 | 20 | -------------------------------------------------------------------------------- /docs/计算机系统基础/CS110.md: -------------------------------------------------------------------------------- 1 | # CS110: Principles of Computer Systems 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:Stanford 6 | - 先修要求:编程基础、Unix、GDB、Valgrind 7 | - 编程语言:C/C++ 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150小时 10 | 11 | 这门课程在 [CS107](https://web.stanford.edu/class/archive/cs/cs107/cs107.1246/calendar) 的基础知识上进行拓展,深入研究计算机系统和程序构建。它专注于设计大型系统、跨多台机器的软件以及并行计算。课程的目标是教授学生计算机软件和硬件系统工程的原理和实践。 12 | 13 | 课程涵盖了广泛的主题,包括你的程序如何映射到计算机系统的组件上,理解程序行为和执行,理解大型系统的设计和权衡,编写跨多台机器的软件,以及编写在单台机器上并行运行任务的软件。 14 | 15 | 这门课程的教学风格是引人入胜且实用的。教师通过理论知识和丰富的编程实验,引导学生理解计算机系统中众多的技术挑战和设计原则。每周的实验让你为项目增加新功能,这些项目专注于提高学生的实践技能,让你有机会初步了解计算机系统的每一个方面,并且会公布答案,让你及时检查自己对关键知识点的掌握情况。 16 | 17 | 除了实验外,课程还包括旨在提供大量编程实践经验并加深对课程材料理解的项目作业。每项作业配有完整的测试框架。 18 | 19 | ## 课程资源 20 | 21 | - 课程网站:[winter20](https://web.stanford.edu/class/archive/cs/cs110/cs110.1204/) 22 | - 课程视频:[spring19](https://www.youtube.com/playlist?list=PLai-xIlqf4JmTNR9aPCwIAOySs1GOm8sQ) 23 | - 课程教材:[Computer Systems: A Programmer’s Perspective](https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/CSAPP_2016.pdf) 24 | - 课程作业:7 labs + 8 assignments,参见课程网站。 25 | 26 | ## 资源汇总 27 | 28 | @xuzheng465 在学习这门课中用到的所有资源和作业实现都汇总在 [xuzheng465/Stanford_CS110 - GitHub](https://github.com/xuzheng465/Stanford_CS110) 中。 29 | -------------------------------------------------------------------------------- /docs/计算机系统基础/CSAPP.md: -------------------------------------------------------------------------------- 1 | # CMU CS15213: CSAPP 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:CMU 6 | - 先修要求:CS61A, CS61B 7 | - 编程语言:C 8 | - 课程难度:🌟🌟🌟🌟🌟 9 | - 预计学时:150 小时 10 | 11 | CMU 大名鼎鼎的镇系神课,以其内容庞杂,Project 巨难而闻名遐迩。课程内容覆盖了汇编语言、体系结构、操作系统、编译链接、并行、网络等,作为系统入门课,兼具深度和广度,如果自学确实需要相当的毅力和代码功底。 12 | 13 | 这门课配合的教材由 CMU 计算机系主任 Bryant 教授执笔,也即所谓的 CSAPP。这也是我第一本认认真真一页一页读过去的计算机教材,虽然很难啃,但着实收获良多。 14 | 15 | 北大购买了这门课的版权并开设了 Introduction to Computer System 这门课,但其实 CSAPP 所有的课程资源和实验代码都能在它的官方主页上访问到(具体参见下方链接)。 16 | 17 | 这门课由于过于出名,全世界的码农争相学习,导致其 Project 的答案在网上几乎唾手可得。但如果你真的想锻炼自己的代码能力,希望你不要借鉴任何第三方代码。 18 | 19 | 认真学完这一门课,你对计算机系统的理解绝对会上升一个台阶。 20 | 21 | ## 课程资源 22 | 23 | - 课程网站: 24 | - 课程视频: 25 | - 课程教材:Computer Systems: A Programmer's Perspective, 3/E 26 | - 课程作业:11 个 Project,[代码框架全部开源](http://csapp.cs.cmu.edu/3e/labs.html) 27 | 28 | 英语有困难的同学可以参考B站UP主[九曲阑干](https://space.bilibili.com/354767108/)对 CSAPP 的[中文讲解](https://www.bilibili.com/video/BV1cD4y1D7uR)(据说CMU的中国留学生也在CMU的课堂上看这个视频呢)。另外如果大家在看完 CSAPP 后对书中的第七章链接有一定的疑问,推荐阅读《程序员的自我修养》这本书,书的副标题是链接,装载与库。这本书能够帮助我们完善对程序链接的理解,相信你在看完这本书以后可以对程序的链接,ELF 文件,动态库都将有一个更加深入的理解。十分推荐在读完 CSAPP,对计算机系统有一定的了解以后作为补充资料来阅读。 29 | 30 | 有关 Lab 部分,同学们亦可参考 [Arthals](https://arthals.ink/about-me) 在北大计算机系统导论(ICS)课程中所做的详尽笔记: 31 | 32 | - [Data Lab](https://arthals.ink/posts/experience/data-lab) 33 | - [Bomb Lab](https://arthals.ink/posts/experience/bomb-lab) 34 | - [Attack Lab](https://arthals.ink/posts/experience/attack-lab) 35 | - [Arch Lab](https://arthals.ink/posts/experience/arch-lab) 36 | - [Cache Lab](https://arthals.ink/posts/experience/cache-lab) 37 | - [Tsh Lab](https://arthals.ink/posts/experience/tsh-lab) 38 | - [Malloc Lab](https://arthals.ink/posts/experience/malloc-lab) 39 | - [Proxy Lab](https://arthals.ink/posts/experience/proxy-lab) 40 | -------------------------------------------------------------------------------- /docs/计算机网络/topdown.en.md: -------------------------------------------------------------------------------- 1 | # Computer Networking: A Top-Down Approach 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UMass 6 | - Prerequisites: basic knowledge about computer system 7 | - Programming Languages: None 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 40 hours 10 | 11 | *Computer Networking: A Top-Down Approach* is a classic textbook in the field of computer networking. The two authors, Jim Kurose and Keith Ross, have carefully crafted a course website to support the textbook, with lecture recordings, interactive online questions, and WireShark labs for network packet analysis. The only pity is that this course doesn't have hardcore programming assignments, and Stanford's [CS144](./CS144.en.md) makes up for that. 12 | 13 | ## Course Resources 14 | 15 | - Course Website: 16 | - Recordings: 17 | - Textbooks: Computer Networking: A Top-Down Approach 18 | - Assignments: 19 | 20 | ## Personal Resources 21 | 22 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/Computer-Network-A-Top-Down-Approach - GitHub](https://github.com/PKUFlyingPig/Computer-Network-A-Top-Down-Approach). 23 | -------------------------------------------------------------------------------- /docs/计算机网络/topdown.md: -------------------------------------------------------------------------------- 1 | # Computer Networking: A Top-Down Approach 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:马萨诸塞大学 6 | - 先修要求:有一定的计算机系统基础 7 | - 编程语言:无 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:40 小时 10 | 11 | 《自顶向下方法》是计算机网络领域的一本经典教材,两位作者 Jim Kurose 和 Keith Ross 精心制作了教材配套的课程网站,并且公开了自己录制的网课视频,交互式的在线章节测试,以及利用 WireShark 进行抓包分析的 lab。唯一遗憾的是这门课并没有硬核的编程作业,而 Stanford 的 [CS144](./CS144.md) 能很好地弥补这一点。 12 | 13 | ## 课程资源 14 | 15 | - 课程网站: 16 | - 课程视频: 17 | - 课程教材:Computer Networking: A Top-Down Approach 18 | - 课程作业: 19 | 20 | ## 资源汇总 21 | 22 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/Computer-Network-A-Top-Down-Approach - GitHub](https://github.com/PKUFlyingPig/Computer-Network-A-Top-Down-Approach) 中。 23 | -------------------------------------------------------------------------------- /docs/计算机网络/topdown_ustc.en.md: -------------------------------------------------------------------------------- 1 | # USTC Computer Networking:A Top-Down Approach 2 | 3 | ## Descriptions 4 | 5 | - Offered by: USTC 6 | - Instructor: Quan Zheng, Jian Yang 7 | - Prerequisites: operating system (not required) 8 | - Programming Languages: None 9 | - Difficulty: 🌟🌟🌟 10 | - Class Hour: 40 hours 11 | 12 | This course is a well-known computer networking course on the Chinese Internet, it adopts the renowned textbook: _Computer Networking: A Top-Down Approach, 7th Edition_. This a practical course that is not limited to theoretical knowledge, but it is **Strongly recommended** to read the textbook before watching videos, otherwise you _may_ not catch up with the course easily. 13 | 14 | 15 | The course covers the **majority** of the textbook and also **includes** exam content, so enjoy it. 16 | 17 | The recordings of the lectures were uploaded by Prof. Zheng himself on Bilibili. Moreover, he has been answering questions in the comments below the videos since 2020, which is very patient and responsible. 18 | ## Resources 19 | 20 | - Course Website: 21 | - Recordings: 22 | - Slides: 23 | - Textbook: _Computer Networking: A Top-Down Approach, 7th Edition_ 24 | -------------------------------------------------------------------------------- /docs/计算机网络/topdown_ustc.md: -------------------------------------------------------------------------------- 1 | # USTC Computer Networking:A Top-Down Approach 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:中国科学技术大学 6 | - 授课教师:郑烇、杨坚 7 | - 先修要求:操作系统(非必需) 8 | - 编程语言:无 9 | - 课程难度:🌟🌟🌟 10 | - 预计学时:40 小时 11 | 12 | 这门课应该是中文互联网上比较火的计算机网络课了,教材采用神书计算机网络(自顶向下方法),授课风格更偏向实际而非纯理论(**强烈建议**先阅读教材预习再看课,否则上课时*可能*会有些懵圈)。 13 | 14 | 课程内容包括**大部分**自顶向下方法里的内容,同时**涵盖**考试内容,可放心观看。 15 | 16 | 课程视频是郑烇老师本人在哔哩哔哩上上传的,且从2020年至今一直坚持在评论区答疑,属实负责且认真。 17 | 18 | ## 课程资源 19 | 20 | - 课程网站: 21 | - 课程视频: 22 | - 课程课件: 23 | - 课程教材:计算机网络(自顶向下方法 第7版),机械工业出版社,2016 24 | -------------------------------------------------------------------------------- /docs/软件工程/17803.md: -------------------------------------------------------------------------------- 1 | # CMU 17-803: Empirical Methods 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:CMU 6 | - 先修要求:面向从事软件工程实证研究的博士生开设,虽然没有硬性先修要求但最好有一定的计算机基础 7 | - 编程语言:不限 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 这门课专注于一个相对“陌生”的领域——包括但不限于软件工程领域的实证研究,由 [Bogdan Vasilescu](https://bvasiles.github.io/) 讲授,他在实证研究和开源软件研究方面非常深入。 12 | 13 | 这门课是 CMU 为从事该方向研究的博士生开设的,涵盖一系列定性与定量研究方法,如访谈、定性编码、调查设计以及多种数据统计分析方法,帮助学生了解、学习与从事实证研究。课程还会介绍挖掘和整合 GitHub 和 Stack Overflow 等软件存储库中的数据,并运用统计建模、社交网络分析等数据分析技术。 14 | 15 | 尽管计算机领域在传统上更注重工程技术,但对于工具、技术的设计、评估以及其可能的社会价值来说,实证研究是必需的。例如评估新算法或新技术框架,对某个领域进行相关数据分析,去了解从业者可能面临的挑战。这门课可以扩展和补充专注于技术领域视角。对于想要从事涉及软件工程领域实证研究的科研方向的朋友,这门课可能是一个很好的入门课程。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站:[Spring 2024](https://bvasiles.github.io/empirical-methods/), [Fall 2022](https://bvasiles.github.io/empirical-methods/fall-2022/), [Spring 2021](https://bvasiles.github.io/empirical-methods/spring-2021/), [Fall 2018](https://bvasiles.github.io/empirical-methods/fall-2018/) 20 | - 课程视频:[Spring 2024](https://www.youtube.com/playlist?list=PLuPUOEODcOmsiOxD7LK5EcQcj34Y9NwYg), [Fall 2022](https://www.youtube.com/watch?v=IDtePCle3Qc) 21 | - 课程教材:未公开,每节课前会有阅读材料 22 | - 课程作业:未公开 23 | 24 | ## 资源汇总 25 | 26 | 这门课中用到的所有资源都汇总在 [bvasiles/empirical-methods - GitHub](https://github.com/bvasiles/empirical-methods) 中。 -------------------------------------------------------------------------------- /docs/软件工程/6031.md: -------------------------------------------------------------------------------- 1 | # MIT 6.031: Software Construction 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:MIT 6 | - 先修要求:掌握至少一门编程语言 7 | - 编程语言:Java 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 这门课的目标就是让学生学会如何写出高质量的代码,所谓高质量,则是满足下面三个目标(课程设计者原话复制,以防自己翻译曲解本意): 12 | 13 | > Safe from bugs. Correctness (correct behavior right now) and defensiveness (correct behavior in the future) are required in any software we build. 14 | > 15 | > Easy to understand. The code has to communicate to future programmers who need to understand it and make changes in it (fixing bugs or adding new features). That future programmer might be you, months or years from now. You’ll be surprised how much you forget if you don’t write it down, and how much it helps your own future self to have a good design. 16 | > 17 | > Ready for change. Software always changes. Some designs make it easy to make changes; others require throwing away and rewriting a lot of code. 18 | 19 | 为此,这门课的设计者们精心编写了一本书来阐释诸多软件构建的核心原则与前人总结下来的宝贵经验,内容细节到如何编写注释和函数 Specification,如何设计抽象数据结构以及诸多并行编程的内容,并且会让你在精心设计的 Java 编程项目里体验和练习这些编程模式。 20 | 21 | 2016年春季学期这门课开源了其所有编程作业的代码框架,而最新的课程教材可以在其最新的教学网站上找到,具体链接参见下方。 22 | 23 | ## 课程资源 24 | 25 | - 课程网站:[latest](https://web.mit.edu/6.031/), [Spring 2022](https://web.mit.edu/6.031/www/sp22/), [Spring 2021](https://web.mit.edu/6.031/www/sp21/), [Spring 2016](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-005-software-construction-spring-2016/) 26 | - 课程视频:无 27 | - 课程教材:参见课程网站的课程 notes 28 | - 课程作业:4 个编程作业 + 1 个 Project 29 | 30 | ## 资源汇总 31 | 32 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.031-software-construction - GitHub](https://github.com/PKUFlyingPig/MIT6.031-software-construction) 中。 33 | 34 | @pengzhangzhi 完成了这门课的作业并记录了笔记, 代码开源在 [pengzhangzhi/self-taught-CS/Software Construction - Github](https://github.com/pengzhangzhi/self-taught-CS/tree/main/Software%20Construction)。 35 | -------------------------------------------------------------------------------- /docs/软件工程/CS169.en.md: -------------------------------------------------------------------------------- 1 | # UCB CS169: software engineering 2 | 3 | ## Descriptions 4 | 5 | - Offered by: UC Berkeley 6 | - Prerequisites: None 7 | - Programming Languages: Ruby/JavaScript 8 | - Difficulty: 🌟🌟🌟🌟 9 | - Class Hour: 100 hours 10 | 11 | This is Berkeley's software engineering course. Unlike many traditional software engineering courses that emphasize UML diagrams, plans, and documents, this course adopts agile development methodologies and uses the cloud platform to provide software as a service. The instructors wrote a textbook [Software as a service](https://github.com/PKUFlyingPig/CS169-Software-Engineering/blob/master/saasbook.pdf) to explain the concept of SaaS and agile development. Also, there are plenty of programming assignments using Ruby + Rails framework. 12 | 13 | This course is available on [Edx](https://www.edx.org/), an online education platform sponsored by MIT and Harvard, where you can search for the course `Agile SaaS Development` and learn it yourself. The course content follows the textbook's order and takes you to build software step by step in an agile development way and deploy it on the cloud platform for free. 14 | 15 | ## Course Resources 16 | 17 | - Course Website: 18 | - Recordings: refer to the course website. 19 | - Textbook: [Software as a service](https://github.com/PKUFlyingPig/CS169-Software-Engineering/blob/master/saasbook.pdf) 20 | - Assignments: refer to the course website. 21 | 22 | ## Personal Resources 23 | 24 | All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS169-Software-Engineering - GitHub](https://github.com/PKUFlyingPig/CS169-Software-Engineering). 25 | -------------------------------------------------------------------------------- /docs/软件工程/CS169.md: -------------------------------------------------------------------------------- 1 | # UCB CS169: software engineering 2 | 3 | ## 课程简介 4 | 5 | - 所属大学:UC Berkeley 6 | - 先修要求:无 7 | - 编程语言:Ruby/JavaScript 8 | - 课程难度:🌟🌟🌟🌟 9 | - 预计学时:100 小时 10 | 11 | 伯克利的软件工程课程,不同于很多传统的软件工程课强调各种类图、文档设计 (plan and document 模式),这门课专注于最近逐渐流行起来的敏捷开发 (Agile Development)模式,利用云平台提供软件即服务 (software as a service)。为此,课程设计者编写了 [Software as a service][Software_as_a_service] 这本教材,通过 Ruby/Rails 框架来阐释 SaaS 这个概念,并且有丰富的配套编程练习。 12 | 13 | [Software_as_a_service]: https://github.com/PKUFlyingPig/CS169-Software-Engineering/blob/master/saasbook.pdf 14 | 15 | 这门课在 [Edx](https://www.edx.org/) 这个由 MIT 和 Harvard 大学发起的在线教育平台全资料开源,大家可以在 Edx 自行搜索 *Agile SaaS Development* 这门课程进行学习。课程内容基本按照教材的顺序带你一步步以敏捷开发的方式搭建一个软件并免费部署在云平台上。 16 | 17 | ## 课程资源 18 | 19 | - 课程网站: 20 | - 课程视频:参见 Edx 课程主页。 21 | - 课程教材:[Software as a service](https://github.com/PKUFlyingPig/CS169-Software-Engineering/blob/master/saasbook.pdf) 22 | - 课程作业:参见 Edx 课程主页。 23 | 24 | ## 资源汇总 25 | 26 | @PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS169-Software-Engineering - GitHub](https://github.com/PKUFlyingPig/CS169-Software-Engineering) 中。 27 | -------------------------------------------------------------------------------- /overrides/partials/comments.html: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | mkdocs-material==9.5.2 2 | mkdocs-minify-plugin==0.7.1 3 | mkdocs-git-revision-date-plugin 4 | jinja2==3.1.2 5 | mkdocs-static-i18n==1.2.0 6 | mkdocs-open-in-new-tab==1.0.8 7 | 8 | -------------------------------------------------------------------------------- /template.en.md: -------------------------------------------------------------------------------- 1 | # Course Code: Course Name 2 | 3 | ## Descriptions 4 | 5 | - Offered by: 6 | - Prerequisites: 7 | - Programming Languages: 8 | - Difficulty: 🌟🌟🌟 9 | - Class Hour: 10 | 11 | 19 | 20 | ## Course Resources 21 | 22 | - Course Website: 23 | - Recordings: 24 | - Textbooks: 25 | - Assignments: 26 | 27 | ## Personal Resources 28 | 29 | All the resources and assignments used by @XXX in this course are maintained in [user/repo - GitHub](https://github.com/user/repo). 30 | -------------------------------------------------------------------------------- /template.md: -------------------------------------------------------------------------------- 1 | # 课号:课程名称 2 | 3 | ## 课程简介 4 | 5 | - 所属大学: 6 | - 先修要求: 7 | - 编程语言: 8 | - 课程难度:🌟🌟🌟 9 | - 预计学时: 10 | 11 | 18 | 19 | ## 课程资源 20 | 21 | - 课程网站: 22 | - 课程视频: 23 | - 课程教材: 24 | - 课程作业: 25 | 26 | ## 资源汇总 27 | 28 | @XXX 在学习这门课中用到的所有资源和作业实现都汇总在 [user/repo - GitHub](https://github.com/user/repo) 中。 29 | 30 | ## 备注 31 | 32 | 编写文档时尽量遵守 [Markdown Rules][md_rules] 与 [Markdown 简体中文与西文混排要点][cn_en_mixed_typography],前者可以通过 VS Code 插件 *markdownlint* 提示并处理。 33 | 34 | [md_rules]: https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md 35 | [cn_en_mixed_typography]: https://github.com/selfteaching/markdown-writing-with-mixed-cn-en 36 | 37 | 正文中请删除该节。 38 | --------------------------------------------------------------------------------