[
  {
    "path": ".editorconfig",
    "content": "# http://editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 4\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.yml]\nindent_size = 2\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: ci\n\non:\n  push:\n    branches:\n      - master\n      - main\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n        with:\n          fetch-depth: 0\n\n      - uses: actions/setup-python@v2\n        with:\n          python-version: 3.x\n\n      - run: pip3 install -U -r requirements.txt\n      - run: mkdocs gh-deploy --force\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.vscode/\n\n/venv\n/site\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright © <2021> <copyright Yinmin Zhong>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n  <img src=./docs/images/title.png >\n</div>\n\n# CS 自学指南\n\n> _Everyone should enjoy CS if you have a good teacher to teach you a good course._\n\n<a href=\"https://trendshift.io/repositories/4643\" target=\"_blank\"><img src=\"https://trendshift.io/api/badge/repositories/4643\" alt=\"PKUFlyingPig%2Fcs-self-learning | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/></a>\n\n[![Website](https://img.shields.io/badge/website-csdiy.wiki-blue)](https://csdiy.wiki)\n[![License](https://img.shields.io/github/license/PKUFlyingPig/cs-self-learning)](https://github.com/PKUFlyingPig/cs-self-learning/blob/master/LICENSE)\n[![Issues](https://img.shields.io/github/issues/PKUFlyingPig/cs-self-learning)](https://github.com/PKUFlyingPig/cs-self-learning/issues)\n[![Stars](https://img.shields.io/github/stars/PKUFlyingPig/cs-self-learning)](https://github.com/PKUFlyingPig/cs-self-learning)\n\n新冠肆虐，网课当道，CS 爆火，这一系列的事件都让自学计算机成为了一种潮流。\n\n随着欧美众多名校将质量极高的计算机课程全部开源，自学 CS 成了一件可操作性极强的事情。毫不夸张地说，只要你有毅力和兴趣，自学的成果完全不亚于你在国内任何一所大学受到的本科 CS 教育（当然，这里单指计算机专业领域，大学带给你的显然不止是专业知识）。\n\n我很庆幸在自己大一的时候就选择了自学 CS 这条路，它让我爱上了计算机这门学科，也无比丰富了我的视野。\n\n但同时，自学这条路也有很多困难和阻力：课程繁多不知如何选择，资料零散甚至残缺，作业难度不知深浅，课内任务还需要花时间应付······这些主客观因素叠加到一起，使得好课虽多，却只能在收藏夹里吃灰。\n\n在大学的第四个年头，我想把这一路自学走来的经验和教训，把那些让我受益终身的课程记录下来，分享给大家，形成了这本 CS 自学指南，以期能给所有想自学计算机的朋友一点帮助。\n\n我的目标是让一个刚刚接触计算机的小白，可以完全凭借这些开源社区的优质资源，少走弯路，在 2-3 年内成长为一个有扎实的数学功底和代码能力，经历过数十个千行代码量的 Project 的洗礼，掌握至少 C/C++/Java/JS/Python/Go/Rust 等主流语言，对算法、电路、体系、网络、操统、编译、人工智能、机器学习、计算机视觉、自然语言处理、强化学习、密码学、信息论、博弈论、数值分析、统计学、分布式、数据库、图形学、Web 开发、云服务、超算等等方面均有所涉猎的全能程序员。此后，无论是选择科研还是就业，我相信你都会有相当的竞争力。\n\n你可以[在线免费阅读这本书](https://csdiy.wiki)。英文版请移步[这里](https://csdiy.wiki/en/)。\n\n## 如何成为贡献者\n\n一个人的力量终究是有限的，对于书中任意章节你若有想要补充的内容，欢迎各位提出 [Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork)。如果你想贡献一门新的课程，可以参考目前 repo 中的 [template](./template.md) 文件作为模版，并在 [mkdocs.yml](./mkdocs.yml) 文件中添加其 navigation，当然你还可以在 [CS 学习规划](./docs/CS学习规划.md) 里的对应模块为其添加言简意赅的导语。如果你有想推荐的书籍，请参考 [好书推荐](https://raw.githubusercontent.com/PKUFlyingPig/cs-self-learning/master/docs/%E5%A5%BD%E4%B9%A6%E6%8E%A8%E8%8D%90.md) 模块上方的注释按相应格式添加内容。\n\n对于中英混合排版的要点规范，可以参考[这个仓库](https://github.com/sparanoid/chinese-copywriting-guidelines/blob/master/README.zh-Hans.md)，我们将会对您的 Pull Request 做相应的校对，具体原因参见这个 [issue](https://github.com/PKUFlyingPig/cs-self-learning/issues/114)。\n\n本书支持英文版，因此贡献的内容需要提供对应的英文翻译，具体流程可以参考这个 [issue](https://github.com/PKUFlyingPig/cs-self-learning/issues/222)。\n\n同时由于个人水平有限，书中难免有笔误甚至概念错误之处，也请各位不吝赐教，在 issue 中提出来。\n\n## 关于交流社区的建立\n\n本书支持页面评论功能，因此如果你想自学某课程，可以自己建立群聊后（QQ 微信皆可）在对应的课程页面下方发表评论，注明你的学习目标以及加入交流群的途径。此外，过去已有不少朋友在 issue 里建立了类似群聊，可以自行选择直接加入。\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=PKUFlyingPig/cs-self-learning&type=Timeline)](https://star-history.com/#PKUFlyingPig/cs-self-learning&Timeline)\n\n## ✨ 鸣谢\n\n特别感谢 @[AlfredThiel](https://github.com/AlfredThiel) 为项目制作了精美的 Logo。\n\n<!--  support by https://contrib.rocks -->\n<a href=\"https://github.com/PKUFlyingPig/cs-self-learning/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=PKUFlyingPig/cs-self-learning\"/>\n</a>\n\n## 许可\n\n项目贡献者编写的部分依照 [MIT LICENSE](https://www.tawesoft.co.uk/kb/article/mit-license-faq)。\n\n其余部分（包括但不限于书中提到的课程资源、开源书籍以及视频内容）遵循原作者规定的许可。\n"
  },
  {
    "path": "docs/CNAME",
    "content": "csdiy.wiki"
  },
  {
    "path": "docs/CS学习规划.en.md",
    "content": "# A Reference Guide for CS Learning\n\nThe field of computer science is vast and complex, with a seemingly endless sea of knowledge. Each specialized area can lead to limitless learning if pursued deeply. Therefore, a clear and definite study plan is very important. I've taken some detours in my years of self-study and finally distilled the following content for your reference.\n\nBefore you start learning, I highly recommend a popular science video series for beginners: [Crash Course: Computer Science](https://www.bilibili.com/video/BV1EW411u7th). In just 8 hours, it vividly and comprehensively covers various aspects of computer science: the history of computers, how computers operate, the important modules that make up a computer, key ideas in computer science, and so on. As its slogan says, *Computers are not magic!* I hope that after watching this video, everyone will have a holistic perception of computer science and embark on the detailed and in-depth learning content below with interest.\n\n## Essential Tools\n\n> As the saying goes: sharpening your axe will not delay your job of chopping wood. If you are a pure beginner in the world of computers, learning some tools will make you more efficient.\n\n**Learn to ask questions**: You might be surprised that asking questions is the first one listed? I think in the open-source community, learning to ask questions is a very important ability. It involves two aspects. First, it indirectly cultivates your ability to solve problems independently, as the cycle of forming a question, describing it, getting answers from others, and then understanding the response is quite long. If you expect others to remotely assist you with every trivial issue, then the world of computers might not suit you. Second, if after trying, you still can't solve a problem, you can seek help from the open-source community. But at that point, how to concisely explain your situation and goal to others becomes particularly important. I recommend reading the article [How To Ask Questions The Smart Way](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md), which not only increases the probability and efficiency of solving your problems but also keeps those who provide answers in the open-source community in a good mood.\n\n**Learn to be a hacker**: [MIT-Missing-Semester](./编程入门/MIT-Missing-Semester.md) covers many useful tools for a hacker and provides detailed usage instructions. I strongly recommend beginners to study this course. However, one thing to note is that the course occasionally refers to terms related to the development process. Therefore, it is recommended to study it at least after completing an introductory computer science course.\n\n**[GFW](./必学工具/翻墙.md)**: For well-known reasons, sites like Google and GitHub are not accessible in mainland China. However, in many cases, Google and StackOverflow can solve 99% of the problems encountered during development. Therefore, learning to use a VPN is almost an essential skill for a mainland CSer. (Considering legal issues, the methods provided in this book are only applicable to users with a Peking University email address).\n\n**Command Line**: Proficiency in using the command line is often overlooked or considered difficult to master, but in reality, it greatly enhances your flexibility and productivity as an engineer. [The Art of Command Line](https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md) is a classic tutorial that started as a question on Quora, but with the contribution of many experts, it has become a top GitHub project with over 100,000 stars, translated into dozens of languages. The tutorial is not long, and I highly recommend everyone to read it repeatedly and internalize it through practice. Also, mastering shell script programming should not be overlooked, and you can refer to this [tutorial](https://www.shellscript.sh/).\n\n**IDE (Integrated Development Environment)**: Simply put, it's where you write your code. The importance of an IDE for a programmer goes without saying, but many IDEs are designed for large-scale projects and are quite bulky and overly feature-rich. Nowadays, some lightweight text editors with rich plugin ecosystems can basically meet the needs of daily lightweight programming. My personal favorites are VS Code and Sublime (the former has a very simple plugin configuration, while the latter is a bit more complex but aesthetically pleasing). Of course, for large projects, I would still use slightly heavier IDEs, such as Pycharm (Python), IDEA (Java), etc. (Disclaimer: all IDEs are the best in the world).\n\n**[Vim](./必学工具/Vim.md)**: A command-line editor. Vim has a somewhat steep learning curve, but mastering it, I think, is very necessary because it will greatly improve your development efficiency. Most modern IDEs also support Vim plugins, allowing you to retain the coolness of a geek while enjoying a modern development environment.\n\n**[Emacs](./必学工具/Emacs.md)**: A classic editor that stands alongside Vim, with equally high development efficiency and more powerful expandability. It can be configured as a lightweight editor or expanded into a custom IDE, and even more sophisticated tricks.\n\n**[Git](./必学工具/Git.md)**: A version control tool for your project. Git, created by the father of Linux, Linus, is definitely one of the must-have tools for every CS student.\n\n**[GitHub](./必学工具/GitHub.md)**: A code hosting platform based on Git. The world's largest open-source community and a gathering place for CS experts.\n\n**[GNU Make](./必学工具/GNU_Make.md)**: An engineering build tool. Proficiency in GNU Make will help you develop a habit of modularizing your code and familiarize you with the compilation and linking processes of large projects.\n\n**[CMake](./必学工具/CMake.md)**: A more powerful build tool than GNU Make, recommended for study after mastering GNU Make.\n\n**[LaTex](./必学工具/LaTeX.md)**: <del>Pretentious</del> Paper typesetting tool.\n\n**[Docker](./必学工具/Docker.md)**: A lighter-weight software packaging and deployment tool compared to virtual machines.\n\n**[Practical Toolkit](./必学工具/tools.md)**: In addition to the tools mentioned above that are frequently used in development, I have also collected many practical and interesting free tools, such as download tools, design tools, learning websites, etc.\n\n**[Thesis](./必学工具/thesis.md)**: Tutorial for writing graduation thesis in Word.\n\n## Recommended Books\n\n> I believe a good textbook should be people-oriented, rather than a display of technical jargon. It's certainly important to tell readers \"what it is,\" but a better approach would be for the author to integrate decades of experience in the field into the book and narratively convey to the reader \"why it is\" and what should be done in the future.\n\n[Link here](./好书推荐.md)\n\n## Environment Setup\n\n> What you think of as development — coding frantically in an IDE for hours.\n>\n> Actual development — setting up the environment for several days without starting to code.\n\n### PC Environment Setup\n\nIf you are a Mac user, you're in luck, as this [guide](https://sourabhbajaj.com/mac-setup/) will walk you through setting up the entire development environment. If you are a Windows user, thanks to the efforts of the open-source community, you can enjoy a similar experience with [Scoop](./必学工具/Scoop.md).\n\nAdditionally, you can refer to an [environment setup guide][guide] inspired by [6.NULL MIT-Missing-Semester](./编程入门/MIT-Missing-Semester.md), focusing on terminal beautification. It also includes common software sources (such as GitHub, Anaconda, PyPI) for acceleration and replacement, as well as some IDE configuration and activation tutorials.\n\n[guide]: https://taylover2016.github.io/%E6%96%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E6%89%8B%E6%8C%87%E5%8D%97%EF%BC%88%E6%96%B0%E6%89%8B%E5%90%91%EF%BC%89/index.html\n\n### Server-Side Environment Setup\n\nServer-side operation and maintenance require basic use of Linux (or other Unix-like systems) and fundamental concepts like processes, devices, networks, etc. Beginners can refer to the [Linux 101](https://101.lug.ustc.edu.cn/) online notes compiled by the Linux User Association of the University of Science and Technology of China. If you want to delve deeper into system operation and maintenance, you can refer to the [Aspects of System Administration](https://stevens.netmeister.org/615/) course.\n\nAdditionally, if you need to learn a specific concept or tool, I recommend a great GitHub project, [DevOps-Guide](https://github.com/Tikam02/DevOps-Guide), which covers a lot of foundational knowledge and tutorials in the administration field, such as Docker, Kubernetes, Linux, CI-CD, GitHub Actions, and more.\n\n## Course Map\n\n> As mentioned at the beginning of this chapter, this course map is merely a **reference guide** for course planning, from my perspective as an undergraduate nearing graduation. I am acutely aware that I neither have the right nor the capability to preach to others about “how one should learn”. Therefore, if you find any issues with the course categorization and selection below, I fully accept and deeply apologize for them. You can tailor your own course map in the next section [Customize Your Own Course Map](#yourmap).\n\nApart from courses labeled as *basic* or *introductory*, there is no explicit sequence in the following categories. As long as you meet the prerequisites for a course, you are free to choose any course according to your needs and interests.\n\n### Mathematical Foundations\n\n#### Calculus and Linear Algebra\n\nAs a freshman, mastering calculus and linear algebra is as important as learning to code. This point has been reiterated countless times by predecessors, but I feel compelled to emphasize it again: mastering calculus and linear algebra is really important! You might complain that these subjects are forgotten after exams, but I believe that indicates a lack of deep understanding of their essence. If you find the content taught in class to be obscure, consider referring to MIT’s [Calculus Course](./数学基础/MITmaths.md) and [18.06: Linear Algebra](./数学基础/MITLA.md) course notes. For me, they greatly deepened my understanding of the essence of calculus and linear algebra. Also, I highly recommend the maths YouTuber [**3Blue1Brown**](https://www.youtube.com/c/3blue1brown), whose channel features videos explaining the core of mathematics with vivid animations, offering both depth and breadth of high quality.\n\n#### Introduction to Information Theory\n\nFor computer science students, gaining some foundational knowledge in information theory early on is beneficial. However, most information theory courses are targeted towards senior or even graduate students, making them quite inaccessible to beginners. MIT’s [6.050J: Information theory and Entropy](./数学基础/information.md) is tailored for freshmen, with almost no prerequisites, covering coding, compression, communication, information entropy, and more, which is very interesting.\n\n### Advanced Mathematics\n\n#### Discrete Mathematics and Probability Theory\n\nSet theory, graph theory, and probability theory are essential tools for algorithm derivation and proof, as well as foundations for more advanced mathematical courses. However, the teaching of these subjects often falls into a rut of being overly theoretical and formalistic, turning classes into mere recitations of theorems and conclusions without helping students grasp the essence of these theories. If theory teaching can be interspersed with examples of algorithm application, students can expand their algorithm knowledge while appreciating the power and charm of theory.\n\n[UCB CS70: Discrete Math and Probability Theory](./数学进阶/CS70.md) and [UCB CS126: Probability Theory](./数学进阶/CS126.md) are UC Berkeley’s probability courses. The former covers the basics of discrete mathematics and probability theory, while the latter delves into stochastic processes and more advanced theoretical content. Both emphasize the integration of theory and practice and feature abundant examples of algorithm application, with the latter including numerous Python programming assignments to apply probability theory to real-world problems.\n\n#### Numerical Analysis\n\nFor computer science students, developing computational thinking is crucial. Modeling and discretizing real-world problems, and simulating and analyzing them on computers, are vital skills. Recently, the [Julia](https://julialang.org/) programming language, developed by MIT, has become popular in the field of numerical computation with its C-like speed and Python-friendly syntax. Many MIT mathematics courses have started using Julia as a teaching tool, presenting complex mathematical theories through clear and intuitive code.\n\n[ComputationalThinking](https://computationalthinking.mit.edu/Spring21/) is an introductory course in computational thinking offered by MIT. All course materials are open source and accessible on the course website. Using the Julia programming language, the course covers image processing, social science and data science, and climatology modeling, helping students understand algorithms, mathematical modeling, data analysis, interactive design, and graph presentation. The course content, though not difficult, profoundly impressed me with the idea that the allure of science lies not in obscure theories or jargon but in presenting complex concepts through vivid examples and concise, deep language.\n\nAfter completing this experience course, if you’re still eager for more, consider MIT’s [18.330: Introduction to Numerical Analysis](./数学进阶/numerical.md). This course also uses Julia for programming assignments but is more challenging and in-depth. It covers floating-point encoding, root finding, linear systems, differential equations, and more, with the main goal of using discrete computer representations to estimate and approximate continuous mathematical concepts. The course instructor has also written an accompanying open-source textbook, [Fundamentals of Numerical Computation](https://fncbook.github.io/fnc/frontmatter.html), which includes abundant Julia code examples and rigorous formula derivations.\n\nIf you’re still not satisfied, MIT’s graduate course in numerical analysis, [18.335: Introduction to Numerical Methods][18.335], is also available for reference.\n\n[18.335]: https://ocw.mit.edu/courses/mathematics/18-335j-introduction-to-numerical-methods-spring-2019/index.htm\n\n#### Differential Equations\n\nWouldn't it be cool if the motion and development of everything in the world could be described and depicted with equations? Although differential equations are not a mandatory part of any CS curriculum, I believe mastering them provides a new perspective to view the world.\n\nSince differential equations often involve complex variable functions, you can refer to [MIT18.04: Complex Variables Functions][MIT18.04] course notes to fill in prerequisite knowledge.\n\n[MIT18.04]: https://ocw.mit.edu/courses/mathematics/18-04-complex-variables-with-applications-spring-2018/\n\n[MIT18.03: Differential Equations][MIT18.03] mainly covers the solution of ordinary differential equations, and on this basis, [MIT18.152: Partial Differential Equations][MIT18.152] dives into the modeling and solving of partial differential equations. With the powerful tool of differential equations, you will gain enhanced capabilities in modeling real-world problems and intuitively grasping the essence among various noisy variables.\n\n[MIT18.03]: https://ocw.mit.edu/courses/mathematics/18-03sc-differential-equations-fall-2011/unit-i-first-order-differential-equations/\n[MIT18.152]: https://ocw.mit.edu/courses/mathematics/18-152-introduction-to-partial-differential-equations-fall-2011/index.htm\n\n### Advanced Mathematical Topics\n\nAs a computer science student, I often hear arguments about the uselessness of mathematics. While I neither agree nor have the authority to oppose such views, if everything is forcibly categorized as useful or useless, it indeed becomes quite dull. Therefore, the following advanced mathematics courses, aimed at senior and even graduate students, are available for those interested.\n\n#### Convex Optimization\n\n[Standford EE364A: Convex Optimization](./数学进阶/convex.md)\n\n#### Information Theory\n\n[MIT6.441: Information Theory](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-441-information-theory-spring-2016/syllabus/)\n\n#### Applied Statistics\n\n[MIT18.650: Statistics for Applications](https://ocw.mit.edu/courses/mathematics/18-443-statistics-for-applications-spring-2015/index.htm)\n\n#### Elementary Number Theory\n\n[MIT18.781: Theory of Numbers](https://ocw.mit.edu/courses/mathematics/18-781-theory-of-numbers-spring-2012/index.htm)\n\n#### Cryptography\n\n[Standford CS255: Cryptography](http://crypto.stanford.edu/~dabo/cs255/)\n\n### Programming Fundamentals\n\n> Languages are tools, and you choose the right tool for the right job. Since there's no universally perfect tool, there's no universally perfect language.\n\n#### General\n\n- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)\n- [Harvard CS50: This is CS50x](编程入门/C/CS50.md)\n\n#### Java\n\n- [MIT 6.092: Introduction To Programming In Java](编程入门/Java/MIT%206.092.md)\n\n#### Python\n\n- [CS50P: CS50's Introduction to Programming with Python](编程入门/Python/CS50P.md)\n- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/Python/CS61A.md)\n- [MIT6.100L: Introduction to CS and Programming using Python](编程入门/Python/MIT6.100L.md)\n\n#### C++\n\n- [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)\n- [Stanford CS106L: Standard C++ Programming](编程入门/cpp/CS106L.md)\n\n#### Rust\n\n- [Stanford CS110L: Safety in Systems Programming](编程入门/Rust/CS110L.md)\n\n#### OCaml\n\n- [Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful](编程入门/Functional/CS3110.md)\n\n### Electronics Fundamentals\n\n#### Basics of Circuits\n\nFor computer science students, understanding basic circuit knowledge and experiencing the entire pipeline from sensor data collection to data analysis and algorithm prediction can be very helpful for future learning and developing computational thinking. [EE16A&B: Designing Information Devices and Systems I&II](./电子基础/EE16.md) at UC Berkeley are introductory courses for freshmen in electrical engineering. EE16A focuses on collecting and analyzing data from the real environment through circuits, while EE16B focuses on analyzing these collected data to make predictive actions.\n\n#### Signals and Systems\n\nSignals and Systems is a course I find very worthwhile. Initially, I studied it out of curiosity about Fourier Transform, but after completing it, I was amazed at how Fourier Transform provided a new perspective to view the world, just like differential equations, immersing you in the elegance and magic of precisely depicting the world with mathematics.\n\n[MIT 6.003: Signal and Systems][MIT6.003] provides all course recordings, written assignments, and answers. You can also check out this course's [ancient version](电子基础/Signals_and_Systems_AVO.md).\n\n[MIT6.003]: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-003-signals-and-systems-fall-2011/lecture-videos/lecture-1-signals-and-systems/\n\n[UCB EE120: Signal and Systems](电子基础/signal.md) has very well-written notes on Fourier Transform and provides many interesting Python programming assignments to practically apply the theories and algorithms of signals and systems.\n\n### Data Structures and Algorithms\n\nAlgorithms are the core of computer science and the foundation for almost all professional courses. How to abstract real-world problems into algorithmic problems mathematically and solve them under time and memory constraints using appropriate data structures is the eternal theme of algorithm courses. If you are fed up with your teacher's rote teaching, I highly recommend UC Berkeley's [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) and Princeton's [Coursera: Algorithms I & II](数据结构与算法/Algo.md). Both courses are taught in a deep yet simple manner and have rich and interesting programming experiments to integrate theory with knowledge.\n\nBoth of these courses are based on Java. If you prefer C/C++, you can refer to Stanford's data structure and basic algorithm course [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md). For those who prefer Python, you can learn MIT's introductory algorithm course [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md).\n\nFor those interested in more advanced algorithms and NP problems, consider UC Berkeley's course on algorithm design and analysis [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md) or MIT's advanced algorithms course [MIT 6.046: Design and Analysis of Algorithms](数据结构与算法/6.046.md).\n\n### Software Engineering\n\n#### Introductory Course\n\nThere is a fundamental difference between “working” code and high-quality industrial code. Therefore, I highly recommend senior students to take [MIT 6.031: Software Construction](软件工程/6031.md). Based on Java, this course teaches how to write high-quality code that is **bug-resistant, clear, and easy to maintain and modify** with rich and detailed reading materials and well-designed programming exercises. From macro data structure design to minor details like how to write comments, following these details and experiences summarized by predecessors can greatly benefit your future programming career.\n\n\n\n#### Professional Course\n\nOf course, if you want to systematically take a software engineering course, I recommend UC Berkeley’s [UCB CS169: Software Engineering](软件工程/CS169.md). However, unlike most software engineering courses, this course does not involve the traditional **design and document** model that emphasizes various class diagrams, flowcharts, and document design. Instead, it adopts the **Agile Development** model, which has become popular in recent years, featuring small team rapid iterations and the **Software as a Service** model using cloud platforms.\n\n### Computer Architecture\n\n#### Introductory Course\n\nSince childhood, I've always heard that the world of computers is made of 0s and 1s, which I didn't understand but was deeply impressed by. If you also have this curiosity, consider spending one to two months learning the barrier-free computer course [Coursera: Nand2Tetris](体系结构/N2T.md). This comprehensive course starts from 0s and 1s, allowing you to build a computer by hand and run a Tetris game on it. It covers compilation, virtual machines, assembly, architecture, digital circuits, logic gates, etc., from top to bottom, from software to hardware. Its difficulty is carefully designed to omit many complex details of modern computers, extracting the most core essence, aiming to make it understandable to everyone. In lower levels, establishing a bird's-eye view of the entire computer system is very beneficial.\n\n#### Professional Course\n\nOf course, if you want to delve into the complex details of modern computer architecture, you still need to take a university-level course [UCB CS61C: Great Ideas in Computer Architecture](体系结构/CS61C.md). This course emphasizes practice, and you will hand-write assembly to construct neural networks in projects, build a CPU from scratch, and more, all of which will give you a deeper understanding of computer architecture, beyond the monotony of \"fetch, decode, execute, memory access, write back.\"\n\n### Introduction to Computer Systems\n\nComputer systems are a vast and profound topic. Before delving into a specific area, having a macro conceptual understanding of each field and some general design principles will reinforce core and even philosophical concepts in your subsequent in-depth study, rather than being shackled by complex internal details and various tricks. In my opinion, the key to learning systems is to grasp these core concepts to design and implement your own systems.\n\n[MIT6.033: System Engineering](http://web.mit.edu/6.033/www/) is MIT's introductory course to systems, covering topics like operating systems, networks, distributed systems, and system security. In addition to the theory, this course also teaches some writing and expression skills, helping you learn how to design, introduce, and analyze your own systems. The accompanying textbook *Principles of Computer System Design: An Introduction* is also very well written and recommended for reading.\n\n[CMU 15-213: Introduction to Computer System](计算机系统基础/CSAPP.md) is CMU’s introductory systems course, covering architecture, operating systems, linking, parallelism, networks, etc., with both breadth and depth. The accompanying textbook *Computer Systems: A Programmer's Perspective* is also of very high quality and strongly recommended for reading.\n\n### Operating Systems\n\n> There’s nothing like writing your own kernel to deepen your understanding of operating systems.\n\nOperating systems provide a set of elegant abstractions to virtualize various complex underlying hardware, providing rich functional support for all application software. Understanding the design principles and internal mechanisms of operating systems is greatly beneficial for a programmer who is not satisfied with just being a coder. Out of love for operating systems, I have taken many operating system courses in different colleges, each with its own focus and merits. You can choose based on your interests.\n\n[MIT 6.S081: Operating System Engineering](操作系统/MIT6.S081.md), offered by the famous PDOS lab at MIT, features 11 projects that modify an elegantly implemented Unix-like operating system xv6. This course made me realize that systems is not about reading PPTs; it's about writing tens of thousands of lines of code.\n\n[UCB CS162: Operating System](操作系统/CS162.md), UC Berkeley’s operating system course, uses the same Project as Stanford — an educational operating system, Pintos. As the teaching assistant for Peking University’s 2022 and 2023 Spring Semester Operating Systems Course, I introduced and improved this Project. The course resources are fully open-sourced, with details on [the course website](https://pku-os.github.io).\n\n[NJU: Operating System Design and Implementation](操作系统/NJUOS.md), offered by Professor Yanyan Jiang at Nanjing University, provides an in-depth and accessible explanation of various operating system concepts, combining a unique system perspective with rich code examples. All course content is in Chinese, making it very convenient for students.\n\n[HIT OS: Operating System](操作系统/HITOS.md), taught by Professor Zhijun Li at Harbin Institute of Technology, is a Chinese course on operating systems. Based on the Linux 0.11 source code, the course places great emphasis on code practice, explaining the intricacies of operating systems from the student's perspective.\n\n### Parallel and Distributed Systems\n\nIn recent years, the most common phrase heard in CS lectures is \"Moore's Law is coming to an end.\" As single-core capabilities reach their limits, multi-core and many-core architectures are becoming increasingly important. The changes in hardware necessitate adaptations and changes in the upper-level programming logic. Writing parallel programs has nearly become a mandatory skill for programmers to fully utilize hardware performance. Meanwhile, the rise of deep learning has brought unprecedented demands on computing power and storage, making the deployment and optimization of large-scale clusters a hot topic.\n\n#### Parallel Computing\n\n[CMU 15-418 / Stanford CS149: Parallel Computing](并行与分布式系统/CS149.md) takes you deep into the design principles and trade-offs of modern parallel computing architectures. The course teaches you how to fully leverage hardware resources and software programming frameworks—such as CUDA, MPI, and OpenMP—to write high-performance parallel programs.\n\n#### Distributed Systems\n\n[MIT 6.824: Distributed Systems](并行与分布式系统/MIT6.824.md), like MIT 6.S081, is offered by MIT’s renowned PDOS (Parallel and Distributed Operating Systems) lab. The course is taught by Professor Robert Morris, who was once a legendary hacker—famously known for creating the first computer worm, the Morris Worm.\n\nEach lecture focuses on an in-depth reading of a classic paper in the field of distributed systems, through which the course conveys essential principles and key techniques for designing and implementing distributed systems. The course is also famous for its challenging projects: over the course of four progressively difficult programming assignments, students build a key-value store framework based on the Raft consensus algorithm. These projects offer a firsthand experience of the randomness and complexity brought by concurrency and distribution—often felt most acutely during painful debugging sessions.\n\n### System Security\n\nWhether you chose computer science because of a youthful dream of becoming a hacker, the reality is that becoming a hacker is a long and difficult journey.\n\n#### Theoretical Courses\n\n[UCB CS161: Computer Security](系统安全/CS161.md) at UC Berkeley covers stack attacks, cryptography, website security, network security, and more.\n\n[SU SEED Labs](系统安全/SEEDLabs.md) at Syracuse University, supported by a $1.3 million grant from the NSF, has developed hands-on experimental exercises (called SEED Labs) for cybersecurity education. The course emphasizes both theoretical teaching and practical exercises, including detailed open-source lectures, video tutorials, textbooks (printed in multiple languages), and a ready-to-use virtual machine and Docker-based attack-defense environment. This project is currently used by 1,050 institutions worldwide and covers a wide range of topics in computer and information security, including software security, network security, web security, operating system security, and mobile app security.\n\n#### Practical Courses\n\nAfter mastering this theoretical knowledge, it's essential to cultivate and hone these \"hacker skills\" in practice. [CTF competitions](https://ctf-wiki.org/) are a popular way to comprehensively test your understanding and application of computer knowledge in various fields. Peking University also successfully held the [0th and 1st editions](https://geekgame.pku.edu.cn/), encouraging participation to improve skills through practice. Here are some resources I use for learning (and relaxing):\n\n- [CTF-wiki](https://ctf-wiki.org/)\n- [CTF-101](https://ctf101.org/)\n- [Hacker-101](https://ctf.hacker101.com/)\n\n### Computer Networks\n\n> There’s nothing like writing your own TCP/IP protocol stack to deepen your understanding of computer networks.\n\nThe renowned [Stanford CS144: Computer Network](计算机网络/CS144.md) includes 8 projects that guide you in implementing the entire TCP/IP protocol stack.\n\nIf you're mainly interested in gaining a theoretical understanding of computer networks, it's recommended to read the [textbook](https://textbook.cs168.io/) that accompanies the course [UCB CS168](计算机网络/CS168.md).\n\n\n### Database Systems\n\n> There’s nothing like building your own relational database to deepen your understanding of database systems.\n\nCMU's famous database course [CMU 15-445: Introduction to Database System](数据库系统/15445.md) guides you through 4 projects to add various functionalities to the educational relational database [bustub](https://github.com/cmu-db/bustub). The experimental evaluation framework is also open-source, making it very suitable for self-learning. The course experiments also use many new features of C++11, offering a great opportunity to strengthen C++ coding skills.\n\nBerkeley, as the birthplace of the famous open-source database PostgreSQL, has its own course [UCB CS186: Introduction to Database System](数据库系统/CS186.md) where you will implement a relational database in Java that supports SQL concurrent queries, B+ tree indexing, and fault recovery.\n\n### Compiler Theory\n\n> There’s nothing like writing your own compiler to deepen your understanding of compilers.\n\n[Stanford CS143: Compilers](编译原理/CS143.md) guides you through the process of writing a compiler.\n\n### Web Development\n\nFront-end and back-end development are often overlooked in standard computer science curricula, but in reality, having these skills can be extremely beneficial—for example, creating your own personal website or building a polished demo page for a course project.\n\nIf you're looking for a quick, two-week crash course, I recommend the [MIT Web Development Course](Web开发/mitweb.md). For a more comprehensive and structured learning experience, check out [Stanford CS142: Web Applications](Web开发/CS142.md).\n\n### Computer Graphics\n\nI personally don't have much background in computer graphics, so I've collected a selection of high-quality courses recommended by the community for those interested in exploring the field.\n\n- [Stanford CS148](计算机图形学/CS148.md)\n- [Games101](计算机图形学/GAMES101.md)\n- [Games103](计算机图形学/GAMES103.md)\n- [Games202](计算机图形学/GAMES202.md)\n\n### Data Science\n\nData science, machine learning, and deep learning are closely related, with a focus on practical application. Berkeley's [UCB Data100: Principles and Techniques of Data Science](数据科学/Data100.md) lets you master various data analysis tools and algorithms through extensive programming exercises. The course guides you through extracting desired results from massive datasets and making predictions about future data or user behavior. For those looking to learn industrial-level data mining and analysis techniques, Stanford's big data mining course [CS246: Mining Massive Data Sets](https://web.stanford.edu/class/cs246/) is an option.\n\n### Artificial Intelligence\n\nArtificial intelligence has been one of the hottest fields in computer science over the past decade. If you're not content with just hearing about AI advancements in the media and want to delve into the subject, I highly recommend Harvard's renowned CS50 series AI course [Harvard CS50: Introduction to AI with Python](人工智能/CS50.md). The course is concise and covers several major branches of traditional AI, supplemented with rich and interesting Python programming exercises to reinforce your understanding of AI algorithms. However, the content is somewhat simplified for online learners and doesn't delve into deep mathematical theories. For a more systematic and in-depth study, consider an undergraduate-level course like Berkeley's [UCB CS188: Introduction to Artificial Intelligence](人工智能/CS188.md). This course's projects feature the classic game \"Pac-Man,\" allowing you to use AI algorithms to play the game, which is very fun.\n\n### Machine Learning\n\nThe most significant recent progress in the field of machine learning is the emergence of deep learning, a branch based on deep neural networks. However, many algorithms based on statistical learning are still widely used in data analysis. If you're new to machine learning and don't want to get bogged down in complex mathematical proofs, start with Andrew Ng's (Enda Wu) [Coursera: Machine Learning](机器学习/ML.md). This course is well-known in the field of machine learning, and Enda Wu, with his profound theoretical knowledge and excellent presentation skills, makes many complex algorithms accessible and practical. The accompanying assignments are also of high quality, helping you get started quickly.\n\nHowever, completing this course will only give you a general understanding of the field of machine learning. To truly understand the mathematical principles behind these \"magical\" algorithms or to engage in related research, you need a more \"mathematical\" course, such as [Stanford CS229: Machine Learning](机器学习/CS229.md) or [UCB CS189: Introduction to Machine Learning](机器学习/CS189.md).\n\nIf you plan to pursue scientific research in machine learning theory, you can refer to the [advanced learning roadmap](./机器学习进阶/roadmap.md) shared by [Yao Fu](https://franxyao.github.io/), which includes more in-depth, graduate-level courses.\n\n\n### Deep Learning\n\nThe popularity of AlphaGo a few years ago brought deep learning to the public eye, leading many universities to establish related majors. Many other areas of computer science also use deep learning technology for research, so regardless of your field, you will likely encounter some needs related to neural networks and deep learning. For a quick introduction, I again recommend Andrew Ng's (Enda Wu) [Coursera: Deep Learning](深度学习/CS230.md), a top-rated course on Coursera. Additionally, if you find English-language courses challenging, consider Professor Hongyi Li's course [National Taiwan University: Machine Learning](深度学习/LHY.md). Although titled \"Machine Learning,\" this course covers almost all areas of deep learning and is very comprehensive, making it suitable for getting a broad overview of the field. The professor is also very humorous, with frequent witty remarks in class.\n\nDue to the rapid development of deep learning, there are now many research branches. For further in-depth study, consider the following representative courses:\n\nIf you want rigorous fundamentals, start with CMU 11-785: it is dense, practical, and has very little filler content. MIT 6.7960 provides broader coverage beyond mainstream LLM topics, including CV-oriented material, and its assignments/projects are feasible for self-learners. NYU DLSP21 is especially notable because it is taught by Yann LeCun, offering a rare public opportunity to follow a full deep learning course from him.\n\n#### Fundamentals and Breadth\n\n- [CMU 11-785: Introduction to Deep Learning](深度学习/CMU11-785.md)\n- [MIT 6.7960: Deep Learning](深度学习/MIT6-7960.md)\n- [NYU DLSP21: NYU Deep Learning Spring 2021](深度学习/NYU-DLSP21.md)\n\n#### Computer Vision\n\n- [UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision](深度学习/EECS498-007.md)\n- [Stanford CS231n: CNN for Visual Recognition](深度学习/CS231.md)\n\n#### Natural Language Processing\n\n- [Stanford CS224n: Natural Language Processing](深度学习/CS224n.md)\n\n#### Graph Neural Networks\n\n- [Stanford CS224w: Machine Learning with Graphs](深度学习/CS224w.md)\n\n#### Reinforcement Learning\n\n- [UCB CS285: Deep Reinforcement Learning](深度学习/CS285.md)\n\n### Deep Learning Systems\n\nAs deep learning models grow in importance and demand increasing computational resources, optimizing the underlying systems for training and inference has become increasingly critical. For those looking to enter this field, a highly recommended resource is [CMU 10-414/714: Deep Learning Systems](./机器学习系统/CMU10-414.md). This course provides a comprehensive \"full-stack\" understanding of deep learning systems—from high-level architectural design of modern frameworks, to the principles and implementation of automatic differentiation, down to low-level hardware acceleration and real-world deployment.\n\nTo deepen theoretical understanding, students are tasked with building a deep learning library from scratch, called Needle, as part of the coursework. This library supports automatic differentiation on computational graphs, GPU-based acceleration, and includes modules for loss functions, data loaders, and optimizers. On top of this, students will implement several common neural network architectures including CNNs, RNNs, LSTMs, and Transformers.\n\nFor those with foundational knowledge, the next step would be to explore [MIT 6.5940: TinyML and Efficient Deep Learning Computing](./机器学习系统/EML.md), taught by [Professor Song Han](https://hanlab.mit.edu/songhan). This course dives into techniques for making neural networks more efficient, such as pruning, quantization, distillation, and neural architecture search. It also covers cutting-edge system optimizations for advanced models, including large language models.\n\n### Deep Generative Models\n\nWith the explosive popularity of large language models, understanding the principles behind them is essential to staying at the forefront of the field. You can refer to my recommended [learning roadmap](./深度生成模型/roadmap.md) for a guided approach to studying this area.\n\n## Customize Your Course Map\n\n> Better to teach fishing than to give fish.\n\nThe course map above inevitably carries strong personal preferences and may not suit everyone. It is more intended to serve as a starting point for exploration. If you want to select your own areas of interest for study, you can refer to the following resources:\n\n- [MIT OpenCourseWare](https://ocw.mit.edu/): MIT's open-sharing project for course resources, featuring thousands of courses from various disciplines, including computer science courses numbered 6.xxx.\n- [MIT CS Course List](http://student.mit.edu/catalog/m6a.html): List of CS courses at MIT.\n- [UC Berkeley EECS Course Map](https://hkn.eecs.berkeley.edu/courseguides): UC Berkeley's EECS curriculum plan, presenting the categories and prerequisites of various courses in a course map format, most of which are included in this book.\n- [UC Berkeley CS Course List](https://www2.eecs.berkeley.edu/Courses/CS/): List of CS courses at UC Berkeley.\n- [Stanford CS Course List](https://blog.csdn.net/qq_41220023/article/details/81976967): List of CS courses at Stanford.\n"
  },
  {
    "path": "docs/CS学习规划.md",
    "content": "# 一个仅供参考的 CS 学习规划\n\n计算机领域方向庞杂，知识浩如烟海，每个细分领域如果深究下去都可以说学无止境。因此，一个清晰明确的学习规划是非常重要的。我在多年自学的尝试中也走过不少弯路，最终提炼出了下面的内容，供大家参考。\n\n不过，在开始学习之前，先向小白们强烈推荐一个科普向系列视频 [Crash Course: Computer Science](https://www.bilibili.com/video/BV1EW411u7th)，在短短 8 个小时里非常生动且全面地科普了关于计算机科学的方方面面：计算机的历史、计算机是如何运作的、组成计算机的各个重要模块、计算机科学中的重要思想等等等等。正如它的口号所说的 *Computers are not magic!*，希望看完这个视频之后，大家能对计算机科学有个全貌性地感知，从而怀着兴趣去面对下面浩如烟海的更为细致且深入的学习内容。\n\n## 必学工具\n\n> 俗话说：磨刀不误砍柴工。如果你是一个刚刚接触计算机的24k纯小白，学会一些工具将会让你事半功倍。\n\n学会提问：也许你会惊讶，提问也算计算机必备技能吗，还放在第一条？我觉得在开源社区中，学会提问是一项非常重要的能力，它包含两方面的事情。其一是会变相地培养你自主解决问题的能力，因为从形成问题、描述问题并发布、他人回答、最后再到理解回答这个周期是非常长的，如果遇到什么鸡毛蒜皮的事情都希望别人最好远程桌面手把手帮你完成，那计算机的世界基本与你无缘了。其二，如果真的经过尝试还无法解决，可以借助开源社区的帮助，但这时候如何通过简洁的文字让别人瞬间理解你的处境以及目的，就显得尤为重要。推荐阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)这篇文章，这不仅能提高你解决问题的概率和效率，也能让开源社区里无偿提供解答的人们拥有一个好心情。\n\n[MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md) 这门课覆盖了这些工具中绝大部分，而且有相当详细的使用指导，强烈建议小白学习。不过需要注意的一点是，在课程中会不时提到一些与开发流程相关的术语。因此推荐至少在学完计算机导论级别的课程之后进行学习。\n\n[翻墙](必学工具/翻墙.md)：由于一些众所周知的原因，谷歌、GitHub 等网站在大陆无法访问。然而很多时候，谷歌和 StackOverflow 可以解决你在开发过程中遇到的 99% 的问题。因此，学会翻墙几乎是一个内地 CSer 的必备技能。（考虑到法律问题，这个文档提供的翻墙方式仅对拥有北大邮箱的用户适用）。\n\n命令行：熟练使用命令行是一种常常被忽视，或被认为难以掌握的技能，但实际上，它会极大地提高你作为工程师的灵活性以及生产力。[命令行的艺术](https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md)是一份非常经典的教程，它源于 Quora 的一个提问，但在各路大神的贡献努力下已经成为了一个 GitHub 十万 stars 的顶流项目，被翻译成了十几种语言。教程不长，非常建议大家反复通读，在实践中内化吸收。同时，掌握 Shell 脚本编程也是一项不容忽视的技术，可以参考这个[教程](https://www.shellscript.sh/)。\n\nIDE (Integrated Development Environment)：集成开发环境，说白了就是你写代码的地方。作为一个码农，IDE 的重要性不言而喻，但由于很多 IDE 是为大型工程项目设计的，体量较大，功能也过于丰富。其实如今一些轻便的文本编辑器配合丰富的插件生态基本可以满足日常的轻量编程需求。个人常用的编辑器是 VS Code 和 Sublime（前者的插件配置非常简单，后者略显复杂但颜值很高）。当然对于大型项目我还是会采用略重型的 IDE，例如 Pycharm (Python)，IDEA (Java) 等等（免责申明：所有的 IDE 都是世界上最好的 IDE）。\n\n[Vim](必学工具/Vim.md)：一款命令行编辑工具。这是一个学习曲线有些陡峭的编辑器，不过学会它我觉得是非常有必要的，因为它将极大地提高你的开发效率。现在绝大多数 IDE 也都支持 Vim 插件，让你在享受现代开发环境的同时保留极客的炫酷（yue）。\n\n[Emacs](必学工具/Emacs.md)：与 Vim 齐名的经典编辑器，同样具有极高的开发效率，同时具有更为强大的扩展性，它既可以配置为一个轻量编辑器，也可以扩展成一个个人定制的 IDE，甚至可以有更多奇技淫巧。\n\n[Git](必学工具/Git.md)：一款代码版本控制工具。Git的学习曲线可能更为陡峭，但出自 Linux 之父 Linus 之手的 Git 绝对是每个学 CS 的童鞋必须掌握的神器之一。\n\n[GitHub](必学工具/GitHub.md)：基于 Git 的代码托管平台。全世界最大的代码开源社区，大佬集聚地。\n\n[GNU Make](必学工具/GNU_Make.md)：一款工程构建工具。善用 GNU Make 会让你养成代码模块化的习惯，同时也能让你熟悉一些大型工程的编译链接流程。\n\n[CMake](必学工具/CMake.md)：一款功能比 GNU Make 更为强大的构建工具，建议掌握 GNU Make 之后再加以学习。\n\n[LaTeX](必学工具/LaTeX.md)：<del>逼格提升</del> 论文排版工具。\n\n[Docker](必学工具/Docker.md)：一款相较于虚拟机更轻量级的软件打包与环境部署工具。\n\n[实用工具箱](必学工具/tools.md)：除了上面提到的这些在开发中使用频率极高的工具之外，我还收集了很多实用有趣的免费工具，例如一些下载工具、设计工具、学习网站等等。\n\n[Thesis](必学工具/thesis.md)：毕业论文 Word 写作教程。\n\n## 好书推荐\n\n> 私以为一本好的教材应当是以人为本的，而不是炫技式的理论堆砌。告诉读者“是什么”固然重要，但更好的应当是教材作者将其在这个领域深耕几十年的经验融汇进书中，向读者娓娓道来“为什么”以及未来应该“怎么做”。\n\n[链接戳这里](./好书推荐.md)\n\n## 环境配置\n\n> 你以为的开发 —— 在 IDE 里疯狂码代码数小时。\n>\n> 实际上的开发 —— 配环境配几天还没开始写代码。\n\n### PC 端环境配置\n\n如果你是 Mac 用户，那么你很幸运，这份[指南](https://sourabhbajaj.com/mac-setup/) 将会手把手地带你搭建起整套开发环境。如果你是 Windows 用户，在开源社区的努力下，你同样可以获得与其他平台类似的体验：[Scoop](必学工具/Scoop.md)。\n\n另外大家可以参考一份灵感来自 [6.NULL MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md) 的 [环境配置指南][guide]，重点在于终端的美化配置。此外还包括常用软件源（如 GitHub, Anaconda, PyPI 等）的加速与替换以及一些 IDE 的配置与激活教程。\n\n[guide]: https://taylover2016.github.io/%E6%96%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E6%89%8B%E6%8C%87%E5%8D%97%EF%BC%88%E6%96%B0%E6%89%8B%E5%90%91%EF%BC%89/index.html\n\n### 服务器端环境配置\n\n服务器端的运维需要掌握 Linux（或者其他类 Unix 系统）的基本使用以及进程、设备、网络等系统相关的基本概念，小白可以参考中国科学技术大学 Linux 用户协会编写的[《Linux 101》在线讲义](https://101.lug.ustc.edu.cn/)。如果想深入学习系统运维相关的知识，可以参考 [Aspects of System Administration](https://stevens.netmeister.org/615/) 这门课程。\n\n另外，如果需要学习某个具体的概念或工具，推荐一个非常不错的 GitHub 项目 [DevOps-Guide](https://github.com/Tikam02/DevOps-Guide)，其中涵盖了非常多的运维方面的基础知识和教程，例如 Docker, Kubernetes, Linux, CI-CD, GitHub Actions 等等。\n\n## 课程地图\n\n> 正如这章开头提到的，这份课程地图仅仅是一个**仅供参考**的课程规划，我作为一个临近毕业的本科生。深感自己没有权利也没有能力向别人宣扬“应该怎么学”。因此如果你觉得以下的课程分类与选择有不合理之处，我全盘接受，并深感抱歉。你可以在下一节[定制属于你的课程地图](#yourmap)\n\n以下课程类别中除了含有 *基础* 和 *入门* 字眼的以外，并无明确的先后次序，大家只要满足某个课程的先修要求，完全可以根据自己的需要和喜好选择想要学习的课程。\n\n### 数学基础\n\n#### 微积分与线性代数\n\n作为大一新生，学好微积分线代是和写代码至少同等重要的事情，相信已经有无数的前人经验提到过这一点，但我还是要不厌其烦地再强调一遍：学好微积分线代真的很重要！你也许会吐槽这些东西岂不是考完就忘，那我觉得你是并没有把握住它们本质，对它们的理解还没有达到刻骨铭心的程度。如果觉得老师课上讲的内容晦涩难懂，不妨参考 MIT 的 [Calculus Course](./数学基础/MITmaths.md) 和 [18.06: Linear Algebra](./数学基础/MITLA.md) 的课程 notes，至少于我而言，它帮助我深刻理解了微积分和线性代数的许多本质。顺道再安利一个油管数学网红 [**3Blue1Brown**](https://www.youtube.com/c/3blue1brown)，他的频道有很多用生动形象的动画阐释数学本质内核的视频，兼具深度和广度，质量非常高。\n\n#### 信息论入门\n\n作为计算机系的学生，及早了解一些信息论的基础知识，我觉得是大有裨益的。但大多信息论课程都面向高年级本科生甚至研究生，对新手极不友好。而 MIT 的 [6.050J: Information theory and Entropy](./数学基础/information.md) 这门课正是为大一新生量身定制的，几乎没有先修要求，涵盖了编码、压缩、通信、信息熵等等内容，非常有趣。\n\n### 数学进阶\n\n#### 离散数学与概率论\n\n集合论、图论、概率论等等是算法推导与证明的重要工具，也是后续高阶数学课程的基础。但我觉得这类课程的讲授很容易落入理论化与形式化的窠臼，让课堂成为定理结论的堆砌，而无法使学生深刻把握理论的本质，进而造成学了就背，考了就忘的怪圈。如果能在理论教学中穿插算法运用实例，学生在拓展算法知识的同时也能窥见理论的力量和魅力。\n\n[UCB CS70 : discrete Math and probability theory](./数学进阶/CS70.md) 和 [UCB CS126 : Probability theory](./数学进阶/CS126.md) 是 UC Berkeley 的概率论课程，前者覆盖了离散数学和概率论基础，后者则涉及随机过程以及深入的理论内容。两者都非常注重理论和实践的结合，有丰富的算法实际运用实例，后者还有大量的 Python 编程作业来让学生运用概率论的知识解决实际问题。\n\n#### 数值分析\n\n作为计算机系的学生，培养计算思维是很重要的，实际问题的建模、离散化，计算机的模拟、分析，是一项很重要的能力。而这两年开始风靡的，由 MIT 打造的 [Julia](https://julialang.org/) 编程语言以其 C 一样的速度和 Python 一样友好的语法在数值计算领域有一统天下之势，MIT 的许多数学课程也开始用 Julia 作为教学工具，把艰深的数学理论用直观清晰的代码展示出来。\n\n[ComputationalThinking](https://computationalthinking.mit.edu/Spring21/) 是 MIT 开设的一门计算思维入门课，所有课程内容全部开源，可以在课程网站直接访问。这门课利用 Julia 编程语言，在图像处理、社会科学与数据科学、气候学建模三个 topic 下带领学生理解算法、数学建模、数据分析、交互设计、图例展示，让学生体验计算与科学的美妙结合。内容虽然不难，但给我最深刻的感受就是，科学的魅力并不是故弄玄虚的艰深理论，不是诘屈聱牙的术语行话，而是用直观生动的案例，用简练深刻的语言，让每个普通人都能理解。\n\n上完上面的体验课之后，如果意犹未尽的话，不妨试试 MIT 的 [18.330 : Introduction to numerical analysis](./数学进阶/numerical.md)，这门课的编程作业同样会用 Julia 编程语言，不过难度和深度上都上了一个台阶。内容涉及了浮点编码、Root finding、线性系统、微分方程等等方面，整门课的主旨就是让你利用离散化的计算机表示去估计和逼近一个数学上连续的概念。这门课的教授还专门撰写了一本配套的开源教材 [Fundamentals of Numerical Computation](https://fncbook.github.io/fnc/frontmatter.html)，里面附有丰富的 Julia 代码实例和严谨的公式推导。\n\n如果你还意犹未尽的话，还有 MIT 的数值分析研究生课程 [18.335: Introduction to numerical method][18.335] 供你参考。\n\n[18.335]: https://ocw.mit.edu/courses/mathematics/18-335j-introduction-to-numerical-methods-spring-2019/index.htm\n\n#### 微分方程\n\n如果世间万物的运动发展都能用方程来刻画和描述，这是一件多么酷的事情呀！虽然几乎任何一所学校的 CS 培养方案中都没有微分方程相关的必修课程，但我还是觉得掌握它会赋予你一个新的视角来审视这个世界。\n\n由于微分方程中往往会用到很多复变函数的知识，所以大家可以参考 [MIT18.04: Complex variables functions][MIT18.04] 的课程 notes 来补齐先修知识。\n\n[MIT18.04]: https://ocw.mit.edu/courses/mathematics/18-04-complex-variables-with-applications-spring-2018/\n\n[MIT18.03: differential equations][MIT18.03] 主要覆盖了常微分方程的求解，在此基础之上 [MIT18.152: Partial differential equations][MIT18.152] 则会深入偏微分方程的建模与求解。掌握了微分方程这一有力工具，相信对于你的实际问题的建模能力以及从众多噪声变量中把握本质的直觉都会有很大帮助。\n\n[MIT18.03]: https://ocw.mit.edu/courses/mathematics/18-03sc-differential-equations-fall-2011/unit-i-first-order-differential-equations/\n[MIT18.152]: https://ocw.mit.edu/courses/mathematics/18-152-introduction-to-partial-differential-equations-fall-2011/index.htm\n\n### 数学高阶\n\n作为计算机系的学生，我经常听到数学无用论的论断，对此我不敢苟同但也无权反对，但若凡事都硬要争出个有用和无用的区别来，倒也着实无趣，因此下面这些面向高年级甚至研究生的数学课程，大家按兴趣自取所需。\n\n#### 凸优化\n\n[Standford EE364A: Convex Optimization](./数学进阶/convex.md)\n\n#### 信息论\n\n[MIT6.441: Information Theory](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-441-information-theory-spring-2016/syllabus/)\n\n#### 应用统计学\n\n[MIT18.650: Statistics for Applications](https://ocw.mit.edu/courses/mathematics/18-443-statistics-for-applications-spring-2015/index.htm)\n\n#### 初等数论\n\n[MIT18.781: Theory of Numbers](https://ocw.mit.edu/courses/mathematics/18-781-theory-of-numbers-spring-2012/index.htm)\n\n#### 密码学\n\n[Standford CS255: Cryptography](http://crypto.stanford.edu/~dabo/cs255/)\n\n### 编程入门\n\n> Languages are tools, you choose the right tool to do the right thing. Since there's no universally perfect tool, there's no universally perfect language.\n\n#### General\n\n- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)\n- [Harvard CS50: This is CS50x](编程入门/C/CS50.md)\n\n#### Java\n\n- [MIT 6.092: Introduction To Programming In Java](编程入门/Java/MIT%206.092.md)\n\n#### Python\n\n- [CS50P: CS50's Introduction to Programming with Python](编程入门/Python/CS50P.md)\n- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/Python/CS61A.md)\n- [MIT6.100L: Introduction to CS and Programming using Python](编程入门/Python/MIT6.100L.md)\n\n#### C++\n\n- [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)\n- [Stanford CS106L: Standard C++ Programming](编程入门/cpp/CS106L.md)\n\n#### Rust\n\n- [Stanford CS110L: Safety in Systems Programming](编程入门/Rust/CS110L.md)\n\n#### OCaml\n\n- [Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful](编程入门/Functional/CS3110.md)\n\n### 电子基础\n\n#### 电路基础\n\n作为计算机系的学生，了解一些基础的电路知识，感受从传感器收集数据到数据分析再到算法预测整条流水线，对于后续知识的学习以及计算思维的培养还是很有帮助的。[EE16A&B: Designing Information Devices and Systems I&II](./电子基础/EE16.md) 是伯克利 EE 学生的大一入门课，其中 EE16A 注重通过电路从实际环境中收集和分析数据，而 EE16B 则侧重从这些收集到的数据进行分析并做出预测行为。\n\n#### 信号与系统\n\n信号与系统是一门我觉得非常值得一上的课，最初学它只是为了满足我对傅里叶变换的好奇，但学完之后我才不禁感叹，傅立叶变换给我提供了一个全新的视角去看待这个世界，就如同微分方程一样，让你沉浸在用数学去精确描绘和刻画这个世界的优雅与神奇之中。\n\n[MIT 6.003: signal and systems][MIT6.003] 提供了全部的课程录影、书面作业以及答案。也可以去看这门课的[远古版本](电子基础/Signals_and_Systems_AVO.md)\n\n[MIT6.003]: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-003-signals-and-systems-fall-2011/lecture-videos/lecture-1-signals-and-systems/\n\n而 [UCB EE120: Signal and Systems](电子基础/signal.md) 关于傅立叶变换的 notes 写得非常好，并且提供了6 个非常有趣的 Python 编程作业，让你实践中运用信号与系统的理论与算法。\n\n### 数据结构与算法\n\n算法是计算机科学的核心，也是几乎一切专业课程的基础。如何将实际问题通过数学抽象转化为算法问题，并选用合适的数据结构在时间和内存大小的限制下将其解决是算法课的永恒主题。如果你受够了老师的照本宣科，那么我强烈推荐伯克利的 [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) 和普林斯顿的 [Coursera: Algorithms I & II](数据结构与算法/Algo.md)，这两门课的都讲得深入浅出并且会有丰富且有趣的编程实验将理论与知识结合起来。\n\n以上两门课程都是基于 Java 语言，如果你想学习 C/C++ 描述的版本，可以参考斯坦福的数据结构与基础算法课程 [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)。偏好 Python 的同学可以学习 MIT 的算法入门课 [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md)\n\n对一些更高级的算法以及 NP 问题感兴趣的同学可以学习伯克利的算法设计与分析课程 [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md) 或者 MIT 的高阶算法 [MIT 6.046: Design and Analysis of Algorithms](数据结构与算法/6.046.md)。\n\n### 软件工程\n\n#### 入门课\n\n一份“能跑”的代码，和一份高质量的工业级代码是有本质区别的。因此我非常推荐低年级的同学学习一下 [MIT 6.031: Software Construction](软件工程/6031.md) 这门课，它会以 Java 语言为基础，以丰富细致的阅读材料和精心设计的编程练习传授如何编写**不易出 bug、简明易懂、易于维护修改**的高质量代码。大到宏观数据结构设计，小到如何写注释，遵循这些前人总结的细节和经验，对于你此后的编程生涯大有裨益。\n\n#### 专业课\n\n当然，如果你想系统性地上一门软件工程的课程，那我推荐的是伯克利的 [UCB CS169: software engineering](软件工程/CS169.md)。但需要提醒的是，和大多学校（包括贵校）的软件工程课程不同，这门课不会涉及传统的 **design and document** 模式，即强调各种类图、流程图及文档设计，而是采用近些年流行起来的小团队快速迭代 **Agile Develepment** 开发模式以及利用云平台的 **Software as a service** 服务模式。\n\n### 体系结构\n\n#### 入门课\n\n从小我就一直听说，计算机的世界是由 01 构成的，我不理解但大受震撼。如果你的内心也怀有这份好奇，不妨花一到两个月的时间学习 [Coursera: Nand2Tetris](体系结构/N2T.md) 这门无门槛的计算机课程。这门麻雀虽小五脏俱全的课程会从 01 开始让你亲手造出一台计算机，并在上面运行俄罗斯方块小游戏。一门课里涵盖了编译、虚拟机、汇编、体系结构、数字电路、逻辑门等等从上至下、从软至硬的各类知识，非常全面。难度上也是通过精心的设计，略去了众多现代计算机复杂的细节，提取出了最核心本质的东西，力图让每个人都能理解。在低年级，如果就能从宏观上建立对整个计算机体系的鸟瞰图，是大有裨益的。\n\n#### 专业课\n\n当然，如果想深入现代计算机体系结构的复杂细节，还得上一门大学本科难度的课程 [UCB CS61C: Great Ideas in Computer Architecture](体系结构/CS61C.md)。UC Berkeley 作为 RISC-V 架构的发源地，在体系结构领域算得上首屈一指。其课程非常注重实践，你会在 Project 中手写汇编构造神经网络，从零开始搭建一个 CPU，这些实践都会让你对计算机体系结构有更为深入的理解，而不是仅停留于“取指译码执行访存写回”的单调背诵里。\n\n### 系统入门\n\n计算机系统是一个庞杂而深刻的主题，在深入学习某个细分领域之前，对各个领域有一个宏观概念性的理解，对一些通用性的设计原则有所知晓，会让你在之后的深入学习中不断强化一些最为核心乃至哲学的概念，而不会桎梏于复杂的内部细节和各种 trick。因为在我看来，学习系统最关键的还是想让你领悟到这些最核心的东西，从而能够设计和实现出属于自己的系统。\n\n[MIT6.033: System Engineering](http://web.mit.edu/6.033/www/) 是 MIT 的系统入门课，主题涉及了操作系统、网络、分布式和系统安全，除了知识点的传授外，这门课还会讲授一些写作和表达上的技巧，让你学会如何设计并向别人介绍和分析自己的系统。这本书配套的教材 *Principles of Computer System Design: An Introduction* 也写得非常好，推荐大家阅读。\n\n[CMU 15-213: Introduction to Computer System](计算机系统基础/CSAPP.md) 是 CMU 的系统入门课，内容覆盖了体系结构、操作系统、链接、并行、网络等等，兼具广度和深度，配套的教材 *Computer Systems: A Programmer's Perspective* 也是质量极高，强烈建议阅读。\n\n### 操作系统\n\n> 没有什么能比自己写个内核更能加深对操作系统的理解了。\n\n操作系统作为各类纷繁复杂的底层硬件虚拟化出一套规范优雅的抽象，给所有应用软件提供丰富的功能支持。了解操作系统的设计原则和内部原理对于一个不满足于当调包侠的程序员来说是大有裨益的。出于对操作系统的热爱，我上过国内外很多操作系统课程，它们各有侧重和优劣，大家可以根据兴趣各取所需。\n\n[MIT 6.S081: Operating System Engineering](操作系统/MIT6.S081.md)，MIT 著名 PDOS 实验室出品，11 个 Project 让你在一个实现非常优雅的类Unix操作系统xv6上增加各类功能模块。这门课也让我深刻认识到，做系统不是靠 PPT 念出来的，是得几万行代码一点点累起来的。\n\n[UCB CS162: Operating System](操作系统/CS162.md)，伯克利的操作系统课，采用和 Stanford 同样的 Project —— 一个教学用操作系统 Pintos。我作为北京大学2022年和2023年春季学期操作系统实验班的助教，引入并改善了这个 Project，课程资源也会全部开源，具体参见[课程网站](https://pku-os.github.io)。\n\n[NJU: Operating System Design and Implementation](操作系统/NJUOS.md)，南京大学的蒋炎岩老师开设的操作系统课程。蒋老师以其独到的系统视角结合丰富的代码示例将众多操作系统的概念讲得深入浅出，此外这门课的全部课程内容都是中文的，非常方便大家学习。\n\n[HIT OS: Operating System](操作系统/HITOS.md)，哈尔滨工业大学的李治军老师开设的中文操作系统课程。李老师的课程基于 Linux 0.11 源码，十分注重代码实践，并站在学生视角将操作系统的来龙去脉娓娓道来。\n\n### 并行与分布式系统\n\n想必这两年各类 CS 讲座里最常听到的话就是“摩尔定律正在走向终结”，此话不假，当单核能力达到上限时，多核乃至众核架构如日中天。硬件的变化带来的是上层编程逻辑的适应与改变，要想充分利用硬件性能，编写并行程序几乎成了程序员的必备技能。与此同时，深度学习的兴起对计算机算力与存储的要求都达到了前所未有的高度，大规模集群的部署和优化也成为热门技术话题。\n\n#### 并行计算\n\n[CMU 15-418/Stanford CS149: Parallel Computing](并行与分布式系统/CS149.md) 会带你深入理解现代并行计算架构的设计原则与必要权衡，并学会如何充分利用硬件资源以及软件编程框架（例如 CUDA，MPI，OpenMP 等）编写高性能的并行程序。\n\n#### 分布式系统\n\n[MIT 6.824: Distributed System](并行与分布式系统/MIT6.824.md) 和 MIT 6.S081 一样，出品自 MIT 大名鼎鼎的 PDOS 实验室，授课老师 Robert Morris 教授曾是一位顶尖黑客，世界上第一个蠕虫病毒 Morris 病毒就是出自他之手。这门课每节课都会精读一篇分布式系统领域的经典论文，并由此传授分布式系统设计与实现的重要原则和关键技术。同时其课程 Project 也是以难度之大而闻名遐迩，4 个编程作业循序渐进带你实现一个基于 Raft 共识算法的 KV-store 框架，让你在痛苦的 debug 中体会并行与分布式带来的随机性和复杂性。\n\n### 系统安全\n\n不知道你当年选择计算机是不是因为怀着一个中二的黑客梦想，但现实却是成为黑客道阻且长。\n\n#### 理论课程\n\n[UCB CS161: Computer Security](系统安全/CS161.md) 是伯克利的系统安全课程，会涵盖栈攻击、密码学、网站安全、网络安全等等内容。\n\n[SU SEED Labs](系统安全/SEEDLabs.md) 是雪城大学的网安课程，由 NSF 提供130万美元的资金支持，为网安教育开发了动手实践性的实验练习（称为 SEED Lab）。课程理论教学和动手实践并重，包含详细的开源讲义、视频教程、教科书（被印刷为多种语言）、开箱即用的基于虚拟机和 docker 的攻防环境等。目前全球有1050家研究机构在使用该项目。涵盖计算机和信息安全领域的广泛主题，包括软件安全、网络安全、Web 安全、操作系统安全和移动应用安全。\n\n#### CTF 实践\n\n掌握这些理论知识之后，还需要在实践中培养和锻炼这些“黑客素养”。[CTF 夺旗赛](https://ctf-wiki.org/)是一项比较热门的系统安全比赛，赛题中会融会贯通地考察你对计算机各个领域知识的理解和运用。北大每年会举办[相关赛事](https://geekgame.pku.edu.cn/)，鼓励大家踊跃参与，在实践中提高自己。下面列举一些我平时学习（摸鱼）用到的资源：\n\n- [CTF-wiki](https://ctf-wiki.org/)\n- [CTF-101](https://ctf101.org/)\n- [Hacker-101](https://ctf.hacker101.com/)\n\n### 计算机网络\n\n> 没有什么能比自己写个 TCP/IP 协议栈更能加深对计算机网络的理解了。\n\n大名鼎鼎的 [Stanford CS144: Computer Network](计算机网络/CS144.md)，8 个 Project 带你实现整个 TCP/IP 协议栈。\n\n如果你只是想在理论上对计算机网络有所了解，那么推荐阅读 [UCB CS168](计算机网络/CS168.md) 这门课程配套的[教材](https://textbook.cs168.io/)。\n\n### 数据库系统\n\n> 没有什么能比自己写个关系型数据库更能加深对数据库系统的理解了。\n\nCMU 的著名数据库神课 [CMU 15-445: Introduction to Database System](数据库系统/15445.md) 会通过 4 个 Project 带你为一个用于教学的关系型数据库 [bustub](https://github.com/cmu-db/bustub) 添加各种功能。实验的评测框架也免费开源了，非常适合大家自学。此外课程实验会用到 C++11 的众多新特性，也是一个锻炼 C++ 代码能力的好机会。\n\nBerkeley 作为著名开源数据库 postgres 的发源地也不遑多让，[UCB CS186: Introduction to Database System](数据库系统/CS186.md) 会让你用 Java 语言实现一个支持 SQL 并发查询、B+ 树索引和故障恢复的关系型数据库。\n\n### 编译原理\n\n> 没有什么能比自己写个编译器更能加深对编译器的理解了。\n\n理论学习推荐阅读大名鼎鼎的《龙书》。当然动手实践才是掌握编译原理最好的方式，推荐[北京大学编译原理实践](./编译原理/PKU-Compilers.md)课程，丰富的实验配套和循序渐进的文档带你实现一个类C语言到 RISC-V 汇编的编译器。当然编译原理课程目录下也有众多其他优质实验供你选择。\n\n### Web 开发\n\n前后端开发很少在计算机的培养方案里被重视，但其实掌握这项技能还是好处多多的，例如搭建自己的个人主页，抑或是给自己的课程项目做一个精彩的展示网页。如果你只是想两周速成，那么推荐 [MIT web development course](Web开发/mitweb.md)。如果想系统学习，推荐 [Stanford CS142: Web Applications](Web开发/CS142.md)。\n\n### 计算机图形学\n\n我本人对计算机图形学了解不多，这里收录了一些社区推荐的优质课程供大家选择：\n\n- [Stanford CS148](计算机图形学/CS148.md)\n- [Games101](计算机图形学/GAMES101.md)\n- [Games103](计算机图形学/GAMES103.md)\n- [Games202](计算机图形学/GAMES202.md)\n\n### 数据科学\n\n其实数据科学和机器学习与深度学习有着很紧密的联系，但可能更侧重于实践。Berkeley 的 [UCB Data100: Principles and Techniques of Data Science](数据科学/Data100.md) 通过丰富的编程练习让你在实践中掌握各类数据分析工具和算法，并带领你体验从海量的数据集中提取出想要的结果，并对未来的数据或用户的行为做出相应的预测。但这只是一门基础课，如果想学习工业级别的数据挖掘与分析技术，可以尝试 Stanford 的大数据挖掘课程 [CS246: Mining Massive Data Sets](https://web.stanford.edu/class/cs246/)。\n\n### 人工智能\n\n近十年人工智能应该算是计算机界最火爆的领域。如果你不满足于整日听各路媒体争相报道人工智能相关的进展，而想真正一探究竟，那么非常推荐学习 Harvard 神课 CS50 系列的人工智能课程 [Harvard CS50: Introduction to AI with Python](人工智能/CS50.md)。课程短小精悍，覆盖了传统人工智能领域的几大分支，并配有丰富有趣的 Python 编程练习来巩固你对人工智能算法的理解。美中不足的是这门课因为面向在线自学者的缘故内容较为精简，并且不会涉及特别深入的数学理论，如果想要系统深入地学习还需要一门本科生难度的课程，例如 Berkeley 的\n [UCB CS188: Introduction to Artificial Intelligence](人工智能/CS188.md)。这门课的 Project 复刻了经典游戏糖豆人，让你运用人工智能算法玩游戏，非常有趣。\n\n### 机器学习\n\n机器学习领域近些年最重要的进展就是发展出了基于神经网络的深度学习分支，但其实很多基于统计学习的算法依然在数据分析领域有着广泛的应用。如果你之前从未接触过机器学习的相关知识，而且不想一开始就陷入艰深晦涩的数学证明，那么不妨先从 Andrew Ng （吴恩达）的 [Coursera: Machine Learning](机器学习/ML.md) 学起。这门课在机器学习领域基本无人不晓，吴恩达以其深厚的理论功底和出色的表达能力把很多艰深的算法讲得深入浅出，并且非常实用。其配套的作业也是质量相当上乘，可以帮助你快速入门。\n\n但上过这门课只能让你从宏观上对机器学习这一领域有一定了解，如果想真正理解那些“神奇”算法背后的数学原理甚至从事相关领域的科研工作，那么还需要一门更“数学”的课程，例如 [Stanford CS229: Machine Learning](机器学习/CS229.md) 或者 [UCB CS189: Introduction to Machine Learning](机器学习/CS189.md)。\n\n当然，如果你之后致力于从事机器学习理论相关的科学研究，那么可以参考 [Yao Fu](https://franxyao.github.io/) 分享的[进阶学习路线](./机器学习进阶/roadmap.md)学习一些更深入的研究生难度的课程。\n\n### 深度学习\n\n前几年 AlphaGo 的大热让深度学习进入了大众的视野，不少大学专门成立了相关专业。很多计算机的其他领域也会借助深度学习的技术来做研究，因此基本不管你干啥多少都会接触到一些神经网络、深度学习相关的技术需求。如果想快速入门，同样推荐 Andrew Ng （吴恩达）的 [Coursera: Deep Learning](深度学习/CS230.md)，质量无需多言，Coursera 上罕见的满分课程。此外如果你觉得英文课程学习起来有难度，推荐李宏毅老师的 [国立台湾大学：机器学习](深度学习/LHY.md) 课程。这门课打着机器学习的名号，却囊括了深度学习领域的几乎所有方向，非常全面，很适合你从宏观上对这个领域有一个大致的了解。而且老师本人也非常幽默，课堂金句频出。\n\n当然因为深度学习领域发展非常迅速，已经拥有了众多研究分支，如果想要进一步深入，可以按需学习下面罗列的代表课程:\n\n如果你想系统打牢基础，可以优先看 CMU 11-785：这门课风格非常扎实，内容一点不水，作业也能很好地锻炼训练与调参能力；MIT 6.7960 的覆盖面更广，除了主流 LLM 路线之外也兼顾 CV 等方向，作业和项目对自学者也比较友好；NYU DLSP21 的亮点则是 Yann LeCun 亲自授课，对很多人来说这是非常难得的公开系统课程资源。\n\n#### 综合与基础\n\n[CMU 11-785: Introduction to Deep Learning](深度学习/CMU11-785.md)\n\n[MIT 6.7960: Deep Learning](深度学习/MIT6-7960.md)\n\n[NYU DLSP21: NYU Deep Learning Spring 2021](深度学习/NYU-DLSP21.md)\n\n#### 计算机视觉\n\n[UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision](深度学习/EECS498-007.md)\n\n[Stanford CS231n: CNN for Visual Recognition](深度学习/CS231.md)\n\n#### 自然语言处理\n\n[Stanford CS224n: Natural Language Processing](深度学习/CS224n.md)\n\n#### 图神经网络\n\n[Stanford CS224w: Machine Learning with Graphs](深度学习/CS224w.md)\n\n#### 强化学习\n\n[UCB CS285: Deep Reinforcement Learning](深度学习/CS285.md)\n\n\n### 深度学习系统\n\n随着深度学习模型的重要性和资源需求越来越大，针对其训练和推理相关的底层系统优化也越发重要。如果想入门这个领域，推荐 [CMU 10-414/714: Deep Learning Systems](./机器学习系统/CMU10-414.md)，内容覆盖了深度学习系统“全栈”的知识体系。从现代深度学习系统框架的顶层设计，到自微分算法的原理和实现，再到底层硬件加速和实际生产部署。为了更好地掌握理论知识，学生将会在课程作业中从头开始设计和实现一个完整的深度学习库 Needle，使其能对计算图进行自动微分，能在 GPU 上实现硬件加速，并且支持各类损失函数、数据加载器和优化器。在此基础上，学生将实现几类常见的神经网络，包括 CNN，RNN，LSTM，Transformer 等等。有一定基础后，还可以学习 [Song Han](https://hanlab.mit.edu/songhan) 老师开设的 [MIT6.5940: TinyML and Efficient Deep Learning Computing](./机器学习系统/EML.md) 课程，了解让神经网络轻量化的各种关键技术，例如剪枝、量化、蒸馏、网络架构搜索等等。此外，课程中还会涉及很多更前沿的深度学习模型例如大语言模型相关的系统优化。\n\n### 深度生成模型\n\n随着大语言模型的爆火，了解其背后的原理才能紧跟时代潮流。可以参考笔者推荐的[学习路线](./深度生成模型/roadmap.md)进行学习。\n\n\n\n## <a id=\"yourmap\">定制属于你的课程地图</a>\n\n> 授人以鱼不如授人以渔。\n\n以上的课程规划难免带有强烈的个人偏好，不一定适合所有人，更多是起到抛砖引玉的作用。如果你想挑选自己感兴趣的方向和内容加以学习，可以参考我在下面列出来的资源。\n\n- [MIT OpenCourseWare](https://ocw.mit.edu/): 麻省理工学院的课程资源开放共享项目，收录了数以千计的各科课程资源，其中计算机类的课号是 6.xxx。\n- [MIT CS Course List](http://student.mit.edu/catalog/m6a.html): 麻省理工学院的 CS 课程列表。\n- [UC Berkeley EECS Course Map](https://hkn.eecs.berkeley.edu/courseguides): UC Berkeley 的 EECS 培养方案，以课程地图的方式将各门课程的类别和先修关系一目了然地呈现，其中绝大多数课程本书中均有收录。\n- [UC Berkeley CS Course List](https://www2.eecs.berkeley.edu/Courses/CS/): UC Berkeley 的 CS 课程列表。\n- [Stanford CS Course List](https://blog.csdn.net/qq_41220023/article/details/81976967): 斯坦福的 CS 课程列表。\n"
  },
  {
    "path": "docs/Web开发/CS142.en.md",
    "content": "# Stanford CS142: Web Applications\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: CS107 and CS108\n- Programming Languages: JavaScript/HTML/CSS\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nThis 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.\n\n## Course Resources\n\n- Course Website: <https://web.stanford.edu/class/cs142/index.html>\n- Recordings: <https://web.stanford.edu/class/cs142/lectures.html>\n- Assignments: <https://web.stanford.edu/class/cs142/projects.html>\n"
  },
  {
    "path": "docs/Web开发/CS142.md",
    "content": "# Stanford CS142: Web Applications\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：有一定的编程经验\n- 编程语言：JavaScript/HTML/CSS\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 小时\n\n斯坦福的 Web 应用开发课程，内容覆盖了 HTML, CSS, JavaScript, ReactJs, NodeJS, ExpressJS, Web安全等等。8 个 Project 会让你在实战中锻炼自己的 Web 开发技巧。\n\n## 课程资源\n\n- 课程网站：<https://web.stanford.edu/class/cs142/index.html>\n- 课程视频：<https://web.stanford.edu/class/cs142/lectures.html>\n- 课程教材：无\n- 课程作业：<https://web.stanford.edu/class/cs142/projects.html>\n"
  },
  {
    "path": "docs/Web开发/CS571.en.md",
    "content": "# CS571 Building UI (React & React Native)\n\n## Course Overview\n\n- University: University of Wisconsin, Madison\n- Prerequisites: CS400 (Advanced Java. But in my opinion you only need to master one programming language)\n- Programming Languages: JavaScript/HTML/CSS\n- Course Difficulty: 🌟🌟🌟\n- Estimated Time Commitment: 2 hrs/week (lecture) + 4–10 hrs/week (HW), 12 weeks\n\nThis course provides a comprehensive but concise introduction to the best practices of React front-end development and React Native mobile development. It focuses on the latest versions of React and React Native and is updated every semester. It is a valuable resource for tackling the complexities of front-end development.\n\nThe course also offers a good training ground. Be prepared for a significant workload throughout the semester. The techniques and knowledge points involved in the homework will be explained in class, but code won't be written hand by hand (I personally think that hand-holding code writing is very inefficient, and most courses on Udemy are of this type). As this isn't a hand-holding course, if you are unsure about how to write React code when doing homework, I recommend spending extra time carefully reading the relevant chapters on [react.dev](https://react.dev/reference/react) before diving in. The starter code also provides you with a great starting point, saving you from coping with Node.js environment settings.\n\nAlthough this course doesn't require prior knowledge of Javascript/HTML/CSS, the classroom introduction to syntax is relatively limited. It's recommended to frequently consult resources and ask questions when encountering syntax issues during learning and coding.\n\nThis course also includes an introduction to and practices for Dialog Flow, a ChatBot development tool by Google. You can also find content related to UX development (on the practical side) in this course.\n\nAccording to the official website, CS 571 is open to everyone. You can request a Badger ID directly from the [webpage](https://cs571.org/auth) using your email address.\n\n## Course Resources\n\n- Course Website: <https://cs571.org>\n- Course Videos: Refer to the links labeled \"R\" on the course website.\n- Course Assignments: Refer to the course website for more information.\n"
  },
  {
    "path": "docs/Web开发/CS571.md",
    "content": "# CS571 Building UI (React & React Native)\n\n## 课程简介\n\n- 所属大学：威斯康星大学麦迪逊分校（University of Wisconsin, Madison）\n- 先修要求：CS400（高级 Java，但个人觉得先修不必要，掌握至少一门编程语言即可）\n- 编程语言：JavaScript/HTML/CSS\n- 课程难度：🌟🌟🌟\n- 预计学时：每周 2 小时（讲座）+ 每周 4–10 小时（作业），持续 12 周\n\n该课程提供了 React 前端开发和 React Native 移动端开发的最佳实践介绍，完整的同时又提纲挈领。采用 React 和 React Native 的最新版本，课程网站每学期都会更新。对于各门工具迭出的前端开发难能可贵。\n\n同时，该课程也提供了很好的训练机会。在整个学期中，需要为较大作业量做好准备。作业所涉及的技术和知识点会在课上讲解，但不会手把手写代码（个人认为手把手写代码效率非常低，而 Udemy 上多为此类型）。由于不是保姆级课程，如果写作业时对于 React 的某些功能不确定怎么写，建议在动手之前多花些时间仔细阅读 [react.dev](https://react.dev/reference/react) 上的相关章节。作业的 starter code 提供的训练起点也恰好合适，不用为配 Node.js 环境伤脑筋。\n\n尽管这门课程不要求预先会 Javascript/HTML/CSS，课堂上对 syntax 的介绍比较有限，建议学习和写码遇到语法问题时勤查勤问。\n\n此外，本课程还对 Google 旗下的 ChatBot 开发工具 Dialog Flow 有较为深入的介绍和练习。还对 UX Design 的实用原则和技术有所讲解。\n\n根据官网信息，CS 571 对所有人开放。你可以在[官网](https://cs571.org/auth)直接使用电子邮箱申请 Badger ID。\n\n## 课程资源\n\n- 课程网站：<https://cs571.org>\n- 课程视频：请参考课程网站上标有“R”的链接\n- 课程作业：请参考课程网站上的相关信息\n"
  },
  {
    "path": "docs/Web开发/fullstackopen.en.md",
    "content": "# University of Helsinki: Full Stack open 2022\n\n## Descriptions\n\n- Offered by: University of Helsinki\n- Prerequisites: Good programming skills, basic knowledge of web programming and databases, and have mastery of the Git version management system.\n- Programming Languages: JavaScript/HTML/CSS/NoSQL/SQL\n- Difficulty: 🌟🌟\n- Class Hour: Varying according to the learner\n\nThis 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.\n\nThe course covers testing, configuration and environment management, and the use of MongoDB for storing the application’s data.\n\n## Resources\n- Course Website: <https://fullstackopen.com/en/>\n- Assignments: refer to the course website\n- Course group on Discord: <https://study.cs.helsinki.fi/discord/join/fullstack/>\n- Course group on Telegram: <https://t.me/fullstackcourse/>\n"
  },
  {
    "path": "docs/Web开发/fullstackopen.md",
    "content": "# University of Helsinki: Full Stack open 2022\n\n## 课程简介\n\n- 所属大学：University of Helsinki\n- 先修要求：具备良好的编程技能、基本的网络编程和数据库知识，并且了解使用 Git 这个版本控制系统的基础知识。\n- 编程语言：JavaScript/HTML/CSS/NoSQL/SQL\n- 课程难度：🌟🌟\n- 预计学时：因人而异\n\n本课程是介绍如何使用 JavaScript 开发现代Web应用程序。 课程的重点是使用 ReactJS 构建单页面应用程序（SPA），并使用由 Node.js 构建 REST API。该课程还包含介绍 GraphQL 的部分，这是 REST API 的现代替代方案。\n\n课程还包括测试、配置和环境管理，以及使用 MongoDB 来存储应用的数据。\n\n## 课程资源\n\n- 课程网站：<https://fullstackopen.com/zh/>\n- 课程作业：参见课程网站\n- 课程 Discord 群组：<https://study.cs.helsinki.fi/discord/join/fullstack/>\n- 课程 Telegram 群组：<https://t.me/fullstackcourse/>\n"
  },
  {
    "path": "docs/Web开发/mitweb.en.md",
    "content": "# MIT Web Development Crash Course\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: better if you are already proficient in a programming language\n- Programming Languages: JavaScript/HTML/CSS/NoSQL\n- Difficulty: 🌟🌟🌟\n- Class Hour: Varying according to the learner\n\n[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.\n\nWithin 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.\n\n## Resources\n\n- Course Website: <https://weblab.mit.edu/schedule/>\n- Recordings: refer to the course website.\n- Assignments: refer to the course website.\n"
  },
  {
    "path": "docs/Web开发/mitweb.md",
    "content": "# MIT Web Development Crash Course\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：掌握至少一门编程语言\n- 编程语言：JavaScript/HTML/CSS/NoSQL\n- 课程难度：🌟🌟🌟\n- 预计学时：因人而异\n\nMIT 在每年 1 月份会有一个为期 4 周的 [Independent Activities Period](https://elo.mit.edu/iap/) (IAP)，在这个月里，MIT 的学生和老师可以自由地开设很多有趣的课程，而这门网站开发课程就是其中之一。\n\n在一个月的时间里，你会从零开始掌握一个网站的设计、搭建、美化、交互等等核心内容，基本覆盖了 Web 开发的前后端大部分技术栈。如果你不需要系统地学习网络开发，而只是出于兴趣想把它加入自己的技能包里，那么这门课将非常适合你。\n\n## 课程资源\n\n- 课程网站：<https://weblab.mit.edu/schedule/>\n- 课程视频：参见课程网站链接\n- 课程作业：参见课程 Schedule\n"
  },
  {
    "path": "docs/index.en.md",
    "content": "<figure markdown>\n  ![Image title](./images/title.png){ width=\"600\" }\n</figure>\n\n# **Foreword**\n\nThis is a self-learning guide to computer science, and a memento of my three years of self-learning at university.\n\nIt is also a gift to the young students at Peking University. It would be a great encouragement and comfort to me if this book could be of even the slightest help to you in your college life.\n\nThe book is currently organized to include the following sections (if you have other good suggestions, or would like to join the ranks of contributors, please feel free to email [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn) or ask questions in the issue).\n\n- User guide for this book: Given the numerous resources covered in this book, I have developed corresponding usage guides based on different people's free time and learning objectives.\n- A reference CS learning plan: This is a comprehensive and systematic CS self-learning plan that I have formulated based on my own self-study experience.\n- Productivity Toolkit: IDE, VPN, StackOverflow, Git, Github, Vim, Latex, GNU Make and so on.\n- Book recommendations: Those who have read the CSAPP must have realized the importance of good books. I will list links to books and resources in different areas of Computer Science that I find rewarding to read.\n- **List of high quality CS courses**: I will summarize all the high quality foreign CS courses I have taken and the community contributed into different categories and give relevant self-learning advice. Most of them will have a separate repository containing relevant resources as well as the homework/project implementations.\n\n## **The place where dreams start —— CS61A**\n\nIn my freshman year, I was a novice who knew nothing about computers. I installed a giant IDE Visual Studio and fight with OJ every day. With my high school maths background, I did pretty well in maths courses, but I felt struggled to learn courses in my major. When it came to programming, all I could do was open up that clunky IDE, create a new project that I didn't know exactly what it was for, and then `cin`, `cout`, `for` loops, and then CE, RE, WA loops. I was in a state where I was desperately trying to learn well but I didn't know how to learn. I listened carefully in class but I couldn't solve the homework problems. I spent almost all my spare time doing the homework after class, but the results were disappointing. I still retain the source code of the project for Introduction to Computing course —— a single 1200-line C++ file with no header files, no class abstraction, no unit tests, no makefile, no version control. The only good thing is that it can run, the disadvantage is the complement of \"can run\". For a while I wondered if I wasn't cut out for computer science, as all my childhood imaginings of geekiness had been completely ruined by my first semester's experience.\n\nIt all turned around during the winter break of my freshman year, when I had a hankering to learn Python. I overheard someone recommend CS61A, a freshman introductory course at UC Berkeley on Python. I'll never forget that day, when I opened the [CS61A](https://cs61a.org/) course website. It was like Columbus discovering a new continent, and I opened the door to a new world.\n\nI finished the course in 3 weeks and for the first time I felt that CS could be so fulfilling and interesting, and I was shocked that there existed such a great course in the world.\n\nTo avoid any suspicion of pandering to foreign courses, I will tell you about my experience of studying CS61A from the perspective of a pure student.\n\n- ***Course website developed by course staffs***: The course website integrates all the course resources into one, with a well organised course schedule, links to all slides, recorded videos and homework, detailed and clear syllabus, list of exams and solutions from previous years. Aesthetics aside, this website is so convenient for students.\n\n- ***Textbook written by course instructor***: The course instructor has adapted the classic MIT textbook *Structure and Interpretation of Computer Programs* (SICP) into Python (the original textbook was based on Scheme). This is a great way to ensure that the classroom content is consistent with the textbook, while adding more details. The entire book is open source and can be read directly online.\n\n- ***Various, comprehensive and interesting homework***: There are 14 labs to reinforce the knowledge gained in class, 10 homework assignments to practice, and 4 projects each with thousands of lines of code, all with well-organized skeleton code and babysitting instructions. Unlike the old-school OJ and Word document assignments, each lab/homework/project has a detailed handout document, fully automated grading scripts, and CS61A staffs have even developed an [automated assignment submission and grading system](https://okpy.org/). Of course, one might say \"How much can you learn from a project where most of code are written by your teaching assistants?\" . For someone who is new to CS and even stumbling over installing Python, this well-developed skeleton code allows students to focus on reinforcing the core knowledge they've learned in class, but also gives them a sense of achievement that they already can make a little game despite of learning Python only for a month. It also gives them the opportunity to read and learn from other people's high quality code so that they can reuse it later. I think in the freshman year, this kind of skeleton code is absolutely beneficial. The only bad thing perhaps is for the instructors and teaching assistants, as developing such assignments can conceivably require a considerable time commitment.\n\n- ***Weekly discussion sessions***: The teaching assistants will explain the difficult knowledge in class and add some supplementary materials which may not be covered in class. Also, there will be exercises from exams of previous years. All the exercises are written in LaTeX with solutions.\n\nIn CS61A, You don't need any prerequesites about CS at all. You just need to pay attention, spend time and work hard. The feeling that you do not know what to do, that you are not getting anything in return for all the time you put in, is gone. It suited me so well that I fell in love with self-learning.\n\nImagine that if someone could chew up the hard knowledge and present it to you in a vivid and straightforward way, with so many fancy and varied projects to reinforce your theoretical knowledge, you'd think they were really trying their best to make you fully grasp the course, and it was even an insult to the course builders not to learn it well.\n\nIf you think I'm exaggerating, start with [CS61A](https://cs61a.org/), because it's where my dreams began.\n\n## **Why write this book?**\n\nIn the 2020 Fall semester, I worked as a teaching assistant for the class \"Introduction to Computer Systems\" at Peking University. At that time, I had been studying totally on my own for over a year. I enjoyed this style of learning immensely. To share this joy, I have made a [CS Self-learning Materials List](https://github.com/PKUFlyingPig/Self-learning-Computer-Science) for students in my seminar. It was purely on a whim at the time, as I wouldn't dare to encourage my students to skip classes and study on their own.\n\nBut after another year of maintenance, the list has become quite comprehensive, covering most of the courses in Computer Science, Artificial Intelligence and Soft Engineering, and I have built separate repositories for each course, summarising the self-learning materials that I used.\n\nIn my last college year, when I opened up my curriculum book, I realized that it was already a subset of my self-learning list. By then, it was only two and a half years after I had started my self-learning journey. Then, a bold idea came to my mind: perhaps I could create a self-learning book, write down the difficulty I encountered and the interest I found during these years of self-learning, hoping to make it easy for students who may also enjoy self-learning to start their wonderful self-learning journey.\n\nIf you can build up the whole CS foundation in less than three years, have relatively solid mathematical skills and coding ability, experience dozens of projects with thousands of lines of code, master at least C/C++/Java/JS/Python/Go/Rust and other mainstream programming languages, have a good understanding of algorithms, circuits, architectures, networks, operating systems, compilers, artificial intelligence, machine learning, computer vision, natural language processing, reinforcement learning, cryptography, information theory, game theory, numerical analysis, statistics, distributed systems, parallel computing, database systems, computer graphics, web development, cloud computing, supercomputing etc. I think you will be confident enough to choose the area you are interested in, and you will be quite competitive in both industry and academia.\n\nI firmly believe that if you have read to this line, you do not lack the ability and commitment to learn CS well, you just need a good teacher to teach you a good course. And I will try my best to pick such courses for you, based on my three years of experience.\n\n## **Pros**\n\nFor me, the biggest advantage of self-learning is that I can adjust the pace of learning entirely according to my own progress. For difficult parts, I can watch the videos over and over again, Google it online and ask questions on StackOverflow until I have it all figured out. For those that I mastered relatively quickly, I could skip them at twice or even three times the speed.\n\nAnother great thing about self-learning is that you can learn from different perspectives. I have taken core courses such as architectures, networking, operating systems, and compilers from different universities. Different instructors may have different views on the same knowledge, which will broaden your horizon.\n\nA third advantage of self-learning is that you do not need to go to the class, listening to the boring lectures.\n\n## **Cons**\n\nOf course, as a big fan of self-learning, I have to admit that it has its disadvantages.\n\nThe first is the difficulty of communication. I'm actually a very keen questioner, and I like to follow up all the points I don't understand. But when you're facing a screen and you hear a teacher talking about something you don't understand, you can't go to the other end of the network and ask him or her for clarification. I try to mitigate this by thinking independently and making good use of Google, but it would be great to have a few friends to study together. You can refer to `README` for more information on participating a community group.\n\nThe second thing is that these courses are basically in English. From the videos to the slides to the assignments, all in English. You may struggle at first, but I think it's a challenge that if you overcome, it will be extremely rewarding. Because at the moment, as reluctant as I am, I have to admit that in computer science, a lot of high quality documentation, forums and websites are all in English.\n\nThe third, and I think the most difficult one, is self-discipline. Because have no DDL can sometimes be a really scary thing, especially when you get deeper, many foreign courses are quite difficult. You have to be self-driven enough to force yourself to settle down, read dozens of pages of Project Handout, understand thousands of lines of skeleton code and endure hours of debugging time. With no credits, no grades, no teachers, no classmates, just one belief - that you are getting better.\n\n## **Who is this book for?**\n\nAs I said in the beginning, anyone who is interested in learning computer science on their own can refer to this book. If you already have some basic skills and are just interested in a particular area, you can selectively pick and choose what you are interested in to study. Of course, if you are a novice who knows nothing about computers like I did back then, and just begin your college journey, I hope this book will be your cheat sheet to get the knowledge and skills you need in the least amount of time. In a way, this book is more like a course search engine ordered according to my experience, helping you to learn high quality CS courses from the world's top universities without leaving home.\n\nOf course, as an undergraduate student who has not yet graduated, I feel that I am not in a position nor have the right to preach one way of learning. I just hope that this material will help those who are also self-motivated and persistent to gain a richer, more varied and satisfying college life.\n\n## **Special thanks**\n\nI would like to express my sincere gratitude to all the professors who have made their courses public for free. These courses are the culmination of decades of their teaching careers, and they have chosen to selflessly make such a high quality CS education available to all. Without them, my university life would not have been as fulfilling and enjoyable. Many of the professors would even reply with hundreds of words in length after I had sent them a thank you email, which really touched me beyond words. They also inspired me all the time that if decide to do something, do it with all heart and soul.\n\n## **Want to join as a contributor?**\n\nThere is a limit to how much one person can do, and this book was written by me under a heavy research schedule, so there are inevitably imperfections. In addition, as I work in the area of systems, many of the courses focus on systems, and there is relatively little content related to advanced mathematics, computing theory, and advanced algorithms. If any of you would like to share your self-learning experience and resources in other areas, you can directly initiate a Pull Request in the project, or feel free to contact me by email ([zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn)).\n"
  },
  {
    "path": "docs/index.md",
    "content": "<figure markdown>\n  ![Image title](./images/title.png){ width=\"600\" }\n</figure>\n\n# 前言\n\n**🎉🎉 [Release v1.2.0](https://github.com/PKUFlyingPig/cs-self-learning/releases/tag/v1.2.0): 更新了[深度生成模型学习路线](./深度生成模型/roadmap.md) 🎉🎉**\n\n这是一本计算机的自学指南，也是对自己大学三年自学生涯的一个纪念。\n\n这同时也是一份献给北大信科学弟学妹们的礼物。如果这本书能对你们的信科生涯有哪怕一丝一毫的帮助，都是对我极大的鼓励和慰藉。\n\n本书目前包括了以下部分(如果你有其他好的建议，或者想加入贡献者的行列，欢迎邮件 [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn) 或者在 issue 里提问)：\n\n- 本书使用指南：由于书内涵盖资源众多，我根据不同人群的空闲时间和学习目标制定了对应的使用指南。\n- 一份供参考的 CS 学习规划：我根据自己的自学经历制定的全面的、系统化的 CS 自学规划。\n- 必学工具：一些 CSer 效率工具介绍，例如 IDE, 翻墙, StackOverflow, Git, GitHub, Vim, LaTeX, GNU Make, Docker, 工作流 等等。\n- 经典书籍推荐：你是否苦于教材的晦涩难懂不知所云？别从自己身上找原因了，可能只是教材写得太烂。看过 CSAPP 这本书的同学一定会感叹好书的重要，我将列举推荐各个计算机领域的必看好书与资源链接。\n- **国内外高质量 CS 课程汇总**：我将把我上过的以及开源社区贡献的**高质量**的国内外 CS 课程分门别类进行汇总，介绍其课程内容特点并给出相应的自学建议，大部分课程都会有一个独立的仓库维护相关的资源以及作业实现供大家学习参考。\n\n## 梦开始的地方 —— CS61A\n\n大一入学时我是一个对计算机一无所知的小白，装了几十个 G 的 Visual Studio 天天和 OJ 你死我活。凭着高中的数学底子我数学课学得还不错，但在专业课上对竞赛大佬只有仰望。提到编程我只会打开那笨重的 IDE，新建一个我也不知道具体是干啥的命令行项目，然后就是 `cin`, `cout`, `for` 循环，然后 CE, RE, WA 循环。当时的我就处在一种拼命想学好但不知道怎么学，课上认真听讲但题还不会做，课后做作业完全是用时间和它硬耗的痛苦状态。我至今电脑里还存着自己大一上学期计算概论大作业的源代码 —— 一个 1200 行的 C++ 文件，没有头文件、没有类、没有封装、没有 unit test、没有 Makefile、没有 Git，唯一的优点是它确实能跑，缺点是“能跑”的补集。我一度怀疑我是不是不适合学计算机，因为童年对于极客的所有想象，已经被我第一个学期的体验彻底粉碎了。\n\n这一切的转机发生在我大一的寒假，我心血来潮想学习 Python。无意间看到知乎有人推荐了 CS61A 这门课，说是 UC Berkeley 的大一入门课程，讲的就是 Python。我永远不会忘记那一天，打开 [CS61A](https://cs61a.org/) 课程网站的那个瞬间，就像哥伦布发现了新大陆一样，我开启了新世界的大门。\n\n我一口气 3 个星期上完了这门课，它让我第一次感觉到原来 CS 可以学得如此充实而有趣，原来这世上竟有如此精华的课程。\n\n为避免有崇洋媚外之嫌，我单纯从一个学生的视角来讲讲自学 CS61A 的体验：\n\n- 独立搭建的课程网站: 一个网站将所有课程资源整合一体，条理分明的课程 schedule、所有 slides, homework, discussion 的文件链接、详细明确的课程给分说明、历年的考试题与答案。这样一个网站抛开美观程度不谈，既方便学生，也让资源公正透明。\n\n- 课程教授亲自编写的教材：CS61A 这门课的开课老师将 MIT 的经典教材 *Structure and Interpretation of Computer Programs* (SICP) 用Python这门语言进行改编（原教材基于 Scheme 语言），保证了课堂内容与教材内容的一致性，同时补充了更多细节，可以说诚意满满。而且[全书开源](https://www.composingprograms.com/)，可以直接线上阅读。\n\n- 丰富到让人眼花缭乱的课程作业：14 个 lab 巩固随堂知识点，10 个 homework，还有 4 个代码量均上千行的 project。与大家熟悉的 OJ 和 Word 文档式的作业不同，所有作业均有完善的代码框架，保姆级的作业说明。每个 Project 都有详尽的 handout 文档、全自动的评分脚本。CS61A 甚至专门开发了一个[自动化的作业提交评分系统](https://okpy.org/)（据说还发了论文）。当然，有人会说“一个 project 几千行代码大部分都是助教帮你写好的，你还能学到啥？”。此言差矣，作为一个刚刚接触计算机，连安装 Python 都磕磕绊绊的小白来说，这样完善的代码框架既可以让你专注于巩固课堂上学习到的核心知识点，又能有“我才学了一个月就能做一个小游戏了！”的成就感，还能有机会阅读学习别人高质量的代码，从而为自己所用。我觉得在低年级，这种代码框架可以说百利而无一害。就是苦了老师和助教，因为开发这样的作业可想而知需要相当大的时间投入和多年的迭代积累。\n\n- 每周 Discussion 讨论课：助教会讲解知识难点和考试例题，习题全部用 LaTeX 撰写，相当规范并且会给出详细的解答，让学生及时查漏补缺巩固知识点。\n\n这样的课程，你完全不需要任何计算机的基础，你只需要努力、认真、花时间就够了。此前那种有劲没处使的感觉，那种付出再多时间却得不到回报的感觉，从此烟消云散。这太适合我了，我从此爱上了自学。\n\n试想如果有人能把艰深的知识点嚼碎嚼烂，用生动直白的方式呈现给你，还有那么多听起来就很 fancy，种类繁多的 project 来巩固你的理论知识，你会觉得他们真的是在倾尽全力想方设法地让你完全掌握这门课，你会觉得不学好它简直是对这些课程建设者的侮辱。\n\n如果你觉得我在夸大其词，那么不妨从 [CS61A](https://cs61a.org/) 开始，因为它是我的梦开始的地方。\n\n## 为什么写这本书\n\n在我2020年秋季学期担任《深入理解计算机系统》（CSAPP）这门课的助教时，我已经自学一年多了。这一年多来我无比享受这种自学模式，为了分享这种快乐，我为自己的研讨班学生做过一个 [CS自学资料整理仓库](https://github.com/PKUFlyingPig/Self-learning-Computer-Science)。当时纯粹是心血来潮，因为我也不敢公然鼓励大家翘课自学。\n\n但随着又一年时间的维护，这个仓库的内容已经相当丰富，基本覆盖了计科、智能系、软工系的绝大多数课程，我也为每个课程都建了各自的 GitHub 仓库，汇总我用到的自学资料以及作业实现。\n\n直到大四开始凑学分毕业的时候，我打开自己的培养方案，我发现它已经是我这个自学仓库的子集了，而这距离我开始自学也才两年半而已。于是，一个大胆的想法在我脑海中浮现：也许，我可以打造一个自学式的培养方案，把我这三年自学经历中遇到的坑、走过的路记录下来，以期能为后来的学弟学妹们贡献自己的一份微薄之力。\n\n如果大家可以在三年不到的时间里就能建立起整座 CS 的基础大厦，能有相对扎实的数学功底和代码能力，经历过数十个千行代码量的 Project 的洗礼，掌握至少 C/C++/Java/JS/Python/Go/Rust 等主流语言，对算法、电路、体系、网络、操统、编译、人工智能、机器学习、计算机视觉、自然语言处理、强化学习、密码学、信息论、博弈论、数值分析、统计学、分布式、数据库、图形学、Web开发、云服务、超算等等方面均有涉猎。我想，你将有足够的底气和自信选择自己感兴趣的方向，无论是就业还是科研，你都将有相当的竞争力。\n\n因为我坚信，既然你能坚持听我 BB 到这里，你一定不缺学好 CS 的能力，你只是没有一个好的老师，给你讲一门好的课程。而我，将力图根据我三年的体验，为你挑选这样的课程。\n\n## 自学的好处\n\n对我来说，自学最大的好处就在于可以完全根据自己的进度来调整学习速度。对于一些疑难知识点，我可以反复回看视频，在网上谷歌相关的内容，上 StackOverflow 提问题，直到完全将它弄明白。而对于自己掌握得相对较快的内容，则可以两倍速甚至三倍速略过。\n\n自学的另一大好处就是博采众长。计算机系的几大核心课程：体系、网络、操统、编译，每一门我基本都上过不同大学的课程，不同的教材、不同的知识点侧重、不同的 project 将会极大丰富你的视野，也会让你理解错误的一些内容得到及时纠正。\n\n自学的第三个好处是时间自由。大学的课余时间本就相对自由，再加上不用去上课的话更是可以放飞自我地安排自学时间和进度。我大二的时候赶上疫情在家窝了大半年，返校之后也基本没有线下去过教室上课，对绩点也毫无影响。\n\n## 自学的坏处\n\n当然，作为 CS 自学主义的忠实拥趸，我不得不承认自学也有它的坏处。\n\n第一就是交流沟通的不便。我其实是一个很热衷于提问的人，对于所有没有弄明白的点，我都喜欢穷追到底。但当你面对着屏幕听到老师讲了一个你没明白的知识点的时候，你无法顺着网线到另一端向老师问个明白。我努力通过独立思考和善用 Google 来缓解这一点，但是，如果能有几个志同道合的伙伴结伴自学，那将是极好的。关于交流群的建立，大家可以参考仓库 `README` 中的教程。\n\n第二就是这些自学的课程基本都是英文的。从视频到课件再到作业全是英文，所以有一定的门槛。我尽量在汇总课程视频资源的时候寻找带中文字幕的搬运视频，但大多数课程还是只有机翻或者生肉，而课件和作业肯定都是英文的。不过我觉得这是个值得努力克服的挑战，因为在当下，虽然我很不情愿，但也不得不承认，在计算机领域，很多优质的文档、论坛、网站都是英文居多。养成英文阅读的习惯，在赤旗插遍世界之前，还是有一定好处的（狗头保命）。\n\n第三，也是我觉得最困难的一点，就是自律。因为没有 DDL 有时候真的是一件可怕的事情。特别是随着学习的深入，国外的很多课程是相当虐的。你得有足够的驱动力强迫自己静下心来，阅读几十页的 Project Handout，理解上千行的代码框架，忍受数个小时的 debug 时光。而这一切，没有学分，没有绩点，没有老师，没有同学，只有一个信念 —— 你在变强。\n\n## 这本书适合谁\n\n正如我在前言里说的，任何有志于自学计算机的朋友都可以参考这本书。如果你已经有了一定的计算机基础，只是对某个特定的领域感兴趣，可以选择性地挑选你感兴趣的内容进行学习。当然，如果你是一个像我当年一样对计算机一无所知的小白，初入大学的校门，我希望这本书能成为你的攻略，让你花最少的时间掌握你所需要的知识和能力。某种程度上，这本书更像是一个根据我的体验来排序的课程搜索引擎，帮助大家足不出户，体验世界顶级名校的计算机优质课程。\n\n当然，作为一个还未毕业的本科生，我深感自己没有能力也没有权利去宣扬一种学习方式，我只是希望这份资料能让那些同样有自学之心和毅力朋友可以少走些弯路，收获更丰富、更多样、更满足的学习体验。\n\n## 特别鸣谢\n\n在这里，我怀着崇敬之心真诚地感谢所有将课程资源无偿开源的各位教授们。这些课程倾注了他们数十年教学生涯的积淀和心血，他们却选择无私地让所有人享受到如此高质量的 CS 教育。没有他们，我的大学生活不会这样充实而快乐。很多教授在我给他们发了感谢邮件之后，甚至会回复上百字的长文，真的让我无比感动。他们也时刻激励着我，做一件事，就得用心做好，无论是学习、科研、还是为人。\n\n## 你也想加入到贡献者的行列\n\n一个人的力量终究是有限的，这本书也是我在繁重的科研之余熬夜抽空写出来的，难免有不够完善之处。另外，由于个人做的是系统方向，很多课程侧重系统领域，对于数学、理论计算机、高级算法相关的内容则相对少些。如果有大佬想在其他领域分享自己的自学经历与资源，可以直接在项目中发起 Pull Request，也欢迎和我邮件联系（[zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn)）。\n\n## 关于交流群的建立\n\n本书支持页面评论功能，因此如果你想自学某课程，可以自己建立群聊后（QQ 微信皆可）在对应的课程页面下方发表评论，注明你的学习目标以及加入交流群的途径。此外，过去已有不少朋友在 issue 里建立了类似群聊，可以自行选择直接加入。\n\n## 请作者喝杯下午茶\n\n本书的内容是完全开源免费的，如果你觉得该项目对你真的有帮助，可以给仓库点个 star 或者请作者喝一杯下午茶。\n\n<figure markdown>\n  ![Image title](./images/sponsor.png){ width=\"500\" }\n</figure>"
  },
  {
    "path": "docs/人工智能/CS188.en.md",
    "content": "# CS188: Introduction to Artificial Intelligence\n\n## Course Overview\n\n- University：UC Berkeley\n- Prerequisites：CS70\n- Programming Language：Python\n- Course Difficulty：🌟🌟🌟\n- Estimated Hours：50 hours\n\nThis 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.\n\nThe 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.\n\n## Course Resources\n\n- Course Websites：[Fall 2022](https://inst.eecs.berkeley.edu/~cs188/fa22/), [Fall 2018](https://inst.eecs.berkeley.edu/~cs188/fa18/index.html)\n- 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\n- Course Textbook：Artificial intelligence: A Modern Approach\n- Course Assignments：Online assessments for written assignments and projects, details available on the course website\n"
  },
  {
    "path": "docs/人工智能/CS188.md",
    "content": "# CS188: Introduction to Artificial Intelligence\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS70\n- 编程语言：Python\n- 课程难度：🌟🌟🌟\n- 预计学时：50 小时\n\n伯克利的人工智能入门课，课程 notes 写得非常深入浅出，基本不需要观看课程视频。课程内容的安排基本按照人工智能的经典教材 *Artificial intelligence: A Modern Approach* 的章节顺序，覆盖了搜索剪枝、约束满足问题、马尔可夫决策过程、强化学习、贝叶斯网络、隐马尔可夫模型以及基础的机器学习和神经网络的相关内容。\n\n目前Spring 2024是最新一期视频与资料完整、开放了旁听gradescope的版本，大家可以在线完成书面作业并实时得到测评结果。同时课程的 6 个 Project 也是质量爆炸，复现了经典的 Packman（吃豆人）小游戏，会让你利用学到的 AI 知识，去实现相关算法，让你的吃豆人在迷宫里自由穿梭，躲避鬼怪，收集豆子。\n\n## 课程资源\n\n- 课程网站：[Spring 2024](https://inst.eecs.berkeley.edu/~cs188/sp24/)\n- 课程视频：每节课的链接详见课程网站\n- 课程教材：Artificial intelligence: A Modern Approach\n- 课程作业：在线测评书面作业和 Projects，详见课程网站\n"
  },
  {
    "path": "docs/人工智能/CS50.en.md",
    "content": "# Harvard's CS50: Introduction to AI with Python\n\n## Descriptions\n\n- Offered by: Harvard University\n- Prerequisites: Basic knowledge of probability theory and Python\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟\n- Class Hour: 30\n\nA 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.\n\n## Course Resources\n\n- Course Website: [2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)\n- Recordings: [2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)\n- Textbooks: No textbook is needed in this course.\n- Assignments: [2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/) with 12 programming labs of high quality mentioned above.\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/cs50_ai - GitHub](https://github.com/PKUFlyingPig/cs50_ai).\n"
  },
  {
    "path": "docs/人工智能/CS50.md",
    "content": "# CS50’s Introduction to AI with Python\n\n## 课程简介\n\n- 所属大学：Harvard\n- 先修要求：基本概率论 + Python 基础\n- 编程语言：Python\n- 课程难度：🌟🌟🌟\n- 预计学时：30 小时\n\n一门非常基础的 AI 入门课，让人眼前一亮的是 12 个设计精巧的编程作业，都会用学到的 AI 知识去实现一个简易的游戏 AI，比如用强化学习训练一个 Nim 游戏的 AI，用 alpha-beta 剪枝去扫雷等等，非常适合新手入门或者大佬休闲。\n\n## 课程资源\n\n- 课程网站：[2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)\n- 课程视频：[2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)\n- 课程教材：无\n- 课程作业：[2024](https://cs50.harvard.edu/ai/2024/)、[2020](https://cs50.harvard.edu/ai/2020/)，12个精巧的编程作业\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/cs50_ai - GitHub](https://github.com/PKUFlyingPig/cs50_ai) 中。\n"
  },
  {
    "path": "docs/人工智能/Neural Networks：Zero to Hero.en.md",
    "content": "# Neural Networks: Zero to Hero  \n\n## Description  \n\n- **Instructor:** Andrej Karpathy  \n- **Prerequisites:** Basic Python programming and some familiarity with deep learning concepts  \n- **Programming Language:** Python  \n- **Difficulty:** 🌟🌟🌟🌟  \n- **Class Hours:** Approximately 19 hours  \n\nThis hands-on deep learning course, taught by Andrej Karpathy, provides a detailed and intuitive introduction to neural networks and their underlying principles. The course starts with foundational concepts such as backpropagation and micrograd before progressing to building language models, WaveNets, and GPT from scratch. The emphasis is on practical implementation, with step-by-step coding explanations to help students understand and build complex models from the ground up.  \n\n## Instructor Information  \n\nAndrej Karpathy is a renowned AI researcher and educator with extensive experience in deep learning and neural networks. He was the **Senior Director of AI at Tesla**, leading the **computer vision team for Tesla Autopilot** from 2017 to 2022. Prior to that, he was a **research scientist and founding member at OpenAI** (2015-2017). In 2023, he returned to OpenAI, contributing to improvements in GPT-4 for ChatGPT. In 2024, he founded **Eureka Labs**, an AI+Education company.  \n\nKarpathy holds a **PhD from Stanford University**, where he worked on convolutional and recurrent neural networks with **Fei-Fei Li**. He has collaborated with leading AI researchers, including **Daphne Koller, Andrew Ng, Sebastian Thrun, and Vladlen Koltun**. He also taught the first deep learning course at Stanford, **CS 231n: Convolutional Neural Networks for Visual Recognition**, which became one of the largest classes at the university.  \n\n## Course Resources  \n\n- **Lecture Videos:** [YouTube Playlist](https://www.youtube.com/watch?v=VMj-3S1tku0&list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ)  \n- **Assignments:** Self-guided projects and code implementation exercises available throughout the lectures  \n\nFor more information, watch the full playlist on YouTube.  "
  },
  {
    "path": "docs/人工智能/Neural Networks：Zero to Hero.md",
    "content": "# 神经网络：从零到英雄  \n\n## 课程简介  \n\n- **讲师：** Andrej Karpathy  \n- **先修要求：** 具备基本的 Python 编程能力，并对深度学习概念有所了解  \n- **编程语言：** Python  \n- **难度：** 🌟🌟🌟🌟  \n- **课程时长：** 约 19 小时  \n\n本课程由 Andrej Karpathy 讲授，是一个深入浅出的深度学习课程，旨在帮助学习者掌握神经网络的核心原理。课程从基础概念（如反向传播和 micrograd）入手，逐步带领学员构建语言模型、WaveNet，并从零开始实现 GPT。课程以实践为主，提供逐步讲解的代码示例，让学员能够理解并构建复杂的神经网络模型。  \n\n## 讲师信息  \n\nAndrej Karpathy 是一位知名的人工智能研究员和教育者，在深度学习和神经网络领域具有丰富的经验。他曾在 **2017 至 2022 年担任特斯拉 AI 部门高级总监**，领导 **Tesla Autopilot 计算机视觉团队**，负责数据标注、神经网络训练、部署等工作。在此之前，他曾是 **OpenAI 的研究科学家和创始成员**（2015-2017）。2023 年，他回归 OpenAI，参与改进 ChatGPT 的 GPT-4。2024 年，他创立了 **Eureka Labs**，一家专注于 AI + 教育的公司。  \n\nKarpathy 拥有 **斯坦福大学博士学位**，师从 **Fei-Fei Li（李飞飞）**，主要研究卷积神经网络和循环神经网络及其在计算机视觉和自然语言处理中的应用。他曾与 **Daphne Koller、Andrew Ng（吴恩达）、Sebastian Thrun 和 Vladlen Koltun** 等知名研究员合作。此外，他还在斯坦福大学教授了首个深度学习课程 **CS 231n: 卷积神经网络与视觉识别**，该课程逐渐发展为斯坦福大学规模最大的课程之一。  \n\n## 课程资源  \n\n- **课程视频：** [YouTube 播放列表](https://www.youtube.com/watch?v=VMj-3S1tku0&list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ)  \n- **作业：** 课程中提供的代码实践和项目练习  \n\n更多信息请访问 YouTube 观看完整课程视频。  "
  },
  {
    "path": "docs/体系结构/CA.en.md",
    "content": "# ETH: Computer Architecture\n\n## Course Overview\n\n- University: ETH Zurich\n- Prerequisites: [DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/DDCA/)\n- Programming Language: C/C++, Verilog\n- Difficulty Level: 🌟🌟🌟🌟\n- Estimated Study Time: 70+ hours\n\nThis course, taught by Professor Onur Mutlu, delves into computer architecture. It appears to be an advanced course following [DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/DDCA/), aimed at teaching how to design control and data paths hardware for a MIPS-like processor, how to execute machine instructions concurrently through pipelining and simple superscalar execution, and how to design fast memory and storage systems. According to student feedback, the course is at least more challenging than CS61C, and some of its content is cutting-edge. Bilibili uploaders recommend it as a supplement to Carnegie Mellon University's 18-447 course. The reading materials provided are extensive, akin to attending a semester's worth of lectures.\n\nThe official website description is as follows:\n> \"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.\"\n\nThe programming practice involves using Verilog to design and simulate RT implementations of a MIPS-like pipeline processor to enhance theoretical course understanding. The initial experiments include Verilog CPU pipeline programming. Additionally, students will develop a cycle-accurate processor simulator in C and explore processor design options using this simulator.\n\n## Course Resources\n\n- Course Website: [2020 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start), [2022 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start)\n- Course Videos: Official videos available on the course website. A [2020 version is available on Bilibili](https://www.bilibili.com/video/BV1Vf4y1i7YG/?vd_source=77d47fcb2bac41ab4ad02f265b3273cf).\n- Course Textbooks: No designated textbook; each lecture has an extensive bibliography for reading.\n- Course Assignments: 5 Projects, mostly related to memory and cache, detailed on the [lab page of the course website](https://safari.ethz.ch/architecture/fall2022/doku.php?id=labs).\n\n## Resource Summary\nSome universities in China have introduced this course, so interested students can find additional resources through online searches."
  },
  {
    "path": "docs/体系结构/CA.md",
    "content": "# ETH: Computer Architecture\n\n## 课程简介\n\n- 所属大学：ETH Zurich\n- 先修要求：[DDCA](https://csdiy.wiki/%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84/DDCA/)\n- 编程语言：C/C++，verilog\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：70 小时 +\n\n讲解计算机体系结构，授课教师是 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的补充。所提供的阅读材料十分丰富，相当于听了一学期讲座。\n\n以下是官网的介绍：\n>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.\n\n编程实践采取 Verilog 设计和模拟类 MIPS 流水线处理器的寄存器传输（RT）实现，以此加强对理论课程的理解。因此前几个实验会有 verilog 的 CPU 流水线编程。同时还将使用C语言开发一个周期精确的处理器模拟器，并使用该模拟器探索处理器设计选项。\n\n\n## 课程资源\n\n- 课程网站：[2020 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start), [2022 Fall](https://safari.ethz.ch/architecture/fall2022/doku.php?id=start)\n- 课程视频：官方视频详见课程网站。B站有个[2020年版本搬运](https://www.bilibili.com/video/BV1Vf4y1i7YG/?vd_source=77d47fcb2bac41ab4ad02f265b3273cf)。\n- 课程教材：无指定教材，每个 lecture 都有大量文献可供阅读\n- 课程作业：5 个 Project ，大多与内存和cache相关，具体内容见[课程网站的lab界面](https://safari.ethz.ch/architecture/fall2022/doku.php?id=labs)\n\n## 资源汇总\n国内有高校引入了这门课，因此有需要的同学可以搜索到一些资源。\n\n\n"
  },
  {
    "path": "docs/体系结构/CS61C.en.md",
    "content": "# CS61C: Great Ideas in Computer Architecture\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS61B\n- Programming Languages: C\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nThis 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.\n\nThe 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.\n\nIn a word, this is the best computer architecture course I have ever taken.\n\n## Course Resources\n\n- [Course Website](https://cs61c.org/)\n- Course Website (Backup): [Fa24-WayBack Machine](https://web.archive.org/web/20241219154359/https://cs61c.org/fa24/), [Fa20-WayBack Machine](https://web.archive.org/web/20220120134001/https://inst.eecs.berkeley.edu/~cs61c/fa20/), [Fa20-Backup](https://www.learncs.site/docs/curriculum-resource/cs61c/syllabus)\n- Recordings: [Su20-Bilibili](https://www.bilibili.com/video/BV1fC4y147iZ/?share_source=copy_web&vd_source=7c3823b46a52fbbef42b79e01d55c300), [Su20-Youtube](https://youtube.com/playlist?list=PLDoI-XvXO0aqgoMQvogzmf7CKiSMSUS3M&si=62aaH5a_PMGrAT2Y), [Fa20-Bilibili](https://www.bilibili.com/video/BV17b42177VG/?share_source=copy_web&vd_source=7c3823b46a52fbbef42b79e01d55c300), [Fa20-Youtube](https://youtube.com/playlist?list=PL0j-r-omG7i0-mnsxN5T4UcVS1Di0isqf&si=CG1EjQiPcw7r7Vs4)\n- Assignments: [Fa20-Backup](https://github.com/InsideEmpire/CS61C-Assignment#)\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS61C-summer20 - GitHub](https://github.com/PKUFlyingPig/CS61C-summer20).\n\nAll the resources and assignments used by @InsideEmpire in this course are maintained in [@InsideEmpire/CS61C-fall20 - GitHub](https://github.com/InsideEmpire/CS61C-PathwayToSuccess).\n\nAll the resources and assignments used by @RisingUppercut in this course are maintained in [@RisingUppercut/CS61C-fall24 - GitHub](https://github.com/RisingUppercut/CS61C_2024_Fall).\n"
  },
  {
    "path": "docs/体系结构/CS61C.md",
    "content": "# CS61C: Great Ideas in Computer Architecture\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS61A, CS61B\n- 编程语言：C\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 小时\n\n伯克利 CS61 系列的最后一门课程，深入计算机的硬件细节，带领学生逐步理解 C 语言是如何一步步转化为 RISC-V 汇编并在 CPU 上执行的。和 [Nand2Tetris](./N2T.md) 不同，这门课\n在难度和深度上都会提高很多，具体会涉及到流水线、Cache、虚存以及并发相关的内容。\n\n这门课的 Project 也非常新颖有趣。Project1 会让你用 C 语言写一个小程序，20 年秋季学期是著名的游戏 *Game of Life*。Project2 会让你用 RISC-V 汇编编写一个神经网络，用来\n识别 MNIST 手写数字，非常锻炼你对汇编代码的理解和运用。Project3 中你会用 Logisim 这个数字电路模拟软件搭建出一个二级流水线的 CPU，并在上面运行 RISC-V 汇编代码。Project4\n会让你使用 OpenMP, SIMD 等方法并行优化矩阵运算，实现一个简易的 Numpy。\n\n总而言之，这是个人上过的最好的计算机体系结构的课程。\n\n## 课程资源\n\n- [课程网站](https://cs61c.org/)\n- 课程网站 (页面备份): [Fa24-WayBack Machine](https://web.archive.org/web/20241219154359/https://cs61c.org/fa24/), [Fa20-WayBack Machine](https://web.archive.org/web/20220120134001/https://inst.eecs.berkeley.edu/~cs61c/fa20/), [Fa20-备份](https://www.learncs.site/docs/curriculum-resource/cs61c/syllabus)\n- 课程视频: [Su20-Bilibili](https://www.bilibili.com/video/BV1fC4y147iZ/?share_source=copy_web&vd_source=7c3823b46a52fbbef42b79e01d55c300), [Su20-Youtube](https://youtube.com/playlist?list=PLDoI-XvXO0aqgoMQvogzmf7CKiSMSUS3M&si=62aaH5a_PMGrAT2Y), [Fa20-Bilibili](https://www.bilibili.com/video/BV17b42177VG/?share_source=copy_web&vd_source=7c3823b46a52fbbef42b79e01d55c300), [Fa20-Youtube](https://youtube.com/playlist?list=PL0j-r-omG7i0-mnsxN5T4UcVS1Di0isqf&si=CG1EjQiPcw7r7Vs4)\n- 课程作业: [Fa20-备份](https://github.com/InsideEmpire/CS61C-Assignment#)\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS61C-summer20 - GitHub](https://github.com/PKUFlyingPig/CS61C-summer20) 中。\n\n@InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 [@InsideEmpire/CS61C-fall20 - GitHub](https://github.com/InsideEmpire/CS61C-PathwayToSuccess) 中。\n\n@RisingUppercut 在学习这门课中用到的所有资源和作业实现都汇总在 [@RisingUppercut/CS61C-fall24 - GitHub](https://github.com/RisingUppercut/CS61C_2024_Fall) 中。\n"
  },
  {
    "path": "docs/体系结构/DDCA.en.md",
    "content": "# Digital Design and Computer Architecture\n\n## Descriptions\n\n- Offered by: ETH Zurich\n- Prerequisites: CS50 or same level course; Better have a basic knowledge of C\n- Programming Languages: C, Verilog, MIPS, LC3\n- Difficulty: 🌟🌟🌟\n- Class Hour: 100 hours\n\nIn 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.\n\nThere 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.\n\n## Course Resources\n\n- Course Website: <https://safari.ethz.ch/digitaltechnik/spring2020/>\n- Recordings: <https://www.youtube.com/playlist?list=PL5Q2soXY2Zi_FRrloMa2fUYWPGiZUBQo2>\n- Textbook1: Patt and Patel, Introduction to Computing Systems\n- Textbook2: Harris and Harris, Digital Design and Computer Architecture (MIPS Edition)\n- Assignments: refer to the course website.\n"
  },
  {
    "path": "docs/体系结构/DDCA.md",
    "content": "# ETH Zurich：Digital Design and Computer Architecture\n\n## 课程简介\n\n- 所属大学：ETH Zurich\n- 先修要求：CS50 或同阶课程，最好有 C 语言基础。\n- 编程语言：C，Verilog，MIPS 汇编，LC3 汇编\n- 课程难度：🌟🌟🌟\n- 预计学时：100 小时\n\n体系结构领域的大牛 Onur Mutlu 来教你数字电路和计算机体系结构。课程完全从计算机设计的角度出发，从晶体管、逻辑门开始，一直讲解到微架构、缓存和虚拟内存，还会介绍\n很多体系结构领域最新的研究进展。课程共有 9 个 lab，使用 Basys 3 FPGA 开发板（可自行购买）和 Xilinx 公司的  [Vivado 软件](https://china.xilinx.com/products/design-tools/vivado.html)（可在官网免费下载使用）进行电路设计，从组合电路\n和时序电路开始，一直到最后部署一个完整的 CPU。课程资料除了 lab 答案和当期考试答案之外全部开源，学完之后你可以掌握计算机相关的数字电路，Verilog 硬件描述语言，MIPS 与 C 之间的转换关系，MIPS 单周期多周期流水线 CPU 的设计和性能分析，缓存，虚拟内存等重要概念。\n\n## 课程资源\n\n- 课程网站：[2020](https://safari.ethz.ch/digitaltechnik/spring2020/),[2023](https://safari.ethz.ch/digitaltechnik/spring2023/)\n- 课程视频：[youtube](https://www.youtube.com/playlist?list=PL5Q2soXY2Zi_FRrloMa2fUYWPGiZUBQo2), [B站2020年版本搬运](https://www.bilibili.com/video/BV1MA411s7qq/?vd_source=77d47fcb2bac41ab4ad02f265b3273cf)\n- 课程教材1：Patt and Patel, Introduction to Computing Systems\n- 课程教材2：Harris and Harris, Digital Design and Computer Architecture (MIPS Edition)\n中文译本为《数字设计和计算机体系结构(原书第2版)》\n- 课程实验：9 个实验从零开始设计 MIPS CPU，详见课程网站\n"
  },
  {
    "path": "docs/体系结构/N2T.en.md",
    "content": "# Coursera: Nand2Tetris\n\n## Descriptions\n\n- Offered by: Hebrew University of Jerusalem\n- Prerequisites: None\n- Programming Languages: Chosen by the course taker\n- Difficulty: 🌟🌟🌟\n- Class Hour: 40 hours\n\nAs one of the most popular courses on [Coursera](https://www.coursera.org), tens of thousands of people give it a full score, and over four hundred colleges and high schools teach it. It guides the students who may have no preparatory knowledge in computer science to build a whole computer from Nand logic gates and finally run the Tetris game on it. \n\nSounds cool, right? It's even cooler when you implement it!\n\nThe course is divided into hardware modules and software modules respectively. \n\nIn the hardware modules, you will dive into a world based on 0 and 1, create various logic gates from Nand gates, and construct a CPU step by step to run a simplified instruction set designed by the course instructors. \n\nIn the software modules, you will first write a compiler to compile a high-level language *Jack* which is designed by the instructors into byte codes that can run on virtual machines. Then you will further translate the byte codes into assembly language that can run on the CPU you create in the hardware modules. You will also develop a simple operating system that enables your computer to support GUI. \n\nFinally, you can use *Jack* to create the Tetris game, compile it into assembly language, run it on your self-made CPU, and interact with it through the OS built by yourself. After taking this course, you will have a comprehensive and profound understanding of the entire computer architecture, which might be extremely helpful to your subsequent learning. \n\nYou may think that the course is too difficult. Don't worry, because it is completely designed for laymen. In the instructors' expectations, even high school students can understand the content. So as long as you keep pace with the syllabus, you can finish it within a month. \n\nThis course extracts the essence of computers while omitting the tedious and complex details in modern computer systems that are designed for efficiency and performance. Surely you will enjoy the elegance and magic of computers in a relaxing and jolly journey. \n\n## Course Resources\n\n- Course Website: [Nand2Tetris I](https://www.coursera.org/learn/build-a-computer/home/week/1), [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome)\n- Recordings: Refer to course website\n- Textbook: [The Elements of Computing Systems: Building a Modern Computer from First Principles (CN-zh version)][book]\n- Assignments: 10 projects to construct a computer, refer to the course website for more details \n\n[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\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig are maintained in [PKUFlyingPig/NandToTetris - GitHub](https://github.com/PKUFlyingPig/NandToTetris). \n"
  },
  {
    "path": "docs/体系结构/N2T.md",
    "content": "# Coursera: Nand2Tetris\n\n## 课程简介\n\n- 所属大学：希伯来大学\n- 先修要求：无\n- 编程语言：任选一个编程语言\n- 课程难度：🌟🌟🌟\n- 预计学时：40 小时\n\n[Coursera](https://www.coursera.org) 上被数万人评为满分，在全球四百多所高校、高中被采用，让一个完全没有计算机基础的人从与非门开始造一台计算机，并在上面运行俄罗斯方块小游戏。\n\n听起来就很酷对不对？实现起来更酷！这门课分为硬件和软件两个部分。在硬件部分，你将进入 01 的世界，用与非门构造出逻辑电路，并逐步搭建出一个 CPU 来运行一套课程作者定义的简易汇编代码。在软件部分，你将编写一个编译器，将作者开发的一个名为Jack的高级语言编译为可以运行在虚拟机上的字节码，然后进一步翻译为汇编代码。你还将开发一个简易的 OS，让你的计算机支持输入输出图形界面。至此，你可以用 Jack 开发一个俄罗斯方块的小游戏，将它编译为汇编代码，运行在你用与非门搭建出的 CPU 上，通过你开发的 OS 进行交互。学完这门课程，你将对整个计算机的体系结构有一个全局且深刻的理解，对于你后续课程的学习有着莫大的帮助。\n\n你也许会担心课程会不会很难，但这门课面向的人群是完全没有计算机基础的人，课程作者的目标是让高中生都能理解。因此，只要你按部就班跟着课程规划走，一个月内学完应该绰绰有余。麻雀虽小但是五脏俱全，这门课很好地提取出了计算机的本质，而不过多地陷于现代计算机为了性能而设计出的众多复杂细节。让学习者能在轻松愉快的学习体验中感受计算机的优雅与神奇。\n\n## 课程资源\n\n- 课程网站：[Nand2Tetris I](https://www.coursera.org/learn/build-a-computer/home/week/1), [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome)\n- 课程视频：详见课程网站\n- 课程教材：[计算机系统要素：从零开始构建现代计算机][book]\n- 课程作业：10 个 Project 带你造台计算机，具体要求详见课程网站\n\n[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\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/NandToTetris - GitHub](https://github.com/PKUFlyingPig/NandToTetris) 中。\n"
  },
  {
    "path": "docs/使用指南.en.md",
    "content": "# **How to Use This Book**\n\nAs the number of contributors grows, the content of this book keeps expanding. It is impractical and unnecessary to try to complete all the courses in the book. Attempting to do so might even be counterproductive, resulting in effort without reward. To better align with our readers and make this book truly useful for you, I have roughly divided readers into the following three categories based on their needs. Everyone can plan their own self-study program accurately according to their actual situation.\n\n## **Freshmen**\n\nIf you have just entered the university or are in the lower grades, and you are studying or planning to switch to computer science, then you are lucky. As studying is your main task, you have ample time and freedom to learn what you are interested in without the pressure of work and daily life. You needn't be overly concerned with utilitarian thoughts like \"is it useful\" or \"can it help me find a job\". So, how should you arrange your studies? The first point is to break away from the passive learning style formed in high school. As a small-town problem solver, I know that most Chinese high schools fill every minute of your day with tasks, and you just need to passively follow the schedule. As long as you are diligent, the results won’t be too bad. However, once you enter university, you have much more freedom. All your extracurricular time is yours to use, and no one will organize knowledge points or summarize outlines for you. Exams are not as formulaic as in high school. If you still hold the mentality of a \"good high school student\", following everything step by step, the results may not be as expected. The professional training plan may not be reasonable, the teaching may not be responsible, attending classes may not guarantee understanding, and even the exam content may not relate to what was taught. Jokingly, you might feel that the whole world is against you, and you can only rely on yourself.\n\nGiven this reality, if you want to change it, you must first survive and have the ability to question it. In the lower grades, it’s important to lay a solid foundation. This foundation is comprehensive, covering both in-class knowledge and practical skills, which are often lacking in China's undergraduate computer science education. Based on personal experience, I offer the following suggestions for your reference.\n\nFirst, learn how to write \"elegant\" code. Many programming introductory courses in China can be extremely boring syntax classes, less effective than reading official documentation. Initially, letting students understand what makes code elegant and what constitutes \"bad taste\" is beneficial. Introductory courses usually start with procedural programming (like C language), but even here, the concepts of **modularity** and **encapsulation** are crucial. If you write code just to pass on OpenJudge, using lengthy copy-pasting and bloated main functions, your code quality will remain poor. For larger projects, endless debugging and maintenance costs will overwhelm you. So, constantly ask yourself, is there a lot of repetitive code? Is the current function too complex (Linux advocates each function should do only one thing)? Can this code be abstracted into a function? Initially, this may seem cumbersome for simple problems, but remember, good habits are invaluable. Even middle school students can master C language, so why should a company hire you as a software engineer?\n\nAfter procedural programming, the second semester of the freshman year usually introduces object-oriented programming (like C++ or Java). I highly recommend [MIT 6.031: Software Construction](软件工程/6031.md) course notes, which use Java (switch to TypeScript after 2022) to explain how to write “elegant” code in detail, including Test-Driven development, function Specification design, exception handling, and more. Also, understanding common design patterns is necessary when learning object-oriented programming. Domestic object-oriented courses can easily become dull syntax classes, focusing on inheritance syntax and puzzling questions, neglecting that these are rarely used in real-world development. The essence of object-oriented programming is teaching students to abstract real problems into classes and their relationships, and design patterns are the essence of these abstractions. I recommend the book [\"Big Talk Design Patterns\"](https://book.douban.com/subject/2334288/), which is very easy to understand.\n\nSecond, try to learn some productivity-enhancing tools and skills, such as Git, Shell, Vim. I strongly recommend the [MIT missing semester](编程入门/MIT-Missing-Semester.md) course. Initially, you may feel awkward, but force yourself to use them, and your development efficiency will skyrocket. Additionally, many applications can greatly increase your productivity. A rule of thumb is: any action that requires your hands to leave the keyboard should be eliminated. For example, switching applications, opening files, browsing the web - there are plugins for these (like [Alfred](https://www.alfredapp.com/) for Mac). If you find an daily operation that takes more than 1 second, try to reduce it to 0.1 seconds. After all, you'll be dealing with computers for decades, so forming a smooth workflow can greatly enhance efficiency. Lastly, learn to touch type! If you still need to look at the keyboard while typing, find a tutorial online and learn to type without looking. This will significantly increase your development efficiency.\n\nThird, balance coursework and self-learning. We feel angry about the institution but must also follow the rules, as GPA is still important for postgraduate recommendations. Therefore, in the first year, I suggest focusing on the curriculum, complemented by high-quality extracurricular resources. For example, for calculus and linear algebra, refer to [MIT 18.01/18.02](./数学基础/MITmaths.md) and [MIT 18.06](./数学基础/MITLA.md). During holidays, learn Python through [UCB CS61A](./编程入门/Python/CS61A.md). Also, focus on good programming habits and practical skills mentioned above. From my experience, mathematics courses matter a lot for your GPA in the first year, and the content of math exams varies greatly between different schools and teachers. Self-learning might help you understand the essence of mathematics, but it may not guarantee good grades. Therefore, it’s better to specifically practice past exams. \n\nIn your sophomore year, as computer science courses become the majority, you can fully immerse yourself in self-learning. Refer to [A Reference Guide for CS Learning](./CS学习规划.md), a guide I created based on three years of self-learning, introducing each course and its importance. For every course in your curriculum, this guide should have a corresponding one, and I believe they are of higher quality. If there are course projects, try to adapt labs or projects from these self-learning courses. For example, I took an operating systems course and found the teacher was still using experiments long abandoned by UC Berkeley, so I emailed the teacher to switch to the [MIT 6.S081](./操作系统/MIT6.S081.md) xv6 Project I was studying. This allowed me to self-learn while inadvertently promoting curriculum reform. In short, be flexible. Your goal is to master knowledge in the most convenient and efficient way. Anything that contradicts this goal can be “fudged” as necessary. With this attitude, after my junior year, I barely attended offline classes (I spent most of my sophomore year at home due to the pandemic), and it had no impact on my GPA.\n\nFinally, I hope everyone can be less impetuous and more patient in their pursuit. Many ask if self-learning requires strong self-discipline. It depends on what you want. If you still hold the illusion that mastering a programming language will earn you a high salary and a share of the internet’s profits, then whatever I say is pointless. Initially, my motivation was out of pure curiosity and a natural desire for knowledge, not for utilitarian reasons. The process didn't involve “extraordinary efforts”; I spent my days in college as usual and gradually accumulated this wealth of materials. Now, as the US-China confrontation becomes a trend, we still humbly learn techniques from the West. Who will change this? You, the newcomers. So, go for it, young man!\n\n## **Simplify the Complex**\n\nIf you have graduated and started postgraduate studies, or have begun working, or are in another field and want to learn coding in your spare time, you may not have enough time to systematically complete the materials in [A Reference Guide for CS Learning](./CS学习规划.md), but still want to fill the gaps in your undergraduate foundation. Considering that these readers usually has some programming experience, there is no need to repeat introductory courses. From a practical standpoint, since the general direction of work is already determined, there is no need to deeply study every branch of computer science. Instead, focus on general principles and skills. Based on my own experience, I've selected the most important and highest quality core professional courses to deepen readers' understanding of computer science. After completing these courses, regardless of your specific job, I believe you won't just be an ordinary coder, but will have a deeper understanding of the underlying logic of computers.\n\n| Course Direction    | Course Name                                          |\n|---------------------|------------------------------------------------------|\n| Discrete Mathematics and Probability Theory | [UCB CS70: Discrete Math and Probability Theory](数学进阶/CS70.md) |\n| Data Structures and Algorithms | [Coursera: Algorithms I & II](数据结构与算法/Algo.md) |\n| Software Engineering | [MIT 6.031: Software Construction](软件工程/6031.md) |\n| Full-Stack Development | [MIT Web Development Course](Web开发/mitweb.md) |\n| Introduction to Computer Systems | [CMU CS15213: CSAPP](计算机系统基础/CSAPP.md) |\n| Introductory System Architecture | [Coursera: Nand2Tetris](体系结构/N2T.md) |\n| Advanced System Architecture | [CS61C: Great Ideas in Computer Architecture](体系结构/CS61C.md) |\n| Principles of Databases | [CMU 15-445: Introduction to Database Systems](数据库系统/15445.md) |\n| Computer Networking | [Computer Networking: A Top-Down Approach](计算机网络/topdown.md) |\n| Artificial Intelligence | [Harvard CS50: Introduction to AI with Python](人工智能/CS50.md) |\n| Deep Learning | [Coursera: Deep Learning](深度学习/CS230.md) |\n\n## **Focused and Specialized**\n\nIf you have a solid grasp of the core professional courses in computer science and have already determined your work or research direction, then there are many courses in the book not mentioned in [A Reference Guide for CS Learning](./CS学习规划.md) for you to explore.\n\nAs the number of contributors increases, new branches such as **Advanced Machine Learning** and **Machine Learning Systems** will be added to the navigation bar. Under each branch, there are several similar courses from different schools with different emphases and experiments, such as the **Operating Systems** branch, which includes courses from MIT, UC Berkeley, Nanjing University, and Harbin Institute of Technology. If you want to delve into a field, studying these similar courses will give you different perspectives on similar knowledge. Additionally, I plan to contact researchers in related fields to share research learning paths in specific subfields, enhancing the depth of the CS Self-learning Guide while pursuing breadth.\n\nIf you want to contribute in this area, feel free to contact the author via email [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn)."
  },
  {
    "path": "docs/使用指南.md",
    "content": "# 如何使用这本书\n\n随着贡献者的不断增多，本书的内容也不断扩展，想把书中所有的课程全部学完是不切实际也没有必要的，甚至会起到事倍功半的反效果，吃力而不讨好。为了更好地贴合读者，让这本书真正为你所用，我将读者按照需求大致分为了如下三类，大家可以结合切身实际，精准地规划属于自己的自学方案。\n\n## 初入校园\n\n如果你刚刚进入大学校园或者还在低年级，并且就读的是计算机方向或者想要转到计算机方向，那么你很幸运，因为学习是你的本业，你可以有充足的时间和自由来学习自己感兴趣的东西，不会有工作的压力和生活的琐碎，不必过于纠结“学了有没有用”，“能不能找到工作”这类功利的想法。那么该如何安排自己的学业呢？我觉得首要的一点就是要打破在高中形成的“按部就班”式的被动学习。作为一个小镇做题家，我深知国内大部分高中会把大家一天当中的每一分钟都安排得满满当当，你只需要被动地跟着课表按部就班地完成一个个既定的任务。只要足够认真，结果都不会太差。但步入大学的校门，自由度一下子变大了许多。首先所有的课外时间基本都由你自由支配，没有人为你整理知识点，总结提纲，考试也不像高中那般模式化。如果你还抱着高中那种“乖学生”的心态，老老实实按部就班，结果未必如你所愿。因为专业培养方案未必就是合理，老师的教学未必就会负责，认真出席课堂未必就能听懂，甚至考试内容未必就和讲的有关系。说句玩笑话，你或许会觉得全世界都与你为敌，而你只能指望自己。\n\n那么现状就是这么个现状，你想改变，也得先活过去，并且拥有足够的能力去质疑它。而在低年级，打好基础很重要。这里的基础是全方面的，课内的知识固然重要，但计算机很大程度上还是强调实践，因此有很多课本外的能力需要培养，而这恰恰是国内的计算机本科教育很欠缺的一点。我根据个人的体验总结出了下面几点建议，供大家参考。\n\n其一就是了解如何写“优雅”的代码。国内的很多大一编程入门课都会讲成极其无聊的语法课，其效果还不如直接让学生看官方文档。事实上，在刚开始接触编程的时候，让学生试着去了解什么样的代码是优雅的，什么样的代码 \"have bad taste\" 是大有裨益的。一般来说，编程入门课会先介绍过程式编程（例如 C 语言）。但即便是面向过程编程，**模块化** 和 **封装** 的思想也极其重要。如果你只想着代码能在 OpenJudge 上通过，写的时候图省事，用大段的复制粘贴和臃肿的 main 函数，长此以往，你的代码质量将一直如此。一旦接触稍微大一点的项目，无尽的 debug 和沟通维护成本将把你吞没。因此，写代码时不断问自己，是否有大量重复的代码？当前函数是否过于复杂（Linux 提倡每个函数只需要做好一件事）？这段代码能抽象成一个函数吗？一开始你可能觉得很不习惯，甚至觉得这么简单的题需要如此大费周章吗？但记住好的习惯是无价的，C 语言初中生都能学会，凭什么公司要招你去当程序员呢？\n\n学过面向过程编程后，大一下学期一般会讲面向对象编程（例如 C++ 或 Java）。这里非常推荐大家看 [MIT 6.031: Software Construction](./软件工程/6031.md) 这门课的 Notes，会以 Java 语言（22年改用了 TypeScript 语言）为例非常详细地讲解如何写出“优雅”的代码。例如 Test-Driven 的开发、函数 Specification 的设计、异常的处理等等等等。除此之外，既然接触了面向对象，那么了解一些常见的设计模式也是很有必要的。因为国内的面向对象课程同样很容易变成极其无聊的语法课，让学生纠结于各种继承的语法，甚至出一些无聊的脑筋急转弯一样的题目，殊不知这些东西在地球人的开发中基本不会用到。面向对象的精髓是让学生学会自己将实际的问题抽象成若干类和它们之间的关系，而设计模式则是前人总结出来的一些精髓的抽象方法。这里推荐[大话设计模式](https://book.douban.com/subject/2334288/) 这本书，写得非常浅显易懂。\n\n其二就是尝试学习一些能提高生产力的工具和技能，例如 Git、Shell、Vim。这里强烈推荐学习 [MIT missing semester](./编程入门/MIT-Missing-Semester.md) 这门课，也许一开始接触这些工具用起来会很不习惯，但强迫自己用，熟练之后开发效率会直线提高。此外，还有很多应用也能极大提高你的生产力。一条定律是：一切需要让手离开键盘的操作，都应该想办法去除。例如切换应用、打开文件、浏览网页这些都有相关插件可以实现快捷操作（例如 Mac 上的 [Alfred](https://www.alfredapp.com/)）。如果你发现某个操作每天都会用到，并且用时超过1秒，那就应该想办法把它缩减到0.1秒。毕竟以后数十年你都要和电脑打交道，形成一套顺滑的工作流是事半功倍的。最后，学会盲打！如果你还需要看着键盘打字，那么赶紧上网找个教程学会盲打，这将极大提高你的开发效率。\n\n其三就是平衡好课内和自学。我们质疑现状，但也得遵守规则，毕竟绩点在保研中还是相当重要的。因此在大一，我还是建议大家尽量按照自己的课表学习，但辅以一些优质的课外资源。例如微积分线代可以参考 [MIT 18.01/18.02](./数学基础/MITmaths.md) 和 [MIT 18.06](./数学基础/MITLA.md) 的课程 Notes。假期可以通过 [UCB CS61A](./编程入门/Python/CS61A.md) 来学习 Python。同时做到上面第一、第二点说的，注重好的编程习惯和实践能力的培养。就个人经验，大一的数学课学分占比相当大，而且数学考试的内容方差是很大的，不同学校不同老师风格迥异，自学也许能让你领悟数学的本质，但未必能给你一个好成绩。因此考前最好有针对性地刷往年题，充分应试。\n\n在升入大二之后，计算机方向的专业课将居多，此时大家可以彻底放飞自我，进入自学的殿堂了。具体可以参考 [一份仅供参考的CS学习规划](./CS学习规划.md)，这是我根据自己三年自学经历总结提炼出来的全套指南，每门课的特点以及为什么要上这门课我都做了简单的介绍。对于你课表上的每个课程，这份规划里应该都会有相应的国外课程，而且在质量上我相信基本是全方位的碾压。由于计算机方向的专业知识基本是一样的，而且高质量的课程会让你从原理上理解知识点，对于国内大多照本宣科式的教学来说基本是降维打击。一般来说只要考前将老师“辛苦”念了一学期的 PPT 拿来突击复习两天，取得一个不错的卷面分数并不困难。如果有课程大作业，则可以尽量将国外课程的 Lab 或者 Project 修改一番以应付课内的需要。我当时上操作系统课，发现老师还用着早已被国外学校淘汰的课程实验，便邮件老师换成了自己正在学习的 [MIT 6.S081](./操作系统/MIT6.S081.md) 的 xv6 Project，方便自学的同时还无意间推动了课程改革。总之，灵活变通是第一要义，你的目标是用最方便、效率最高的方式掌握知识，所有与你这一目标违背的所谓规定都可以想方设法地去“糊弄”。凭着这份糊弄劲儿，我大三之后基本没有去过线下课堂（大二疫情在家呆了大半年），对绩点也完全没有影响。\n\n最后，希望大家少点浮躁和功利，多一些耐心和追求。很多人发邮件问我自学需不需要很强的自制力，我觉得得关键得看你自己想要什么。如果你依然抱着会一门编程语言便能月薪过万的幻想，想分一杯互联网的红利，那么我说再多也是废话。其实我最初的自学并没有太多功利的想法，只是单纯的好奇和本能的求知欲。自学的过程也没有所谓的“头悬梁，锥刺股”，该吃吃，该玩玩，不知不觉才发现竟然攒下了这么多资料。现如今中美的对抗已然成为趋势，而我们还在“卑微”地“师夷长技”，感叹国外高质量课程的同时也时常会有一种危机感。这一切靠谁来改变呢？靠的是刚刚入行的你们。所以，加油吧，少年！\n\n## 删繁就简\n\n如果你已经本科毕业开始读研或者走上了工作岗位，亦或是从事着其他领域的工作想要利用业余时间转码，那么你也许并没有充足的业余时间来系统地学完 [一份仅供参考的CS学习规划](./CS学习规划.md) 里的内容，但又想弥补本科时期欠下的基础。考虑到这部分读者通常有一定的编程经验，入门课程没有必要再重复学习。而且从实用角度来说，由于工作的大体方向已经确定，确实没有太大必要对于每个计算机分支都有特别深入的研究，更应该侧重一些通用性的原则和技能。因此我结合自身经历，选取了个人感觉最重要也是质量最高的几门核心专业课，希望能更好地加深读者对计算机的理解。学完这些课程，无论你具体从事的是什么工作，我相信你将不可能沦为一个普通的调包侠，而是对计算机的底层运行逻辑有更深入的了解。\n\n|课程方向      |课程名                                            |\n|-------------|-------------------------------------------------|\n|离散数学和概率论|[UCB CS70 : discrete Math and probability theory](./数学进阶/CS70.md)|\n|数据结构与算法 |[Coursera: Algorithms I & II](数据结构与算法/Algo.md)|\n|软件工程      |[MIT 6.031: Software Construction](软件工程/6031.md)|\n|全栈开发      |[MIT web development course](Web开发/mitweb.md)|\n|计算机系统导论 |[CMU CS15213: CSAPP](计算机系统基础/CSAPP.md)|\n|体系结构入门   |[Coursera: Nand2Tetris](./体系结构/N2T.md)       |\n|体系结构进阶   |[CS61C: Great Ideas in Computer Architecture](./体系结构/CS61C.md)|\n|数据库原理     |[CMU 15-445: Introduction to Database System](数据库系统/15445.md)|\n|计算机网络     |[Computer Networking: A Top-Down Approach](./计算机网络/topdown.md)|\n|人工智能      |[Harvard CS50: Introduction to AI with Python](人工智能/CS50.md)|\n|深度学习      |[Coursera: Deep Learning](深度学习/CS230.md)|\n\n## 心有所属\n\n如果你对于计算机领域的核心专业课都掌握得相当扎实，而且已经确定了自己的工作或研究方向，那么书中还有很多未在 [一份仅供参考的CS学习规划](./CS学习规划.md) 提到的课程供你探索。\n\n随着贡献者的不断增多，左侧的目录中将不断增加新的分支，例如 **机器学习进阶** 和 **机器学习系统**。并且同一个分支下都有若干同类型课程，它们来自不同的学校，有着不同的侧重点和课程实验，例如 **操作系统** 分支下就包含了麻省理工、伯克利、南京大学还有哈工大四所学校的课程。如果你想深耕一个领域，那么学习这些同类的课程会给你不同的视角来看待类似的知识。同时，本书作者还计划联系一些相关领域的科研工作者来分享某个细分领域的科研学习路径，让 CS自学指南 在追求广度的同时，实现深度上的提高。\n\n如果你想贡献这方面的内容，欢迎和作者邮件联系 [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn)\n"
  },
  {
    "path": "docs/后记.md",
    "content": "# 后记\n\n从最初的想法开始，到断断续续完成这本书，再到树洞的热烈反响，我很激动，但也五味杂陈。原来在北大这个园子里，也有那么多人，对自己的本科生涯并不满意。而这里，可是囊括了中国非常优秀的一帮年轻人。所以问题出在哪里？我不知道。\n\n我只是个籍籍无名的本科生呀，只是一个单纯的求学者，我的目标只是想快乐地、自由地、高质量地掌握那些专业知识，我想，正在看这本书的大多数本科生也是如此，谁想付出时间但却收效甚微呢？又是谁迫使大家带着痛苦去应付呢？我不知道。\n\n我写这本书绝不是为了鼓励大家翘课自学，试问谁不想在课堂上和那么多优秀的同学济济一堂，热烈讨论呢？谁不想遇到问题直接找老师答疑解惑呢？谁不想辛苦学习的成果可以直接化作学校承认的学分绩点呢？可如果一个兢兢业业、按时到堂的学生收获的却是痛苦，而那个一学期只有考试会出席的学生却学得自得其乐，这公平吗？我不知道。\n\n我只是不甘，不甘心这些通过高考战胜无数人进入高校的学子本可以收获一个更快乐的本科生涯，但现实却留给了他们遗憾。我反问自己，本科教育究竟应该带给我们什么呢？是学完所有这些课程吗？倒也未必，它也许只适合我这种nerd。但我觉得，本科教育至少得展现它应有的诚意，一种分享知识的诚意，一种以人为本的诚意，一种注重学生体验的诚意。它至少不应该是一种恶意，一种拼比知识的恶意，一种胜者为王的恶意，一种让人学无所得的恶意。但这一切能改变吗？我不知道。\n\n我只知道我做了应该做的事情，学生们会用脚投票，树洞的关注量和回帖数证明了这样一份资料是有价值的，也道出了国内CS本科教育和国外的差距。也许这样的改变是微乎其微的，但别忘了我只是一个籍籍无名的本科生，是北大信科一千多名本科生中的普通一员，是中国几百万在读本科生中的一分子，如果有更多的人站出来，每个人做一点点，也许是分享一个帖子，也许是当一门课的助教，也许是精心设计一门课的lab，更或许是将来获得教职之后开设一门高质量的课程，出版一本经典的教材。本科教育真的有什么技术壁垒吗？我看未必，教育靠的是诚意，靠的是育人之心。\n\n今天是2021年12月12日，我期待在不久的将来这个帖子会被遗忘，大家可以满心欢喜地选着自己培养方案上的课程，做着学校自行设计的各类编程实验，课堂没有签到也能济济一堂，学生踊跃地发言互动，大家的收获可以和努力成正比，那些曾经的遗憾和痛苦可以永远成为历史。我真的很期待那一天，真的真的真的很期待。\n\n<p align=\"right\">PKUFlyingPig</p>\n<p align=\"right\">2021年12月12日写于燕园</p>\n"
  },
  {
    "path": "docs/好书推荐.md",
    "content": "# 好书推荐\n\n<!-- \n    汇总类的书籍资源请放在 资源汇总 板块下\n\n    书籍格式要求: \n        书籍名(优先英文原版，开源则附上链接，多版本则默认最新版) [豆瓣链接] [其他相关资源链接（如相关课程）]\n    \n    同板块下的顺序要求：\n        先中文后英文，同种语言先开源后闭源，最后按从基础到深入或者字母序。\n -->\n\n由于版权原因，下面列举的图书中除了开源资源提供了链接，其他的资源请大家自行通过 [libgen](http://libgen.is/) 查找。\n\n## 资源汇总\n\n- [Free Programming Books](https://github.com/EbookFoundation/free-programming-books): 开源编程书籍资源汇总\n- [CS Textbook Recommendations](https://4chan-science.fandom.com/wiki/Computer_Science_and_Engineering): 计算机科学方向推荐教材列表\n- [C Book Guide and List](https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list): C语言相关的编程书籍推荐列表\n- [C++ Book Guide and List](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list): C++语言相关的编程书籍推荐列表\n- [Python Book Guide and List](https://pythonbooks.org/): Python语言相关的编程书籍推荐列表\n- [Computer Vision Textbook Recommendations](https://www.folio3.ai/blog/best-computer-vision-books/): 计算机视觉方向推荐教材列表\n- [Deep Learning Textbook Recommendations](https://www.mostrecommendedbooks.com/lists/best-deep-learning-books): 深度学习方向推荐教材列表\n\n\n## 系统入门\n\n- Computer Systems: A Programmer's Perspective [[豆瓣](https://book.douban.com/subject/26912767/)]\n- Principles of Computer System Design: An Introduction [[豆瓣](https://book.douban.com/subject/3707841/)]\n\n## 操作系统\n\n- [现代操作系统: 原理与实现](https://ipads.se.sjtu.edu.cn/mospi/) [[豆瓣](https://book.douban.com/subject/35208251/)]\n- [Operating Systems: Three Easy Pieces](https://pages.cs.wisc.edu/~remzi/OSTEP/) [[豆瓣](https://book.douban.com/subject/19973015/)]\n- Modern Operating Systems [[豆瓣](https://book.douban.com/subject/27096665/)]\n- Operating Systems: Principles and Practice [[豆瓣](https://book.douban.com/subject/25984145/)]\n- [Operating Systems: Internals and Design Principles](https://elibrary.pearson.de/book/99.150005/9781292214306) [[豆瓣](https://book.douban.com/subject/6047741/)]\n\n## 计算机网络\n\n- [Computer Networks: A Systems Approach](https://book.systemsapproach.org/foreword.html) [[豆瓣](https://book.douban.com/subject/26417896/)]\n- [Computer Networking: A Top-Down Approach](https://www.ucg.ac.me/skladiste/blog_44233/objava_64433/fajlovi/Computer%20Networking%20_%20A%20Top%20Down%20Approach,%207th,%20converted.pdf) [[豆瓣](https://book.douban.com/subject/30280001/)]\n- How Networks Work [[豆瓣](https://book.douban.com/subject/26941639/)]\n\n## 分布式系统\n\n- [Patterns of Distributed System (Blog)](https://github.com/dreamhead/patterns-of-distributed-systems)\n- [Distributed Systems for Fun and Profit (Blog)](http://book.mixu.net/distsys/index.html)\n- [Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems](https://github.com/Vonng/ddia) [[豆瓣](https://book.douban.com/subject/26197294/)]\n\n## 数据库系统\n\n- [Architecture of a Database System](https://dsf.berkeley.edu/papers/fntdb07-architecture.pdf) [[豆瓣](https://book.douban.com/subject/17665384/)]\n- [Readings in Database Systems](http://www.redbook.io/) [[豆瓣](https://book.douban.com/subject/2256069/)]\n- Database System Concepts : 7th Edition [[豆瓣](https://book.douban.com/subject/30345517/)]\n\n## 编译原理\n\n- Engineering a Compiler [[豆瓣](https://book.douban.com/subject/5288601/)]\n- Compilers: Principles, Techniques, and Tools [[豆瓣](https://book.douban.com/subject/1866231/)]\n- [Crafting Interpreters](https://craftinginterpreters.com/contents.html)[[豆瓣]](https://book.douban.com/subject/35548379/)[[开源中文翻译]](https://github.com/GuoYaxiang/craftinginterpreters_zh)\n\n## 计算机编程语言\n\n- 计算机程序的构造和解释 [[豆瓣](https://book.douban.com/subject/1148282/)]\n- [Essentials of Programming Languages](https://eopl3.com/) [[豆瓣](https://book.douban.com/subject/3136252/)]\n- [Practical Foundations for Programming Languages](https://www.cs.cmu.edu/~rwh/pfpl.html) [[豆瓣](https://book.douban.com/subject/26782198/)]\n- [Software Foundations](https://softwarefoundations.cis.upenn.edu/) [[豆瓣](https://book.douban.com/subject/25712292/)] [[北大相关课程](https://xiongyingfei.github.io/SF/2021/)]\n- [Types and Programming Languages](https://www.cis.upenn.edu/~bcpierce/tapl/) [[豆瓣](https://book.douban.com/subject/1761910/)] [[北大相关课程](https://xiongyingfei.github.io/DPPL/2021/main.htm)]\n\n## 体系结构\n\n- 超标量处理器设计: Superscalar RISC Processor Design [[豆瓣](https://book.douban.com/subject/26293546/)]\n- Computer Organization and Design: The Hardware/Software Interface [[MIPS Edition](https://book.douban.com/subject/35998323/)][[ARM Edition](https://book.douban.com/subject/30443432/)][[RISC-V Edition](https://book.douban.com/subject/36490912/)]\n- Computer Architecture: A Quantitative Approach [[豆瓣](https://book.douban.com/subject/6795919/)]\n\n## 理论计算机科学\n\n- Introduction to the Theory of Computation [[豆瓣](https://book.douban.com/subject/1852515/)]\n\n## 密码学\n\n- Cryptography Engineering: Design Principles and Practical Applications [[豆瓣](https://book.douban.com/subject/26416592/)]\n- Introduction to Modern Cryptography [[豆瓣](https://book.douban.com/subject/2678340/)]\n\n## 逆向工程\n\n- 逆向工程核心原理 [[豆瓣](https://book.douban.com/subject/25866389/)]\n- 加密与解密 [[豆瓣](https://book.douban.com/subject/30288807/)]\n\n## 计算机图形学\n\n- [Monte Carlo theory, methods and examples](https://artowen.su.domains/mc/)[[豆瓣](https://book.douban.com/subject/6089923/)]\n- Advanced Global Illumination [[豆瓣](https://book.douban.com/subject/2751153/)]\n- Fundamentals of Computer Graphics [[豆瓣](https://book.douban.com/subject/26868819/)]\n- [Fluid Simulation for Computer Graphics](http://wiki.cgt3d.cn/mediawiki/images/4/43/Fluid_Simulation_for_Computer_Graphics_Second_Edition.pdf) [[豆瓣](https://book.douban.com/subject/2584523/)]\n- [Physically Based Rendering: From Theory To Implementation](https://research.quanfita.cn/files/Physically_Based_Rendering_Third_Edition.pdf) [[豆瓣](https://book.douban.com/subject/4306242/)]\n- [Real-Time Rendering](https://research.quanfita.cn/files/Real-Time_Rendering_4th_Edition.pdf) [[豆瓣](https://book.douban.com/subject/30296179/)]\n\n## 游戏引擎\n\n- 游戏编程模式: Game Programming Patterns [[豆瓣](https://book.douban.com/subject/26880704/)]\n- 实时碰撞检测算法技术 [[豆瓣](https://book.douban.com/subject/4861957/)]\n- [Game AI Pro Series](http://www.gameaipro.com/) [[豆瓣](https://search.douban.com/book/subject_search?search_text=Game+AI+Pro&cat=1001)]\n- Artificial Intelligence for Games [[豆瓣](https://book.douban.com/subject/3836472/)]\n- Game Engine Architecture [[豆瓣](https://book.douban.com/subject/25815142/)]\n- Game Programming Gems Series [[豆瓣](https://search.douban.com/book/subject_search?search_text=Game+Programming+Gems&cat=1001)]\n\n## 软件工程\n\n- [Software Engineering at Google](https://abseil.io/resources/swe-book) [[豆瓣](https://book.douban.com/subject/34875994/)]\n\n## 设计模式\n\n- 设计模式: 可复用面向对象软件的基础 [[豆瓣](https://book.douban.com/subject/1052241/)]\n- 大话设计模式 [[豆瓣](https://book.douban.com/subject/2334288/)]\n- Head First Design Patterns 2nd ed. [[豆瓣](https://book.douban.com/subject/35097022/)]\n\n## 深度学习\n\n- 深度学习 [[豆瓣](https://book.douban.com/subject/27087503/)][[Github](https://github.com/exacity/deeplearningbook-chinese)]\n- [动手学深度学习](https://zh.d2l.ai) [[豆瓣](https://book.douban.com/subject/33450010/)]\n- [神经网络与深度学习](https://nndl.github.io/) [[豆瓣](https://book.douban.com/subject/35044046/)]\n- 深度学习入门 [[豆瓣](https://book.douban.com/subject/30270959/)]\n- [简单粗暴 TensorFlow 2 (Tutorial)](https://tf.wiki/)\n- [Speech and Language Processing](https://web.stanford.edu/~jurafsky/slp3/) [[豆瓣](https://book.douban.com/subject/5373023/)]\n\n## 计算机视觉\n\n- [Multiple View Geometry in Computer Vision](https://github.com/DeepRobot2020/books/blob/master/Multiple%20View%20Geometry%20in%20Computer%20Vision%20(Second%20Edition).pdf)  [[豆瓣](https://book.douban.com/subject/1841346/)]\n## 机器人\n\n- [Probabilistic Robotics](https://docs.ufpr.br/~danielsantos/ProbabilisticRobotics.pdf) [[豆瓣](https://book.douban.com/subject/2861227/)]\n\n## 面试\n\n- 剑指 Offer：名企面试官精讲典型编程题 [[豆瓣](https://book.douban.com/subject/27008702/)]\n- Cracking The Coding Interview [[豆瓣](https://book.douban.com/subject/10436668/)]\n"
  },
  {
    "path": "docs/并行与分布式系统/CS149.en.md",
    "content": "# CMU 15-418/Stanford CS149: Parallel Computing\n\n## Descriptions\n\n- Offered by: CMU and Stanford\n- Prerequisites: Computer Architecture, C++\n- Programming Languages: C++\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nThe professor [Kayvon Fatahalian](http://www.cs.cmu.edu/~kayvonf) used to teach course 15-418 at CMU. After he became an assistant professor at Stanford, he offered a similar course, CS149 at Stanford. In general, the 15-418 version is more comprehensive and has lecture recordings, but CS149's programming assignments are more fashionable. Personally, I watched the recordings of 15-418 but completed the assignments of CS149.\n\nThe goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems, as well as to teach how to utilize hardwares and software programming frameworks (such as CUDA, MPI, OpenMP, etc.) for writing high-performance parallel programs. Due to the complexity of parallel computing architecture, this course involves a lot of advanced computer architecture and network communication content, the knowledge is quite low-level and hardcore. Meanwhile, the five assignments develop your understanding and application of upper-level abstraction through software, specifically by analyzing bottlenecks in parallel programs, writing multi-threaded synchronization code, learning CUDA programming, OpenMP programming, and the popular Spark framework, etc. It really combines theory and practice perfectly.\n\n## Resources\n\n- Course Website: [CMU15418](https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/index.html), [CS149](https://gfxcourses.stanford.edu/cs149/fall21)\n- Recordings: [CMU15418](https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/schedule.html), [CS149](https://youtube.com/playlist?list=PLoROMvodv4rMp7MTFr4hQsDEcX7Bx6Odp&si=txtQiRDZ9ZZUzyRn)\n- Textbook: None\n- Assignments: <https://gfxcourses.stanford.edu/cs149/fall21>, 5 assignments.\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS149-parallel-computing - GitHub](https://github.com/PKUFlyingPig/CS149-parallel-computing).\n"
  },
  {
    "path": "docs/并行与分布式系统/CS149.md",
    "content": "# CMU 15-418/Stanford CS149: Parallel Computing\n\n## 课程简介\n\n- 所属大学：CMU 和 Stanford\n- 先修要求：计算机体系结构，熟悉 C++\n- 编程语言：C++\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\n[Kayvon Fatahalian](http://www.cs.cmu.edu/~kayvonf) 教授此前在 CMU 开了 15-418 这门课，后来他成为 Stanford 的助理教授后又开了类似的课程 CS149。但总体来说，15-418 包含的课程内容更丰富，并且有课程回放，但 CS149 的编程作业更 fashion 一些。我个人是观看的 15-418 的课程录影但完成的 CS149 的作业。\n\n这门课会带你深入理解现代并行计算架构的设计原则与必要权衡，并学会如何充分利用硬件资源以及软件编程框架（例如 CUDA，MPI，OpenMP 等）编写高性能的并行程序。由于并行计算架构的复杂性，这门课会涉及诸多高级体系结构与网络通信的内容，知识点相当底层且硬核。与此同时，5 个编程作业则是从软件的层面培养学生对上层抽象的理解与运用，具体会让你分析并行程序的瓶颈、编写多线程同步代码、学习 CUDA 编程、OpenMP 编程以及前段时间大热的 Spark 框架等等。真正意义上将理论与实践完美地结合在了一起。\n\n## 课程资源\n\n- 课程网站：[CMU15418](https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/index.html), [CS149](https://gfxcourses.stanford.edu/cs149/fall21)\n- 课程视频：[CMU15418](https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/schedule.html), [CS149](https://youtube.com/playlist?list=PLoROMvodv4rMp7MTFr4hQsDEcX7Bx6Odp&si=txtQiRDZ9ZZUzyRn)\n- 课程教材：无\n- 课程作业：<https://gfxcourses.stanford.edu/cs149/fall21>，5 个编程作业\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS149-parallel-computing - GitHub](https://github.com/PKUFlyingPig/CS149-parallel-computing) 中。\n"
  },
  {
    "path": "docs/并行与分布式系统/MIT6.824.en.md",
    "content": "# MIT6.824: Distributed System\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Computer Architecture, Parallel Computing\n- Programming Languages: Go\n- Difficulty: 🌟🌟🌟🌟🌟🌟\n- Class Hour: 200 hours\n\nThis 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.\n\nEach 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.\n\nThis 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.\n\n## Resources\n\n- Course Website: <https://pdos.csail.mit.edu/6.824/schedule.html>\n- Assignments: refer to the course website.\n- Textbook: None\n- Assignments: 4 torturing projects, the course website has specific requirements.\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/MIT6.824 - GitHub](https://github.com/PKUFlyingPig/MIT6.824).\n\n@[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 ~ ~\n"
  },
  {
    "path": "docs/并行与分布式系统/MIT6.824.md",
    "content": "# MIT6.824: Distributed System\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：计算机体系结构，并行编程\n- 编程语言：Go\n- 课程难度：🌟🌟🌟🌟🌟🌟\n- 预计学时：200 小时\n\n这门课和 MIT 6.S081 一样，出品自 MIT 大名鼎鼎的 PDOS 实验室，授课老师 Robert Morris 教授曾是一位顶尖黑客，世界上第一个蠕虫病毒 Morris 病毒就是出自他之手。\n\n这门课每节课都会精读一篇分布式系统领域的经典论文，并由此传授分布式系统设计与实现的重要原则和关键技术。同时其课程 Project 也是以其难度之大而闻名遐迩，4 个编程作业循序渐进带你实现一个基于 Raft 共识算法的 KV-store 框架，让你在痛苦的 debug 中体会并行与分布式带来的随机性和复杂性。\n\n同样，这门课由于太过出名，网上答案无数，希望大家不要参考，而是力图自主实现整个 Project。\n\n## 课程资源\n\n- 课程网站：<https://pdos.csail.mit.edu/6.824/schedule.html>\n- 课程视频：参见课程网站链接\n- 课程视频中文翻译：<https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/>\n- 课程教材：无，以阅读论文为主\n- 课程作业：4 个非常虐的 Project，具体要求参见课程网站\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.824 - GitHub](https://github.com/PKUFlyingPig/MIT6.824) 中。\n\n@[OneSizeFitsQuorum](https://github.com/OneSizeFitsQuorum) 的 [Lab 文档](https://github.com/OneSizeFitsQuorum/MIT6.824-2021) 较为清晰地介绍了实现 lab 1-4 和 challenge 1-2 时需要考虑的许多细节，在遇到瓶颈期时可以阅读一下~~\n"
  },
  {
    "path": "docs/必学工具/CMake.en.md",
    "content": "# CMake \r\n\r\n## Why CMake \r\n\r\nSimilar to GNU make, CMake is a cross-platform tool designed to build, test and package 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. \r\n\r\n## How to learn CMake \r\n\r\nCompare 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. \r\n"
  },
  {
    "path": "docs/必学工具/CMake.md",
    "content": "# CMake\n\n## 为什么学习 CMake\n\nCMake 是类似于 GNU make 的跨平台自动软件构建工具，使用 CMakeLists.txt 定义构建规则，相比于 make 它提供了更多的功能，在各种软件构建上广泛使用。**强烈建议学习使用 GNU Make 和熟悉 `Makefile` 后再学习 CMake**。\n\n## 如何学习 CMake\n\n`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)。\n"
  },
  {
    "path": "docs/必学工具/Docker.en.md",
    "content": "# Docker\n\n## Why Docker\n\nThe 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.\n\n[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.\n\n## How to learn Docker\n\nThe [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.\n\nIf you're like me, reinventing the wheel, consider building a [Mini Docker](https://github.com/PKUFlyingPig/rubber-docker) yourself to deepen your understanding.\n\n[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.\n"
  },
  {
    "path": "docs/必学工具/Docker.md",
    "content": "# Docker\n\n## 为什么使用 Docker\n\n使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题，但它庞大笨重，且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。\n\n[Docker](https://www.docker.com/) 的出现让环境配置变得（或许）不再折磨。简单来说 Docker 使用轻量级的“容器”（container）而不是整个操作系统去支持一个应用的配置。应用自身连同它的环境配置被打包为一个个 image 可以自由运行在不同平台的一个个 container 中，这极大地节省了所有人的时间成本。\n\n## 如何学习 Docker\n\n[Docker 官方文档](https://docs.docker.com/)当然是最好的初学教材，但最好的导师一定是你自己——尝试去使用 Docker 才能享受它带来的便利。Docker 在工业界发展迅猛并已经非常成熟，你可以下载它的桌面端并使用图形界面。\n\n当然，如果你像我一样，是一个疯狂的造轮子爱好者，那不妨自己亲手写一个[迷你 Docker](https://github.com/PKUFlyingPig/rubber-docker) 来加深理解。\n\n[KodeKloud Docker for the Absolute Beginner](https://kodekloud.com/courses/docker-for-the-absolute-beginner/) 全面的介绍了 Docker 的基础功能，并且有大量的配套练习，同时提供免费的云环境来完成练习。其余的云相关的课程如 Kubernetes 需要付费，但个人强烈推荐：讲解非常仔细，适合从 0 开始的新手；有配套的 Kubernetes 的实验环境，不用被搭建环境劝退。\n"
  },
  {
    "path": "docs/必学工具/Emacs.en.md",
    "content": "# Emacs\n\n## Why Emacs\n\nEmacs is a powerful editor as famous as Vim. Emacs has almost all the benefits of Vim, such as: \n\n- Everything can be done with keyboard only, as there are a large number of shortcuts to improve the efficiency of code editing.\n- Supporting both graphical and non-graphical interface in various scenarios.\n\nBesides, the biggest difference between Emacs and most other editors lies in its powerful extensibility. Emacs kernel imposes no restrictions on users behaviors. With Emacs Lisp programming language, users is able to write any plugins to extend the functionality. After decades of development, Emacs' plugin ecosystem is arguably one of the richest and most powerful in the editor world. There is a joke saying that \"Emacs is an OS that lacks a decent text editor\". Futhermore, you can also write your own Emacs extensions with only a small amount of effort.\n\nEmacs is friendly to Vim users as there is an extension called [evil](https://github.com/emacs-evil/evil) that migrate Vim operations into Emacs. Users can switch from Vim to Emacs with minimum effort. Statistics show that a considerable number of users would switch from Vim to Emacs, but there were almost no users who would switch from Emacs to Vim. In fact, the only weaknesss of Emacs is that it is not as efficient as Vim in pure text editing because of Vim's multi-modal editing. However, with Emacs' powerful extensibility, it can make up for its weaknesses by combining the strengths of both.\n\n## How to learn Emacs\n\nSame as Vim, Emacs also has a steep learning curve. But once you understand the basic underlying logic, you will never live without it. \n\nThere are plenty of tutorials for Emacs. Since Emacs is highly customizable, every user has their own learning path. Here are some good starting points:\n\n- [This tutorial](https://www.masteringemacs.org/article/beginners-guide-to-emacs) is a brief guide to the basic logic of Emacs.\n- [Awesome Emacs](https://github.com/emacs-tw/awesome-emacs) lists a large number of useful Emacs packages, utilities, and libraries.\n\n## Keyboard remapping\n\nOne of the most shortcomings of Emacs is the excessive use of the Ctrl key, which is a burden on your left little finger. It is highly recommended to change the keyboard mapping of the Ctrl key. Please refer to [Vim](Vim.en.md) for details to remapping. \n"
  },
  {
    "path": "docs/必学工具/Emacs.md",
    "content": "# Emacs\n\n## 为什么学习 Emacs\n\nEmacs 是一个与 Vim 齐名的强大编辑器，事实上 Emacs 几乎具有 Vim 的所有好处，例如：\n\n- 只需要键盘就可以完成所有操作，大量使用快捷键，具有极高的编辑效率。\n- 既可以在终端无图形界面的场景下使用，也可使用有图形界面的版本获得更现代、更美观的体验。\n\n此外，Emacs 与其它大部分编辑器最大的不同就在于其强大的扩展性。Emacs 的内核没有对用户做出任何限制，使用 Emacs Lisp 编程语言可以为 Emacs 编写任意逻辑的插件来扩展 Emacs 的功能。经过几十年的积累，Emacs 的插件生态可谓编辑器中最为丰富和强大的生态之一。有一种说法是，“Emacs 表面上是个编辑器，其实是一个操作系统”。只要稍作学习，你也可以编写属于自己的 Emacs 扩展。\n\nEmacs 对 Vim 用户也十分友好，有一个叫 [evil](https://github.com/emacs-evil/evil) 的插件可以让用户在 Emacs 中使用 Vim 的基本操作，只需要很低的迁移成本即可从 Vim 转到 Emacs。曾经有统计显示有相当一部分用户会从 Vim 转到 Emacs，但几乎没有用户从 Emacs 转到 Vim。事实上，Emacs 相对 Vim 最大的不足是纯文本编辑方面不如 Vim 的多模态编辑效率高，但凭借其强大的扩展性，Emacs 可以扬长避短，把 Vim 吸收进来，结合了二者的长处。\n\n## 如何学习 Emacs\n\n与 Vim 相同，Emacs 的学习曲线也比较陡峭，但一旦理解了 Emacs 的使用逻辑，就会爱不释手。然而，网上的 Emacs 资料大多不细致、不够准确，甚至有哗众取宠的嫌疑。\n\n这里给大家推荐一个较新的中文教程[《专业 Emacs 入门》](https://www.zhihu.com/column/c_1440829147212279808)，这篇教程比较系统和全面，且讲述相对比较耐心细致，在讲解 Emacs 基本逻辑的同时也给出了成套的插件推荐，读完后可以获得一个功能完善的、接近 IDE 的 Emacs，因此值得一读。学完教程只是刚刚开始，学会之后要经常使用，在使用中遇到问题勤于搜索和思考，最终才能得心应手。\n\n## 关于键位映射\n\nEmacs 的唯一缺点便是对 Ctrl 键的使用过多，对小手指不是很友好，强烈建议更改 Ctrl 键的键盘映射。更改映射的方式与 [Vim 教程](Vim.md)中的方法相同，这里不做赘述。\n\n"
  },
  {
    "path": "docs/必学工具/GNU_Make.en.md",
    "content": "# GNU Make\n\n## Why GNU Make\n\nEveryone 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?\n\nThis 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.\n\n## How to learn GNU Make\n\nHere is a well-written [document] (https://seisman.github.io/how-to-write-makefile/overview.html) for in-depth and accessible understanding.\n\nMastering 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.\n"
  },
  {
    "path": "docs/必学工具/GNU_Make.md",
    "content": "# GNU Make\n\n## 为什么学 GNU Make\n\n大家第一次写 hello world 程序的时候一定都记得，在编辑完 `helloworld.c` 之后，需要用 `gcc` 编译生成可执行文件，然后再执行（如果你不理解前面这段话，请先自行谷歌 *gcc 编译* 并理解相关内容）。但如果你的项目由成百上千个 C 源文件组成，并且星罗棋布在各个子目录下，你该如何将它们编译链接到一起呢？假如你的项目编译一次需要半个小时（大型项目相当常见），而你只修改了一个分号，是不是还需要再等半个小时呢？\n\n这时候 GNU Make 就闪亮登场了，它能让你在一个脚本里（即所谓的 `Makefile`）定义整个编译流程以及各个目标文件与源文件之间的依赖关系，并且只重新编译你的修改会影响到的部分，从而降低编译的时间。\n\n## 如何学习 GNU Make\n\n这里有一篇写得深入浅出的[文档](https://seisman.github.io/how-to-write-makefile/overview.html)供大家参考。\n\nGNU Make 掌握起来相对容易，但用好它需要不断的练习。将它融入到自己的日常开发中，勤于学习和模仿其他优秀开源项目里的 `Makefile` 的写法，总结出适合自己的 template，久而久之，你对 GNU Make 的使用会愈加纯熟。\n"
  },
  {
    "path": "docs/必学工具/Git.en.md",
    "content": "# Git \n\n## Why Git \n\nGit 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. \n\nThe 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. \n\nGit is a powerful tool and when you finally master it, you will find all the effort paid off. \n\n## How to learn Git \n\nDifferent 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: \n\n1. 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. \n2. 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.\n3. [Learn Git Branching](https://learngitbranching.js.org/) is an interactive Git learning website that can help you quickly get started with using Git.\n4. 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/). \n5. 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! \n6. 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. \n"
  },
  {
    "path": "docs/必学工具/Git.md",
    "content": "# Git\n\n## 为什么使用 Git\n\nGit 是一款分布式的代码版本控制工具，Linux 之父 Linus 嫌弃当时主流的中心式的版本控制工具太难用还要花钱，就自己开发出了 Git 用来维护 Linux 的版本（给大佬跪了）。\n\nGit 的设计非常优雅，但初学者通常因为很难理解其内部逻辑因此会觉得非常难用。对 Git 不熟悉的初学者很容易出现因为误用命令将代码给控制版本控制没了的状况（好吧是我）。\n\n但相信我，和 Vim 一样，Git 是一款你最终掌握之后会感叹“它值得！”的神器。\n\n## 如何学习 Git\n\n和 Vim 不同，我不建议初学者在一知半解的情况下贸然使用 Git，因为它的内部逻辑并不能熟能生巧，而是需要花时间去理解。我推荐的学习路线如下：\n\n1. 阅读这篇 [Git tutorial](https://missing.csail.mit.edu/2020/version-control/)，视频的话可以看这个[尚硅谷Git教程](https://www.bilibili.com/video/BV1vy4y1s7k6)\n2. 阅读这本开源书籍 [Pro Git](https://git-scm.com/book/en/v2) 的 Chapter1 - Chapter5，是的没错，学 Git 需要读一本书（捂脸）。\n3. [Learn Git Branching](https://learngitbranching.js.org/) 是一个交互式的 Git 学习网站, 可以帮助你快速上手 Git 的使用。\n4. 此时你已经掌握了 Git 的原理和绝大部分用法，接下来就可以在实践中反复巩固 Git 的命令了。但用好它同样是一门哲学，我个人觉得这篇[如何写好 Commit Message](https://chris.beams.io/posts/git-commit/) 的博客非常值得一读。\n5. 好的此时你已经爱上了 Git，你已经不满足于学会它了，你想自己实现一个 Git！巧了，我当年也有这样的想法，[这篇 tutorial](https://wyag.thb.lt/) 可以满足你！\n6. 什么？光实现一个 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 等等等等。\n"
  },
  {
    "path": "docs/必学工具/GitHub.en.md",
    "content": "# GitHub\n\n## What is GitHub\n\nFunctionally, GitHub is an online platform for hosting code. You can host your local Git repositories on GitHub for collaborative development and maintained by a group. However, GitHub's significance has evolved far beyond that. It has become a very active and resource-rich open-source community. Developers from all over the world share a wide variety of open-source software on GitHub. From industrial-grade deep learning frameworks like PyTorch and TensorFlow to practical scripts consisting of just a few lines of code, GitHub offers hardcore knowledge sharing, beginner-friendly tutorials, and even many technical books are open-sourced here (like the one you're reading now). Browsing GitHub has become a part of my daily life.\n\nOn GitHub, stars are the ultimate affirmation for a project. If you find this book useful, you are welcome to enter the repository's homepage via the link in the upper right corner and give your precious star✨.\n\n## How to Use GitHub\n\nIf you have never created your own remote repository on GitHub or cloned someone else's code, I suggest you start your open-source journey with [GitHub's official tutorial](https://docs.github.com/en/get-started).\n\nIf you want to keep up with some interesting open-source projects on GitHub, I highly recommend the [HelloGitHub](https://hellogithub.com/) website. It regularly features GitHub's recently trending or very interesting open-source projects, giving you the opportunity to access various quality resources firsthand.\n\nI believe GitHub's success is due to the \"one for all, all for one\" spirit of open source and the joy of sharing knowledge. If you also want to become the next revered open-source giant or the author of a project with tens of thousands of stars, then transform your ideas that spark during development into code and showcase them on GitHub.\n\nHowever, it's important to note that the open-source community is not lawless. Many open-source softwares are not meant for arbitrary copying, distribution, or even sale. Understanding various [open-source licenses](https://www.runoob.com/w3cnote/open-source-license.html) and complying with them is not only a legal requirement but also the responsibility of every member of the open-source community.\n"
  },
  {
    "path": "docs/必学工具/GitHub.md",
    "content": "# GitHub\n\n## GitHub 是什么\n\n从功能上来说，GitHub 是一个在线代码托管平台。你可以将你的本地 Git 仓库托管到 GitHub 上，供多人同时开发浏览。但现如今 GitHub 的意义已远不止如此，它已经演变为一个非常活跃且资源极为丰富的开源交流社区。全世界的软件开发者在 GitHub 上分享各式各样种类繁多的开源软件。大到工业级的深度学习框架 PyTorch, TensorFlow，小到几十行的实用脚本，既有硬核的知识分享，也有保姆级的教程指导，甚至很多技术书籍也在 GitHub上开源（例如诸位正在看的这本——如果我厚着脸皮勉强称之为书的话）。闲来无事逛逛 GitHub 已经成为了我日常生活的一部分。\n\n在 GitHub 里，星星是对一个项目至高无上的肯定，如果你觉得这本书对你有用的话，欢迎通过右上角的链接进入仓库主页献出你宝贵的星星✨。\n\n## 如何使用 GitHub\n\n如果你还从未在 GitHub 上建立过自己的远程仓库，也没有克隆过别人的代码，那么我建议你从 [GitHub的官方教程](https://docs.github.com/cn/get-started)开始自己的开源之旅。\n\n如果你想时刻关注 GitHub 上一些有趣的开源项目，那么我向你重磅推荐 [HelloGitHub](https://hellogithub.com/) 这个网站以及它的同名微信公众号。它会定期收录 GitHub 上近期开始流行的或者非常有趣的开源项目，让你有机会第一时间接触各类优质资源。\n\nGitHub 之所以成功，我想是得益于“我为人人，人人为我”的开源精神，得益于知识分享的快乐。如果你也想成为下一个万人敬仰的开源大佬，或者下一个 star 破万的项目作者。那就把你在开发过程中灵感一现的 idea 化作代码，展示在 GitHub 上吧～\n\n不过需要提醒的是，开源社区不是法外之地，很多开源软件并不是可以随意复制分发甚至贩卖的，了解各类[开源协议](https://www.runoob.com/w3cnote/open-source-license.html)并遵守，不仅是法律的要求，更是每个开源社区成员的责任。\n"
  },
  {
    "path": "docs/必学工具/LaTeX.en.md",
    "content": "# LaTeX\n\n## Why Learn LaTeX\n\nIf you need to write academic papers, please skip directly to the next section, as learning LaTeX is not just a choice but a necessity.\n\nLaTeX is a typesetting system based on TeX, developed by Turing Award winner Lamport, while TeX was originally developed by Knuth, both of whom are giants in the field of computer science. Of course, the developers' prowess is not the reason we learn LaTeX. The biggest difference between LaTeX and the commonly used WYSIWYG (What You See Is What You Get) Word documents is that in LaTeX, users only need to focus on the content of the writing, leaving the typesetting entirely to the software. This allows people without any typesetting experience to produce papers or articles with highly professional formatting.\n\nBerkeley computer science professor Christos Papadimitriou once jokingly said:\n\n> Every time I read a LaTeX document, I think, wow, this must be correct!\n\n## How to Learn LaTeX\n\nThe recommended learning path is as follows:\n\n- Setting up the LaTeX environment can be a headache. If you encounter problems with configuring LaTeX locally, consider using [Overleaf], an online LaTeX editor. The site not only offers a variety of LaTeX templates to choose from but also eliminates the difficulty of environment setup.\n- Read the following three tutorials: [Part-1], [Part-2], [Part-3].\n- The best way to learn LaTeX is, of course, by writing papers. However, starting with a math class and using LaTeX for homework is also a good choice.\n\n[Overleaf]: https://www.overleaf.com\n[Part-1]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-1\n[Part-2]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-2\n[Part-3]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-3\n\nOther recommended introductory materials include:\n\n- A brief guide to installing LaTeX [[GitHub](https://github.com/OsbertWang/install-latex-guide-zh-cn)] or the TEX Live Guide (texlive-zh-cn) [[PDF](https://www.tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf)] can help you with installation and environment setup.\n- A (not so) brief introduction to LaTeX2ε (lshort-zh-cn) [[PDF](https://mirrors.ctan.org/info/lshort/chinese/lshort-zh-cn.pdf)] [[GitHub](https://github.com/CTeX-org/lshort-zh-cn)], translated by the CTEX development team, helps you get started quickly and accurately. It's recommended to read it thoroughly.\n- Liu Haiyang's \"Introduction to LaTeX\" can be used as a reference book, to be consulted when you have specific questions. Skip the section on CTEX suite.\n- [Modern LaTeX Introduction Seminar](https://github.com/stone-zeng/latex-talk)\n- [A Very Short LaTeX Introduction Document](https://liam.page/2014/09/08/latex-introduction/)"
  },
  {
    "path": "docs/必学工具/LaTeX.md",
    "content": "# LaTeX\n\n## 为什么学 LaTeX\n\n如果你需要写论文，那么请直接跳到下一节，因为你不学也得学。\n\nLaTeX 是一种基于 TeX 的排版系统，由图灵奖得主 Lamport 开发，而 Tex 则是由 Knuth 最初开发，这两位都是计算机界的巨擘。当然开发者强并不是我们学习 LaTeX 的理由，LaTeX 和常见的所见即所得的 Word 文档最大的区别就是用户只需要关注写作的内容，而排版则完全交给软件自动完成。这让没有任何排版经验的普通人得以写出排版非常专业的论文或文章。\n\nBerkeley 计算机系教授 Christos Papadimitriou 曾说过一句半开玩笑的话：\n\n> Every time I read a LaTeX document, I think, wow, this must be correct!\n\n## 如何学习 LaTeX\n\n推荐的学习路线如下：\n\n- LaTeX 的环境配置是个比较头疼的问题。如果你本地配置 LaTeX 环境出现了问题，可以考虑使用 [Overleaf] 这个在线 LaTeX 编辑网站。站内不仅有各种各样的 LaTeX 模版供你选择，还免去了环境配置的难题。\n- 阅读下面三篇 Tutorial: [Part-1], [Part-2], [Part-3]。\n- 学习 LaTeX 最好的方式当然是写论文，不过从一门数学课入手用 LaTeX 写作业也是一个不错的选择。\n\n[Overleaf]: https://www.overleaf.com\n[Part-1]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-1\n[Part-2]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-2\n[Part-3]: https://www.overleaf.com/latex/learn/free-online-introduction-to-latex-part-3\n\n其他值得推荐的入门学习资料如下：\n\n- 一份简短的安装 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)] 可以帮助你完成安装和环境配置过程\n- 一份（不太）简短的 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 开发小组翻译的，可以帮助你快速准确地入门，建议通读一遍\n- 刘海洋的《LaTeX 入门》，可以当作工具书来阅读，有问题再查找，跳过 CTEX 套装部分\n- [现代 LaTeX 入门讲座](https://github.com/stone-zeng/latex-talk)\n- [一份其实很短的 LaTeX 入门文档](https://liam.page/2014/09/08/latex-introduction/)\n"
  },
  {
    "path": "docs/必学工具/Scoop.en.md",
    "content": "# Scoop\n\n## Why Use Scoop\n\nSetting up a development environment in Windows has always been a complex and challenging task. The lack of a unified standard means that the installation methods for different development environments vary greatly, resulting in unnecessary time costs. Scoop helps you uniformly install and manage common development software, eliminating the need for manual downloads, installations, and environment variable configurations.\n\nFor example, to install Python and Node.js, you just need to execute:\n\n```powershell\nscoop install python\nscoop install nodejs\n```\n\n## Installing Scoop\n\nScoop requires [Windows PowerShell 5.1](https://aka.ms/wmf5download) or [PowerShell](https://aka.ms/powershell) as its runtime environment. If you are using Windows 10 or later, Windows PowerShell is built into the system. However, the version of Windows PowerShell built into Windows 7 is outdated, and you will need to manually install a newer version of PowerShell.\n\n> Many students have encountered issues due to setting up Windows user accounts with Chinese usernames, leading to user directories also being named in Chinese. Installing software via Scoop into user directories in such cases may cause some software to execute incorrectly. Therefore, it is recommended to install in a custom directory. For other installation methods, please refer to: [ScoopInstaller/Install](https://github.com/ScoopInstaller/Install)\n\n```powershell\n# Set PowerShell execution policy\nSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser\n# Download the installation script\nirm get.scoop.sh -outfile 'install.ps1'\n# Run the installation, use --ScoopDir parameter to specify Scoop installation path\n.\\install.ps1 -ScoopDir 'C:\\Scoop'\n```\n\n## Using Scoop\n\nScoop's official documentation is very user-friendly for beginners. Instead of elaborating here, it is recommended to read the [official documentation](https://github.com/ScoopInstaller/Scoop) or the [Quick Start guide](https://github.com/ScoopInstaller/Scoop/wiki/Quick-Start).\n\n## Q&A\n\n### Can Scoop Configure Mirror Sources?\n\nThe Scoop community only maintains installation configurations, and all software is downloaded from the official download links provided by the software's creators. Therefore, mirror sources are not provided. If your network environment causes repeated download failures, you may need a bit of [magic](翻墙.md).\n\n### Why Can't I Find Java 8?\n\nFor the same reasons mentioned above, the official download links for Java 8 are no longer provided. It is recommended to use [ojdkbuild8](https://github.com/ScoopInstaller/Java/blob/master/bucket/ojdkbuild8.json) as a substitute.\n\n### How Do I Install Python 2?\n\nFor software that is outdated and no longer in use, the Scoop community removes it from [ScoopInstaller/Main](https://github.com/ScoopInstaller/Main) and adds it to [ScoopInstaller/Versions](https://github.com/ScoopInstaller/Versions). If you need such software, you need to manually add the bucket:\n\n```powershell\nscoop bucket add versions\nscoop install python27\n```"
  },
  {
    "path": "docs/必学工具/Scoop.md",
    "content": "# Scoop\n\n## 为什么使用 Scoop\n\n在 Windows 下，搭建开发环境一直是一个复杂且困难的问题。由于没有一个统一的标准，导致各种开发环境的安装方式差异巨大，需要付出很多不必要的时间成本。而 Scoop 可以帮助你统一安装并管理常见的开发软件，省去了手动下载安装，配置环境变量等繁琐步骤。\n\n例如安装 python 和 nodejs 只需要执行：\n\n```powershell\nscoop install python\nscoop install nodejs\n```\n\n## 安装 Scoop\n\nScoop 需要 [Windows PowerShell 5.1](https://aka.ms/wmf5download) 或者 [PowerShell](https://aka.ms/powershell) 作为运行环境，如果你使用的是 Windows 10 及以上版本，Windows PowerShell 是内置在系统中的。而 Windows 7 内置的 Windows PowerShell 版本过于陈旧，你需要手动安装新版本的 PowerShell。\n\n> 由于发现很多同学在设置 Windows 用户时使用了中文用户名，导致了用户目录也变成了中文名。如果按照 Scoop 的默认方式将软件安装到用户目录下，可能会造成部分软件执行错误。所以这里推荐安装到自定义目录，如果需要其他安装方式请参考： [ScoopInstaller/Install](https://github.com/ScoopInstaller/Install)\n\n```powershell\n# 设置 PowerShell 执行策略\nSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser\n# 下载安装脚本\nirm get.scoop.sh -outfile 'install.ps1'\n# 执行安装, --ScoopDir 参数指定 Scoop 安装路径\n.\\install.ps1 -ScoopDir 'C:\\Scoop'\n```\n\n## 使用 Scoop\n\nScoop 的官方文档对于新手非常友好，相对于在此处赘述更推荐阅读 [官方文档](https://github.com/ScoopInstaller/Scoop) 或 [快速入门](https://github.com/ScoopInstaller/Scoop/wiki/Quick-Start) 。\n\n## Q&A\n\n### Scoop 能配置镜像源吗？\n\nScoop 社区仅维护安装配置，所有的软件都是从该软件官方提供的下载链接进行下载，所以无法提供镜像源。如果因为你的网络环境导致多次下载失败，那么你需要一点点 [魔法](翻墙.md)。\n\n### 为什么找不到 Java8？\n\n原因同上，官方已不再提供 Java8 的下载链接，推荐使用 [ojdkbuild8](https://github.com/ScoopInstaller/Java/blob/master/bucket/ojdkbuild8.json) 替代。\n\n### 我需要安装 python2 该如何操作？\n\n对于已经过时弃用的软件，Scoop 社区会将其从 [ScoopInstaller/Main](https://github.com/ScoopInstaller/Main) 中移除并将其添加到 [ScoopInstaller/Versions](https://github.com/ScoopInstaller/Versions) 中。如果你需要这些软件的话需要手动添加 bucket：\n\n```powershell\nscoop bucket add versions\nscoop install python27\n```\n\n"
  },
  {
    "path": "docs/必学工具/Vim.en.md",
    "content": "# Vim\n\n## Why Vim\n\nIn my opinion, the Vim editor has the following benefits:\n\n- It keeps your finger on the keyboard throughout the development and moving the cursor without the arrow keys keeps your fingers in the best position for typing.\n- Convenient file switching and panel controls allow you to edit multiple files simultaneously or even different locations of the same file.\n- Vim's macros can batch repeat operations (e.g. add tabs to multi-lines, etc.)\n- Vim is well-suited for Linux servers without GUI. When you connect to a remote server through `ssh`, you can only develop from the command line because there is no GUI (of course, many IDEs such as PyCharm now provide `ssh` plugins to solve this problem).\n- A rich ecology of plugins gives you the world's most fancy command-line editor.\n\n## How to learn Vim\n\nUnfortunately Vim does have a pretty steep learning curve and it took me a few weeks to get used to developing with Vim. You'll feel very uncomfortable at first, but once you get past the initial stages, trust me, you'll fall in love with Vim.\n\nThere is a vast amount of learning material available on Vim, but the best way to master it is to use it in your daily development, no need to learn all the fancy advanced Vim tricks right away. The recommended learning path is as follows:\n\n- Read [This tutorial](https://missing.csail.mit.edu/2020/editors/) first to understand the basic Vim concepts and usage.\n- Use Vim's own `vimtutor` to practice. After installing Vim, type `vimtutor` directly into the command line to enter the practice program.\n- Then you can force yourself to use Vim for development, and you can install Vim plugins in your favorite IDE.\n- Once you're fully comfortable with Vim, a new world opens up to you, and you can configure your own Vim on demand (by modifying the `.vimrc` file), and there are countless resources on the Internet to learn from.\n- If you want to know more about how to customize Vim to suit your needs, [_Learn Vim Script the Hard Way_](https://learnvimscriptthehardway.stevelosh.com/) is a perfect start point.\n\n## Remapping Keys\n\nCtrl and Esc keys are probably two of the most used keys in Vim. However, these two keys are pretty far away from home row.\nIn order to make it easier to reach these keys, you can remap CapsLock to Esc or Ctrl.\n\nOn Windows, [Powertoys](https://learn.microsoft.com/en-us/windows/powertoys/) or [AutoHotkey](https://www.autohotkey.com/) can be used to achieve this goal.    \nOn macOS, you can remap keys in system settings, see this [page](https://vim.fandom.com/wiki/Map_caps_lock_to_escape_in_macOS). [Karabiner-Elements](https://karabiner-elements.pqrs.org/) also works.\n\nA better solution is to make CapsLock function as Esc and Ctrl simultaneously. Click CapsLock to send Esc, hold CapsLock to use it as Ctrl key. Here's how to do it on different systems:\n\n- [Windows](https://gist.github.com/sedm0784/4443120)  \n- [MacOS](https://ke-complex-modifications.pqrs.org/#caps_lock_tapped_escape_held_left_control)  \n- [Linux](https://www.jianshu.com/p/6fdc0e0fb266)\n\n## Recommended References\n\n- Neil, Drew. Practical Vim: Edit Text at the Speed of Thought. N.p., Pragmatic Bookshelf, 2015.\n- Neil, Drew. Modern Vim: Craft Your Development Environment with Vim 8 and Neovim. United States, Pragmatic Bookshelf.\n"
  },
  {
    "path": "docs/必学工具/Vim.md",
    "content": "# Vim\n\n## 为什么学习 Vim\n\n在我看来 Vim 编辑器有如下的好处：\n\n- 让你的整个开发过程手指不需要离开键盘，而且光标的移动不需要方向键使得你的手指一直处在打字的最佳位置。\n- 方便的文件切换以及面板控制可以让你同时开发多份文件甚至同一个文件的不同位置。\n- Vim 的宏操作可以批量化处理重复操作（例如多行 tab，批量加双引号等等）\n- Vim 是很多服务器自带的命令行编辑器，当你通过 `ssh` 连接远程服务器之后，由于没有图形界面，只能在命令行里进行开发（当然现在很多 IDE 如 PyCharm 提供了 `ssh` 插件可以解决这个问题）。\n- 异常丰富的插件生态，让你拥有世界上最花里胡哨的命令行编辑器。\n\n## 如何学习 Vim\n\n不幸的是 Vim 的学习曲线确实相当陡峭，我花了好几个星期才慢慢适应了用 Vim 进行开发的过程。最开始你会觉得非常不适应，但一旦熬过了初始阶段，相信我，你会爱上 Vim。\n\nVim 的学习资料浩如烟海，但掌握它最好的方式还是将它用在日常的开发过程中，而不是一上来就去学各种花里胡哨的高级 Vim 技巧。个人推荐的学习路线如下：\n\n- 先阅读[这篇 tutorial](https://missing.csail.mit.edu/2020/editors/)，掌握基本的 Vim 概念和使用方式，不想看英文的可以阅读[这篇教程](https://github.com/wsdjeg/vim-galore-zh_cn)。\n- 用 Vim 自带的 `vimtutor` 进行练习，安装完 Vim 之后直接在命令行里输入 `vimtutor` 即可进入练习程序。\n- 最后就是强迫自己使用 Vim 进行开发，IDE 里可以安装 Vim 插件。\n- 等你完全适应 Vim 之后新的世界便向你敞开了大门，你可以按需配置自己的 Vim（修改 `.vimrc` 文件），网上有数不胜数的资源可以借鉴。\n- 如果你想对配置 Vim 有更加深入的了解，[_Learn Vim Script the Hard Way_](https://learnvimscriptthehardway.stevelosh.com/) 是一个很好的资源。\n\n## 关于键位映射\n\n用 Vim 编辑代码的时候会频繁用到 ESC 和 CTRL 键, 但是这两个键都离 home row 很远, 可以把 CapsLock 键映射到 Esc 或者 Ctrl 键，让手更舒服一些。\n\nWindows 系统可以使用 [Powertoys](https://learn.microsoft.com/en-us/windows/powertoys/) 或者 [AutoHotkey](https://www.autohotkey.com/) 重映射键位。    \nMacOS 系统提供了重映射键位的[设置](https://vim.fandom.com/wiki/Map_caps_lock_to_escape_in_macOS)，另外也可以使用 [Karabiner-Elements](https://karabiner-elements.pqrs.org/) 重映射。  \nLinux 系统可以使用 [xremap](https://github.com/xremap/xremap) 进行映射，对于 wayland 和 x.org 都可以使用，并且支持分别映射点按和按住。\n\n但更佳的做法是同时将 CapsLock 映射为 Ctrl 和 Esc，点按为 Esc，按住为 Ctrl。这是不同系统下的实现方法：\n\n- [Windows](https://gist.github.com/sedm0784/4443120)  \n- [MacOS](https://ke-complex-modifications.pqrs.org/#caps_lock_tapped_escape_held_left_control)  \n- [Linux](https://www.jianshu.com/p/6fdc0e0fb266)\n\n## 推荐参考资料\n\n- Neil, Drew. Practical Vim: Edit Text at the Speed of Thought. N.p., Pragmatic Bookshelf, 2015.\n- Neil, Drew. Modern Vim: Craft Your Development Environment with Vim 8 and Neovim. United States, Pragmatic Bookshelf.\n"
  },
  {
    "path": "docs/必学工具/thesis.en.md",
    "content": "# Thesis Writing\n\n## Why I Wrote This Tutorial\n\nIn 2022, I graduated from my college. When I started writing my thesis, I embarrassingly realized that my command of Word was limited to basic functions like adjusting fonts and saving documents. I considered switching to LaTeX, but formatting requirements for the thesis were more conveniently handled in Word. After a painful struggle, I finally completed the writing and defense of my thesis. To prevent others from following in my footsteps, I compiled relevant resources into a ready-to-use document for everyone's reference.\n\n## How to Write a Graduation Thesis in Word\n\nJust as it takes three steps to put an elephant in a fridge, writing a graduation thesis in Word also requires three simple steps:\n\n1. **Determine the Format Requirements of the Thesis**: Usually, colleges will provide the formatting requirements for theses (font and size for headings, sections, formatting of figures and citations, etc.), and if you're lucky, they might even provide a thesis template (if so, jump to the next step). Unfortunately, my college did not issue standard format requirements and provided a chaotic and almost useless template. Out of desperation, I found the [thesis format requirements](https://github.com/PKUFlyingPig/Thesis-Template/blob/master/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6%E7%A0%94%E7%A9%B6%E7%94%9F%E5%AD%A6%E4%BD%8D%E8%AE%BA%E6%96%87%E5%86%99%E4%BD%9C%E6%8C%87%E5%8D%97.pdf) of Peking University graduate students and created [a template](https://github.com/PKUFlyingPig/Thesis-Template/blob/master/%E8%AE%BA%E6%96%87%E6%A8%A1%E7%89%88.docx) based on their guidelines. Feel free to use it, but I take no responsibility for any issues for using it.\n\n2. **Learn Word Formatting**: At this stage, you either have a standard template provided by your college or just a vague set of formatting requirements. Now, the priority is to learn basic Word formatting skills. If you have a template, learn to use it; if not, learn to create one. Remember, there's no need to ambitiously start with a lengthy Word tutorial video. A half-hour tutorial is enough to get started for creating a passable academic paper. I watched [a concise and practical Bilibili tutorial video](https://www.bilibili.com/video/BV1YQ4y1M73G?p=1&vd_source=a4d76d1247665a7e7bec15d15fd12349), which is very useful for a quick start.\n\n3. **Produce Academic Work**: The easiest step. Everyone has their own way, so unleash your creativity. Best wishes for a smooth graduation!\n"
  },
  {
    "path": "docs/必学工具/thesis.md",
    "content": "# 毕业论文\n\n## 为什么写这份教程\n\n2022年，我本科毕业了。在开始动手写毕业论文的时候，我尴尬地发现，我对 Word 的掌握程度仅限于调节字体、保存导出这些傻瓜功能。曾想转战 Latex，但论文的段落格式要求调整起来还是用 Word 更为方便，经过一番痛苦缠斗之后，总算是有惊无险地完成了论文的写作和答辩。为了不让后来者重蹈覆辙，遂把相关资源整理成一份开箱即用的文档，供大家参考。\n\n## 如何用 Word 写毕业论文\n\n正如将大象装进冰箱需要三步，用 Word 写毕业论文也只需要简单三步：\n\n- 确定论文的格式要求：通常学院都会下发毕业论文的格式要求（各级标题的字体字号、图例和引用的格式等等），如果更为贴心的话甚至会直接给出论文模版（如是此情况请直接跳转到下一步）。很不幸的是，我的学院并没有下发标准的论文格式要求，还提供了一份格式混乱几乎毫无用处的论文模版膈应我，被逼无奈之下我找到了北京大学研究生的[论文格式要求](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)，大家需要的话自取，本人不承担无法毕业等任何责任。\n\n- 学习 Word 排版：到达这一步的童鞋分为两类，一是已经拥有了学院提供的标准模版，二是只有一份虚无缥缈的格式要求。那现在当务之急就是学习基础的 Word 排版技术，对于前者可以学会使用模版，对于后者则可以学会制作模版。此时切记不要雄心勃勃地选择一个十几个小时的 Word 教学视频开始头悬梁锥刺股，因为生产一份应付毕业的学术垃圾只要学半小时能上手就够了。我当时看的[一个 B 站的教学视频](https://www.bilibili.com/video/BV1YQ4y1M73G?p=1&vd_source=a4d76d1247665a7e7bec15d15fd12349)，短小精悍非常实用，全长半小时极速入门。\n\n- 生产学术垃圾：最容易的一步，大家八仙过海，各显神通吧，祝大家毕业顺利～～\n"
  },
  {
    "path": "docs/必学工具/tools.en.md",
    "content": "# Practical Toolbox\n\n## Download Tools\n\n- [Sci-Hub](https://sci-hub.se/): A revolutionary site aiming to break knowledge barriers, greeted by the goddess Elbakyan.\n- [Library Genesis](http://libgen.is/): A website for downloading e-books.\n- [Z-library](https://z-library.rs/): An e-book download site (works better under [Tor](https://www.torproject.org/), [link](http://loginzlib2vrak5zzpcocc3ouizykn6k5qecgj2tzlnab5wcbqhembyd.onion/)).\n- [Z-ePub](https://z-epub.com/): ePub e-book download site.\n- [PDF Drive](https://www.pdfdrive.com/): A PDF e-book search engine.\n- [MagazineLib](https://magazinelib.com/): A site for downloading PDF e-magazines.\n- [BitDownloader](https://bitdownloader.io/): YouTube video downloader.\n- [qBittorrent](https://www.qbittorrent.org/download.php): A BitTorrent client.\n- [uTorrent](https://www.utorrent.com): Another BitTorrent client.\n- [National Standard Information Public Service Platform](https://std.samr.gov.cn/): Official platform for querying and downloading various standards.\n- [Standard Knowledge Service System](http://www.standards.com.cn/): Search and read the standards you need.\n- [MSDN, I Tell You](https://msdn.itellyou.cn/): A site for downloading Windows OS images and other software.\n\n## Design Tools\n\n- [excalidraw](https://excalidraw.com/): A hand-drawn style drawing tool, great for creating diagrams in course reports or PPTs.\n- [tldraw](https://www.tldraw.com/): A drawing tool suitable for flowcharts, architecture diagrams, etc.\n- [draw.io](https://app.diagrams.net/): A powerful and concise online drawing website, supports flowcharts, UML diagrams, architecture diagrams, prototypes, etc., with export options for Onedrive, Google Drive, Github, and offline client availability.\n- [origamiway](https://www.origamiway.com/paper-folding-crafts-step-by-step.shtml): Step-by-step origami tutorials.\n- [thingiverse](https://www.thingiverse.com/): Includes various 2D/3D design resources, with STL files ready for 3D printing.\n- [iconfont](https://www.iconfont.cn/): The largest icon and illustration library in China, useful for development or drawing system architecture diagrams.\n- [turbosquid](https://www.turbosquid.com/): A platform to purchase various models.\n- [flaticon](https://www.flaticon.com/): A site to download free and high-quality icons.\n- [Standard Map Service System](http://bzdt.ch.mnr.gov.cn/): Official standard map downloads.\n- [PlantUML](https://plantuml.com/zh/): Quickly write UML diagrams using code.\n\n## Programming Related\n\n- [sqlfiddle](http://www.sqlfiddle.com/): An easy-to-use online SQL Playground.\n- [sqlzoo](https://sqlzoo.net/wiki/SQL_Tutorial): Practice SQL statements online.\n- [godbolt](https://godbolt.org/): A convenient compiler exploration tool. Write some C/C++ code, choose a compiler, and observe the specific assembly code generated.\n- [explainshell](https://explainshell.com/): Struggling with the meaning of a shell command? Try this site!\n- [regex101](https://regex101.com/): A regex debugging site supporting various programming language standards.\n- [typingtom](https://www.typingtom.com/lessons): Typing practice/speed test site for programmers.\n- [wrk](https://github.com/wg/wrk): Website stress testing tool.\n- [gbmb](https://www.gbmb.org/): Data unit conversion tool.\n- [tools](https://tools.fun/): A collection of online tools.\n- [github1s](https://github1s.com/): Read GitHub code online with a web-based VS Code.\n- [visualgo](https://visualgo.net/en): Algorithm visualization website.\n- [DataStructureVisual](http://www.rmboot.com/): Data structure visualization website.\n- [Data Structure Visualizations](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html): Visualization website for data structures and algorithms.\n- [learngitbranching](https://learngitbranching.js.org/?locale=zh_CN): Visualize learning git.\n- [UnicodeCharacter](https://unicode-table.com/en/): Unicode character set website.\n- [cyrilex](https://extendsclass.com/regex-tester.html): A site for testing and visualizing regular expressions, supporting various programming language standards.\n- [mockium](https://softwium.com/mockium/): Platform for generating test data.\n\n## Learning Websites\n\n- [HFS](https://hepsoftwarefoundation.org/training/curriculum.html): Various software tutorials.\n- [Shadertoy](https://www.shadertoy.com/): Write various shaders.\n- [comments-for-awesome-courses](https://conanhujinming.github.io/comments-for-awesome-courses/): Reviews of open courses from prestigious universities.\n- [codetop](https://codetop.cc/home): Corporate problem bank.\n- [cs-video-courses](https://github.com/Developer-Y/cs-video-courses): List of computer science courses with video lectures.\n- [bootlin](https://elixir.bootlin.com/linux/v2.6.39.4/source/include/linux): Read Linux source code online.\n- [ecust-CourseShare](https://github.com/tianyilt/ecnu-PGCourseShare): East China Normal University graduate course strategy sharing project.\n- [REKCARC-TSC-UHT](https://github.com/PKUanonym/REKCARC-TSC-UHT): Tsinghua University computer science course strategy.\n- [seu-master](https://github.com/oneman233/seu-master): Southeast University graduate course materials.\n- [Runoob](https://www.runoob.com/): Brief tutorials on computer-related knowledge.\n- [FreeBSD From Entry to Run Away](https://book.bsdcn.org/): A Chinese tutorial on FreeBSD.\n- [MDN Web Docs](https://developer.mozilla.org/zh-CN/docs/Learn): MDN's beginner's guide to web development.\n- [Hello Algorithm](https://www.hello-algo.com/): A quick introductory tutorial on data structures and algorithms with animations, runnable examples, and Q&A.\n\n## Encyclopedic/Dictionarial Websites\n\n- [os-wiki](https://wiki.osdev.org/Main_Page): An encyclopedia of operating system technology resources.\n- [FreeBSD Documentation](https://docs.freebsd.org/en/): Official FreeBSD documentation.\n- [Python3 Documentation](https://docs.python.org/zh-cn/3/): Official Chinese documentation for Python3.\n- [C++ Reference](https://en.cppreference.com/w/): C++ reference manual.\n- [OI Wiki](https://oi-wiki.org/): An integrated site for programming competition knowledge.\n- [CTF Wiki](https://ctf-wiki.org/): An integrated site for knowledge and tools related to cybersecurity competitions.\n- [Microsoft Learn](https://learn.microsoft.com/zh-cn/): Microsoft's official learning platform, containing most Microsoft product documentation.\n- [Arch Wiki](https://wiki.archlinux.org/): Wiki written for Arch Linux, containing a lot of Linux-related knowledge.\n- [Qt Wiki](https://wiki.qt.io/Main): Official Qt Wiki.\n- [OpenCV Chinese Documentation](https://opencv.apachecn.org/#/): Community version of OpenCV's Chinese documentation.\n- [npm Docs](https://docs.npmjs.com/): Official npm documentation.\n- [developer-roadmap](https://roadmap.sh/): provides roadmaps, guides and other educational content to help guide developers in picking up a path and guide their learnings.\n\n## Communication Platforms\n\n- [GitHub](https://github.com/): Many open-source projects' hosting platform, also a major communication platform for many open-source projects, where issues can solve many problems.\n- [StackExchange](https://stackexchange.com/): A programming community composed of 181 Q&A communities (including Stack Overflow).\n- [StackOverflow](https://stackoverflow.com/): An IT technical Q&A site related to programming.\n- [Gitee](https://gitee.com/): A code hosting platform similar to GitHub, where you can find solutions to common questions in the issues of corresponding projects.\n- [Zhihu](https://www.zhihu.com/): A Q&A community similar to Quora, where you can ask questions, with some answers containing computer knowledge.\n- [Cnblogs](https://www.cnblogs.com/): A knowledge-sharing community for developers, containing blogs on common questions. Accuracy is not guaranteed, please use with caution.\n- [CSDN](https://blog.csdn.net/): Contains blogs on common questions. Accuracy is not guaranteed, please use with caution.\n\n## Miscellaneous\n\n- [tophub](https://tophub.today/): A collection of trending news headlines (aggregating from Zhihu, Weibo, Baidu, WeChat, etc.).\n- [feedly](https://feedly.com/): A famous RSS feed reader.\n- [speedtest](https://www.speedtest.net/zh-Hans): An online network speed testing website.\n- [public-apis](https://github.com/public-apis/public-apis): A collective list of free APIs for development.\n- [numberempire](https://zh.numberempire.com/derivativecalculator.php): A tool for calculating derivatives of functions.\n- [sustech-application](https://sustech-application.com/#/grad-application/computer-science-and-engineering/README): Southern University of Science and Technology experience sharing website.\n- [vim-adventures](https://vim-adventures.com/): An online game based on vim keyboard shortcuts.\n- [vimsnake](https://vimsnake.com/): Play the snake game using vim commands.\n- [keybr](https://www.keybr.com/): A website for learning touch typing.\n- [Awesome C++](https://cpp.libhunt.com/): A curated list of awesome C/C++ frameworks, libraries, resources.\n- [HelloGitHub](https://hellogithub.com/): Shares interesting and beginner-friendly open-source projects on GitHub.\n- [Synergy](https://github.com/DEAKSoftware/Synergy-Binaries): A set of keyboard and mouse controls for multiple computers\n"
  },
  {
    "path": "docs/必学工具/tools.md",
    "content": "# 实用工具箱\n\n## 下载工具\n\n- [Sci-Hub](https://sci-hub.se/): Elbakyan 女神向你挥手，旨在打破知识壁垒的革命性网站。\n- [Library Genesis](http://libgen.is/): 电子书下载网站。\n- [Z-library](https://z-library.rs/): 电子书下载网站（在 [Tor](https://www.torproject.org/) 下运行较佳，[链接](http://loginzlib2vrak5zzpcocc3ouizykn6k5qecgj2tzlnab5wcbqhembyd.onion/)）。\n- [Z-ePub](https://z-epub.com/): ePub 电子书下载网站。\n- [PDF Drive](https://www.pdfdrive.com/): PDF 电子书搜索引擎。\n- [MagazineLib](https://magazinelib.com/): PDF 电子杂志下载网站。\n- [BitDownloader](https://bitdownloader.io/): 油管视频下载器。\n- [qBittorrent](https://www.qbittorrent.org/download.php): BitTorrent 客户端。\n- [uTorrent](https://www.utorrent.com): BitTorrent 客户端。\n- [全国标准信息公共服务平台](https://std.samr.gov.cn/)：各类标准查询和下载官方平台。\n- [标准知识服务系统](http://www.standards.com.cn/)：检索与阅读所需标准。\n- [MSDN,我告诉你](https://msdn.itellyou.cn/): Windows 操作系统镜像下载站，也有许多其他软件的下载。\n\n## 设计工具\n\n- [excalidraw](https://excalidraw.com/): 一款手绘风格的绘图工具，非常适合绘制课程报告或者PPT内的示意图。\n- [tldraw](https://www.tldraw.com/): 一个绘图工具，适合画流程图，架构图等。\n- [draw.io](https://app.diagrams.net/): 强大简洁的在线的绘图网站，支持流程图，UML图，架构图，原型图等等，支持 Onedrive, Google Drive, Github 导出，同时提供离线客户端。\n- [origamiway](https://www.origamiway.com/paper-folding-crafts-step-by-step.shtml): 手把手教你怎么折纸。\n- [thingiverse](https://www.thingiverse.com/): 囊括各类 2D/3D 设计资源，其 STL 文件下载可直接 3D 打印。\n- [iconfont](https://www.iconfont.cn/): 国内最大的图标和插画资源库，可用于开发或绘制系统架构图。\n- [turbosquid](https://www.turbosquid.com/): 可以购买各式各样的模型。\n- [flaticon](https://www.flaticon.com/): 可下载免费且高质量的图标。\n- [标准地图服务系统](http://bzdt.ch.mnr.gov.cn/): 可以下载官方标准地图。\n- [PlantUML](https://plantuml.com/zh/): 可以使用代码快速编写 UML 图。\n\n## 编程相关\n\n- [sqlfiddle](http://www.sqlfiddle.com/): 一个简易的在线 SQL Playground。\n- [sqlzoo](https://sqlzoo.net/wiki/SQL_Tutorial)：在线练习 sql 语句。\n- [sqlable](https://sqlable.com)：一个 SQL 工具网站（格式化器、验证器、生成器，SQL Playground）。\n- [godbolt](https://godbolt.org/): 非常方便的编译器探索工具。你可以写一段 C/C++ 代码，选择一款编译器，然后便可以观察生成的具体汇编代码。\n- [explainshell](https://explainshell.com/): 你是否曾为一段 shell 代码的具体含义感到困扰？manpage 看半天还是不明所以？试试这个网站！\n- [regex101](https://regex101.com/): 正则表达式调试网站，支持各种编程语言的匹配标准。\n- [typingtom](https://www.typingtom.com/lessons): 针对程序员的打字练习/测速网站。\n- [wrk](https://github.com/wg/wrk): 网站压测工具。\n- [gbmb](https://www.gbmb.org/): 数据单位转换。\n- [tools](https://tools.fun/): 在线工具合集。\n- [github1s](https://github1s.com/): 用网页版 VS Code 在线阅读 GitHub 代码。\n- [visualgo](https://visualgo.net/en): 算法可视化网站。\n- [DataStructureVisual](http://www.rmboot.com/): 数据结构可视化网站。\n- [Data Structure Visualizations](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html): 数据结构与算法的可视化网站。\n- [learngitbranching](https://learngitbranching.js.org/?locale=zh_CN): 可视化学习 git。\n- [UnicodeCharacter](https://unicode-table.com/en/): Unicode 字符集网站。\n- [cyrilex](https://extendsclass.com/regex-tester.html): 一个用于测试和可视化正则表达式的网站，支持各种编程语言标准。\n- [mockium](https://softwium.com/mockium/): 生成测试数据的平台。\n\n## 学习网站\n\n- [HFS](https://hepsoftwarefoundation.org/training/curriculum.html): 各类软件教程。\n- [Shadertoy](https://www.shadertoy.com/): 编写各式各样的 shader。\n- [comments-for-awesome-courses](https://conanhujinming.github.io/comments-for-awesome-courses/): 名校公开课评价网。\n- [codetop](https://codetop.cc/home): 企业题库。\n- [cs-video-courses](https://github.com/Developer-Y/cs-video-courses): 带有视频讲座的计算机科学课程列表。\n- [bootlin](https://elixir.bootlin.com/linux/v2.6.39.4/source/include/linux): 在线阅读 Linux 源码。\n- [ecust-CourseShare](https://github.com/tianyilt/ecnu-PGCourseShare): 华东师范大学研究生课程攻略共享计划。\n- [REKCARC-TSC-UHT](https://github.com/PKUanonym/REKCARC-TSC-UHT): 清华大学计算机系课程攻略。\n- [seu-master](https://github.com/oneman233/seu-master): 东南大学研究生课程资料整理。\n- [菜鸟教程](https://www.runoob.com/): 计算机相关知识的简要的教程。\n- [FreeBSD 从入门到跑路](https://book.bsdcn.org/): 一本 FreeBSD 的中文教程。\n- [MDN Web Docs](https://developer.mozilla.org/zh-CN/docs/Learn): MDN 网络开发入门手册。\n- [Hello 算法](https://www.hello-algo.com/): 动画图解、能运行、可提问的数据结构与算法快速入门教程。\n\n## 百科网站/词典性质的网站\n- [os-wiki](https://wiki.osdev.org/Main_Page): 操作系统技术资源百科全书。\n- [FreeBSD Documentation](https://docs.freebsd.org/en/): FreeBSD 官方文档。\n- [Python3 Documentation](https://docs.python.org/zh-cn/3/): Python3 官方中文文档。\n- [C++ Reference](https://en.cppreference.com/w/): C++ 参考手册。\n- [OI Wiki](https://oi-wiki.org/): 编程竞赛知识整合站点。\n- [CTF Wiki](https://ctf-wiki.org/)：网络安全竞赛相关知识与工具的整合站点。\n- [Microsoft Learn](https://learn.microsoft.com/zh-cn/): 微软官方的学习平台，包含了绝大多数微软产品的文档。\n- [Arch Wiki](https://wiki.archlinux.org/): 专为 Arch Linux 而写的 Wiki，包含了大量 Linux 相关的知识。\n- [Qt Wiki](https://wiki.qt.io/Main): Qt 官方 Wiki。\n- [OpenCV 中文文档](https://opencv.apachecn.org/#/): OpenCV 的社区版中文文档。\n- [npm Docs](https://docs.npmjs.com/): npm 官方文档。\n- [developer-roadmap](https://roadmap.sh/)：帮助开发者了解学习路径并在职业生涯中不断成长。\n\n## 交流平台\n- [GitHub](https://github.com/): 许多开源项目的托管平台，也是许多开源项目的主要交流平台，通过查看 issue 可以解决许多问题。\n- [StackExchange](https://stackexchange.com/): Stack Exchange 是由 181 个问答社区组成（其中包括 Stack Overflow）的编程社区。\n- [StackOverflow](https://stackoverflow.com/): Stack Overflow 是一个与程序相关的 IT 技术问答网站。\n- [Gitee](https://gitee.com/): 一个类似于 GitHub 的代码托管平台，可以在对应项目的 issue 里查找一些常见问题的解答。\n- [知乎](https://www.zhihu.com/): 一个类似于 Quora 的问答社区，可以在其中提问，一些问答包含有计算机的知识。\n- [博客园](https://www.cnblogs.com/): 一个面向开发者的知识分享社区，拥有一些常见问题的博客，正确率不能保证，请谨慎使用。\n- [CSDN](https://blog.csdn.net/): 拥有一些常见问题的博客，正确率不能保证，请谨慎使用。\n\n## 杂项\n\n- [tophub](https://tophub.today/): 新闻热榜合集（综合了知乎、微博、百度、微信等）。\n- [feedly](https://feedly.com/): 著名的 RSS 订阅源阅读器。\n- [speedtest](https://www.speedtest.net/zh-Hans): 在线网络测速网站。\n- [public-apis](https://github.com/public-apis/public-apis): 公共 API 合集列表。\n- [numberempire](https://zh.numberempire.com/derivativecalculator.php): 函数求导工具。\n- [sustech-application](https://sustech-application.com/#/grad-application/computer-science-and-engineering/README): 南方科技大学经验分享网。\n- [vim-adventures](https://vim-adventures.com/): 一款基于 vim 键盘快捷键的在线游戏。\n- [vimsnake](https://vimsnake.com/): 利用 vim 玩贪吃蛇。\n- [keybr](https://www.keybr.com/): 学习盲打的网站。\n- [Awesome C++](https://cpp.libhunt.com/): 很棒的 C/C++ 框架、库、资源精选列表。\n- [HelloGitHub](https://hellogithub.com/): 分享 GitHub 上有趣、入门级的开源项目。\n- [Synergy](https://github.com/DEAKSoftware/Synergy-Binaries): 一套键鼠能控制多台电脑。\n"
  },
  {
    "path": "docs/必学工具/workflow.en.md",
    "content": "> Contributed by [@HardwayLinka](https://github.com/HardwayLinka)\n\nThe field of computer science is vast and rapidly evolving, making lifelong learning crucial. However, our sources of knowledge in daily development and learning are complex and fragmented. We encounter extensive documentation manuals, brief blogs, and even snippets of news and public accounts on our phones that may contain interesting knowledge. Therefore, it's vital to use various tools to create a learning workflow that suits you, integrating these knowledge fragments into your personal knowledge base for easy reference and review. After two years of learning alongside work, I have developed the following learning workflow:\n\n![](https://raw.githubusercontent.com/HardwayLinka/image/master/Drawing 2022-10-20 11.23.41.excalidraw.png)\n\n## Core Logic\n\nInitially, when learning new knowledge, I referred to Chinese blogs but often found bugs and gaps in my code practice. Gradually, I realized that the information I referred to might be incorrect, as the threshold for posting blogs is low and their credibility is not high. So, I started consulting some related Chinese books.\n\nChinese books indeed provide a comprehensive and systematic explanation of concepts. However, given the rapid evolution of computer technology and the US's leadership in CS, content in Chinese books often lags behind the latest knowledge. This led me to realize the importance of firsthand information. Some Chinese books are translations of English ones, and translation can take a year or two, causing a delay in information transmission and loss during translation. If a Chinese book is not a translation, it likely references other books, introducing biases in interpreting the original English text.\n\nTherefore, I naturally started reading English books. The quality of English books is generally higher than that of Chinese ones. As I delved deeper into my studies, I discovered a hierarchy of information reliability: `source code` > `official documentation` > `English books` > `English blogs` > `Chinese blogs`. This led me to create an \"Information Loss Chart\":\n\n![](https://cdn.sspai.com/2022/10/11/bf07c1965a2e5bdf3f00644737789e2e.png)\n\nAlthough firsthand information is crucial, subsequent iterations (N-th hand information) are not useless. They include the author's transformation of the source knowledge — such as logical organization (flow charts, mind maps) or personal interpretations (abstractions, analogies, extensions to other knowledge points). These transformations can help us quickly grasp and consolidate core knowledge, like using guidebooks in school. Moreover, interacting with others' interpretations during learning is important, allowing us to benefit from various perspectives. Hence, it's advisable to first choose high-quality, less distorted sources of information while also considering multiple sources for a more comprehensive and accurate understanding.\n\nIn real-life work and study, learning rarely follows a linear, deep dive into a single topic. Often, it involves other knowledge points, such as new jargon, classic papers not yet read, or unfamiliar code snippets. This requires us to think deeply and \"recursively\" learn, establishing connections between multiple knowledge points.\n\n## Choosing the Right Note-taking Software\n\nThe backbone of the workflow is built around the core logic of \"multiple references for a single knowledge point and building connections among various points.\" This is similar to writing academic papers. Papers usually have footnotes explaining keywords and multiple references at the end. But our daily notes are much more casual, hence the need for a more flexible method.\n\nI'm accustomed to jumping to related functions and implementations in an IDE. It would be great if notes could also be interlinked like code. Current \"double-link note-taking software,\" such as Roam Research, Logseq, Notion, and Obsidian, addresses this need. I chose Obsidian for the following reasons:\n\n- Obsidian is based locally, with fast opening speeds, and can store many e-books. My laptop, an Asus TUF Gaming FX505 with 32GB of RAM, runs Obsidian very smoothly.\n- Obsidian is Markdown-based. This is an advantage because if a note-taking software uses a proprietary format, it's inconvenient for third-party extensions and opening notes with other software.\n- Obsidian has a rich and active plugin ecosystem, allowing for an \"all in one\" effect, meaning various knowledge sources can be integrated in one place.\n\n## Information Sources\n\nObsidian's plugins support PDF formats, and it naturally supports Markdown. To achieve \"all in one,\" you can convert other file formats to PDF or Markdown. This presents two questions:\n\n- What formats are there?\n- How to convert them to PDF or Markdown?\n\n![](https://cdn.sspai.com/2022/10/11/3801b1c9b94286566fe677e3b12cc7b0.png)\n\n### Formats\n\nFile formats depend on their display platforms. Before considering formats, let's list the sources of information I usually access:\n\n![](https://cdn.sspai.com/2022/10\n\n/11/07e97f372850054958d4961a3787a93f.png)\n\nThe main categories are `articles`, `papers`, `e-books`, and `courses`, primarily including formats like `web pages`, `PDFs`, `MOBI`, `AZW`, and `AZW3`.\n\n### Conversion to PDF or Markdown\n\nOnline articles and courses are mostly presented as web pages. To convert web pages to Markdown, I use the clipping software \"Simplified Read,\" which can clip articles from nearly all platforms into Markdown and import them into Obsidian.\n\n![](https://cdn.sspai.com/2022/10/11/211cffa78f20a9e7286a7419e9e0b878.png)\n\nFor papers and e-books, if the format is already PDF, it's straightforward. Otherwise, I use Calibre for conversion:\n\n![](https://cdn.sspai.com/2022/10/11/51575f65f6f4c6edfa6c5b97fd16d625.png)\n\nNow, using Obsidian's PDF plugin and native Markdown support, I can seamlessly take notes and reference across these documents (see \"Information Processing\" below for details).\n\n![](https://cdn.sspai.com/2022/10/11/d64a9a2d6406d2d367dcb505ede69c83.png)\n\n### Managing Information Sources\n\nFor file resources like PDFs, I use local or cloud storage. For web resources, I categorize and save them in browser bookmarks or clip them into Markdown notes. However, browsers don't support mobile web bookmarking. To enable cross-platform web bookmarking, I use Cubox. With a swipe on my phone, I can save interesting web pages in one place. Although the free version limits to 100 bookmarks, it's usually sufficient and prompts me to process these pages promptly.\n\n![](https://cdn.sspai.com/2022/10/11/ad7ebfcb4619f64a41d328b88e0e3a12.png)\n\nMoreover, many of the web pages we bookmark are not from fully-featured blog platforms like Zhihu or Juejin but personal sites without mobile apps. These can be easily overlooked in browser bookmarks, and we might miss new article notifications. Here, `RSS` comes into play.\n\n`RSS` (Rich Site Summary) is a type of web feed that allows users to access updates to online content in a standardized format. On desktops, `RSSHub Radar` helps discover and generate `RSS` feeds, which can be subscribed to using `Feedly` (both have official Chrome browser plugins).\n\n![](https://cdn.sspai.com/2022/10/11/5df6cd9d967f190df35928e781f9185f.png)\n\nWith this, the information collection process is comprehensive. But no matter how well categorized, information needs to be internalized to be useful. After collecting information, the next step is processing it — reading, understanding the semantics (especially for English sources), highlighting key sentences or paragraphs, noting queries, brainstorming related knowledge points, and writing summaries. What tools are needed for this process?\n\n## Information Processing\n\n### English Sources\n\nFor English materials, I initially used \"Youdao Dictionary\" for word translation, Google Translate for sentences, and \"Deepl\" for paragraphs. Eventually, I realized this was too slow and inefficient. Ideally, a single tool that can handle word, sentence, and paragraph translation would be optimal. After researching, I chose \"Quicker\" + \"Saladict\" for translation.\n\n![](https://cdn.sspai.com/2022/10/11/a7ebb1d3c46702b56bd6d171dfcfc075.png)\n\nThis combo allows translation outside browsers and supports words, sentences, and paragraphs, offering results from multiple translation platforms. For non-urgent word lookups, the \"Collins Advanced\" dictionary is helpful as it explains English words in English, providing context to aid understanding.\n\n![](https://cdn.sspai.com/2022/10/11/article/827c9a8048c83e504ccb15893702bf09)\n\n### Multimedia Information\n\nAfter processing text-based information, it's important to consider how to handle multimedia information. Specifically, I'm referring to English videos, as I don't have a habit of learning through podcasts or recordings and I rarely watch Chinese tutorials anymore. Many renowned universities offer open courses in video format. Wouldn't it be helpful if you could take notes on these videos? Have you ever thought it would be great if you could convert the content of a lecture into text, since we usually read faster than a lecturer speaks? Fortunately, the software `Language Reactor` can export subtitles from YouTube and Netflix videos, along with Chinese translations.\n\nWe can copy the subtitles exported by `Language Reactor` into `Obsidian` and read them as articles. Besides learning purposes, you can also use this plugin while watching YouTube videos. It displays subtitles in both English and Chinese, and you can click on unfamiliar words in the subtitles to see their definitions.\n\n![](https://cdn.sspai.com/2022/10/11/364c8e6ed263affa84d9eee61338b4af.png)\n\nHowever, reading texts isn't always the most efficient way to learn about some abstract concepts. As the saying goes, \"A picture is worth a thousand words.\" What if we could link a segment of text to corresponding images or even video operations? While browsing the `Obsidian` plugin marketplace, I discovered a plugin called `Media Extended`. This plugin allows you to add links in your notes that jump to specific times in a video, effectively connecting your notes to the video! This works well with the video subtitles mentioned earlier, where each line of subtitles corresponds to a time stamp, allowing for jumps to specific parts of the video. This means you don't have to cut specific video segments; instead, you can jump directly within the article!\n\n![](https://cdn.sspai.com/2022/10/11/17554cfdf662d5719ada453674012fdb.gif)\n\n`Obsidian` also has a powerful plugin called `Annotator`, which allows you to jump from notes to the corresponding section in a PDF.\n\n![](https://cdn.sspai.com/2022/10/11/article/b56994bf9a306830d8b0b8112677d3ec)\n\nNow, with `Obsidian`'s built-in double-chain feature, we can achieve inter-note linking, and with the above plugins, we can extend these links to multimedia. This completes the process of information handling. Learning often involves both a challenging ascent and a familiar descent. So, how can we incorporate the review process into this workflow?\n\n## Information Review\n\n`Obsidian` already has a plugin that connects to `Anki`, the renowned spaced repetition-based memory software. With this plugin, you can export segments of your notes to `Anki` as flashcards, each containing a link back to the original note.\n\n![](https://cdn.sspai.com/2022/10/11/1f7cebd8dd28f664d77cbf0ab228c406.gif)\n\n## Conclusion\n\nThis workflow evolved over two years of learning in my spare time. Frustration with repetitive processes led to specific needs, which were fortunately met by tools I discovered online. Don't force tools into your workflow just for the sake of satisfaction; life is short, so focus on what's truly important.\n\nBy the way, this article discusses the evolution of the workflow. If you're interested in the details of how this workflow is implemented, I recommend reading the following articles in order after this one:\n\n1. [3000+ Hours Accumulated Learning Workflow](https://sspai.com/post/75969)\n2. [Advanced Techniques in Obsidian | Creating Notes that Link to Any File Format](https://juejin.cn/post/7145351315705577485)"
  },
  {
    "path": "docs/必学工具/workflow.md",
    "content": "> Contributed by [@HardwayLinka](https://github.com/HardwayLinka)\n\n计算机领域的知识覆盖面很广并且更新速度很快，因此保持终身学习的习惯很重要。但在日常开发和学习的过程中，我们获取知识的来源相对复杂且细碎。有成百上千页的文档手册，也有寥寥数语的博客，甚至闲暇时手机上划过的某则新闻和公众号都有可能包含我们感兴趣的知识。因此，如何利用现有的各类工具，形成一套适合自己的学习工作流，将不同来源的知识碎片整合进属于自己的知识库，方便之后的查阅与复习，就显得尤为重要。经过两年工作之余的学习后，我磨合出了以下学习工作流：\n\n![](https://raw.githubusercontent.com/HardwayLinka/image/master/Drawing 2022-10-20 11.23.41.excalidraw.png)\n\n## 底层核心逻辑\n\n一开始我学习新知识时会参考中文博客，但在代码实践时往往会发现漏洞和bug。我逐渐意识到我参考的信息可能是错误的，毕竟发博客的门槛低，文章可信度不高，于是我开始查阅一些相关的中文书籍。 \n\n中文书籍的确是比较全面且系统地讲解了知识点，但众所周知，计算机技术更迭迅速，又因为老美在 CS 方面一直都是灯塔，所以一般中文书籍里的内容会滞后于当前最新的知识，导致我跟着中文书籍实践会出现软件版本差异的问题。这时我开始意识到一手信息的重要性，有些中文书籍是翻译英文书籍的，一般翻译一本书也要一两年，这会导致信息传递的延迟，还有就是翻译的过程中信息会有损失。如果一本中文书籍不是翻译的呢，那么它大概率也参考了其他书籍，参考的过程会带有对英文原著中语义理解的偏差。\n\n于是我就顺其自然地开始翻阅英文书籍。不得不说，英文书籍内容的质量整体是比中文书籍高的。后来随着学习的层层深入，以知识的时效性和完整性出发，我发现 `源代码` > `官方文档` > `英文书籍` > `英文博客` > `中文博客`，最后我得出了一张 `信息损失图`：\n\n![](https://s2.loli.net/2024/10/18/diZGmFHz8162u4I.png)\n\n虽然一手信息很重要，但后面的 N 手信息并非一无是处，因为这 N 手资料里包含了作者对源知识的转化——例如基于某种逻辑的梳理（流程图、思维导图等）或是一些自己的理解（对源知识的抽象、类比、延伸到其他知识点），这些转化可以帮助我们更快地掌握和巩固知识的核心内容，就如同初高中学习时使用的辅导书。 此外，学习的过程中和别人的交流十分重要，这些 N 手信息同时起了和其他作者交流的作用，让我们能采百家之长。所以这提示我们学习一个知识点时先尽量选择质量更高的，信息损失较少的信息源，同时不妨参考多个信息源，让自己的理解更加全面准确。\n\n现实工作生活中的学习很难像学校里一样围绕某个单一知识点由浅入深，经常会在学习过程中涉及到其他知识点，比如一些新的专有名词，一篇没有读过的经典论文，一段未曾接触过的代码等等。这就要求我们勤于思考，刨根究底地“递归”学习，给多个知识点之间建立联系。\n\n## 选择合适的笔记软件\n\n工作流的骨架围绕 `单个知识点多参考源，勤于提问给多个知识点之间建立联系` 的底层核心逻辑建立。我们写论文其实就是遵循这个底层逻辑的。论文一般会有脚注去解释一些关键字，并且论文末尾会有多个参考的来源，但是我们平时写笔记会随意得多，因此需要更灵活的方式。\n\n平时写代码习惯在 IDE 里一键跳转，把相关的函数和实现很好地联系在了一起。你也许会想，如果笔记也能像代码那样可以跳转就好了。现在市面上 `双链笔记软件` 就可以很好地解决这一痛点，例如 Roam Research、Logseq、Notion 和 Obsidian。Roam Research 和 Logseq 都是基于大纲结构的笔记软件，而 `大纲结构` 是劝退我使用这两款软件的原因。一是 `大纲结构` 做笔记容易使文章纵向篇幅太长，二是如果嵌套结构过多会占横向的篇幅。Notion 页面打开慢，弃之。最终我选择了 Obsidian，原因如下：\n\n*   Obsidian 基于本地，打开速度快，且可存放很多电子书。我的笔记本是 32g 内存的华硕天选一代，拿来跑 Obsidian 可以快到飞起\n*   Obsidian 基于 Markdown。这也是一个优势，如果笔记软件写的笔记格式是自家的编码格式，那么不方便其他第三方拓展，也不方便将笔记用其他软件打开，比如 qq 音乐下载歌曲有自己的格式，其他播放器播放不了，这挺恶心人的\n*   Obsidian 有丰富的插件生态，并且这个生态既大又活跃，即插件数量多，且热门插件的 star 多，开发者会反馈用户 issue，版本会持续迭代。借助这些插件，可以使 Obsidian 达到 `all in one` 的效果，即各类知识来源可以统一整合于一处\n\n## 信息的来源\n\nObsidian 的插件使其可以支持 pdf 格式，而其本身又支持 Markdown 格式。如果想要 `all in one`，那么可以基于这两个格式，将其他格式文件转换为 pdf 或者 Markdown。 那么现在就面临着两个问题：\n\n*   有什么格式\n*   怎么转换为 pdf 或 Markdown\n\n![](https://s2.loli.net/2024/10/18/JhDUR5tgNdO94mo.png)\n\n### 有什么格式\n\n文件格式依托于其展示的平台，所以在看有什么格式之前，可以罗列一下我平时获取信息的来源：\n\n![](https://s2.loli.net/2024/10/18/TycU8l71s9BJSVI.png)\n\n\n可以看到主要分为`文章`、`论文`、`电子书`、`课程`四类，包含的格式主要有 `网页`、`pdf` 、`mobi`、`azw`、`azw3`。\n\n### 怎么转换为 pdf 或 Markdown\n\n在线的文章和课程等大多以网页形式呈现，而将网页转换为 Markdown 可以使用剪藏软件，它可以将网页文章转换为多种文本格式文件。我选择的工具是简悦，使用简悦可以将几乎所有平台的文章很好地剪藏为 Markdown 并且导入到 Obsidian。\n\n![](https://s2.loli.net/2024/10/18/S5hcofUlv1x9dX3.png)\n\n对于论文和电子书而言如果格式本身就是 pdf 则万事大吉，但如果是其他格式则可以使用 calibre 进行转换：\n\n![](https://s2.loli.net/2024/10/18/OwrYoqxCjRgFJpZ.png)\n\n现在利用 Obsidian 的 pdf 插件和其原生的 markdown 支持就可以畅快无比地做笔记并且在这些文章的对应章节进行无缝衔接地引用跳转啦（具体操作参考下文的“信息的处理”模块）。\n\n![](https://s2.loli.net/2024/10/18/7eEWwftYC3KIjik.png)\n\n### 如何统一管理信息来源\n\n对于 pdf 等文件类资源可以本地或者云端存储，而网页类资源则可以分门别类地放入浏览器的收藏夹，或者剪藏成 markdown 格式的笔记，但是网页浏览器不能实现移动端的网页收藏。为了实现跨端网页收藏我选用了 Cubox，在手机端看到感兴趣的网页时只需小手一划，便能将网页统一保存下来。虽然免费版只能收藏 100 个网页，但其实够用了，还可以在收藏满时督促自己赶紧剪藏消化掉这些网页，让收藏不吃灰。\n\n![](https://s2.loli.net/2024/10/18/HU4kO6ofexS2lQM.png)\n\n除此之外，回想一下我们平时收藏的网页，就会发现有很多并不是像知乎、掘金这类有完整功能的博客平台，更多的是个人建的小站，而这些小站往往没有移动端应用，这样平时刷手机的时候也看不到，放到浏览器的收藏夹里又容易漏了看，有新文章发布我们也不能第一时间收到通知，这个时候就需要一种叫 `RSS` 的通信协议。  \n\n`RSS`（英文全称：RDF Site Summary 或 Really Simple Syndication），中文译作简易信息聚合，也称聚合内容，是一种消息来源格式规范，用以聚合多个网站更新的内容并自动通知网站订阅者。电脑端可以借助 `RSSHub Radar` 来快速发现和生成 `RSS` 订阅源，接着使用 `Feedly` 来订阅这些 `RSS` 订阅源（`RSSHub Radar` 和 `Feedly` 在 chrome 浏览器中均有官方插件）。\n\n![](https://s2.loli.net/2024/10/18/5qAKwzYEgmb821F.png)\n\n到这里为止，收集信息的流程已经比较完备了。但资料再多，分类规整得再漂亮，也得真正内化成自己的才管用。因此在收集完信息后就得进一步地处理信息，即阅读这些信息，如果是英文信息的话还得搞懂英文的语义，加粗高亮重点句子段落，标记有疑问的地方，发散联想相关的知识点，最后写上自己的总结。那么在这过程中需要使用到什么工具呢？\n\n## 信息的处理\n\n### 英文信息\n\n面对英文的资料，我以前是用 `有道词典` 来划词翻译，遇到句子的话就使用谷歌翻译，遇到大段落时就使用 `deepl`，久而久之，发现这样看英语文献太慢了，得用三个工具才能满足翻译这一个需求，如果有一个工具能够同时实现对单词、句子和段落的划词翻译就好了。我联想到研究生们应该会经常接触英语文献，于是我就搜 `研究生` + `翻译软件`，在检索结果里我最终选择了 `Quicker` + `沙拉查词` 这个搭配来进行划词翻译。\n\n![](https://s2.loli.net/2024/10/18/odmKinLV3hybCOa.png)\n\n使用这套组合可以实现在浏览器外的其他软件内进行划词翻译，并且支持单词、句子和段落的翻译，以及每次的翻译会有多个翻译平台的结果。btw，如果查单词时不着急的话，可以顺便看看 `科林斯高阶` 的翻译，这个词典的优点就是会用英文去解释英文，可以提供多个上下文帮助你理解，对于学习英文单词也有帮助，因为用英文解释英文才更接近英语的思维。\n\n![](https://s2.loli.net/2024/10/18/ZtG9XsoPde5HQBn.png)\n\n### 多媒体信息\n\n处理完文本类的信息后，我们还得思考一下怎么处理多媒体类的信息。此处的多媒体我特指英文视频，因为我没有用播客或录音学习的习惯，而且我已经基本不看中文教程了。现在很多国外名校公开课都是以视频的形式，如果能对视频进行做笔记会不会有帮助呢？不知道大家有没这样的想法，就是如果能把老师上课讲的内容转换成文本就好了，因为平时学习时我们看书的速度往往会比老师讲课的速度快。刚好 `Language Reactor` 这个软件可以将油管和网飞内视频的字幕导出来，同时附上中文翻译。\n\n我们可以把 `Language Reactor` 导出的字幕复制到 `Obsidian` 里面作为文章来读。除了出于学习的需求，也可以在平时看油管的视频时打开这个插件，这个插件可以同时显示中英文字幕，并且可以单击选中英文字幕中你认为生僻的单词后显示单词释义。\n\n![](https://s2.loli.net/2024/10/18/osDmqFvLtPVcidh.png)\n\n但阅读文本对于一些抽象的知识点来说并不是效率最高的学习方式。俗话说，一图胜千言，能不能将某一段知识点的文本和对应的图片甚至视频画面操作联系起来呢？我在浏览 `Obsidian` 的插件市场时，发现了一个叫 `Media Extended` 的插件，这个插件可以在你的笔记里添加跳转到视频指定时间进度的链接，相当于把你的笔记和视频连接起来了！这刚好可以和我上文提到的生成视频中英文字幕搭配起来，即每一句字幕对应一个时间，并且能根据时间点跳转到视频的指定进度，如此一来如果需要在文章中展示记录了操作过程的视频的话，就不需要自己去截取对应的视频片段，而是直接在文章内就能跳转！\n\n![](https://s2.loli.net/2024/10/18/LPwz8AKEfxuIMYS.gif)\n\n`Obsidian` 里还有一个很强大的插件，叫 `Annotator`，它可以实现笔记内跳转到 pdf 原文\n\n![](https://s2.loli.net/2024/10/18/dokCZEzrjl7AcI9.gif)\n\n现在，使用 `Obsidian` 自带的双链功能，可以实现笔记间相互跳转，结合上述两个插件，可以实现笔记到多媒体的跳转，信息的处理过程已经完备。一般我们学习的过程相当于上山和下山，刚学的时候就好像上山，很陌生、吃力，所谓学而时习之，复习或练习的过程就像下山，没有陌生感，不见得轻松，但非走不可。那么如何把复习这一过程纳入工作流的环节里呢？\n\n## 信息的回顾\n\n`Obsidian` 内已经有一个连接 `Anki` 的插件，`Anki` 就是大名鼎鼎的、基于间隔重复的记忆软件。使用该插件可以截取笔记的片段导出到 `Anki` 并变成一张卡片，卡片内也有跳转回笔记原文的链接\n\n![](https://s2.loli.net/2024/10/18/ivexghT64HIYPJq.gif)\n\n## 总结\n\n这个工作流是在我这两年业余时间学习时所慢慢形成的，在学习过程中因为对一些重复性的过程而感到厌倦，正是这种厌倦产生了某种特定的需求，恰好在平时网上冲浪时了解到的一些工具满足了我这些需求。不要为了虚无的满足感而将工具强行拼凑到自己的工作流中，人生苦短，做实事最紧要。\n\nbtw，此篇文章是讲解工作流的演化思路，如果对此工作流的实现细节感兴趣，建议阅读完本文后再按顺序阅读以下文章\n\n1.  [3000 + 小时积累的学习工作流](https://sspai.com/post/75969)\n2.  [Obsidian 的高级玩法 | 打造能跳转到任何格式文件的笔记](https://juejin.cn/post/7145351315705577485)\n"
  },
  {
    "path": "docs/必学工具/信息检索.en.md",
    "content": "# Information Retrieval\n\n## Introduction\n\n> When encountering a problem, remember the first thing is to **read the documentation**. Don't start by searching online or asking others directly. Reviewing FAQs may quickly provide the answer.\n\nInformation retrieval, as I understand it, is essentially about skillfully using search engines to quickly find the information you need, including but not limited to programming.\n\nThe most important thing in programming is STFW (search the fucking web) and RTFM (read the fucking manual). First, you should read the documentation, and second, learn to search. With so many resources online, how you use them depends on your information retrieval skills.\n\nTo understand how to search effectively, we first need to understand how search engines work.\n\n## How Search Engines Work\n\nThe working process of a search engine can generally be divided into three stages: [^1]\n\n1. Crawling and Fetching: Search engine spiders visit web pages by tracking links, obtain the HTML code of the pages, and store it in a database.\n2. Preprocessing: The indexing program processes the fetched web page data by extracting text, segmenting Chinese words, indexing, etc., preparing for the ranking program.\n3. Ranking: When users enter keywords, the ranking program uses the indexed data to calculate relevance and then generates the search results page in a specific format.\n\nThe first step involves web crawlers, often exaggerated in Python courses. It can be simply understood as using an automated program to download all text, images, and related information from websites and store them locally.\n\nThe second step is the core of a search engine, but not critical for users to understand. It can be roughly understood as cleaning data and indexing pages, each with keywords for easy querying.\n\nThe third step is closely related to us. Whether it's Google, Baidu, Bing, or others, you input keywords or queries, and the search engine returns results. This article teaches you how to obtain better results.\n\n## Basic Search Techniques\n\nBased on the above working principles, we can roughly understand that a search engine can be treated as a smart database. Using better query conditions can help you find the information you need faster. Here are some search techniques:\n\n### Use English\n\nFirst, it's important to know that in programming, it's best to search in English. Reasons include:\n\n1. In programming and various software operations, English resources are of higher quality than those in Chinese or other languages.\n2. Due to translation issues, English terms are more accurate and universally applicable than Chinese.\n3. Chinese search engines' word segmentation systems can lead to ambiguity. For example, Google searches in Chinese may not yield many useful results.\n\nIf your English is not strong, use translation tools like Baidu or Sogou; they are sufficient.\n\n### Refine Keywords\n\nDon't search whole sentences. Although search engines automatically segment words, searching with whole sentences versus keywords can yield significantly different results in accuracy and order. Search engines are machines, not your teachers or colleagues. As mentioned above, searching is actually querying a database crawled by the search engine, so it's better to break down into keywords or phrases.\n\nFor example, if you want to know how to integrate vcpkg into a project instead of globally, searching for \"如何将vcpkg集成到项目中而不是全局\" in a long sentence may not yield relevant results. It's better to break it down into keywords like \"vcpkg 集成 项目 全局\".\n\n### Replace Keywords\n\nIf you can't find what you're looking for, try replacing \"项目\" with \"工程\" or remove \"集成\". If that doesn't work, try advanced searching.\n\n### Advanced Searching\n\nMost search engines support advanced searching, including Google, Bing, Baidu, Ecosia, etc. Common formats include:\n\n* Exact Match: Enclose the search term in quotes for precise matching.\n* Exclude Keywords: Use a minus sign (-) to exclude specific words.\n* Include Keywords: Use a plus sign (+) to ensure a keyword is included.\n* Search Specific File Types: Use `filetype:pdf` to search for PDF files directly.\n* Search Specific Websites: Use `site:stackoverflow.com` to search within a specific site.\n\nRefer to the website instructions for specific syntax, such as [Baidu Advanced Search](https://baike.baidu.com/item/高级搜索/1743887?fr=aladdin) or [Bing Advanced Search Keywords](https://help.bing.microsoft.com/#apex/bing/zh-CHS/10001/-1).\n\n#### GitHub Advanced Search\n\nUse [GitHub's Advanced Search page](https://github.com/search/advanced) or refer to [GitHub Query Syntax](https://zhuanlan.zhihu.com/p/273766377) for advanced searches on GitHub. Examples include searching by repository name, description, readme, stars, fork count, size, update/creation date, license, language, user, and organization. These can be\n\n used in combination.\n\n### More Tips\n\nDepending on the context, I recommend specific sites for certain queries:\n\n* For language-specific queries (e.g., C++/Qt/OpenGL), add `site:stackoverflow.com`.\n* For specific business/development environments or software-related issues, first check BugLists, IssueLists, or relevant forums.\n* QQ groups are also a place to ask questions, but make sure your queries are meaningful.\n* Chinese platforms like Zhihu, Jian Shu, Blog Park, and CSDN have a wealth of Chinese notes and experiences.\n\n### About Baidu\n\nMany programmers advise against using Baidu, preferring Google or Bing International. However, if you really need it, consider using alternatives like Ecosia or Yandex. For Chinese searches, Baidu might actually be the best option due to its database and indexing policies.\n\n## Code Search\n\nIn addition to search engines, you might also need to search for code, either your own or from projects. Here are some recommended tools:\n\n### Local Code Search\n\n* ACK or ACK2, well-established search tools written in Perl.\n* The Silver Searcher, implemented in C.\n* The Platinum Searcher, implemented in Go.\n* FreeCommander's built-in search, efficient on solid-state drives.\n* IDE's built-in search, though not always the most user-friendly.\n\n### Open Source Code Search\n\n* [Searchcode](https://searchcode.com) for searching open source code, known for speed.\n* [一行代码](https://www.alinecode.com) a useful Chinese tool for code search.\n\n[^1]: [Introduction to How Search Engines Work - Zhihu](https://zhuanlan.zhihu.com/p/301641935)"
  },
  {
    "path": "docs/必学工具/信息检索.md",
    "content": "# 信息检索\n\n## 前言\n\n<em>碰到问题，记住第一件事是 **翻阅文档** ，不要一开始就直接搜索或者找人问，翻阅FAQ可能会快速找到答案。</em>\n\n信息检索，我的理解来说，实际上就是灵活运用搜索引擎中，方便快捷的搜到需要的信息，包括但不限于编程。\n\n编程最重要的，就是 STFW(search the fucking web) 和 RTFM(read the fucking Manual) ，首先要读文档，第二要学会搜索，网上那么多资源，怎么用，就需要信息检索。\n\n要搜索，我们首先要搞清楚搜索引擎是如何工作的：\n\n## 搜索引擎工作原理\n\n搜索引擎的工作过程大体可以分成三阶段：[^1]\n\n1. 爬行和抓取：搜索引擎蜘蛛通过跟踪链接访问网页，获取网页 HTML 代码存入数据库。\n1. 预处理：索引程序对抓取来的网页数据进行文字提取，中文分词，索引等处理，以备排名程序调用。\n1. 排名：用户输入关键词后，排名程序调用索引库数据，计算相关性，然后按一定格式生成搜索结果页面。\n\n第一步，就是大家经常听说的网络爬虫，一般 Python 卖课的都会吹这个东西。简单可以理解为，我用一个自动的程序，下载网站中的所有文本、图片等相关信息，然后存入本地的磁盘。\n\n第二步是搜索引擎的核心，但是对于我们使用来说，并不是特别关键，大致可以理解为洗干净数据，然后入库页面，每个页面加入关键字等信息方便我们查询。\n\n第三步跟我们息息相关，不管是什么搜索网站， google 、百度、 Bing ，都一样，输入关键字或者需要查询的内容，搜索引擎会给你返回结果。本文就是教你如何获取更好的结果。\n\n## 基础搜索技巧\n\n根据上述的工作原理，我们大致就能明白，其实可以把搜索引擎当作一个比较聪明的数据库，更好的使用查询条件就能更快速的找到你想要的信息，下面介绍一些搜索的技巧：\n\n### 使用英文\n\n首先我们要知道一件事，编程中，最好使用英文搜索。原因主要有几点：\n\n1. 编程和各种软件操作中，英文资料质量比中文资料和其他语言资料高，英文通用性还是更好些\n2. 因为翻译问题，英文的名词比中文准确通用\n3. 中文搜索中，分词系统不准会导致歧义，比如 Google 搜中文可能会搜不出几条有用结果\n\n如果你英文不好，用百度翻译或者搜狗翻译，足够了。\n\n当然下面的文档为了举例方便，都还是用中文例子。\n\n### 提炼关键词\n\n搜索时不要搜索整句话，虽然搜索引擎会自动帮助我们分词检索，但是整句和关键字搜索出来的结果再准确度和顺序上会有很大差别。搜索引擎是机器，并不是你的老师或者同事，看上面的流程，搜索实际上是去检索搜索引擎爬出来的数据库，你可以理解为关键字比模糊检索要快而且准确。\n\n我们需要提炼问题，确定我们到底需要解决什么问题。\n\n例如，我想知道 vcpkg 如何集成到工程上而不是全局中，那么搜索 `vcpkg如何集成到工程上而不是全局中`  这种长句可能无法找到相关的结果，最好是拆分成单词，`vcpkg 集成到 工程 全局`  这样的搜索。其实这里只是举个例子，针对本条其实都能搜索出相关信息，但是越具体的问题，机器分词越可能出问题，所以最好是拆分关键字，使用词组或者断句来进行搜索。\n\n### 替换关键字\n\n还是上面那个例子，如果搜不出来，可以试试把工程换成项目，或者移出集成，如果不行，试一下高级搜索。\n\n### 高级搜索\n\n普通搜索引擎一般都支持高级搜索，包括 google ， bing ，百度， ecosia ，等等，大部分都支持，不过可能语法不同，一般通用的表示：\n\n* 精准匹配： 精准匹配能保证搜索关键词完全被匹配上，一般是用双引号括起来\n  * 比如搜索线性代数，可以在输入框内输入 \"线性代数\"，搜索引擎将只匹配完整包含 “线性代数” 的页面，而不会搜索拆分成线性和代数两个词的页面\n* 不包含关键字： 用 -  减号连接关键字，用于排除某些干扰词\n* 包含关键字：  用 + 加号连接关键字\n* 搜索特定文件类型：  `filetype:pdf` 直接搜索 pdf 文件\n* 搜索特定网址： `site:stackoverflow.com` 只搜索特定网站内的页面\n\n一般可以参照网站说明，比如百度可以参照 [高级搜索](https://baike.baidu.com/item/高级搜索/1743887?fr=aladdin) ，Bing 可以参照 [高级搜索关键字](https://help.bing.microsoft.com/#apex/bing/zh-CHS/10001/-1) 和 [高级搜索选项](https://help.bing.microsoft.com/apex/index/18/zh-CHS/10002)。\n\n\n#### GitHub 的高级搜索\n\n可以直接用 [高级搜索页面](https://github.com/search/advanced) 进行搜索，也可以参照 [Github查询语法](https://zhuanlan.zhihu.com/p/273766377) 进行查找，简单说几个:\n\n* `in:name <关键字>` 仓库名称带关键字查询\n* `in:description <关键字>` 仓库描述带关键字查询\n* `in:readme <关键字>` README 文件带关键字查询\n* `stars(fork): >(=) <数字> <关键字>` star 或 fork 数大于(或等于)指定数字的带关键字查询\n* `stars(fork): 10..20 <关键词>` star 或 fork 数在 10 到 20 之间的带关键字查询\n* `size:>=5000 <关键词>` 限定仓库大于等于 5000K 的带关键字查询\n* `pushed(created):>2019-11-15 <关键字>` 更新 或 创建 日期在 2019 年 11 月 16 日之后的带关键字查询\n* `license:apache-2.0 <关键字>` LICENSE 为 apache-2.0 的带关键字查询\n* `language:java <关键词>` 仓库语言为 Java 的带关键字查询\n* `user:<用户名>` 查询某个用户的项目\n* `org:<组织名>` 查询某个组织的项目\n  这些可以混合使用，也可以先查找某一类的 awesome 仓库，然后从 awesome 库里找相关的资源，github 里有很多归纳仓库，可以先看看已有的收集，有时候会节省很多时间\n\n### 更多技巧\n\n使用中，实际上我会去特定网站找一些问题：\n\n* 如果是语言本身相关，比如 c++/Qt/OpenGL 如何实现什么功能，可以直接加上 `site:stackoverflow.com`\n* 如果是具体的业务/开发环境或者软件相关，可以先在 BugList 、IssueList ，或者相关论坛里先找一下，比如 Qt 的问题就可以直接去 Qt 论坛，QGis 或者 GDAL 相关问题可以在 stackExchange 里去搜\n* QQ 群也是一个提问的地方，但是需要你提的问题有意义，否则大部分人不会回你，而且 QQ 群回复并不及时。\n* 知乎专栏、简书、博客园、 CSDN 中有大量中文笔记，这些都是别人嚼烂了的东西，基本是别人踩坑的经验\n\n### 关于百度\n\n大部分编程人都会告诉你别用百度，用 Google 或者 Bing 国际版，但是 Bing 中文搜索的准确率并不高， Google 需要科学上网，如果真的需要，可以使用 Ecosia 、 Yandex 之类的搜索引擎。而且中文搜索来说，百度可能还真是最好的。\n\n百度的问题主要在于排序算法，可能两页都没啥对的内容，但是收录比 Bing 还是好一些的（百度以前并不遵守 robots.txt ，会抓取所有页面，所以有些个人网站甚至专门对百度做了屏蔽），甚至有时候比 Google 好。从数据库来说，百度比 Google 和 Bing 收录的中文内容要多，如果你碰到的时中文相关的问题而且确实找不到相关内容，那么就用百度，搜索引擎是工具，能用好用才是王道。\n\n## 代码搜索\n\n我们除了搜索引擎查找问题，还有可能会搜一些代码，可能是自己写的，也可能是项目中的，下面推荐一些工具：\n\n代码检索有两种，第一是本地的代码检索，第二是要写个啥算法，需要在网上搜索\n\n### 本地代码搜索\n\n* ACK 或者 ACK2，老牌搜索工具，perl 写的\n* The Silver Searcher c 实现的\n* The Platinum Searcher go 实现的\n* FreeCommander 自带的搜索，如果是固态硬盘速度还不错\n* IDE 自带的，搜索有些时候并不太好用\n\n### 开源代码搜索\n\n* [Searchcode](https://searchcode.com) 搜索开源代码，速度比较快\n* [一行代码](https://www.alinecode.com) 国产的，有些国产工具很好用\n\n\n\n[^ 1]: [搜索引擎工作原理简介 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/301641935)"
  },
  {
    "path": "docs/必学工具/翻墙.en.md",
    "content": "# GFW\n\n[This link](https://wallesspku.space/) appears here purely as a random combination of binary bits and has nothing to do with me."
  },
  {
    "path": "docs/必学工具/翻墙.md",
    "content": "# 翻墙\n\n[此链接](https://wallesspku.space/)出现在这里纯属二进制 bit 的随意组合，与本人毫无关系。\n"
  },
  {
    "path": "docs/操作系统/CS162.en.md",
    "content": "# CS162: Operating System\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS61B, CS61C; Solid C programming and GDB debugging skills\n- Programming Languages: C, x86 Assembly\n- Difficulty: 🌟🌟🌟🌟🌟🌟\n- Class Hour: 200 hours+\n\nThe course impressed me in two aspects:\n\nFirstly, the textbook: Operating Systems: Principles and Practice (2nd Edition) consists of four volumes. It is written in a very accessible yet profound way, with vivid and sometimes even humorous language. It serves as an excellent supplement to the lecture videos and perfectly fills some theoretical gaps left by MIT 6.S081. This is also the experimental textbook for CMU's OS course (15410), I highly recommend reading it! Related resources are shared in the \"Classic Books\" section of this repository.\n\nSecondly, the project for this course *Pintos* is a great journey for system hackers. *Pintos* is a toy operating system developed at Stanford for educational use. The author Ben Pfaff even published a [paper](https://benpfaff.org/papers/pintos.pdf) to explain the design principles of *Pintos*.\n\nUnlike the small but comprehensive design philosophy in MIT's xv6 labs, *Pintos* emphasizes system design and implementation more. The codebase is about 10,000 LOC and only provides the basic functions of a working operating system. Each project has almost no boilerplate code; you must design the implementation yourself and weigh the pros and cons of different schemes. The four projects let you add scheduler (Project1), system calls (Project2), virtual memory (Project3), and the file system (Project4) *(Note: The specific requirements for CS162 Pintos differ slightly; see the assignment description below)* to this extremely simple operating system. All projects leave a a big design space for students and require more than 2000 LOC. Based on the [feedback](https://www.quora.com/What-is-it-like-to-take-CS-140-Operating-Systems-at-Stanford) from Stanford students, the latter two projects take over 40 hours per person even in teams of 3-4 people.\n\nAlthough it is tough, Stanford, Berkeley, JHU and many other top U.S. colleges have chosen *Pintos* as their OS course project. If you're really interested in operating systems, it will greatly improve your ability to write and debug low-level system code and teach you how to design a system by making trade-offs between different possibilities. For me, it is an invaluable experience to design, implement, and debug a large system independently.\n\n*Pintos* will also be introduced as a course project in Peking University's OS Course. In the Spring 2022 semester, I worked with [another TA](https://github.com/AlfredThiel) to write a comprehensive [lab documentation](https://pkuflyingpig.gitbook.io/pintos) and provided a docker image for the ease of cross-platform development. In the last semester before graduation, I hope such an attempt can make more people fall in love with systems and contribute to the field of systems in China.\n\n## Course Resources\n\n- Course Website: \n  - [Current Semester](https://cs162.org/)\n  - [Fa25 - Wayback Machine](https://web.archive.org/web/20251211080516/https://cs162.org/)\n- Lecture Videos: Currently, three semesters are publicly available: Fall 2020, Fall 2021, and Spring 2022. Based on my experience with the Fall 2025 semester, the **Spring 2022** version is best for self-study. It was recorded in-person (except for the first four lectures), featuring more student-teacher interaction and many valuable questions addressed in class:\n  - [Spring 2022 Lecture Videos (Bilibili)](https://www.bilibili.com/video/BV1L541117gr?vd_source=e293470ea109e008c4d9516e39ef318f&p=5&spm_id_from=333.788.videopod.episodes)\n  - [Fall 2020 Lecture Videos (Bilibili)](https://www.bilibili.com/video/BV1MwDSYWEKy?spm_id_from=333.788.videopod.sections&vd_source=e293470ea109e008c4d9516e39ef318f&p=24)\n  - Fall 2021 video links can be found on the [Fall 2021 Website](https://web.archive.org/web/20211216005317/https://cs162.org/).\n- Textbook: [Operating Systems: Principles and Practice (2nd Edition)](http://ospp.cs.washington.edu/). This textbook is an excellent supplement to the lectures and is highly recommended.\n- Assignments: Consists of 3 Projects and 6 Homeworks. (The workload for each Homework is roughly equivalent to a full Project in most other open-source courses. Projects were originally designed for teams; self-studying them alone involves a significant workload):\n  - 3 Projects (each with complete local tests):\n    1. User Programs: Implement argument parsing for process execution, process-related system calls (including the `fork` syscall added in 2025), and file-related system calls.\n    2. Threads: Implement a non-busy-waiting `timer_sleep` function, a strict priority scheduler, multi-threading support, and a simplified `pthread` library. (Note: This differs from the Multi-Level Feedback Queue requirements in the PKU Pintos and Stanford CS212 versions).\n    3. File Systems: Implement a kernel Buffer Cache, extensible files, and subdirectories.\n  - 6 Homeworks: Includes a sub-task for the MapReduce assignment. Both HTTP and MapReduce assignments have two versions: C and Rust. Except for the Memory lab, most Homeworks lack local autograders (though most can be manually tested effectively, except for MapReduce, which can be replaced by the [MIT 6.824 MapReduce lab](https://pdos.csail.mit.edu/6.824/labs/lab-mr.html)).\n    1. List: Familiarize with the built-in linked list structure in Pintos.\n    2. Shell: Implement a Shell supporting directory commands, program execution, path parsing, redirection, pipes, and signal handling.\n    3. HTTP: Implement an HTTP server supporting GET requests.\n    4. Memory: Implement memory management functions like `sbrk` and `malloc`.\n    5. MapReduce: Implement a fault-tolerant MapReduce system (including the RPC Lab).\n\n---\n\n## Personal Resources\n\nAll resources and assignment implementations (including code, design documents, and starter code) used during my study of the **Fall 2025** semester are summarized in the [@RisingUppercut/CS162-fall25 - GitHub](https://github.com/RisingUppercut/UCB_CS162_2025Fall) repository.\n\nSince the Operating System Course at PKU uses the project, my implementation is not open source to prevent plagiarism.\n"
  },
  {
    "path": "docs/操作系统/CS162.md",
    "content": "# CS162: Operating System\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS61A, CS61B, CS61C，扎实的C语言能力及GDB调试能力\n- 编程语言：C, x86汇编\n- 课程难度：🌟🌟🌟🌟🌟🌟\n- 预计学时：200 小时+，上不封顶\n\n这门课让我记忆犹新的有两个部分：\n\n首先是教材，这本书用的教材 *Operating Systems: Principles and Practice (2nd Edition)* 一共四卷，写得非常深入浅出，语言生动甚至时而幽默，是本课程 Lecture 视频内容极好的完善与补充，同时也很好地弥补了 MIT6.S081 在理论知识上的些许空白，是 CMU 操作系统课 15410 的实验性教材，非常建议大家阅读！相关资源会分享在本书的经典书籍推荐模块。\n\n其次是这门课的 Project —— Pintos。Pintos 是由 Ben Pfaff 等人在 x86 平台上编写的教学用操作系统，Ben Pfaff 甚至专门发了篇 [paper](https://benpfaff.org/papers/pintos.pdf) 来阐述 Pintos 的设计思想。\n\n和 MIT 的 xv6 小而精的 lab 设计理念不同，Pintos 更注重系统的 Design and Implementation。Pintos 本身仅一万行左右，只提供了操作系统最基本的功能。每个project几乎没有框架代码，都需要自己设计实现并权衡不同方案的优缺点。而 4 个Project，就是让你在这个极为精简的操作系统之上，分别为其增加线程调度机制 (Project1)，系统调用 (Project2)，虚拟内存 (Project3) 以及文件系统 (Project4)*（注：CS162 Pintos 的 project 和上述略有不同，详见下方课程作业说明）*。所有的 Project 都给学生留有很大的设计空间，总代码量在 2000 行左右。根据 Stanford 学生[自己的反馈][quora_link]，在 3-4 人组队的情况下，后两个 Project 的人均耗时也在 40 个小时以上。\n\n[quora_link]: https://www.quora.com/What-is-it-like-to-take-CS-140-Operating-Systems-at-Stanford\n\n虽然难度很大，但 Stanford, Berkeley, JHU 等多所美国顶尖名校的操统课程均采用了 Pintos。如果你真的对操作系统很感兴趣，Pintos 会极大地提高你编写和 debug 底层系统代码的能力，并让你学会设计一个系统，使你在不同可能的设计中学会取舍。在本科阶段，能自己设计、实现并 debug 一个大型系统，是一段非常珍贵的经历。\n\n北大 2022 年春季学期的操作系统实验班也将会首次引入 Pintos 作为课程 Project。我和该课程的[另一位助教](https://github.com/AlfredThiel)整理并完善了 Pintos 的[实验文档](https://pkuflyingpig.gitbook.io/pintos)，并利用 Docker 配置了跨平台的实验环境，想自学的同学可以按文档自行学习。在毕业前的最后一个学期，希望能用这样的尝试，让更多人爱上系统领域，为国内的系统研究添砖加瓦。\n\n## 课程资源\n\n- 课程网站：\n  - [当前最新学期](https://cs162.org/)\n  - [Fa25-WayBack Machine](https://web.archive.org/web/20251211080516/https://cs162.org/)\n- 课程视频，目前公开的视频有三个学期，分别为: 2020Fall，2021Fall 及 2022Spring 。根据我学习 2025Fall 学期的经历来看，2022Spring 的最适合自学，因为这个学期是线下录制的形式（除了前四节），上课时师生之间的互动更多，有很多有价值的问题在课堂上被解决：\n  - [2022Spring课程视频](https://www.bilibili.com/video/BV1L541117gr?vd_source=e293470ea109e008c4d9516e39ef318f&p=5&spm_id_from=333.788.videopod.episodes)\n  - [2020Fall课程视频](https://www.bilibili.com/video/BV1MwDSYWEKy?spm_id_from=333.788.videopod.sections&vd_source=e293470ea109e008c4d9516e39ef318f&p=24)\n  - 2021Fall的各个视频链接在[2021Fall网站](https://web.archive.org/web/20211216005317/https://cs162.org/)上\n- 课程教材：[Operating Systems: Principles and Practice (2nd Edition)](http://ospp.cs.washington.edu/)，本教材是课上 Lecture 内容的很好的补充，强烈推荐阅读。\n- 课程作业：3 个 Project，6 个 Homework（每个Homework的工作量大致相当于其他大部分公开课的Project， Project原本要求是组队实现，一个人自学的工作量较大）：\n  - 3 个 Project , 每个 Project 都有完整的本地测试：\n    1. User Programs: 实现进程执行函数的参数解析传递，实现进程相关的系统调用（25年的新增了fork系统调用），实现文件相关系统调用。\n    2. Threads: 实现不忙等的 `timer_sleep` 函数, 实现严格优先级调度器，实现对多线程的支持，实现简化版的 pthread 库（这与北大的 Pintos 及 斯坦福的 CS212 的多级反馈调度的要求不同）。\n    3. File Systems: 实现文件系统内核缓冲区 Buffer Cache，实现可扩容的文件，实现子目录。\n  - 6 个 Homework， 其中一个为 Map Reduce 作业的子任务，作业 HTTP 及 Map Reduce 均有两个版本：C 和 Rust。除了 Memory 作业外，其他 Homework 均没有本地测试（但除了 Map Reduce 作业外， 其他作业都可以手动测试的大差不差， Map Reduce 作业可换成 [MIT 6.824 的对应作业](https://pdos.csail.mit.edu/6.824/labs/lab-mr.html)）\n    1. List: 熟悉 Pintos 内置的链表结构\n    2. Shell: 实现支持目录命令、启动程序、路径解析、重定向、管道、信号处理的 Shell\n    3. HTTP: 实现一个支持 HTTP GET 请求的 HTTP 服务器\n    4. Memory: 实现 sbrk，malloc 等内存管理函数\n    5. Map Reduce: 实现一个可容忍错误的 MapReduce 系统\n        - 包含作业 RPC Lab\n\n\n## 资源汇总\n\n@[RisingUppercut] 在学习这门课（2025Fall）中用到的所有资源和作业实现（包括代码、设计文档、初始框架代码等）都汇总在 [@RisingUppercut/CS162-fall25 - GitHub](https://github.com/RisingUppercut/UCB_CS162_2025Fall) 中。\n\n[RisingUppercut]: https://github.com/RisingUppercut\n\n由于北大的操统实验班采用了该课程的 Project，为了防止代码抄袭，我的代码实现没有开源。\n"
  },
  {
    "path": "docs/操作系统/HITOS.en.md",
    "content": "# HIT OS: Operating System\n\n## Course Introduction\n\n- University: Harbin Institute of Technology\n- Prerequisites: C Language\n- Programming Languages: C Language, Assembly\n- Course Difficulty: 🌟🌟🌟🌟\n- Estimated Study Hours: 100 hours+\n\nIf you search on Zhihu for questions like \"how to self-study operating systems\", \"recommended open courses for operating systems\", \"computer courses you wish you had discovered earlier\", etc., the operating systems course by Professor Li Zhijun of Harbin Institute of Technology (HIT) is likely to appear in the high-rated answers. It's a relatively well-known and popular Chinese computer course.\n\nThis course excels at gently guiding students from their perspective. For instance, it starts from \"humbly asking, what is an operating system\" to \"lifting the lid of the operating system piano\", deriving the concept of processes from intuitive CPU management, and introducing memory management by initially \"letting the program enter memory\".\n\nThe course emphasizes the combination of theory and practice. Operating systems are tangible, and Professor Li repeatedly stresses the importance of doing experiments. You won't fully grasp operating systems if you just watch videos and theorize. The course explains and conducts experiments based on actual Linux 0.11 source code (around 20,000 lines in total), with eight small labs and four projects.\n\nOf course, this course also has minor imperfections. For example, Linux 0.11 is very early industrial code and not designed for teaching. Thus, there are some unavoidable obscure and difficult parts of the codebase in the projects, but they don't contribute much to the understanding of operating systems.\n\n## Course Resources\n\n- Course Website: <https://www.icourse163.org/course/HIT-1002531008>\n- Course Videos: <https://www.bilibili.com/video/BV19r4y1b7Aw/?p=1>\n- Course Textbook 1: [Complete Annotation of Linux Kernel](https://book.douban.com/subject/1231236//)\n- Course Textbook 2: [Operating System Principles, Implementation, and Practice](https://book.douban.com/subject/30391722/)\n- Course Assignments: <https://www.lanqiao.cn/courses/115>\n\n## Complementary Resources\n\n@NaChen95 has compiled the principles and implementations of the eight experimental assignments in this course at [NaChen95 / Linux0.11](https://github.com/NaChen95/Linux0.11)."
  },
  {
    "path": "docs/操作系统/HITOS.md",
    "content": "# HIT OS: Operating System\n\n## 课程简介\n\n- 所属大学：哈尔滨工业大学\n- 先修要求：C 语言\n- 编程语言：C 语言、汇编\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 小时+\n\n如果你在知乎上搜索“操作系统如何自学”、“操作系统的公开课推荐”、“有哪些让你相见恨晚的计算机课程”等问题，哈工大李治军老师的操作系统课程大概率都会在某条高赞回答的推荐里。这是一门知名度较高、颇受欢迎的中文计算机课程。\n\n这门课善于站在学生角度循循善诱。例如，课程从“弱弱地问，什么是操作系统”来“揭开操作系统钢琴的盖子”，从 CPU 的直观管理引出进程概念，从“那就首先让程序进入内存”引出内存管理。\n\n这门课注重理论和实践相结合。操作系统是看得见摸得着的东西，李老师反复强调一定要做实验，如果只看视频纸上谈兵，是学不好操作系统的。课程基于实际的 Linux 0.11 源码（总代码量约两万行）进行讲解和实验，共有八个小实验，四个大实验。\n\n当然，这门课也有一些瑕不掩瑜的地方。例如，Linux 0.11 是很早期工业界的代码，不是为了教学而设计的。因此在实验过程中会有一些避不开的晦涩难懂的原生代码，但它们对理解操作系统其实并没有太大帮助。\n\n## 课程资源\n\n- 课程网站：<https://www.icourse163.org/course/HIT-1002531008>\n- 课程视频：<https://www.bilibili.com/video/BV19r4y1b7Aw/?p=1>\n- 课程教材一：[《Linux 内核完全注释》](https://book.douban.com/subject/1231236//)\n- 课程教材二：[《操作系统原理、实现与实践》](https://book.douban.com/subject/30391722/)\n- 课程作业：<https://www.lanqiao.cn/courses/115>\n\n## 资源汇总\n\n@NaChen95 在学习这门课中的八个实验作业的原理分析和实现都汇总在 [NaChen95 / Linux0.11](https://github.com/NaChen95/Linux0.11) 中。"
  },
  {
    "path": "docs/操作系统/MIT6.S081.en.md",
    "content": "# MIT 6.S081: Operating System Engineering\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Computer Architecture + Solid C Programming Skills + RISC-V Assembly\n- Programming Languages: C, RISC-V\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nThis is the undergraduate operating system course at MIT, offered by the well-known PDOS Group. One of the instructors, Robert Morris, was once a famous hacker who created 'Morris', the first worm virus in the world.\n\nThe predecessor of this course was the famous MIT6.828. The same instructors at MIT created an educational operating system called JOS based on x86, which has been adopted by many other famous universities. While after the birth of RISC-V, they implemented it based on RISC-V, and offered MIT 6.S081. RISC-V is lightweight and user-friendly, so students don't have to struggle with the confusing legacy features in x86 as in JOS, but focus on the operating system design and implementation. \n\nThe instructors have also written a [tutorial](https://pdos.csail.mit.edu/6.828/2021/xv6/book-riscv-rev2.pdf), elaborately explaining the ideas of design and details of the implementation of xv6 operating system. \n\nThe teaching style of this course is also interesting, the instructors guided the students to understand the numerous technical challenges and design principles in the operating systems by going through the xv6 source code, instead of merely teaching theoretical knowledge. Weekly Labs will let you add new features to xv6, which focus on enhancing students' practical skills. There are 11 labs in total during the whole semester which give you the chance to understand every aspect of the operating systems, bringing a great sense of achievement. Each lab has a complete framework for testing, some tests are more than a thousand lines of code, which shows how much effort the instructors have made to teach this course well.\n\nIn the second half of the course, the instructors will discuss a couple of classic papers in the operating system field, covering file systems, system security, networking, virtualization, and so on, giving you a chance to have a taste of the cutting edge research directions in the academic field.\n\n## Course Resources\n\n- Course Website: <https://pdos.csail.mit.edu/6.828/2021/schedule.html>\n- Lecture Videos: <https://www.youtube.com/watch?v=L6YqHxYHa7A>, videos for each lecture can be found on the course website.\n- Translated documentation(Chinese) of Lecture videos: <https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/>\n- Text Book: <https://pdos.csail.mit.edu/6.828/2021/xv6/book-riscv-rev2.pdf>\n- Assignments: <https://pdos.csail.mit.edu/6.828/2021/schedule.html>, 11 labs, can be found on the course website.\n\n## xv6 Resources\n\n- [Detailed Explanation of xv6](https://space.bilibili.com/1040264970/)\n- [xv6 Documentation(Chinese)](https://th0ar.gitbooks.io/xv6-chinese/content/index.html)\n- [line-by-line walk-through of key xv6 source codes](https://www.youtube.com/playlist?list=PLbtzT1TYeoMhTPzyTZboW_j7TPAnjv9XB)\n- [Text Book Translation xv6-riscv-book-zh-cn](https://blog.betteryuan.top/archives/xv6-riscv-book-zh-cn)\n- [Text Book Translation SRC xv6-riscv-book-zh-cn](https://github.com/HelloYJohn/xv6-riscv-book-zh-cn.git)\n\n## Complementary Resources\n\nAll resources used and assignments implemented by @PKUFlyingPig when learning this course are in [PKUFlyingPig/MIT6.S081-2020fall - GitHub][github_pkuflyingpig].\n\n@[KuangjuX][KuangjuX] documented his [solutions][solution_kuangjux] with detailed explanations and complementary knowledge. Moreover, @[KuangjuX][KuangjuX] has reimplemented [the xv6 operating system in Rust][xv6-rust] which contains more detailed reviews and discussions about xv6.\n\n[github_pkuflyingpig]: https://github.com/PKUFlyingPig/MIT6.S081-2020fall\n[KuangjuX]: https://github.com/KuangjuX\n[solution_kuangjux]: https://github.com/KuangjuX/xv6-riscv-solution\n[xv6-rust]: https://github.com/Ko-oK-OS/xv6-rust\n\n### Some Blogs for References\n\n- [doraemonzzz](http://doraemonzzz.com/tags/6-S081/)\n- [Xiao Fan (樊潇)](https://fanxiao.tech/posts/2021-03-02-mit-6s081-notes/)\n- [Miigon's blog](https://blog.miigon.net/categories/mit6-s081/)\n- [Zhou Fang](https://walkerzf.github.io/categories/6-S081/index.html)\n- [Yichun's Blog](https://www.yichuny.page/tags/Operating%20System)\n- [解析Ta](https://blog.csdn.net/u013577996/article/details/108679997)\n- [PKUFlyingPig](https://github.com/PKUFlyingPig/MIT6.S081-2020fall)\n- [星遥见](https://www.cnblogs.com/weijunji/tag/XV6/)\n"
  },
  {
    "path": "docs/操作系统/MIT6.S081.md",
    "content": "# MIT 6.S081: Operating System Engineering\n\n## 课程简介\n\n- 所属大学：麻省理工学院\n- 先修要求：体系结构 + 扎实的 C 语言功底 + RISC-V 汇编语言\n- 编程语言：C, RISC-V\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\n麻省理工学院大名鼎鼎的 PDOS 实验室开设的面向MIT本科生的操作系统课程。开设这门课的教授之一 —— Robert Morris 教授曾是一位顶尖黑客，世界上第一个蠕虫病毒 Morris 就是出自他之手。\n\n这门课的前身是 MIT 著名的课程 6.828，MIT 的几位教授为了这门课曾专门开发了一个基于 x86 的教学用操作系统 JOS，被众多名校作为自己的操统课程实验。但随着 RISC-V 的横空出世，这几位教授又基于 RISC-V 开发了一个新的教学用操作系统 xv6，并开设了 MIT6.S081 这门课。由于 RISC-V 轻便易学的特点，学生不需要像此前 JOS 一样纠结于众多 x86 “特有的”为了兼容而遗留下来的复杂机制，而可以专注于操作系统层面的开发。\n\n这几位教授还专门写了一本[教程](https://pdos.csail.mit.edu/6.828/2021/xv6/book-riscv-rev2.pdf)，详细讲解了 xv6 的设计思想和实现细节。\n\n这门课的讲授也很有意思，老师会带着学生依照 xv6 的源代码去理解操作系统的众多机制和设计细节，而不是停留于理论知识。每周都会有一个 lab，让你在 xv6 上增加一些新的机制和特性，非常注重学生动手能力的培养。整个学期一共有 11 个 lab，让你全方位地深刻理解操作系统的每个部分，非常有成就感。而且所有的lab都有着非常完善的测试框架，有的测试代码甚至上千行，让人不得不佩服 MIT 的几位教授为了教好这门课所付出的心血。\n\n这门课的后半程会讲授操作系统领域的多篇经典论文，涉及文件系统、系统安全、网络、虚拟化等等多个主题，让你有机会接触到学界最前沿的研究方向。\n\n## 课程资源\n\n- 课程网站：<https://pdos.csail.mit.edu/6.828/2021/schedule.html>\n- 课程视频：<https://www.youtube.com/watch?v=L6YqHxYHa7A>，每节课的链接详见课程网站\n- 课程视频翻译文档：<https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/>\n- 课程教材：<https://pdos.csail.mit.edu/6.828/2021/xv6/book-riscv-rev2.pdf>\n- 课程作业：<https://pdos.csail.mit.edu/6.828/2021/schedule.html>，11个lab，具体要求详见课程网站\n\n## xv6 补充资源\n\n- [xv6 操作系统的深入讲解](https://space.bilibili.com/1040264970/)\n- [xv6 中文文档](https://th0ar.gitbooks.io/xv6-chinese/content/index.html)\n- [xv6 关键源码逐行解读 + 整体架构分析](https://www.youtube.com/playlist?list=PLbtzT1TYeoMhTPzyTZboW_j7TPAnjv9XB)\n- [课程教材翻译 xv6-riscv-book-zh-cn](https://blog.betteryuan.top/archives/xv6-riscv-book-zh-cn)\n- [课程教材翻译源码 xv6-riscv-book-zh-cn](https://github.com/HelloYJohn/xv6-riscv-book-zh-cn.git)\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.S081-2020fall - GitHub][github_pkuflyingpig] 中。\n\n@[KuangjuX] 编写了 MIT 6.S081 的 lab 的[题解][solution_kuangjux]，里面有详细的解法和补充知识。另外，@[KuangjuX] 还使用 Rust 语言重新实现了 xv6-riscv 操作系统：[xv6-rust]，里面对于 xv6-riscv 有更为详细的思考和讨论，感兴趣的同学可以看一下哦。\n\n[github_pkuflyingpig]: https://github.com/PKUFlyingPig/MIT6.S081-2020fall\n[KuangjuX]: https://github.com/KuangjuX\n[solution_kuangjux]: https://github.com/KuangjuX/xv6-riscv-solution\n[xv6-rust]: https://github.com/Ko-oK-OS/xv6-rust\n\n### 一些可以参考的博客\n\n- [doraemonzzz](http://doraemonzzz.com/tags/6-S081/)\n- [Xiao Fan (樊潇)](https://fanxiao.tech/posts/2021-03-02-mit-6s081-notes/)\n- [Miigon's blog](https://blog.miigon.net/categories/mit6-s081/)\n- [Zhou Fang](https://walkerzf.github.io/categories/6-S081/index.html)\n- [Yichun's Blog](https://www.yichuny.page/tags/Operating%20System)\n- [解析Ta](https://blog.csdn.net/u013577996/article/details/108679997)\n- [PKUFlyingPig](https://github.com/PKUFlyingPig/MIT6.S081-2020fall)\n- [星遥见](https://www.cnblogs.com/weijunji/tag/XV6/)\n- [tzyt 的博客](https://ttzytt.com/tags/xv6/)\n"
  },
  {
    "path": "docs/操作系统/NJUOS.en.md",
    "content": "# NJU OS: Operating System Design and Implementation\n\n## Course Introduction\n\n- **University**: Nanjing University\n- **Prerequisites**: Computer Architecture + Solid C programming skills\n- **Programming Language**: C\n- **Course Difficulty**: 🌟🌟🌟🌟\n- **Estimated Study Time**: 150 hours\n\nI had always heard that the operating system course taught by Professor Yanyan Jiang at Nanjing University was excellent. This semester, I had the opportunity to watch his lectures on Bilibili and gained a lot. As a young professor with rich coding experience, his teaching is full of a hacker's spirit. Often in class, he would start coding in the command line on a whim, and many important points were illustrated with vivid and straightforward code examples. What struck me most was when he implemented a mini executable file and a series of binary tools to help students better understand the design philosophy of dynamic link libraries, solving many problems that had puzzled me for years.\n\nIn the course, Prof. Jiang starts from the perspective that \"programs are state machines\" to establish an explainable model for the \"root of all evil\" concurrent programs. Based on this, he discusses common methods of concurrency control and strategies for dealing with concurrency bugs. Then, he views the operating system as a series of objects (processes/threads, address spaces, files, devices, etc.) and their APIs (system calls), combined with rich practical examples to show how operating systems use these objects to virtualize hardware resources and provide various services to application software. In the final part about persistence, he builds up various storage devices from 1-bit storage media and abstracts a set of interfaces through device drivers to facilitate the design and implementation of file systems. Although I have taken many operating system courses before, this unique approach has given me many unique perspectives on system software.\n\nIn addition to its innovative theoretical instruction, the course's emphasis on practice is a key feature of Prof. Jiang's teaching. In class and through programming assignments, he subtly cultivates the ability to read source code and consult manuals, which are essential skills for computer professionals. During the fifth MiniLab, I read Microsoft's FAT file system manual in detail for the first time, gaining a very valuable experience.\n\nThe programming assignments consist of 5 MiniLabs and 4 OSLabs. Unfortunately, the grading system is only open to students at Nanjing University. However, Professor Jiang generously allowed me to participate after I emailed him. I completed the 5 MiniLabs, and the overall experience was excellent. Particularly, the second coroutine experiment left a deep impression on me, where I experienced the beauty and \"terror\" of context switching in a small experiment of less than a hundred lines. Also, the MiniLabs can be easily tested locally, so the lack of a grading system should not hinder self-learning. Therefore, I hope others will not collectively \"harass\" the professor for access.\n\nFinally, I want to thank Professor Jiang again for designing and offering such an excellent operating system course, the first independently developed computer course from a domestic university included in this book. It's thanks to young, new-generation teachers like Professor Jiang, who teach with passion despite the heavy Tenure track evaluation, that many students have an unforgettable undergraduate experience. I also look forward to more such high-quality courses in China, which I will include in this book for the benefit of more people.\n\n## Course Resources\n\n- Course Website: <https://jyywiki.cn/OS/2022/index.html>\n- Course Videos: <https://space.bilibili.com/202224425/channel/collectiondetail?sid=192498>\n- Course Textbook: <http://pages.cs.wisc.edu/~remzi/OSTEP/>\n- Course Assignments: <https://jyywiki.cn/OS/2022/index.html>\n\n## Resource Summary\n\nAs per Professor Jiang's request, my assignment implementations are not open-sourced."
  },
  {
    "path": "docs/操作系统/NJUOS.md",
    "content": "# NJU OS: Operating System Design and Implementation\n\n## 课程简介\n\n- 所属大学：南京大学\n- 先修要求：体系结构 + 扎实的 C 语言功底\n- 编程语言：C 语言\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：150 小时\n\n之前一直听说南大的蒋炎岩老师开设的操作系统课程讲得很好，久闻不如一见，这学期有幸在 B 站观看了蒋老师的课程视频，确实收获良多。蒋老师作为非常年轻的老师，有着丰富的一线代码的经验，因此课程讲授有着满满的 Hacker 风格，课上经常“一言不合”就在命令行里开始写代码，很多重要知识点也都配有生动直白的代码示例。让我印象最为深刻的就是老师为了让学生更好地理解动态链接库的设计思想，甚至专门实现了一个迷你的可执行文件与一系列的二进制工具，让很多困扰我多年的问题都得到了解答。\n\n这门课的讲授思路也非常有趣，蒋老师先从“程序就是状态机”这一视角入手，为“万恶之源”并发程序建立了状态机的转化模型，并在此基础上讲授了并发控制的常见手段以及并发 bug 的应对方法。接着蒋老师将操作系统看作一系列对象（进程/线程、地址空间、文件、设备等等）以及操作它们的 API （系统调用）并结合丰富的实际例子介绍了操作系统是如何利用这系列对象虚拟化硬件资源并给应用软件提供各类服务的。最后的可持久化部分，蒋老师从 1-bit 的存储介质讲起，一步步构建起各类存储设备，并通过设备驱动抽象出一组接口来方便地设计与实现文件系统。我之前虽然上过许多门操作系统的课程，但这种讲法确实独此一家，让我收获了很多独到的视角来看待系统软件。\n\n这门课除了在理论知识的讲授部分很有新意外，注重实践也是蒋老师的一大特点。在课堂和编程作业里，蒋老师会有意无意地培养大家阅读源码、查阅手册的能力，这也是计算机从业者必备的技能。在完成第五个 MiniLab 期间，我第一次仔仔细细阅读了微软的 FAT 文件系统手册，收获了一次非常有价值的经历。\n\n编程作业共由 5个 MiniLab 和 4个 OSLab 组成。美中不足的是作业的评测机是不对校外开放的，不过在邮件“骚扰”后蒋老师还是非常慷慨地让我成功蹭课。由于课余时间有限我只完成了 5个 MiniLab，总体体验非常棒。尤其是第二个协程实验让我印象最为深刻，在不到百行的小实验里深刻体验了上下文切换的美妙与“可怕”。另外其实几个 MiniLab 都能非常方便地进行本地测试，就算没有评测机也不影响自学，因此希望大家不要聚众“骚扰”老师以图蹭课。\n\n最后再次感谢蒋老师设计并开放了这样一门非常棒的操作系统课程，这也是本书收录的第一门国内高校自主开设的计算机课程。正是有蒋老师这些年轻的新生代教师在繁重的 Tenure 考核之余的用爱发电，才让无数学子收获了难忘的本科生涯。也期待国内能有更多这样的良心好课，我也会第一时间收录进本书中让更多人受益。\n\n## 课程资源\n\n- 课程网站：<https://jyywiki.cn/OS/2022/index.html>\n- 课程视频：<https://space.bilibili.com/202224425/channel/collectiondetail?sid=192498>\n- 课程教材：<http://pages.cs.wisc.edu/~remzi/OSTEP/>\n- 课程作业：<https://jyywiki.cn/OS/2022/index.html>\n\n## 资源汇总\n\n按蒋老师的要求，我的作业实现没有开源。\n"
  },
  {
    "path": "docs/数学基础/MITLA.en.md",
    "content": "# MIT18.06: Linear Algebra\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: English\n- Programming languages: None\n- Difficulty: 🌟🌟🌟\n- Class Hour: Varying from person to person\n\nGilbert 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.\n\n![image](https://math.mit.edu/~gs/linearalgebra/ila5/linearalgebra5_Front.jpg)\n\nIn 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.\n\n## Resources\n\n- Course Website: [fall2011](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/syllabus/)\n- Recordings: refer to the course website\n- Textbook: Introduction to Linear Algebra, Gilbert Strang\n- Assignments: refer to the course website\n\nOn 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."
  },
  {
    "path": "docs/数学基础/MITLA.md",
    "content": "# MIT18.06: Linear Algebra\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：英文\n- 编程语言：无\n- 课程难度：🌟🌟🌟\n- 预计学时：因人而异\n\n数学大牛 Gilbert Strang 老先生年逾古稀仍坚持授课，其经典教材 [Introduction to Linear Algebra](https://math.mit.edu/~gs/linearalgebra/) 已被清华采用为官方教材。我当时看完盗版 PDF 之后深感愧疚，含泪花了两百多买了一本英文正版收藏。下面附上此书封面，如果你能完全理解封面图的数学含义，那你对线性代数的理解一定会达到新的高度。\n\n <img src=\"https://math.mit.edu/~gs/linearalgebra/ila5/linearalgebra5_Front.jpg\" width = \"300\" height = \"300\" align=center />\n\n配合油管数学网红 **3Blue1Brown** 的[线性代数的本质](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)系列视频食用更佳。\n\n## 课程资源\n\n- 课程网站：[fall2011](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/syllabus/)\n- 课程视频：参见课程网站\n- 课程教材：Introduction to Linear Algebra. Gilbert Strang\n- 课程作业：参见课程网站\n\n2023年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年的教学及科研生涯。但他的线性代数课已经并且还将继续影响一代代青年学子，让我们向老先生致以最崇高的敬意。"
  },
  {
    "path": "docs/数学基础/MITmaths.en.md",
    "content": "# MIT Calculus Course\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: English\n- Programming Languages: None\n- Difficulty: 🌟🌟\n- Class Hour: Varying from person to person\n\nThe 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.\n\nIn 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.\n\n## Course Resources\n\n- 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/)\n- Recordings: refer to course website\n- Textbook: refer to course website\n- Assignments: refer to course website\n"
  },
  {
    "path": "docs/数学基础/MITmaths.md",
    "content": "# MIT Calculus Course\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：英语\n- 编程语言：无\n- 课程难度：🌟🌟\n- 预计学时：因人而异\n\nMIT 的微积分课由 MIT18.01: Single Variable Calculus 和 MIT18.02: Multivariable Calculus 两门课组成。对自己数学基础比较自信的同学可以只看课程 notes，写得非常浅显生动并且抓住本质，让你不再疲于做题而是能够真正窥见微积分的本质魅力。\n\n配合油管数学网红 **3Blue1Brown** 的[微积分的本质](https://www.youtube.com/playlist?list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr)系列视频食用更佳。\n\n## 课程资源\n\n- 课程网站：[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/)\n- 课程视频：参见课程网站\n- 课程教材：参见课程 notes\n- 课程作业：书面作业及答案参见课程网站\n"
  },
  {
    "path": "docs/数学基础/information.en.md",
    "content": "# MIT6.050J: Information theory and Entropy\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: None\n- Programming Languages: None\n- Difficulty: 🌟🌟🌟\n- Class Hour: 100 hours\n\nThis 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.\n\n## Course Resources\n\n- Course Website: [spring2008](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/index.htm)\n- Textbook: [Information and Entropy](https://ocw.mit.edu/courses/6-050j-information-and-entropy-spring-2008/resources/mit6_050js08_textbook/)\n- Assignments: see the course website for details, including written assignments and Matlab programming assignments.\n"
  },
  {
    "path": "docs/数学基础/information.md",
    "content": "# MIT6.050J: Information theory and Entropy\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：无\n- 编程语言：无\n- 课程难度：🌟🌟🌟\n- 预计学时：100 小时\n\nMIT 面向大一新生的信息论入门课程，Penfield 教授专门为这门课写了一本[教材][textbook]作为课程 notes，内容深入浅出，生动有趣。\n\n[textbook]: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/syllabus/MIT6_050JS08_textbook.pdf\n\n## 课程资源\n\n- 课程网站：[spring2008](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/index.htm)\n- 课程教材：[Information and Entropy](https://ocw.mit.edu/courses/6-050j-information-and-entropy-spring-2008/resources/mit6_050js08_textbook/)\n- 课程作业：详见课程网站，包含书面作业与 Matlab 编程作业。\n"
  },
  {
    "path": "docs/数学进阶/6.042J.en.md",
    "content": "# MIT 6.042J: Mathematics for Computer Science\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Calculus, Linear Algebra\n- Programming Languages: Python preferred\n- Difficulty: 🌟🌟🌟\n- Class Hour: 50-70 hours\n\nThis 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.\n\n## Course Resources\n\n- 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/)\n- Recordings: Refer to the course website\n- Assignments: Refer to the course website\n"
  },
  {
    "path": "docs/数学进阶/6.042J.md",
    "content": "# MIT 6.042J: Mathematics for Computer Science\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：Calculus, Linear Algebra\n- 编程语言：Python preferred\n- 课程难度：🌟🌟🌟\n- 预计学时：50-70 小时\n\nMIT 的离散数学以及概率综合课程，导师是大名鼎鼎的 **Tom Leighton** ( Akamai 的联合创始人之一)。学完之后对于后续的算法学习大有裨益。\n\n## 课程资源\n\n- 课程网站：[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/)\n- 课程视频：[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)\n- 课程作业：参考课程网站\n"
  },
  {
    "path": "docs/数学进阶/CS126.en.md",
    "content": "# UCB CS126 : Probability theory\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS70, Calculus, Linear Algebra\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nThis 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.\n\nThe 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.\n\nJean 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.\n\nIn addition to the Homework, nine Labs will allow you to use probability theory to solve practical problems in Python.\n\n## Course Resources\n\n- Course Website: <https://inst.eecs.berkeley.edu/~ee126/fa20/content.html>\n- 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)\n- Assignments: refer to the course website.\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/EECS126 - GitHub](https://github.com/PKUFlyingPig/EECS126)\n"
  },
  {
    "path": "docs/数学进阶/CS126.md",
    "content": "# UCB CS126 : Probability theory\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS70、微积分、线性代数\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：100 小时\n\n伯克利的概率论进阶课程，涉及到统计学、随机过程等理论相对深入的内容，需要相当的数学基础，我在上这门课的时候也感到有些吃力，不过坚持下来一定会让你对概率论的掌握达到一个新的高度。\n\n同时这门课非常强调理论与实践的结合，课程设计者 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 版。\n\n这还不算完，Jean Walrand 还为整本书里的例子设计了配套的 Python 实现，以 [Jupyter Notebook](https://jeanwalrand.github.io/PeecsJB/intro.html) 的形式在线发布，读者可以在线修改、调试和运行。\n\n与此同时，这门课除了理论作业之外，还有 9 个编程作业，会让你用概率论的知识解决实际问题。\n\n## 课程资源\n\n- 课程网站：<https://inst.eecs.berkeley.edu/~ee126/fa20/content.html>\n- 课程教材：[PDF], [Epub], [Jupyter Notebook][Jupyter_Notebook]\n- 课程作业：14 个书面作业 + 9 个编程作业，具体要求参见课程网站。\n\n[PDF]: https://link.springer.com/content/pdf/10.1007%2F978-3-030-49995-2.pdf\n[Epub]: https://link.springer.com/download/epub/10.1007%2F978-3-030-49995-2.epub\n[Jupyter_Notebook]: https://jeanwalrand.github.io/PeecsJB/intro.html\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/EECS126 - GitHub](https://github.com/PKUFlyingPig/EECS126) 中。\n"
  },
  {
    "path": "docs/数学进阶/CS70.en.md",
    "content": "# UCB CS70: Discrete Math and Probability Theory\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: None\n- Programming Languages: None\n- Difficulty: 🌟🌟🌟\n- Class Hour: 60 hours\n\nThis 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.\n\nSpecific theory-algorithm correspondences are listed below.\n\n- Logic proof: stable matching algorithm\n- Graph theory: network topology design\n- Basic number theory: RSA algorithm\n- Polynomial ring: error-correcting code design\n- Probability theory: Hash table design, load balancing, etc.\n\nThe course notes are also written in a very in-depth manner, with derivations of formulas and practical examples, providing a good reading experience.\n\n## Course Resources\n\n- Course Website: <http://www.eecs70.org/>\n- Textbook: refer to the course website\n- Assignments: refer to the course website\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/UCB-CS70 - GitHub](https://github.com/PKUFlyingPig/UCB-CS70)\n"
  },
  {
    "path": "docs/数学进阶/CS70.md",
    "content": "# UCB CS70 : discrete Math and probability theory\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：无\n- 编程语言：无\n- 课程难度：🌟🌟🌟\n- 预计学时：60 小时\n\n伯克利的离散数学入门课程，个人觉得这门课最大的亮点在于并不是单纯的理论知识的讲授，而是在每个模块都会介绍理论知识在实际算法中的运用，让计算机系的学生在夯实理论基础的同时，跳脱出冰冷形式化的数学符号，在实际应用中感受和体会理论的本质。\n\n具体的理论与算法的对应关系列举如下：\n\n- 逻辑证明：稳定匹配算法\n- 图论：网络拓扑设计\n- 基础数论：RSA 算法\n- 多项式环：纠错码设计\n- 概率论：哈希表设计、负载均衡等等\n\n课程 notes 也写得非常深入浅出，公式推导与实际例子星罗棋布，阅读体验很好。\n\n## 课程资源\n\n- 课程网站：<http://www.eecs70.org/>\n- 课程教材：参见课程 notes\n- 课程作业：参见课程 Schedule\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-CS70 - GitHub](https://github.com/PKUFlyingPig/UCB-CS70) 中。\n"
  },
  {
    "path": "docs/数学进阶/The_Information_Theory_Pattern_Recognition_and_Neural_Networks.en.md",
    "content": "# The Information Theory, Pattern Recognition, and Neural Networks\n\n## Descriptions\n\n- Offered by: Cambridge\n- Prerequisites: Calculus, Linear Algebra, Probabilities and Statistics\n- Programming Languages: Anything would be OK, Python preferred\n- Difficulty: 🌟🌟🌟\n- Class Hour: 30-50 hours\n\nThis 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 ...\n\n## Course Resources\n\n- Course Website: <http://www.inference.org.uk/mackay/itila/>\n- Recordings: <https://www.youtube.com/playlist?list=PLruBu5BI5n4aFpG32iMbdWoRVAA-Vcso6>\n- Textbooks: Information Theory, Inference, and Learning Algorithms\n- Assignments: At the end of each lesson video, there are post-lesson exercises from the textbook\n\n## R.I.P Prof. David MacKay\n"
  },
  {
    "path": "docs/数学进阶/The_Information_Theory_Pattern_Recognition_and_Neural_Networks.md",
    "content": "# The Information Theory, Pattern Recognition, and Neural Networks\n\n## 课程简介\n\n- 所属大学：Cambridge\n- 先修要求：Calculus, Linear Algebra, Probabilities and Statistics\n- 编程语言：Anything would be OK, Python preferred\n- 课程难度：🌟🌟🌟\n- 预计学时：30-50 小时\n\n剑桥大学 Sir David MacKay 教授的信息论课程。教授是一位十分精通信息论与神经网络的学者，课程对应教材也是信息论领域的一部经典著作。可惜天妒英才...\n\n## 课程资源\n\n- 课程网站：<http://www.inference.org.uk/mackay/itila/>\n- 课程视频：<https://www.bilibili.com/video/BV1rs411T71e>\n- 课程教材：Information Theory, Inference, and Learning Algorithms 在课程网站可以下载到免费的电子版\n- 课程作业：在每一节课视频的最后会留教材上的课后习题\n\n## R.I.P Prof. David MacKay\n"
  },
  {
    "path": "docs/数学进阶/convex.en.md",
    "content": "# Stanford EE364A: Convex Optimization\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: Python, Calculus, Linear Algebra, Probability Theory, Numerical Analysis\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nProfessor [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.\n\nIn 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\".\n\n## Course Resources\n\n- Course Website: <http://stanford.edu/class/ee364a/index.html>\n- Recordings: <https://www.youtube.com/watch?v=VNON98dKjno&list=PLoCMsyE1cvdXeoqd1hGaMBsCAQQ6otUtO>\n- Textbook: [Convex Optimization](https://stanford.edu/~boyd/cvxbook/)\n- Assignments: refer to the course website\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPic/Standford_CVX101 - GitHub](https://github.com/PKUFlyingPig/Standford_CVX101)\n"
  },
  {
    "path": "docs/数学进阶/convex.md",
    "content": "# Stanford EE364A: Convex Optimization\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：Python，微积分，线性代数，概率论，数值分析\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\n[Stephen Boyd](http://web.stanford.edu/~boyd) 教授是凸优化领域的大牛，其编写的 **Convex Optimization** 这本教材被众多名校采用。另外其研究团队还专门开发了一个用于求解常见凸优化问题的编程框架，支持 Python, Julia 等主流编程语言，其课程作业也是采用这个编程框架去解决实际生活当中的凸优化问题。\n\n在实际运用当中，你会深刻体会到对于同一个问题，建模过程中一个细小的改变，其方程的求解难度会有天壤之别，如何让你建模的方程是“凸”的，是一门艺术。\n\n## 课程资源\n\n- 课程网站：<http://stanford.edu/class/ee364a/index.html>\n- 课程视频：<https://www.bilibili.com/video/BV1aD4y1Q7aW>\n- 课程教材：[Convex Optimization](https://stanford.edu/~boyd/cvxbook/)\n- 课程作业：9 个 Python 编程作业\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/Standford_CVX101 - GitHub](https://github.com/PKUFlyingPig/Standford_CVX101) 中。\n"
  },
  {
    "path": "docs/数学进阶/numerical.en.md",
    "content": "# MIT18.330 : Introduction to numerical analysis\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Calculus, Linear Algebra, Probability theory\n- Programming Languages: Julia\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nWhile 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.\n\nThis 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.\n\nThe designers of this course have also written an open source textbook for this course (see the link below) with plenty of Julia examples.\n\n## Course Resources\n\n- Course Website: <https://github.com/mitmath/18330>\n- Textbook: <https://fncbook.com>\n- Assignments: 10 problem sets\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPic/MIT18.330 - GitHub](https://github.com/PKUFlyingPig/MIT18.330)\n"
  },
  {
    "path": "docs/数学进阶/numerical.md",
    "content": "# MIT18.330 : Introduction to numerical analysis\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：微积分，线性代数，概率论\n- 编程语言：Julia\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\n计算机强大的计算能力帮助人们在科学领域不断突破边界，不过计算机的离散本质和这个连续的世界有着天然鸿沟，而如何用离散的表示去估计和逼近那些数学上连续的概念，则是数值分析的重要主题。\n\n这门课会在浮点表示、方程求解、线性代数、微积分、微分方程等领域探讨各类数值分析方法，让你在 Julia 的编程实践中反复体悟（1）如何建立估计（2）如何估计误差（3）如何用算法实现估计 这一系列步骤。\n\n这门课的设计者还编写了配套的开源教材（参见下方链接），里面有丰富的 Julia 实例。\n\n## 课程资源\n\n- 课程网站：<https://github.com/mitmath/18330>\n- 课程教材：<https://fncbook.com>\n- 课程作业：10 个 Julia 编程作业\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT18.330 - GitHub](https://github.com/PKUFlyingPig/MIT18.330) 中。\n"
  },
  {
    "path": "docs/数据库系统/15445.en.md",
    "content": "# CMU 15-445: Database Systems\n\n## Descriptions\n\n- Offered by: CMU\n- Prerequisites: C++, Data Structures and Algorithms\n- Programming Languages: C++\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nAs an introductory course to databases at CMU, this course is taught by Andy Pavlo, a leading figure in the database field (quoted as saying, \"There are only two things I care about in this world, one is my wife, the second is the database\").\n\nThis is a high-quality, resource-rich introductory course to Databases. \n\nThe faculty and the CMU Database Group behind the course have open-sourced all the corresponding infrastructure (Autograder, Discord) and course materials (Lectures, Notes, Homework), enabling any student who is willing to learn about databases to enjoy an experience almost equivalent to that of a CMU student.\n\nOne of the highlights of this course is the relational database [Bustub](https://github.com/cmu-db/bustub), which was specifically developed by the CMU Database Group for teaching purposes. It requires you to modify various components of this database and implement their functionalities.\n\nSpecifically, in 15-445, you will need to implement some key components in `Bustub`, a traditional disk-oriented relational database, through the progression of four Projects.\n\nThese components include the Buffer Pool Manager (for memory management), B Plus Tree (storage engine), Query Executors & Query Optimizer (operators & optimizer), and Concurrency Control, corresponding to `Project #1` through `Project #4`.\n\nWorth mentioning is that, during the implementation process, students can compile `bustub-shell` through `shell.cpp` to observe in real-time whether their implemented components are correct. The feedback is very sufficient.\n\nFurthermore, as a medium-sized project written in C++, bustub covers many requirements such as program construction, code standards, unit testing, etc., making it an excellent open-source project for learning.\n\n## Resources\n\n- Course Website: [Fall 2019](https://15445.courses.cs.cmu.edu/fall2019/schedule.html), [Fall 2020](https://15445.courses.cs.cmu.edu/fall2020/schedule.html), [Fall 2021](https://15445.courses.cs.cmu.edu/fall2021/schedule.html), [Fall 2022](https://15445.courses.cs.cmu.edu/fall2022/schedule.html), [Spring 2023](https://15445.courses.cs.cmu.edu/spring2023/schedule.html)\n- Recording: The course website is freely accessible, and the [Youtube Lectures](https://www.youtube.com/playlist?list=PLSE8ODhjZXjaKScG3l0nuOiDTTqpfnWFf) for Fall 2022 are fully open-source.\n- Textbook: Database System Concepts\n- Assignments: Five Projects and Five Homework\n\nIn Fall 2019, `Project #2` involved creating a hash index, and `Project #4` focused on logging and recovery.\n\nIn Fall 2020, `Project #2` was centered on `B-trees`, while `Project #4` dealt with concurrency control.\n\nIn Fall 2021, `Project #1` required the creation of a buffer pool manager, `Project #2` involved a hash index, and `Project #4` focused on concurrency control.\n\nIn Fall 2022, the curriculum was similar to that of Fall 2021, with the only change being that the hash index was replaced by a B+ tree index, and everything else remained the same.\n\nIn Spring 2023, the overall content was largely identical to Fall 2022 (buffer pool, B+ tree index, operators, concurrency control), except `Project #0` shifted to `Copy-On-Write Trie`. Additionally, a fun task of registering uppercase and lowercase functions was introduced, which allows you to see the actual effects of the functions you write directly in the compiled `bustub-shell`, providing a great sense of achievement.\n\nIt's important to note that the versions of bustub prior to 2020 are no longer maintained. \n\nThe last `Logging & Recovery` Project in Fall 2019 is broken (it may still run on the `git head` from 2019, but Gradescope doesn't provide a public version, so it is not recommended to work on it, it is sufficient to just review the code and handout). \n\nPerhaps in the Fall 2023 version, the recovery features will be fixed, and there may also be an entirely new `Recovery Project`. Let's wait and see 🤪.\n\nIf you have the energy, I highly recommend giving all of them a try, or if there's something in the book that you don't quite understand, attempting the corresponding project can deepen your understanding (I personally suggest completing all of them, as I believe it will definitely be beneficial).\n\n## Personal Resources\n\nThe unofficial [Discord](https://discord.com/invite/YF7dMCg) is a great platform for discussion. The chat history practically documents the challenges that other students have encountered. You can also raise your own questions or help answer others', which I believe will be a great reference.\n\nFor a guidance to get through Spring 2023, you can refer to [this article](https://zhuanlan.zhihu.com/p/637960746) by [@xzhseh](https://github.com/xzhseh) on [Zhihu](https://www.zhihu.com/) (Note: Since the article is originally written in Chinese, you may need a translator to read it :) ). It covers all the tools you need to succeed, along with guides and, most importantly, pitfalls that I've encountered, seen, or stepped into during the process of doing the Project.\n\nAll the resources and assignments used by [@ysj1173886760](https://github.com/ysj1173886760) in this course are maintained in [ysj1173886760/Learning:db - GitHub](https://github.com/ysj1173886760/Learning/tree/master/db).\n\nDue to Andy's request, the repository does not contain the source code for the project, only the solution for homework. In particular, for Homework1, [@ysj1173886760](https://github.com/ysj1173886760) wrote a shell script to help you evaluate your solution automatically.\n\nAfter the course, it is recommended to read the paper [Architecture Of a Database System](https://github.com/ysj1173886760/paper_notes/tree/master/db). This paper provides an overview of the overall architecture of database systems so that you can have a more comprehensive view of the database.\n## Advanced courses\n\n[CMU15-721](https://15721.courses.cs.cmu.edu/spring2020/) is a graduate-level course on advanced database system topics. It mainly focuses on the in-memory database, and each class has a corresponding paper to read. It is suitable for those who wish to do research in the field of databases. [@ysj1173886760](https://github.com/ysj1173886760) is currently following up on this course and will create a pull request here after completing it to provide advanced guidance.\n"
  },
  {
    "path": "docs/数据库系统/15445.md",
    "content": "# CMU 15-445: Database Systems\n\n## 课程简介\n\n- 所属大学：CMU\n- 先修要求：C++，数据结构与算法，CMU 15-213 (A.K.A. CS:APP，这也是 CMU 内部对每年 Enroll 同学的先修要求)\n- 编程语言：C++\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 小时\n\n作为 CMU 数据库的入门课，这门课由数据库领域的大牛 Andy Pavlo 讲授（“这个世界上我只在乎两件事，一是我的老婆，二就是数据库”）。\n\n这是一门质量极高，资源极齐全的 Database 入门课，这门课的 Faculty 和背后的 CMU Database Group 将课程对应的基础设施 (Autograder, Discord) 和课程资料 (Lectures, Notes, Homework) 完全开源，让每一个愿意学习数据库的同学都可以享受到几乎等同于 CMU 本校学生的课程体验。\n\n这门课的亮点在于 CMU Database Group 专门为此课开发了一个教学用的关系型数据库 [bustub](https://github.com/cmu-db/bustub)，并要求你对这个数据库的组成部分进行修改，实现上述部件的功能。\n\n具体来说，在 15-445 中你需要在四个 Project 的推进中，实现一个面向磁盘的传统关系型数据库 Bustub 中的部分关键组件。\n\n包括 Buffer Pool Manager (内存管理), B Plus Tree (存储引擎), Query Executors & Query Optimizer (算子们 & 优化器), Concurrency Control (并发控制)，分别对应 `Project #1` 到 `Project #4`。\n\n值得一提的是，同学们在实现的过程中可以通过 `shell.cpp` 编译出 `bustub-shell` 来实时地观测自己实现部件的正确与否，正反馈非常足。\n\n此外 bustub 作为一个 C++ 编写的中小型项目涵盖了程序构建、代码规范、单元测试等众多要求，可以作为一个优秀的开源项目学习。\n\n## 课程资源\n\n- 课程网站：[Fall 2019](https://15445.courses.cs.cmu.edu/fall2019/schedule.html), [Fall 2020](https://15445.courses.cs.cmu.edu/fall2020/schedule.html), [Fall 2021](https://15445.courses.cs.cmu.edu/fall2021/schedule.html), [Fall 2022](https://15445.courses.cs.cmu.edu/fall2022/schedule.html), [Spring 2023](https://15445.courses.cs.cmu.edu/spring2023/schedule.html)\n- 课程视频：课程网站免费观看, Fall 2022 的 [Youtube 全开源 Lectures](https://www.youtube.com/playlist?list=PLSE8ODhjZXjaKScG3l0nuOiDTTqpfnWFf)\n- 课程教材：Database System Concepts\n- 课程作业：5 个 Project 和 5 个 Homework\n\n在 Fall 2019 中，`Project #2` 是做哈希索引，`Project #4` 是做日志与恢复。\n\n在 Fall 2020 中，`Project #2` 是做 B 树，`Project #4` 是做并发控制。\n\n在 Fall 2021 中，`Project #1` 是做缓存池管理，`Project #2` 是做哈希索引，`Project #4` 是做并发控制。\n\n在 Fall 2022 中，与 Fall 2021 相比只有哈希索引换成了 B+ 树索引，其余都一样。\n\n在 Spring 2023 中，大体内容和 Fall 2022 一样（缓存池，B+ 树索引，算子，并发控制），只不过 `Project #0` 换成了 `Copy-On-Write Trie`，同时增加了很好玩的注册大小写函数的 Task，可以直接在编译出的 `bustub-shell` 中看到自己写的函数的实际效果，非常有成就感。\n\n值得注意的是，现在 bustub 在 2020 年以前的 version 都已经停止维护。\n\nFall 2019 的最后一个 `Logging & Recovery` 的 Project 已经 broken 了（在19年的 `git head` 上也许还可以跑，但尽管如此 Gradescope 应该也没有提供公共的版本，所以并不推荐大家去做，只看看代码和 Handout 就可以了）。\n\n或许在 Fall 2023 的版本 Recovery 相关的功能会被修复，届时也可能有全新的 `Recovery Project`，让我们试目以待吧🤪\n\n如果大家有精力的话可以都去尝试一下，或者在对书中内容理解不是很透彻的时候，尝试做一做对应的 Project 会加深你的理解（个人建议还是要全部做完，相信一定对你有帮助）。\n\n## 资源汇总\n\n非官方的 [Discord](https://discord.com/invite/YF7dMCg) 是一个很好的交流平台，过往的聊天记录几乎记载了其他同学踩过的坑，你也可以提出你的问题，或者帮忙解答别人的问题，相信这是一份很好的参考。\n\n关于 Spring 2023 的通关指南，可以参考 [@xzhseh](https://github.com/xzhseh) 的这篇[CMU 15-445/645 (Spring 2023) Database Systems 通关指北](https://zhuanlan.zhihu.com/p/637960746)，里面涵盖了全部你需要的通关道具，和通关方式建议，以及最重要的，我自己在做 Project 的过程中遇到的，看到的，和自己亲自踩过的坑。\n\n@ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在 [ysj1173886760/Learning: db - GitHub](https://github.com/ysj1173886760/Learning/tree/master/db) 中。\n\n由于 Andy 的要求，仓库中没有 Project 的实现，只有 Homework 的 Solution。特别的，对于 Homework1，@ysj1173886760 还写了一个 Shell 脚本来帮大家执行自动判分。\n\n另外在课程结束后，推荐阅读一篇论文 [Architecture Of a Database System](https://github.com/ysj1173886760/paper_notes/tree/master/db)，对应的中文版也在上述仓库中。论文里综述了数据库系统的整体架构，让大家可以对数据库有一个更加全面的视野。\n\n## 后续课程\n\n[CMU15-721](https://15721.courses.cs.cmu.edu/spring2020/) 主要讲主存数据库有关的内容，每节课都有对应的 paper 要读，推荐给希望进阶数据库的小伙伴。@ysj1173886760 目前也在跟进这门课，完成后会在这里提 PR 以提供进阶的指导。\n"
  },
  {
    "path": "docs/数据库系统/15799.en.md",
    "content": "# CMU 15-799: Special Topics in Database Systems\n\n## Course Introduction\n\n- **University**: Carnegie Mellon University (CMU)\n- **Prerequisites**: CMU 15-445\n- **Programming Language**: C++\n- **Course Difficulty**: 🌟🌟🌟\n- **Estimated Study Time**: 80 hours\n\nThis 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.\n\nThe tasks for the Spring 2022 version of the course included:\n\n1. **Task One**: Manual performance tuning based on `PostgreSQL`.\n2. **Task Two**: Improving the Self-Driving DBMS based on [NoisePage Pilot](https://github.com/cmu-db/noisepage-pilot), with no limitations on features.\n\nThe 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.\n\n## Course Resources\n\n- **Course Homepages**:\n  - [CMU15-799 - Special Topics in Database Systems (Fall 2013)](https://15799.courses.cs.cmu.edu/fall2013)\n  - [CMU15-799 - Special Topics: Self-Driving Database Management Systems (Spring 2022)](https://15799.courses.cs.cmu.edu/spring2022/)\n\n- **Course Videos**: Not available\n\n- **Course Assignments**: 2 Projects + 1 Group Project"
  },
  {
    "path": "docs/数据库系统/15799.md",
    "content": "# CMU 15-799: Special Topics in Database Systems\n\n## 课程简介\n\n- 所属大学：CMU\n- 先修要求：CMU 15-445\n- 编程语言：C++\n- 课程难度：🌟🌟🌟\n- 预计学时：80 小时\n\n    这门课目前只开了两次：fall2013 和 spring2022，讨论了数据库领域的一些前沿主题。fall2013 讨论了 Streaming、Graph DB、NVM 等，spring2022 主要讨论 Self-Driving DBMS，都提供有相关论文。\n\n    spring2022 版课程任务：\n\n    任务一：基于 `PostgreSQL` 进行手动性能调优；\n\n    任务二：基于 [NoisePage Pilot](https://github.com/cmu-db/noisepage-pilot) 改进 Self-Driving DBMS，不限特性。\n\n    授课更贴近讲座的形式，编程任务较少。对一般同学可以开拓一下视野，对专精数据库的同学可能帮助较大。\n\n## 课程资源\n\n- 课程主页\n  \n  - [CMU15-799 - Special Topics in Database Systems](https://15799.courses.cs.cmu.edu/fall2013)\n    \n  - [CMU15-799 - Special Topics: Self-Driving Database Management Systems](https://15799.courses.cs.cmu.edu/spring2022/)\n    \n- 课程视频：暂无\n  \n- 课程作业：2 Projects + 1 Group Project\n"
  },
  {
    "path": "docs/数据库系统/CS122.en.md",
    "content": "# Caltech CS 122: Database System Implementation\n\n## Course Introduction\n\n- **University**: California Institute of Technology (Caltech)\n- **Prerequisites**: None\n- **Programming Language**: Java\n- **Course Difficulty**: 🌟🌟🌟🌟🌟\n- **Estimated Study Time**: 150 hours\n\nCaltech's course, unlike CMU15-445 which does not offer SQL layer functionality, focuses on the implementation at the SQL layer in its CS122 course labs. It covers various modules of a query optimizer, such as SQL parsing, translation, implementation of joins, statistics and cost estimation, subquery implementation, and the implementation of aggregations and group by operations. Additionally, there are experiments related to B+ trees and Write-Ahead Logging (WAL). This course is suitable for students who have completed the CMU15-445 course and are interested in query optimization.\n\nBelow is an overview of the first three assignments or lab experiments of this course:\n\n### Assignment 1\n\n- Provide support for delete and update statements in NanoDB.\n- Add appropriate pin/unpin code to the Buffer Pool Manager.\n- Improve the performance of insert statements without excessively inflating the size of the database file.\n\n### Assignment 2\n\n- Implement a simple plan generator to convert various parsed SQL statements into executable plans.\n- Implement join plan nodes that support inner and outer joins using the nested-loop join algorithm.\n- Add unit tests to ensure the correct implementation of inner and outer joins.\n\n### Assignment 3\n\n- Complete the collection of table statistics.\n- Perform plan cost calculation for various plan nodes.\n- Calculate the selectivity of various predicates that may appear in the execution plan.\n- Update the tuple statistics of the plan nodes' outputs based on predicates.\n\nFor the remaining Assignments and Challenges, please refer to the course description. It is recommended to use IDEA to open the project and Maven for building, keeping in mind the log-related configurations.\n\n## Course Resources\n\n- Course Website: <http://courses.cms.caltech.edu/cs122/>\n- Course Code: <https://gitlab.caltech.edu/cs122-19wi>\n- Course Textbook: None\n- Course Assignments: 7 Assignments + 2 Challenges"
  },
  {
    "path": "docs/数据库系统/CS122.md",
    "content": "# Caltech CS 122: Database System Implementation\n\n## 课程简介\n\n- 所属大学：Caltech\n- 先修要求：无\n- 编程语言：Java\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\n加州理工的这门课，不同于没有提供 SQL 层功能的 CMU15-445 课程。CS122 课程 Lab 的侧重点在于 SQL 层的相关实现，涉及查询优化器的各个模块，比如SQL的解析，Translate，如何实现 Join，统计信息以及代价估计，子查询实现，Agg，Group By 的实现等。除此之外，还有 B+树，WAL 相关实验。本门课程适合在学完 CMU15-445 课程之后，对查询优化相关内容有兴趣的同学。\n\n下面介绍一下这门课的前 3 个 Assignment 也就是实验 Lab 所要实现的功能：\n\n### Assignment1\n\n- 为 NanoDB 提供 delete，update 语句的支持。\n- 为 Buffer Pool Manager 添加合适的 pin/unpin 代码。\n- 提升 insert 语句的性能， 同时不使数据库文件大小过分膨胀。\n\n### Assignment2\n\n- 实现一个简单的计划生成器，将各种已经 Parser 过的 SQL 语句转化为可执行的执行计划。\n- 使用 nested-loop join 算法，实现支持 inner- and outer-join 的 Join 计划节点。\n- 添加一些单元测试， 保证 inner- and outer-join 功能实现正确。\n\n### Assignment3\n\n- 完成收集表的统计信息。\n- 完成各种计划节点的计划成本计算。\n- 计算可出现在执行计划中的各种谓词的选择性。\n- 根据谓词更新计划节点输出的元组统计信息。\n\n剩余 Assignment 和 Challenges 可以查看课程介绍，推荐使用 IDEA 打开工程，Maven 构建，注意日志相关配置。\n\n## 课程资源\n\n- 课程网站：<http://courses.cms.caltech.edu/cs122/>\n- 课程代码：<https://gitlab.caltech.edu/cs122-19wi>\n- 课程教材：无\n- 课程作业：7 Assignments + 2 Challenges\n"
  },
  {
    "path": "docs/数据库系统/CS186.en.md",
    "content": "# UCB CS186: Introduction to Database System\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS61B, CS61C\n- Programming Languages: Java\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nHow 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.\n\nFrom 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.\n\n## Course Resources\n\n- Course Website: <https://cs186berkeley.net/>\n- Recordings: <https://www.youtube.com/playlist?list=PLYp4IGUhNFmw8USiYMJvCUjZe79fvyYge>\n- Assignments: <https://cs186.gitbook.io/project/>\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS186 - GitHub](https://github.com/PKUFlyingPig/CS186).\n"
  },
  {
    "path": "docs/数据库系统/CS186.md",
    "content": "# UCB CS186: Introduction to Database System\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS61A, CS61B, CS61C\n- 编程语言：Java\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\n如何编写 SQL 查询？SQL 命令是如何被一步步拆解、优化、转变为一个个磁盘查询指令的？如何实现高并发的数据库？如何实现数据库的故障恢复？什么又是非关系型数据库？这门课会带你深入理解关系型数据库的内部细节，并在掌握理论知识之后，动手用 Java 实现一个支持 SQL 并发查询、B+ 树 Index 和故障恢复的关系型数据库。\n\n从实用角度来说，这门课还会在编程作业中锻炼你编写 SQL 查询以及 NoSQL 查询的能力，对于构建一些全栈的工程项目很有帮助。\n\n## 课程资源\n\n- 课程网站：<https://cs186berkeley.net/>\n- 课程视频：<https://www.bilibili.com/video/BV13a411c7Qo>\n- 课程教材：无\n- 课程作业：6 个 Project\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS186 - GitHub](https://github.com/PKUFlyingPig/CS186) 中。\n"
  },
  {
    "path": "docs/数据库系统/CS346.en.md",
    "content": "# Stanford CS 346: Database System Implementation\n\n## Course Introduction\n\n- **University**: Stanford\n- **Prerequisites**: None\n- **Programming Language**: C++\n- **Course Difficulty**: 🌟🌟🌟🌟🌟\n- **Estimated Study Time**: 150 hours\n\nRedBase, 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:\n\n1. **The Record Management Component**: This involves the implementation of record management functionalities.\n\n2. **The Index Component**: Focuses on the management of B+ tree indexing.\n\n3. **The System Management Component**: Deals with DDL statements, command-line tools, data loading commands, and metadata management.\n\n4. **The Query Language Component**: In this part, students are required to implement the RQL Redbase Query Language, including select, insert, delete, and update statements.\n\n5. **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.\n\nRedBase 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.\n\n## Course Resources\n\n- Course Website: <https://web.stanford.edu/class/cs346/2015/>\n- Course Code: <https://github.com/junkumar/redbase.git>\n- Course Textbook: None\n- Course Assignments: 4 Projects + 1 Extension"
  },
  {
    "path": "docs/数据库系统/CS346.md",
    "content": "# Stanford CS 346: Database System Implementation\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：无\n- 编程语言：C++\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\nRedBase 是 cs346 的一个项目，实现了一个简易的数据库系统，项目是高度结构化的。整个项目能够被分为以下几个部分（同时也是 4 个需要完善的 lab）：\n\n1. The record management component：记录管理组件。\n\n2. The index component：B+ 索引管理。\n\n3. The System Management Component：ddl语句、命令行工具、数据加载命令、元数据管理。\n\n4. The Query Language Component：在这个部分需要实现 RQL Redbase 查询语言。RQL 要实现 select、insert、delete、update 语句。\n\n5. Extension Component：除了上述数据库系统的基本功能组件，还需要实现一个扩展组件，可以是 Blob 类型、 网络模块、连接算法、CBO 优化器、OLAP、事务等。\n\nRedBase 适合在学完 CMU 15-445 后继续学习数据库系统中的其他组件，因为其代码量不多，可以方便的根据需要扩展代码。同时代码完全由 C++ 编写，也可以用于练习 C++ 编程技巧。\n\n## 课程资源\n\n- 课程网站：<https://web.stanford.edu/class/cs346/2015/>\n- 课程代码：<https://github.com/junkumar/redbase.git>\n- 课程教材：无\n- 课程作业：4 Projects + 1 Extension\n"
  },
  {
    "path": "docs/数据科学/Data100.en.md",
    "content": "# UCB Data100: Principles and Techniques of Data Science\n\n## Description\n\n- Offered by: UC Berkeley\n- Prerequisites: Data8, CS61A, Linear Algebra\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟\n- Class Hour: 80 hours\n\nThis 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.\n\n## Resources\n- Course Website: <https://ds100.org>\n- Records: refer to the course website\n- Textbook: <https://www.textbook.ds100.org/intro.html>\n- Assignments: refer to the course website\n"
  },
  {
    "path": "docs/数据科学/Data100.md",
    "content": "# UCB Data100: Principles and Techniques of Data Science\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：Data8, CS61A，线性代数\n- 编程语言：Python\n- 课程难度：🌟🌟🌟\n- 预计学时：80 小时\n\n伯克利的数据科学入门课程，内容相对基础，覆盖了数据清洗、特征提取、数据可视化以及机器学习和推理的基础内容，也会讲授 Pandas, Numpy, Matplotlib 等数据科学常用工具。其丰富有趣的编程作业也是这门课的一大亮点。\n\n## 课程资源\n\n- 课程网站：<https://ds100.org/>\n- 课程视频：参见课程网站\n- 课程教材：<https://www.textbook.ds100.org/intro.html>\n- 课程作业：参见课程网站\n"
  },
  {
    "path": "docs/数据结构与算法/6.006.en.md",
    "content": "# MIT 6.006: Introduction to Algorithms\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Introductory level courses of programming (CS50/CS61A/CS106A or equivalent)\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 100 hours+\n\nProbably the most precious course from the EECS department of MIT. Taught by Erik Demaine, one of the geniuses in Algorithms.\n\nCompared 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.\n\n## Course Resources\n\n- Course Website: [Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/)\n- Recordings: [Fall 2011](https://www.bilibili.com/video/BV1b7411e7ZP)\n- Textbooks: Introduction to Algorithms (CLRS)\n- Assignments: [Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/pages/assignments/)\n"
  },
  {
    "path": "docs/数据结构与算法/6.006.md",
    "content": "# MIT 6.006: Introduction to Algorithms\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：计算机导论(CS50/CS61A or equivalent)\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：100h+\n\nMIT-EECS 系的瑰宝。授课老师之一是算法届的奇才 Erik Demaine. 相比较于斯坦福的 [CS106B/X](../编程入门/cpp/CS106B_CS106X.md)（基于 C++ 的数据结构与算法课程），该课程更侧重于算法方面的详细讲解。课程也覆盖了一些经典的数据结构，如 AVL 树等。个人感觉在讲解方面比 CS106B 更加详细，也弥补了 CS106B 在算法方面讲解的不足。适合在 CS106B 入门之后巩固算法知识。\n\n不过该课程也是出了名的难，大家需要做好一定的心理准备。\n\n## 课程资源\n\n- 课程网站：[Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/)\n- 课程视频：[Fall 2011](https://www.bilibili.com/video/BV1b7411e7ZP)\n- 课程教材：Introduction to Algorithms (CLRS)\n- 课程作业：[Fall 2011](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/pages/assignments/)\n"
  },
  {
    "path": "docs/数据结构与算法/6.046.en.md",
    "content": "# MIT 6.046: Design and Analysis of Algorithms\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Introductory level courses of Algorithms (6.006/CS61B/CS106B/CS106X or equivalent)\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 100 hours+\n\nPart 2 of the MIT Algorithms Trilogy. Taught by Erik Demaine, Srini Devadas, and Nancy Lynch.\n\nCompared 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.\n\nPart 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.\n\n## Course Resources\n\n- Course Website: [Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/)\n- Recordings: [Spring 2015](https://www.bilibili.com/video/BV1A7411E737)\n- Textbooks: Introduction to Algorithms (CLRS)\n- Assignments: [Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/pages/assignments/)\n"
  },
  {
    "path": "docs/数据结构与算法/6.046.md",
    "content": "# MIT 6.046: Design and Analysis of Algorithms\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：算法入门(6.006/CS61B/CS106B/CS106X or equivalent)\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：100h+\n\n6.006的后续课程。授课老师依旧是 Erik Demaine 和 Srini Devadas，此外还有一位新老师 Nancy Lynch.\n\n相比较于“现学现用”的6.006，6.046更加侧重于如何运用课上所学到的内容举一反三，设计出一套完备的算法并能够证明该算法能解决相应的问题。虽然该课程在板书以及作业中的编程语言为 Python，但基本上没有编程作业；绝大部分的作业都是提出要求，然后需要学生进行算法设计以及合理性证明。所以该课程的难度又提高了一大截:)\n\n在该门课程后还有一门 6.854 高级算法，但对于绝大多数考试以及应聘来说，学完该课程基本上已经能覆盖99%的题目了。\n\n## 课程资源\n\n- 课程网站：[Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/)\n- 课程视频：[Spring 2015](https://www.bilibili.com/video/BV1A7411E737)\n- 课程教材：Introduction to Algorithms (CLRS)\n- 课程作业：[Spring 2015](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/pages/assignments/)\n"
  },
  {
    "path": "docs/数据结构与算法/Algo.en.md",
    "content": "# Coursera: Algorithms I & II\n\n## Descriptions\n\n- Offered by: Princeton\n- Prerequisites: CS61A\n- Programming Languages: Java\n- Difficulty: 🌟🌟🌟\n- Class Hour: 60 hours\n\nThis is the highest rated algorithms course on [Coursera](https://www.coursera.org), and Robert Sedgewick has the magic to make even the most complex algorithms incredibly easy to understand. To be honest, the KMP and network flow algorithms that I have been struggling with for years were made clear to me in this course, and I can even write derivations and proofs for both of them two years later.\n\nDo you feel that you forget the algorithms quickly after learning them? I think the key to fully grasping an algorithm lies in understanding the three points as follows:\n\n- Why should do this? (Correctness derivation, or the essence of the entire algorithm.)\n- How to implement it? (Talk is cheap. Show me the code.)\n- How to use it to solve practical problems? (Bridge the gap between theory and real life.)\n\nThe composition of this course covers the three points above very well. Watching the course videos and reading the professor's [textbook](https://algs4.cs.princeton.edu/home/) will help you understand the essence of the algorithm and allow you to tell others why the algorithm should look like this in very simple and vivid terms.\n\nAfter understanding the algorithms, you can read the professor's [code implementation](https://algs4.cs.princeton.edu/code/) of all the data structures and algorithms taught in the course.\nNote that these codes are not demos, but production-ready, time-efficient implementations. They have extensive annotations and comments, and the modularization is also quite good. I learned a lot by just reading the codes.\n\nFinally, the most exciting part of the course is the 10 high-quality projects, all with real-world backgrounds, rich test cases, and an automated scoring system (code style is also a part of the scoring). You'll get a taste of algorithms in real life.\n\n## Course Resources\n\n- Course Website: [Algorithm I](https://www.coursera.org/learn/algorithms-part1), [Algorithm II](https://www.coursera.org/learn/algorithms-part2)\n- Recordings: [Coursera: Algorithm I](https://www.coursera.org/learn/algorithms-part1), [Coursera: lgorithm II](https://www.coursera.org/learn/algorithms-part2), [CUvids: Algorithms, 4th Edition](https://cuvids.io/app/course/2/)\n- Textbooks: [Algorithms, 4th Edition](https://algs4.cs.princeton.edu/home/)\n- Assignments: 10 Projects, the course website has specific requirements\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/Princeton-Algorithm - GitHub](https://github.com/PKUFlyingPig/Princeton-Algorithm).\n"
  },
  {
    "path": "docs/数据结构与算法/Algo.md",
    "content": "# Coursera: Algorithms I & II\n\n## 课程简介\n\n- 所属大学：Princeton\n- 先修要求：CS61A\n- 编程语言：Java\n- 课程难度：🌟🌟🌟\n- 预计学时：60 小时\n\n这是 [Coursera](https://www.coursera.org) 上评分最高的算法课程。Robert Sedgewick 教授有一种魔力，可以将无论多么复杂的算法讲得极为生动浅显。实不相瞒，困扰我多年的 KMP 以及网络流算法都是在这门课上让我茅塞顿开的，时隔两年我甚至还能写出这两个算法的推导与证明。\n\n你是否觉得算法学了就忘呢？我觉得让你完全掌握一个算法的核心在于理解三点：\n\n- 为什么这么做？（正确性推导，抑或是整个算法的核心本质）\n- 如何实现它？（光学不用假把式）\n- 用它解决实际问题（学以致用才是真本事）\n\n这门课的构成就非常好地契合了上述三个步骤。观看课程视频并且阅读教授的[开源课本](https://algs4.cs.princeton.edu/home/)有助于你理解算法的本质，让你也可以用非常\n生动浅显的话语向别人讲述为什么这个算法得长这个样子。\n\n在理解算法之后，你可以阅读教授对于课程中讲授的所有数据结构与算法的[代码实现](https://algs4.cs.princeton.edu/code/)。\n注意，这些实现可不是 demo 性质的，而是工业级的高效实现，从注释到变量命名都非常严谨，模块化也做得相当好，是质量很高的代码。我从这些代码中收获良多。\n\n最后，就是这门课最激动人心的部分了，10 个高质量的 Project，并且全都有实际问题的背景描述，丰富的测试样例，自动的评分系统（代码风格也是评分的一环）。让你在实际生活中\n领略算法的魅力。\n\n## 课程资源\n\n- 课程网站：[Algorithm I](https://www.coursera.org/learn/algorithms-part1), [Algorithm II](https://www.coursera.org/learn/algorithms-part2)\n- 课程视频：详见课程网站\n- 课程教材：<https://algs4.cs.princeton.edu/home/>\n- 课程作业：10个Project，具体要求详见课程网站\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/Princeton-Algorithm - GitHub](https://github.com/PKUFlyingPig/Princeton-Algorithm) 中。\n"
  },
  {
    "path": "docs/数据结构与算法/CS170.en.md",
    "content": "# CS170: Efficient Algorithms and Intractable Problems\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61B, CS70\n- Programming Languages:  LaTeX\n- Difficulty: 🌟🌟🌟\n- Class Hour: 60 hours\n\nThis 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.\n\nThe 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.\n\n## Course Resources\n\n- Course Website: <https://cs170.org/>\n- Recordings: <https://www.youtube.com/playlist?list=PLnocShPlK-Ft-o7NInBDw18be86dNaxlT>\n- Recordings: refer to the course website\n- Assignments: refer to the course website\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/UCB-CS170 - GitHub](https://github.com/PKUFlyingPig/UCB-CS170)\n"
  },
  {
    "path": "docs/数据结构与算法/CS170.md",
    "content": "# CS170: Efficient Algorithms and Intractable Problems\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS61B, CS70\n- 编程语言：LaTeX\n- 课程难度：🌟🌟🌟\n- 预计学时：60 小时\n\n伯克利的算法设计课，更注重算法的理论基础与复杂度分析。课程内容涵盖了分治、图算法、最短路、生成树、贪心、动规、并查集、线性规划、网络流、NP 问题、随机算法、哈希算法等等。\n\n这门课的教材写的很好，证明浅显易懂，非常适合作为工具书查阅。另外，这门课只有书面作业，并且推荐用 LaTeX 编写，大家可以借此机会锻炼自己的 LaTeX 技巧。\n\n## 课程资源\n\n- 课程网站：<https://cs170.org/>\n- 课程视频：<https://www.bilibili.com/video/BV1BU4y1b7RK>\n- 课程教材：详见课程网站 notes\n- 课程作业：13 次书面作业，用 LaTeX 编写\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-CS170 - GitHub](https://github.com/PKUFlyingPig/UCB-CS170) 中。\n"
  },
  {
    "path": "docs/数据结构与算法/CS61B.en.md",
    "content": "# CS61B: Data Structures and Algorithms\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A\n- Programming Languages: Java\n- Difficulty: 🌟🌟🌟\n- Class Hour: 60 hours\n\nIt is the second course of UC Berkeley's CS61 series. It mainly focuses on the design of data structures and algorithms as well as giving students the opportunity to be exposed to thousands of lines of engineering code and gain a preliminary understanding of software engineering through Java.\n\nI took the version for 2018 Spring. Josh Hug, the instructor, generously made the autograder open-source. You can use [gradescope](https://gradescope.com/) invitation code published on the website for free and easily test your implementation.\n\nAccording to the professor's latest policy, SP2021 CS61B is now open to the public. To get everything set up, go to Gradescope and select the \"Add a course\" button. Enter course code **MB7ZPY** to be added.\n\nAll programming assignments in this course are done in Java. Students without Java experience don't have to worry. There will be detailed tutorials in the course from the configuration of IDEA to the core syntax and features of Java.\n\nThe quality of homework in this class is also unparalleled. The 14 labs will allow you to implement most of the data structures mentioned in the class by yourself, and the 10 homework will allow you to use data structures and algorithms to solve practical problems.\nIn addition, there are 3 projects that give you the opportunity to be exposed to thousands of lines of engineering code and enhance your Java skills in practice.\n\n## Resources\n## Course Resources\n\n- Course Website: [spring2024](https://sp24.datastructur.es/), [fall2023](https://fa23.datastructur.es/), [spring2023](https://sp23.datastructur.es/), [spring2021](https://sp21.datastructur.es/), [spring2018](https://sp18.datastructur.es/)\n- Recordings: refer to the course website\n- Textbook: None\n- Assignments: Slightly different every year. In the spring semester of 2018, there are 14 Labs, 10 Homework and 3 Projects. Please refer to the course website for specific requirements.\n\n## Personal resources\n\nAll resources and homework implementations used by @PKUFlyingPig in this course are summarized in [PKUFlyingPig/CS61B - GitHub](https://github.com/PKUFlyingPig/CS61B).\n\nAll resources and homework implementations used by @InsideEmpire in this course are summarized in [InsideEmpire/CS61B-PathwayToSuccess - GitHub](https://github.com/InsideEmpire/CS61B-PathwayToSuccess.git).\n"
  },
  {
    "path": "docs/数据结构与算法/CS61B.md",
    "content": "# CS61B: Data Structures and Algorithms\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS61A\n- 编程语言：Java\n- 课程难度：🌟🌟🌟\n- 预计学时：60 小时\n\n伯克利 CS61 系列的第二门课程，注重数据结构与算法的设计，同时让学生有机会接触上千行的工程代码，通过 Java 初步领会软件工程的思想。\n\n我上的是 2018 年春季学期的版本，该课的开课老师 Josh Hug 教授慷慨地将 autograder 开源了，大家可以通过网站公开的邀请码在 [gradescope](https://gradescope.com/)\n 免费加入课程，从而方便地测评自己的代码。\n\n根据教授最新的政策，SP2021 的 CS61B 也对公众开放。要设置所有内容，请前往 Gradescope 并选择\"Add a course\"按钮。输入课程代码 **MB7ZPY** 以添加课程。\n\n这门课所有的编程作业都是使用 Java 完成的。没有 Java 基础的同学也不用担心，课程会有保姆级的教程，从 IDEA（一款主流的 Java 编程环境）的配置讲起，把 Java 的核心语法与特性事无巨细地讲授，大家完全不用担心跟不上的问题。\n\n这门课的作业质量也是绝绝子。14 个 lab 会让你自己实现课上所讲的绝大部分数据结构，10 个 Homework 会让你运用数据结构和算法解决实际问题，\n另外还有 3 个 Project 更是让你有机会接触上千行的工程代码，在实战中磨练自己的 Java 能力。\n\n## 课程资源\n\n- 课程网站：[spring2024](https://sp24.datastructur.es/), [fall2023](https://fa23.datastructur.es/), [spring2023](https://sp23.datastructur.es/), [spring2021](https://sp21.datastructur.es/), [spring2018](https://sp18.datastructur.es/)\n- 课程视频：原版视频参见课程网站，B站有中文翻译搬运。\n- 课程教材：无\n- 课程作业：每年略有不同，18 年春季学期有 14 个 Lab，10 个 Homework以及 3 个 Project，具体要求详见课程网站。\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS61B - GitHub](https://github.com/PKUFlyingPig/CS61B) 中。\n  \n@InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 [InsideEmpire/CS61B-PathwayToSuccess - GitHub](https://github.com/InsideEmpire/CS61B-PathwayToSuccess.git) 中。  \n"
  },
  {
    "path": "docs/机器学习/CS189.en.md",
    "content": "# CS189: Introduction to Machine Learning\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS188, CS70\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 100 Hours\n\nI 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.\n\n## Course Resources\n\n- Course Website: <https://www.eecs189.org/>\n- Recordings: <https://www.youtube.com/playlist?list=PLOOm2AoWIPEyZazQVnIcaK2KnezpGZV-X>\n- Textbooks: <https://www.eecs189.org/>\n- Assignments: <https://www.eecs189.org/>\n"
  },
  {
    "path": "docs/机器学习/CS189.md",
    "content": "# CS189: Introduction to Machine Learning\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS188, CS70\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 小时\n\n这门课我没有系统上过，只是把它的课程 notes 作为工具书查阅。不过从课程网站上来看，它比 CS229 好的是开源了所有 homework 的代码以及 gradescope 的 autograder。同样，这门课讲得相当理论且深入。\n\n## 课程资源\n\n- 课程网站：<https://www.eecs189.org/>\n- 课程视频：<https://www.youtube.com/playlist?list=PLOOm2AoWIPEyZazQVnIcaK2KnezpGZV-X>\n- 课程教材：<https://www.eecs189.org/>\n- 课程作业：<https://www.eecs189.org/>\n"
  },
  {
    "path": "docs/机器学习/CS229.en.md",
    "content": "# CS229: Machine Learning\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisite requirements: Advanced Mathematics, Probability Theory, Python, Solid mathematics skills\n- Programming Languages: None\n- Difficulty:🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nThis 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.\n\n## Resources\n\n- Course Website: <http://cs229.stanford.edu/syllabus.html>\n- Recordings: <https://www.bilibili.com/video/BV1JE411w7Ub>\n- Textbook: None, but the lecture notes is excellent.\n- Assignments: Not open to the public.\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS229 - GitHub](https://github.com/PKUFlyingPig/CS229).\n"
  },
  {
    "path": "docs/机器学习/CS229.md",
    "content": "# CS229: Machine Learning\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：高数，概率论，Python，需要较深厚的数学功底\n- 编程语言：无\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 小时\n\n同样是吴恩达讲授，但是这是一门研究生课程，所以更偏重数学理论，不满足于调包而想深入理解算法本质，或者有志于从事机器学习理论研究的同学可以学习这门课程。课程网站上提供了所有的课程 notes，写得非常专业且理论，需要一定的数学功底。\n\n## 课程资源\n\n- 课程网站：<http://cs229.stanford.edu>\n- 课程视频：<https://www.bilibili.com/video/BV1JE411w7Ub>\n- 课程教材：无，课程 notes 写得非常好\n- 课程作业：不对公众开放\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS229 - GitHub](https://github.com/PKUFlyingPig/CS229) 中。\n"
  },
  {
    "path": "docs/机器学习/ML.en.md",
    "content": "# Coursera: Machine Learning\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: entry level of AI and proficient in Python\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟\n- Class Hour: 100 hours\n\nWhen it comes to Andrew Ng, no one in the AI community should be unaware of him. He is one of the founders of the famous online education platform [Coursera](https://www.coursera.org), and also a famous professor at Stanford. This introductory machine learning course must be one of his famous works (the other is his deep learning course), and has hundreds of thousands of learners on Coursera (note that these are people who paid for the certificate, which costs several hundred dollars), and the number of nonpaying learners should be far more than that.\n\nThe class is extremely friendly to novices, and Andrew has the ability to make machine learning as straightforward as 1+1=2. You'll learn about linear regression, logistic regression, support vector machines, unsupervised learning, dimensionality reduction, anomaly detection, and recommender systems, etc. and solidify your understanding with hands-on programming. The quality of the assignments needs no word to say. With detailed code frameworks and practical background, you can use what you've learned to solve real problems.\n\nOf course, as a public mooc, the difficulty of this course has been deliberately lowered, and many mathematical derivations are skimmed over. If you are interested in machine learning theory and want to investigate the mathematical theory behind these algorithms, you can refer to [CS229](./CS229.md) and [CS189](./CS189.md).\n\nThe new course is rebuilt into a specialization consisting of three courses.\n\n## Course Resources\n\n- Course Website: <https://www.coursera.org/specializations/machine-learning-introduction>\n- Recordings: refer to the course website\n- Textbook: None\n- Assignments: refer to the course website\n\n## Personal Resources\n\nMy implementation is lost in system reinstallation. However, the course is so famous that you can easily find related resources online. Also, course material is available on Coursera.\n"
  },
  {
    "path": "docs/机器学习/ML.md",
    "content": "# Coursera: Machine Learning\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：AI 入门 + 熟练使用 Python\n- 编程语言：Python\n- 课程难度：🌟🌟🌟\n- 预计学时：100 小时\n\n说起吴恩达，在 AI 届应该无人不晓。他是著名在线教育平台 [Coursera](https://www.coursera.org) 的创始人之一，同时也是 Stanford 的网红教授。这门机器学习入门课应该算得上是他的成名作之一（另一个是深度学习课程），在 Coursera 上拥有数十万的学习者（注意这是花钱买了证书的人，一个证书几百刀），白嫖学习者数量应该是另一个数量级了。\n\n这门课对新手极其友好，吴恩达拥有把机器学习讲成 1+1=2 一样直白的能力。你将会学习到线性回归、逻辑回归、支持向量机、无监督学习、降维、异常检测和推荐系统等等知识，并且在编程实践中夯实自己的理解。作业质量自然不必多言，保姆级代码框架，作业背景也多取自生活，让人学以致用。\n\n当然，这门课作为一个公开慕课，难度上刻意放低了些，很多数学推导大多一带而过，如果你有志于从事机器学习理论研究，想要深究这些算法背后的数学理论，可以参考 [CS229](./CS229.md) 和 [CS189](./CS189.md)。\n\n新版课程更新成了一个包含三个课程的系列，可以尝试在 Coursera 申请助学金后不用订阅即可学习。\n\n## 课程资源\n\n- 课程网站：<https://www.coursera.org/specializations/machine-learning-introduction>\n- 课程视频：参见课程网站\n- 课程教材：无\n- 课程作业：参见课程网站\n\n## 资源汇总\n\n当时重装系统误删了文件，我的代码实现消失在了磁盘的 01 串中。不过这门课由于太过出名，网上想搜不到答案都难，相关课程资料 Coursera 上也一应俱全。\n"
  },
  {
    "path": "docs/机器学习系统/AICS.en.md",
    "content": "# Intelligent Computing Systems\n\n## Course Overview\n\n- University: University of Chinese Academy of Sciences\n- Prerequisites: Computer Architecture, Deep Learning\n- Programming Languages: Python, C++, BCL\n- Course Difficulty: 🌟🌟🌟\n- Estimated Hours: 100+ hours\n\nIntelligent computing systems serve as the backbone for global AI, producing billions of devices annually, including smartphones, servers, and wearables. Training professionals for these systems is critical for China's AI industry competitiveness. Understanding intelligent computing systems is vital for computer science students, shaping their core skills.\n\nProf. Yunji Chen's course, taught in various universities, uses experiments to provide a holistic view of the AI tech stack. Covering deep learning frameworks, coding in low-level languages, and hardware design, the course fosters a systematic approach.\n\nPersonally, completing experiments 2-5 enhanced my grasp of deep learning frameworks. The BCL language experiment in chapter five is reminiscent of CUDA for those familiar.\n\nI recommend the textbook for a comprehensive tech stack understanding. Deep learning-savvy students can start from chapter five to delve into deep learning framework internals.\n\nInspired by the course, I developed a [simple deep learning framework](https://github.com/ysj1173886760/PyToy) and plan a tutorial. Written in Python, it's code-light, suitable for students with some foundation. Future plans include more operators and potential porting to C++ for balanced performance and efficiency.\n\n## Course Resources\n\n- Course Website：[Official Website](https://novel.ict.ac.cn/aics/)\n- Course Videos：[bilibili](https://space.bilibili.com/494117284)\n- Course Textbook：\"Intelligent Computing Systems\" by Chen Yunji\n\n## Personal Resources\n\n### New Edition Experiments for 2024\n\n- The 2024 edition of the Intelligent Computing Systems lab has undergone extensive adjustments in the knowledge structure, experimental topics, and lab manuals, including comprehensive use of PyTorch instead of TensorFlow, and the addition of experiments related to large models.\n- As the new lab topics and manuals have not been updated on the Cambricon Forum, the following repository is provided to store the new versions of the Intelligent Computing Systems lab topics, manuals, and individual experiment answers:\n- The resources for the new edition will be updated following the course schedule of the UCAS Spring Semester 2024, with completion expected by June 2024.\n- 2024 New labs, manuals, and answers created by @Yuichi: https://github.com/Yuichi1001/2024-AICS-EXP\n\n### Old Edition Experiments\n\n- Old edition coursework: 6 experiments (including writing convolution operators, adding operators to TensorFlow, writing operators with BCL and integrating them into TensorFlow, etc.) (details can be found on the official website)\n- Old edition lab manuals: [Experiment 2.0 Instruction Manual](https://forum.cambricon.com/index.php?m=content&c=index&a=show&catid=155&id=708)\n- Learning notes: https://sanzo.top/categories/AI-Computing-Systems/, notes summarized from the lab manuals (link is no longer active)\n- @ysj1173886760 has compiled all resources and homework implementations used in this course at [ysj1173886760/Learning: ai-system - GitHub](https://github.com/ysj1173886760/Learning/tree/master/ai-system).\n"
  },
  {
    "path": "docs/机器学习系统/AICS.md",
    "content": "# 智能计算系统\n\n## 课程简介\n\n- 所属大学：中国科学院大学\n- 先修要求：体系结构，深度学习\n- 编程语言：Python, C++, BCL\n- 课程难度：🌟🌟🌟\n- 预计学时：100 小时+\n\n智能计算系统是智能的核心物质载体，每年全球要制造数以十亿计的智能计算系统（包括智能手机、智能服务器、智能可穿戴设备等），需要大量的智能计算系统的设计者和开发者。智能计算系统人才的培养直接关系到我国智能产业的核心竞争力。因此，对智能计算系统的认识和理解是智能时代计算机类专业学生培养方案中不可或缺的重要组成部分，是计算机类专业学生的核心竞争力。\n\n国内的陈云霁老师开的课，在其他若干个大学也都有开对应的课程。这门课用一个个实验带大家以一个完整的视野理解人工智能的技术栈。从上层的深度学习框架，到用底层语言编写算子，再到硬件中 MLU 的设计，让大家形成系统思维，体会自上而下，融会贯通的乐趣。\n\n我做了其中的 2,3,4,5 这几个实验，其中综合实验和硬件实验没有做，如果有做了的同学欢迎大家补上你的链接。\n\n个人体会是第三章实现算子的实验让我对深度学习框架的了解加深了很多。第五章的实验BCL语言编写算子如果了解 CUDA 的话会感觉很熟悉。\n\n推荐去买一本教材看一看，会让我们理解整体的技术栈。熟悉深度学习的同学可以直接从第五章开始看，看看深度学习框架底层到底是什么样的。\n\n我因为这门课的启发，参考一本书（书名在仓库中）写了一个简易的[深度学习框架](https://github.com/ysj1173886760/PyToy)。在这个框架里可以看到智能计算系统实验中的一些影子。同时受到 build-your-own-x 系列的启发，我也打算写一下教程，教大家写一个自己的深度学习框架。代码用 Python 写的，代码量较少，适合有一定基础的同学阅读。之后打算添加更多的算子，有望实现一个较为全面的框架，并希望移植到 C++ 中，以兼顾性能与开发效率。\n\n## 课程资源\n\n- 课程网站：[官网](https://novel.ict.ac.cn/aics/)\n- 课程视频：[bilibili](https://space.bilibili.com/494117284)\n- 课程教材：智能计算系统（陈云霁）\n\n## 资源汇总\n\n### 2024年新版实验\n\n- 2024 年的智能计算系统实验内容对知识体系、实验题目及实验手册进行了大范围的调整，调整内容包括全面使用 PyTorch ，不再使用 TensorFlow 以及添加大模型相关实验等。\n\n- 由于新版实验题目及实验手册未在寒武纪论坛进行更新，因此提供以下存储仓库，用于存储新版智能计算系统的实验题目、实验手册以及个人的实验答案\n- 新版实验的资源跟随国科大 2024 年春季学期的课程进度进行更新，预计 2024 年 6 月更新完毕\n- @Yuichi 编写的 2024 新版实验题目、手册及答案：https://github.com/Yuichi1001/2024-AICS-EXP\n\n### 旧版实验\n\n- 旧版课程作业：6 个实验(包括编写卷积算子，为 TensorFlow 添加算子，用 BCL 编写算子并集成到 TensorFlow 中等)(具体内容在官网可以找到)\n- 旧版实验手册：[实验 2.0 指导手册](https://forum.cambricon.com/index.php?m=content&c=index&a=show&catid=155&id=708)\n- 学习笔记：<https://sanzo.top/categories/AI-Computing-Systems/>，参考实验手册总结的笔记(已失效)\n- @ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在 [ysj1173886760/Learning: ai-system - GitHub](https://github.com/ysj1173886760/Learning/tree/master/ai-system) 中。\n\n"
  },
  {
    "path": "docs/机器学习系统/CMU10-414.en.md",
    "content": "# CMU 10-414/714: Deep Learning Systems\n\n## Course Overview\n\n- University: Carnegie Mellon University (CMU)\n- Prerequisites: Introduction to Systems (e.g., 15-213), Basics of Deep Learning, \n                 Fundamental Mathematical Knowledge\n- Programming Languages: Python, C++\n- Difficulty: 🌟🌟🌟\n- Estimated Hours: 100 hours\n\nThe 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.\n\nCovering 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.\n\nEven 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.\n\nInstructors [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.\n\n## Course Resources\n\n- Course Website：<https://dlsyscourse.org>\n- Course Videos：<https://www.youtube.com/watch?v=qbJqOFMyIwg>\n- Course Assignments：<https://dlsyscourse.org/assignments/>\n\n## Resource Compilation\n\nAll resources and assignment implementations used by @PKUFlyingPig in this course are consolidated in [PKUFlyingPig/CMU10-714 - GitHub](https://github.com/PKUFlyingPig/CMU10-714)\n\nAll assignment implementations by @Crazy-Ryan in this course (24 Fall offering) are consolidated in [Crazy-Ryan/CMU-10-714 - GitHub](https://github.com/Crazy-Ryan/CMU-10-714)"
  },
  {
    "path": "docs/机器学习系统/CMU10-414.md",
    "content": "# CMU 10-414/714: Deep Learning Systems\n\n## 课程简介\n\n- 所属大学：CMU\n- 先修要求：系统入门(eg.15-213)、深度学习入门、基本的数学知识\n- 编程语言：Python, C++\n- 课程难度：🌟🌟🌟\n- 预计学时：100小时\n\n<!-- 用一两段话介绍这门课程，内容包括但不限于：\n    （1）课程覆盖的知识点范围\n    （2）与同类课程相比它的优势与特点\n    （3）学习这门课程的体验与感受\n    （4）自学这门课的注意点（踩过的坑、难度预警等等）\n    （5）... ...\n-->\n深度学习的快速发展和广泛使用很大程度上得益于一系列简单好用且强大的编程框架，例如 Pytorch 和 Tensorflow 等等。但大多数从业者只是这些框架的“调包侠”，对于这些框架内部的细节实现却了解甚少。如果你希望从事深度学习底层框架的开发，或者只是像我一样好奇这些框架的内部实现，那么这门课将会是一个很好的起点。\n\n课程的内容大纲覆盖了深度学习系统“全栈”的知识体系。从现代深度学习系统框架的顶层设计，到自微分算法的原理和实现，再到底层硬件加速和实际生产部署。为了更好地掌握理论知识，学生将会在5个课程作业中从头开始设计和实现一个完整的深度学习库 Needle，使其能对计算图进行自动微分，能在 GPU 上实现硬件加速，并且支持各类损失函数、数据加载器和优化器。在此基础上，学生将实现几类常见的神经网络，包括 CNN，RNN，LSTM，Transformer 等等。\n\n即使你是深度学习领域的小白也不必过于担心，课程将会循序渐进地从简单分类问题和反向传播优化讲起，一些相对复杂的神经网络都会有配套的 jupyter notebook 详细地描述实现细节。如果你有一定的相关基础知识，那么在学习完自微分部分的内容之后便可以直接上手课程作业，难度虽然不大但相信一定会给你带来新的理解。\n\n这门课两位授课教师 [Zico Kolter](https://zicokolter.com/) 和 [Tianqi Chen](https://tqchen.com/) 将所有课程内容都发布了对应的开源版本，但在线评测账号和课程论坛的注册时间已经结束，只剩下框架代码里的本地测试供大家调试代码。或许可以期待明年秋季学期的课程还会发布相应的在线版本供大家学习。\n\n## 课程资源\n\n- 课程网站：<https://dlsyscourse.org>\n- 课程视频：<https://www.youtube.com/watch?v=qbJqOFMyIwg>\n- 课程作业：<https://dlsyscourse.org/assignments/>\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CMU10-714 - GitHub](https://github.com/PKUFlyingPig/CMU10-714) 中。\n\n@Crazy-Ryan 在学习这门课(24 Fall)过程中的作业实现汇总在 [Crazy-Ryan/CMU-10-714 - GitHub](https://github.com/Crazy-Ryan/CMU-10-714) 中。"
  },
  {
    "path": "docs/机器学习系统/CSE234.en.md",
    "content": "# CSE234: Data Systems for Machine Learning\n\n## Course Overview\n\n- University: UCSD  \n- Prerequisites: Linear Algebra, Deep Learning, Operating Systems, Computer Networks, Distributed Systems  \n- Programming Languages: Python, Triton  \n- Difficulty: 🌟🌟🌟  \n- Estimated Workload: ~120 hours  \n\n<!-- Introduce the course in one or two paragraphs, including but not limited to:\n     (1) The scope of technical topics covered\n     (2) Its distinguishing features compared to similar courses\n     (3) Personal learning experience and impressions\n     (4) Caveats and difficulty warnings for self-study\n-->\n\nThis course focuses on the design of end-to-end large language model (LLM) systems, serving as an introductory course to building efficient LLM systems in practice.\n\nThe course can be more accurately divided into three parts (with several additional guest lectures):\n\nPart 1. Foundations: modern deep learning and computational representations  \n\n- Modern deep learning and computation graphs (framework and system fundamentals)  \n- Automatic differentiation and an overview of ML system architectures  \n- Tensor formats, in-depth matrix multiplication, and hardware accelerators  \n\n\n\nPart 2. Systems and performance optimization: from GPU kernels to compilation and memory  \n\n- GPUs and CUDA (including basic performance models)  \n- GPU matrix multiplication and operator-level compilation  \n- Triton programming, graph optimization, and compilation  \n- Memory management (including practical issues and techniques in training and inference)  \n- Quantization methods and system-level deployment  \n\n\nPart 3. LLM systems: training and inference  \n\n- Parallelization strategies: model parallelism, collective communication, intra-/inter-op parallelism, and auto-parallelization  \n- LLM fundamentals: Transformers, Attention, and MoE  \n- LLM training optimizations (e.g., FlashAttention-style techniques)  \n- LLM inference: continuous batching, paged attention, disaggregated prefill/decoding  \n- Scaling laws\n\n\n(Guest lectures cover topics such as ML compilers, LLM pretraining and open science, fast inference, and tool use and agents, serving as complementary extensions.)\n\nThe defining characteristic of CSE234 is its strong focus on LLM systems as the core application setting. The course emphasizes real-world system design trade-offs and engineering constraints, rather than remaining at the level of algorithms or API usage. Assignments often require students to directly confront performance bottlenecks—such as memory bandwidth limitations, communication overheads, and kernel fusion—and address them through Triton or system-level optimizations. Overall, the learning experience is fairly intensive: a solid background in systems and parallel computing is important. For self-study, it is strongly recommended to prepare CUDA, parallel programming, and core systems knowledge in advance; otherwise, the learning curve becomes noticeably steep in the later parts of the course, especially around LLM optimization and inference. That said, once the pace is manageable, the course offers strong long-term value for those pursuing work in LLM infrastructure, ML systems, or AI compilers.\n\n## Recommended Learning Path\n\nThe course itself is relatively well-structured and progressive. However, for students without prior experience in systems and parallel computing, the transition into the second part of the course may feel somewhat steep. A key aspect of this course is spending significant time implementing and optimizing systems in practice. Therefore, it is highly recommended to explore relevant open-source projects on GitHub while reading papers, and to implement related systems or kernels hands-on to deepen understanding.\n\n- Foundations: consider studying alongside open-source projects such as [micrograd](https://github.com/karpathy/micrograd)  \n- Systems & performance optimization and LLM systems: consider pairing with projects such as [nanoGPT](https://github.com/karpathy/nanoGPT) and [nano-vllm](https://github.com/GeeeekExplorer/nano-vllm)  \n\nThe course website itself provides a curated list of additional references and materials, which can be found here:  \n[Book-related documentation and courses](https://hao-ai-lab.github.io/cse234-w25/resources/#book-related-documentation-and-courses)\n\n## Course Resources\n\n- Course Website: https://hao-ai-lab.github.io/cse234-w25/  \n- Lecture Videos: https://hao-ai-lab.github.io/cse234-w25/  \n- Reading Materials: https://hao-ai-lab.github.io/cse234-w25/resources/  \n- Assignments: https://hao-ai-lab.github.io/cse234-w25/assignments/  \n\n## Resource Summary\n\nAll course materials are released in open-source form. However, the online grading infrastructure and reference solutions for assignments have not been made public.\n\n## Additional Resources / Further Reading\n\n- [GPUMode](https://www.youtube.com/@GPUMODE): offers in-depth explanations of GPU kernels and systems. Topics referenced in the course—such as [DistServe](https://www.youtube.com/watch?v=tIPDwUepXcA), [FlashAttention](https://www.youtube.com/watch?v=VPslgC9piIw), and [Triton](https://www.youtube.com/watch?v=njgow_zaJMw)—all have excellent extended talks available."
  },
  {
    "path": "docs/机器学习系统/CSE234.md",
    "content": "# CSE234: Data Systems for Machine Learning\n\n\n## 课程简介\n\n- 所属大学：UCSD\n- 先修要求：线性代数，深度学习，操作系统，计算机网络，分布式系统\n- 编程语言：Python, Triton\n- 课程难度：🌟🌟🌟\n- 预计学时：120小时\n\n<!-- 用一两段话介绍这门课程，内容包括但不限于：\n    （1）课程覆盖的知识点范围\n    （2）与同类课程相比它的优势与特点\n    （3）学习这门课程的体验与感受\n    （4）自学这门课的注意点（踩过的坑、难度预警等等）\n    （5）... ...\n-->\n\n本课程专注于设计一个全面的大语言模型(LLM)系统课程，作为设计高效LLM系统的入门介绍。\n\n课程可以更准确地分为三个部分（外加若干 guest lecture）：\n\nPart 1. 基础：现代深度学习与计算表示\n\n- Modern DL 与计算图（computational graph / framework 基础）\n- Autodiff 与 ML system 架构概览\n- Tensor format、MatMul 深入与硬件加速器（accelerators）\n\n\nPart 2. 系统与性能优化：从 GPU Kernel 到编译与内存\n\n- GPUs & CUDA（含基本性能模型）\n- GPU MatMul 与算子编译（operator compilation）\n- Triton 编程、图优化与编译（graph optimization & compilation）\n- Memory（含训练/推理中的内存问题与技巧）\n- Quantization（量化方法与系统落地）\n\n\nPart 3. LLM系统：训练与推理\n\n- 并行策略：模型并行、collective communication、intra-/inter-op、自动并行化\n- LLM 基础：Transformer、Attention、MoE\n- LLM 训练优化：FlashAttention 等\n- LLM 推理：continuous batching、paged attention、disaggregated prefill/decoding\n- Scaling law\n\n\n（Guest lectures：ML compiler、LLM pretraining/open science、fast inference、tool use & agents 等，作为补充与扩展。）\n\nCSE234的最大特点在于非常专注于以LLM (LLM System)为核心应用场景，强调真实系统设计中的取舍与工程约束，而非停留在算法或 API 使用层面。课程作业通常需要直接面对性能瓶颈（如内存带宽、通信开销、kernel fusion 等），并通过 Triton 或系统级优化手段加以解决，对理解“为什么某些 LLM 系统设计是现在这个样子”非常有帮助。学习体验整体偏硬核，前期对系统与并行计算背景要求较高，自学时建议提前补齐 CUDA/并行编程与基础系统知识，否则在后半部分（尤其是 LLM 优化与推理相关内容）会明显感到陡峭的学习曲线。但一旦跟上节奏，这门课对从事 LLM Infra / ML Systems / AI Compiler 方向的同学具有很强的长期价值。\n\n\n## 学习路线推荐\n\n课程本身其实比较循序渐进，但是对于没有系统与并行计算背景的同学来说可能到第二部分会感觉稍微陡峭一点。课程最核心的部分其实是要花很多时间动手实现与优化系统，因此建议在读paper的时候就可以在Github上找一些相关的开源项目，动手实现相关的系统或者Kernel，加深理解。\n\n- 基础部分：建议配合 [micrograd](https://github.com/karpathy/micrograd) 等开源项目一起学习\n- 系统与性能优化 & LLM系统：建议配合 [nanoGPT](https://github.com/karpathy/nanoGPT), [nano-vllm](https://github.com/GeeeekExplorer/nano-vllm) 等开源项目一起食用\n\n课程页面本身提供了一些知识与资源，可以参考：[Book related documentation and courses](https://hao-ai-lab.github.io/cse234-w25/resources/#book-related-documentation-and-courses)\n\n\n## 课程资源\n\n- 课程网站：https://hao-ai-lab.github.io/cse234-w25/\n- 课程视频：https://hao-ai-lab.github.io/cse234-w25/\n- 课程教材：https://hao-ai-lab.github.io/cse234-w25/resources/\n- 课程作业：https://hao-ai-lab.github.io/cse234-w25/assignments/\n\n## 资源汇总\n\n所有课程内容都发布了对应的开源版本，但在线测评和作业参考答案部分尚未开源。\n\n## 其他资源/课程延伸\n\n- [GPUMode](https://www.youtube.com/@GPUMODE): 有非常多关于GPU Kernel / System的深度讲解。课程中提到的包括[DistServe](https://www.youtube.com/watch?v=tIPDwUepXcA), [FlashAttention](https://www.youtube.com/watch?v=VPslgC9piIw), [Triton](https://www.youtube.com/watch?v=njgow_zaJMw) 都有很好的延伸\n"
  },
  {
    "path": "docs/机器学习系统/EML.en.md",
    "content": "# MIT6.5940: TinyML and Efficient Deep Learning Computing\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Computer architecture, Deep Learning\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 50h\n\nThis course, taught by MIT Professor [Song Han](https://hanlab.mit.edu/songhan), focuses on efficient machine learning techniques. Students are expected to have a pre-requisite of deep learning basics.\n\nThe course is divided into three main sections. The first section covers various key techniques for lightweight neural networks, such as pruning, quantization, distillation, and neural architecture search (NAS). Building on these foundations, the second section introduces efficient optimization techniques tailored to specific application scenarios. These include cutting-edge topics in deep learning, such as inference for large language models, long-context support, post-training acceleration, multimodal large language models, GANs, diffusion models, and so on. The third section focuses on efficient training techniques, such as large-scale distributed parallelism, automatic parallel optimization, gradient compression, and on-device training. Professor Song Han’s lectures are clear and insightful, covering a wide range of topics, with a strong focus on trending areas. Those interested in gaining a foundational understanding of large language models may particularly benefit from the second and third sections.\n\nThe course materials and resources are available on the course website. Official lecture videos can be found on YouTube, and both raw and subtitled versions are available on Bilibili. There are five assignments in total: the first three focus on quantization, pruning, and NAS, while the last two involve compression and efficient deployment of large language models. The overall difficulty is relatively manageable, making the assignments an excellent way to solidify core knowledge.\n\n\n## Course Resources\n\n- Course Website: [2024fall](https://hanlab.mit.edu/courses/2024-fall-65940), [2023fall](https://hanlab.mit.edu/courses/2023-fall-65940)\n- Recordings: [2024fall](https://www.youtube.com/playlist?list=PL80kAHvQbh-qGtNc54A6KW4i4bkTPjiRF), [2023fall](https://www.youtube.com/playlist?list=PL80kAHvQbh-pT4lCkDT53zT8DKmhE0idB)\n- Textbooks: None\n- Assignments: Five labs in total\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/MIT6.5940_TinyML - GitHub](https://github.com/PKUFlyingPig/MIT6.5940_TinyML).\n"
  },
  {
    "path": "docs/机器学习系统/EML.md",
    "content": "# MIT6.5940: TinyML and Efficient Deep Learning Computing\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：体系结构、深度学习基础、\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：50小时\n\n这门课由 MIT 的 [Song Han](https://hanlab.mit.edu/songhan) 教授讲授，侧重于高效的机器学习训练、推理技术。学生需要有一定的深度学习方面的知识基础。\n\n课程主要分为三个部分，首先讲授了让神经网络轻量化的各种关键技术，例如剪枝、量化、蒸馏、网络架构搜索等等。有了这些基础之后，课程第二部分会讲授面向特定领域场景的各种高效优化技术，涉及了目前深度学习最前沿热门的各个方向，例如大语言模型的推理、长上下文支持、后训练加速、多模态大语言模型、GAN、扩散模型等等。课程第三部分主要涉及各类高效训练技术，例如大规模分布式并行、自动并行优化、梯度压缩、边缘训练等等。Song Han 教授的讲解深入浅出，覆盖的知识面很广，且都是当前热门的领域方向，如果是想对大语言模型有初步了解也可以重点关注第二和第三部分的内容。\n\n课程内容和资源都可以在课程网站上找到，视频在油管上有官方版本，B站也有生肉和熟肉搬运，可以自行查找。课程作业一共有5个，前三个分别考察了量化、剪枝和 NAS，后两个主要是对大语言模型的压缩和高效部署，总体难度相对简单，但能很好地巩固核心知识。\n\n## 课程资源\n\n- 课程网站：[2024fall](https://hanlab.mit.edu/courses/2024-fall-65940), [2023fall](https://hanlab.mit.edu/courses/2023-fall-65940)\n- 课程视频：[2024fall](https://www.youtube.com/playlist?list=PL80kAHvQbh-qGtNc54A6KW4i4bkTPjiRF), [2023fall](https://www.youtube.com/playlist?list=PL80kAHvQbh-pT4lCkDT53zT8DKmhE0idB)\n- 课程教材：无\n- 课程作业：共5个实验，具体要求见课程网站\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.5940_TinyML - GitHub](https://github.com/PKUFlyingPig/MIT6.5940_TinyML) 中。"
  },
  {
    "path": "docs/机器学习系统/MLC.en.md",
    "content": "# Machine Learning Compilation\n\n## Course Overview\n\n- University: Online course\n- Prerequisites: Foundations in Machine Learning/Deep Learning\n- Programming Language: Python\n--Difficulty: 🌟🌟🌟\n- Estimated Hours: 30 hours\n\nThis 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.\n\nThe 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.\n\nAll 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.\n\n## Course Resources\n\n- Course Website：<https://mlc.ai/summer22-zh/>\n- Course Videos：[Bilibili][Bilibili_link]\n- Course Notes：<https://mlc.ai/zh/index.html>\n- Course Assignments：<https://github.com/mlc-ai/notebooks/blob/main/assignment>\n\n[Bilibili_link]: https://www.bilibili.com/video/BV15v4y1g7EU?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349\n"
  },
  {
    "path": "docs/机器学习系统/MLC.md",
    "content": "# Machine Learning Compilation\n\n## 课程简介\n\n- 所属大学：Bilibili 大学\n- 先修要求：机器学习/深度学习基础\n- 编程语言：Python\n- 课程难度：🌟🌟🌟\n- 预计学时：30小时\n\n<!-- 用一两段话介绍这门课程，内容包括但不限于：\n    （1）课程覆盖的知识点范围\n    （2）与同类课程相比它的优势与特点\n    （3）学习这门课程的体验与感受\n    （4）自学这门课的注意点（踩过的坑、难度预警等等）\n    （5）... ...\n-->\n\n这门课是机器学习编译领域的顶尖学者陈天奇在2022年暑期开设的一门在线课程。其实机器学习编译无论在工业界还是学术界仍然是一个非常前沿且快速更迭的领域，国内外此前还没有为这个方向专门开设的相关课程。因此如果对机器学习编译感兴趣想有个全貌性的感知的话，可以学习一下这门课。\n\n本课程主要以 [Apache TVM](https://tvm.apache.org/) 这一主流的机器学习编译框架为例（陈天奇是这个框架的创始人之一），聚焦于如何将开发模式下（如 Tensorflow, Pytorch, Jax）的各类机器学习模型，通过一套普适的抽象和优化算法，变换为拥有更高性能并且适配各类底层硬件的部署模式。课程讲授的知识点都是相对 High-Level 的宏观概念，同时每节课都会有一个配套的 Jupyter Notebook 来通过具体的代码讲解知识点，因此如果从事 TVM 相关的编程开发的话，这门课有丰富且规范的代码示例以供参考。\n\n所有的课程资源全部开源并且有中文和英文两个版本，B站和油管分别有中文和英文的课程录影。\n\n## 课程资源\n\n- 课程网站：<https://mlc.ai/summer22-zh/>\n- 课程视频：[Bilibili][Bilibili_link]\n- 课程笔记：<https://mlc.ai/zh/index.html>\n- 课程作业：<https://github.com/mlc-ai/notebooks/blob/main/assignment>\n\n[Bilibili_link]: https://www.bilibili.com/video/BV15v4y1g7EU?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349\n"
  },
  {
    "path": "docs/机器学习进阶/CMU10-708.en.md",
    "content": "# CMU 10-708: Probabilistic Graphical Models\n\n## Course Introduction\n\n- **University**: Carnegie Mellon University (CMU)\n- **Prerequisites**: Machine Learning, Deep Learning, Reinforcement Learning\n- **Course Difficulty**: 🌟🌟🌟🌟🌟\n- **Course Website**: [CMU 10-708](https://sailinglab.github.io/pgm-spring-2019/)\n- **Course Resources**: The course website includes slides, notes, videos, homework, and project materials.\n\nCMU'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.\n\nFor 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."
  },
  {
    "path": "docs/机器学习进阶/CMU10-708.md",
    "content": "# CMU 10-708: Probabilistic Graphical Models\n\n## 课程简介\n\n- 所属大学：CMU\n- 先修要求：Machine Learning, Deep Learning, Reinforcement Learning\n- 课程难度：🌟🌟🌟🌟🌟\n- 课程网站：<https://sailinglab.github.io/pgm-spring-2019/>\n- 课程网站包含了所有的资源：slides, notes, video, homework, and project\n\n这门课程是 CMU 的图模型基础 + 进阶课，授课老师为 Eric P. Xing，涵盖了图模型基础，与神经网络的结合，在强化学习中的应用，以及非参数方法，相当硬核。\n"
  },
  {
    "path": "docs/机器学习进阶/CS229M.en.md",
    "content": "# STATS214 / CS229M: Machine Learning Theory\n\n## Course Introduction\n\n- **University**: Stanford\n- **Prerequisites**: Machine Learning, Deep Learning, Statistics\n- **Course Difficulty**: 🌟🌟🌟🌟🌟🌟\n- **Course Website**: [STATS214 / CS229M](http://web.stanford.edu/class/stats214/)\n\nThis 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. \n\nThe 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."
  },
  {
    "path": "docs/机器学习进阶/CS229M.md",
    "content": "# STATS214 / CS229M: Machine Learning Theory\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：Machine Learning, Deep Learning, Statistics\n- 课程难度：🌟🌟🌟🌟🌟🌟\n- 课程网站：<http://web.stanford.edu/class/stats214/>\n\n经典学习理论 + 最新深度学习理论，非常硬核。授课老师之前是 Percy Liang，现在是 Tengyu Ma。\n"
  },
  {
    "path": "docs/机器学习进阶/STA4273.en.md",
    "content": "# STA 4273 Winter 2021: Minimizing Expectations\n\n## Course Introduction\n\n- **University**: University of Toronto\n- **Prerequisites**: Bayesian Inference, Reinforcement Learning\n- **Course Difficulty**: 🌟🌟🌟🌟🌟🌟🌟\n- **Course Website**: [STA 4273 Winter 2021](https://www.cs.toronto.edu/~cmaddis/courses/sta4273_w21/)\n\n\"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.\n\nThis 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.\n\nChris 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."
  },
  {
    "path": "docs/机器学习进阶/STA4273.md",
    "content": "# STA 4273 Winter 2021: Minimizing Expectations\n\n## 课程简介\n\n- 所属大学：U Toronto\n- 先修要求：Bayesian Inference, Reinforcement Learning\n- 课程难度：🌟🌟🌟🌟🌟🌟🌟\n- 课程网站：<https://www.cs.toronto.edu/~cmaddis/courses/sta4273_w21/>\n\n这是一门较为进阶的 Ph.D. 研究课程，核心内容是 inference 和 control 之间的关系。授课老师为 Chris Maddison (AlphaGo founding member, NeurIPS 14 best paper)。\n"
  },
  {
    "path": "docs/机器学习进阶/STAT8201.en.md",
    "content": "# Columbia STAT 8201: Deep Generative Models\n\n## Course Introduction\n\n- **University**: Columbia University\n- **Prerequisites**: Machine Learning, Deep Learning, Graphical Models\n- **Course Difficulty**: 🌟🌟🌟🌟🌟🌟\n- **Course Website**: [STAT 8201](http://stat.columbia.edu/~cunningham/teaching/GR8201/)\n\n\"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.\n\nThe 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.\n\nGiven 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."
  },
  {
    "path": "docs/机器学习进阶/STAT8201.md",
    "content": "# Columbia STAT 8201: Deep Generative Models\n\n## 课程简介\n\n- 所属大学：Columbia University\n- 先修要求：Machine Learning, Deep Learning, Graphical Models\n- 课程难度：🌟🌟🌟🌟🌟🌟\n- 课程网站：<http://stat.columbia.edu/~cunningham/teaching/GR8201/>\n\n这门课是一门 PhD 讨论班，每周的内容是展示 + 讨论论文，授课老师是 John Cunningham。Deep Generative Models （深度生成模型） 是图模型与神经网络的结合，也是现代机器学习最重要的方向之一。\n"
  },
  {
    "path": "docs/机器学习进阶/roadmap.en.md",
    "content": "# Advanced Machine Learning Roadmap\n\nThis learning path is suitable for students who have already learned the basics of machine learning (ML, NLP, CV, RL), such as senior undergraduates or junior graduate students, and have published at least one paper in top conferences (NeurIPS, ICML, ICLR, ACL, EMNLP, NAACL, CVPR, ICCV) and are interested in pursuing a research path in machine learning.\n\nThe goal of this path is to lay the theoretical groundwork for understanding and publishing papers at top machine learning conferences, especially in the track of Probabilistic Methods.\n\nThere can be multiple advanced learning paths in machine learning, and this one represents the best path as understood by the author [Yao Fu](https://franxyao.github.io/), focusing on probabilistic modeling methods under the Bayesian school and involving interdisciplinary knowledge.\n\n## Essential Textbooks\n\n- PRML: Pattern Recognition and Machine Learning by Christopher Bishop\n- AoS: All of Statistics by Larry Wasserman\n\nThese two books respectively represent classic teachings of the Bayesian and frequentist schools, complementing each other nicely.\n\n## Reference Books\n\n- MLAPP: Machine Learning: A Probabilistic Perspective by Kevin Murphy\n- Convex Optimization by Stephen Boyd and Lieven Vandenberghe\n\n## Advanced Books\n\n- W&J: Graphical Models, Exponential Families, and Variational Inference by Martin Wainwright and Michael Jordan\n- Theory of Point Estimation by E. L. Lehmann and George Casella\n\n## Reading Guidelines\n\n### How to Approach\n\n- Essential textbooks are a must-read.\n- Reference books are like dictionaries: consult them when encountering unfamiliar concepts (instead of Wikipedia).\n- Advanced books should be approached after completing the essential textbooks, which should be read multiple times for thorough understanding.\n- Contrastive-comparative reading is crucial: open two books on the same topic, compare similarities, differences, and connections.\n- Recall previously read papers during reading and compare them with textbook content.\n\n### Basic Pathway\n\n1. Start with AoS Chapter 6: Models, Statistical Inference, and Learning as a basic introduction.\n2. Read PRML Chapters 10 and 11:\n   - Chapter 10 covers Variational Inference, and Chapter 11 covers MCMC, the two main routes for Bayesian inference.\n   - Consult earlier chapters in PRML or MLAPP for any unclear terms.\n   - AoS Chapter 8 (Parametric Inference) and Chapter 11 (Bayesian Inference) can also serve as references. Compare these chapters with the relevant PRML chapters.\n3. After PRML Chapters 10 and 11, proceed to AoS Chapter 24 (Simulation Methods) and compare it with PRML Chapter 11, focusing on MCMC.\n4. If foundational concepts are still unclear, review PRML Chapter 3 and compare it with AoS Chapter 11.\n5. Read PRML Chapter 13 (skip Chapter 12) and compare it with MLAPP Chapters 17 and 18, focusing on HMM and LDS.\n6. After completing PRML Chapter 13, move on to Chapter 8 (Graphical Models).\n7. Cross-reference these topics with CMU 10-708 PGM course materials.\n\nBy this point, you should have a grasp of:\n\n- Basic definitions of probabilistic models\n- Exact inference - Sum-Product\n- Approximate inference - MCMC\n- Approximate inference - VI\n\nAfterward, you can proceed to more advanced topics."
  },
  {
    "path": "docs/机器学习进阶/roadmap.md",
    "content": "# 机器学习进阶学习路线\n\n此路线图适用于已经学过了基础机器学习 (ML, NLP, CV, RL) 的同学 (高年级本科生或低年级研究生)，已经发表过至少一篇顶会论文 (NeurIPS, ICML, ICLR, ACL, EMNLP, NAACL, CVPR, ICCV) 想要走机器学习科研路线的选手。\n\n此路线的目标是为读懂与发表机器学习顶会论文打下理论基础，特别是 Probabilistic Methods 这个 track 下的文章。\n\n机器学习进阶可能存在多种不同的学习路线，此路线只能代表作者 [Yao Fu](https://franxyao.github.io/) 所理解的最佳路径，侧重于贝叶斯学派下的概率建模方法，也会涉及到各项相关学科的交叉知识。\n\n## 必读教材\n\n- PRML: Pattern Recognition and Machine Learning. Christopher Bishop\n- AoS: All of Statistics. Larry Wasserman\n\n这两本书分别是经典贝叶斯学派和经典频率学派的教材，刚好相辅相成。\n\n## 字典\n\n- MLAPP: Machine Learning: A Probabilistic Perspective. Kevin Murphy\n- Convex Optimization. Stephen Boyd and Lieven Vandenberghe\n\n## 进阶书籍\n\n- W&J: Graphical Models, Exponential Families, and Variational Inference. Martin Wainwright and Michael Jordan\n- Theory of Point Estimation. E. L. Lehmann and George Casella\n\n## 如何阅读\n\n### Guidelines\n\n- 必读教材就是一定要读的教材\n- 字典的意思是，一般情况下不管它，但当遇到了不懂的概念的时候，就去字典里面查（而不是维基百科）\n- 进阶书籍先不读，先读完必读书籍。必读书籍一般都是要前前后后反复看过 N 遍才算读完\n- 读的过程中，最重要的读法就是对比阅读 (contrastive-comparative reading)：同时打开两本书讲同一主题的章节，然后对比相同点和不同点和联系\n- 读的过程中，尽量去回想之前读过的论文，比较论文和教材的相同点与不同点\n\n### 基础路径\n\n- 先读 AoS 第六章: Models, Statistical Inference and Learning，这一部分是最基础的科普\n- 然后读 PRML 第 10, 11 章\n  - 第 10 章的内容是 Variational Inference, 第 11 章的内容是 MCMC, 这两种方法是贝叶斯推断的两条最主要路线\n  - 如果在读 PRML 的过程中发现有任何不懂的名词，就去翻前面的章节。很大概率能够在第 3，4 章找到相对应的定义；如果找不到或者不够详细，就去查 MLAPP\n  - AoS 第 8 章 (Parametric Inference) 和第 11 章 (Bayesian Inference) 也可以作为参考。最好的方法是多本书对比阅读，流程如下\n    - 假设我在读 PRML 第 10 章的时候发现了一个不懂的词：posterior inference\n    - 于是我往前翻，翻到了第 3 章 (Linear Model for Regression)，看到了最简单的 posterior\n    - 然后我接着翻 AoS，翻到了第 11 章，也有对 posterior 的描述\n    - 然后我对比 PRML 第 10 章，第 3 章，AoS 第 11 章，三处不同地方对 posterior 的解读，比较其相同点和不同点和联系\n- 读完 PRML 第 10 和 11 章之后，接着读 AoS 第 24 章 (Simulation Methods)，然后把它和 PRML 第 11 章对比阅读 -- 这俩都是讲 MCMC\n- 如果到此处发现还有基础概念读不懂，就回到 PRML 第 3 章，把它和 AoS 第 11 章对比阅读\n- Again，对比阅读非常重要，一定要把不同本书的类似内容同时摆在面前相互对比，这样可以显著增强记忆\n- 然后读 PRML 第 13 章（跳过第 12 章），这一章可以和 MLAPP 的第 17, 18 章对比阅读\n  - MLAPP 第 17 章是 PRML 第 13.2 章的详细版，主要讲 HMM\n  - MLAPP 第 18 章是 PRML 第 13.3 章的详细版，主要讲 LDS\n- 读完 PRML 第 13 章之后，再去读 PRML 第 8 章 (Graphical Models) -- 此时这部分应该会读得很轻松\n- 以上的内容可以进一步对照 CMU 10-708 PGM 课程材料\n\n到目前为止，应该能够掌握:\n\n- 概率模型的基础定义\n- 精准推断 - Sum-Product\n- 近似推断 - MCMC\n- 近似推断 - VI\n\n然后就可以去做更进阶的内容。\n"
  },
  {
    "path": "docs/深度学习/CMU11-785.en.md",
    "content": "# CMU 11-785: Introduction to Deep Learning\n\n## Descriptions\n\n- Offered by: CMU\n- Prerequisites: Linear Algebra, Probability, Python Programming, and ML Foundations\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: ~120 hours\n\nCMU 11-785 is a rigorous, fast-paced deep learning core course with very little filler. It starts from neural network fundamentals and systematically covers CNNs, RNNs, Attention/Transformers, optimization, and generalization.\n\nThe workload feels close to graduate-level training: assignments usually require real understanding of model behavior, training details, and experimental methodology. If you want durable deep learning fundamentals (instead of only using high-level APIs), this course is an excellent investment.\n\n## Course Resources\n\n- Course Website: <https://deeplearning.cs.cmu.edu/S26/index.html>\n- Recordings: Lecture recordings are available on course websites (varies by semester)\n- Textbooks: Mainly Lecture Notes / Slides + paper readings\n- Assignments: Multiple programming assignments and a course project (published on course sites)\n\n## Personal Resources\n\nNo public personal repository is currently provided for this course.\n"
  },
  {
    "path": "docs/深度学习/CMU11-785.md",
    "content": "# CMU 11-785: Introduction to Deep Learning\n\n## 课程简介\n\n- 所属大学：CMU\n- 先修要求：线性代数、概率论、Python 编程、机器学习基础\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：120 小时\n\nCMU 11-785 是一门非常“硬核”的深度学习核心课，整体风格扎实、节奏快、几乎没有“水内容”。课程从神经网络基础出发，逐步覆盖 CNN、RNN、Attention/Transformer、优化与泛化等核心主题，适合想把理论与实践一起打牢的同学。\n\n这门课的学习体验更接近“研究生强度训练”：作业通常不只是套模板跑通，而是要求你理解模型行为、训练细节和实验设计。若你希望建立长期可迁移的深度学习能力（而非只会调几个现成 API），这门课的投入产出比很高。\n\n## 课程资源\n\n- 课程网站：<https://deeplearning.cs.cmu.edu/S26/index.html>\n- 课程视频：课程网站提供 Lecture 录像（不同学期页面会更新）\n- 课程教材：以 Lecture Notes / Slides + 论文阅读为主\n- 课程作业：课程网站发布，通常包含多个编程作业与课程项目\n\n## 资源汇总\n\n暂未提供公开的个人课程笔记与作业仓库。\n"
  },
  {
    "path": "docs/深度学习/CS224n.en.md",
    "content": "# CS224n: Natural Language Processing\n\n## Course Overview\n\n- University：Stanford\n- Prerequisites：Fundations of Deep Learning + Python\n- Programming Language：Python\n- Course Difficulty：🌟🌟🌟🌟\n- Estimated Hours：80 hours\n\nCS224n is an introductory course in Natural Language Processing (NLP) offered by Stanford and led by renowned NLP expert Chris Manning. The course covers core concepts in the field of NLP, including word embeddings, RNNs, LSTMs, Seq2Seq models, machine translation, attention mechanisms, Transformers, and more.\n\nThe course consists of 5 progressively challenging programming assignments covering word vectors, the word2vec algorithm, dependency parsing, machine translation, and fine-tuning a Transformer.\n\nThe 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.\n\n## Course Resources\n\n- Course Website：<http://web.stanford.edu/class/cs224n/index.html>\n- Course Videos: Search for 'CS224n' on Bilibili <https://www.bilibili.com/>\n- Course Textbook：N/A\n- Course Assignments：<http://web.stanford.edu/class/cs224n/index.html>，5 Programming Assignments + 1 Final Project\n\n## Resource Compilation\n\nAll resources and assignment implementations used by @PKUFlyingPig during the course are compiled in [PKUFlyingPig/CS224n - GitHub](https://github.com/PKUFlyingPig/CS224n)\n\n"
  },
  {
    "path": "docs/深度学习/CS224n.md",
    "content": "# CS224n: Natural Language Processing\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：深度学习基础 + Python\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：80 小时\n\nStanford 的 NLP 入门课程，由自然语言处理领域的巨佬 Chris Manning 领衔教授。内容覆盖了词向量、RNN、LSTM、Seq2Seq 模型、机器翻译、注意力机制、Transformer 等等 NLP 领域的核心知识点。\n\n5 个编程作业难度循序渐进，分别是词向量、word2vec 算法、Dependency parsing、机器翻译以及 Transformer 的 fine-tune。\n\n最终的大作业是在 Stanford 著名的 SQuAD 数据集上训练 QA 模型，有学生的大作业甚至直接发表了顶会论文。\n\n## 课程资源\n\n- 课程网站：<http://web.stanford.edu/class/cs224n/index.html>\n- 课程视频：B 站搜索 CS224n\n- 课程教材：无\n- 课程作业：<http://web.stanford.edu/class/cs224n/index.html>，5 个编程作业 + 1 个 Final Project\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS224n - GitHub](https://github.com/PKUFlyingPig/CS224n) 中。\n"
  },
  {
    "path": "docs/深度学习/CS224w.en.md",
    "content": "# CS224w: Machine Learning with Graphs\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: fundamental machine learning + Python\n- Programming Language: Python, LaTeX\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 80 hours\n\nStanford'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 :)\n\n## Course Resources\n\n- Course Website: <http://web.stanford.edu/class/cs224w/>\n- Lecture Videos: <https://www.youtube.com/watch?v=JAB_plj2rbA>\n- Text Book: none\n- Assignments: <http://web.stanford.edu/class/cs224w/>,  with 6 programming assignments, 3 LaTeX written assignments"
  },
  {
    "path": "docs/深度学习/CS224w.md",
    "content": "# CS224w: Machine Learning with Graphs\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：深度学习基础 + Python\n- 编程语言：Python, LaTeX\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：80 小时\n\nStanford 的图神经网络入门课，这门课我没有上过，但众多做 GNN 的朋友都向我力荐过这门课，想必 Stanford 的课质量还是一如既往地有保证的。另外就是这门课的授课老师非常年轻帅气:)\n\n## 课程资源\n\n- 课程网站：<http://web.stanford.edu/class/cs224w/>\n- 课程视频：<https://www.youtube.com/watch?v=JAB_plj2rbA>\n- 课程教材：无\n- 课程作业：<http://web.stanford.edu/class/cs224w/>，6 个编程作业，3 个 LaTeX 书面作业\n"
  },
  {
    "path": "docs/深度学习/CS230.en.md",
    "content": "# Coursera: Deep Learning\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: fundamental machine learning + Python\n- Programming Language: Python\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 80 hours\n\nYet 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.\n\n## Couse Resources\n\n- Course Website: <https://www.coursera.org/specializations/deep-learning>\n- Lecture Videos: <https://www.coursera.org/specializations/deep-learning>, can be found on Bilibili\n- Text Book: none\n- Assignments: <https://www.coursera.org/specializations/deep-learning>\n"
  },
  {
    "path": "docs/深度学习/CS230.md",
    "content": "# Coursera: Deep Learning\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：机器学习基础 + Python\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：80 小时\n\n吴恩达在 Coursera 开设的另一门网红课程，学习者无数，堪称圣经级的深度学习入门课。深入浅出的讲解，眼花缭乱的 Project。从最基础的神经网络，到 CNN, RNN，再到最近大热的 Transformer。学完这门课，你将初步掌握深度学习领域必备的知识和技能，并且可以在 [Kaggle](https://www.kaggle.com/) 中参加自己感兴趣的比赛，在实践中锻炼自己。\n\n## 课程资源\n\n- 课程网站：<https://www.coursera.org/specializations/deep-learning>\n- 课程视频：<https://www.coursera.org/specializations/deep-learning>，B站有搬运\n- 课程教材：无\n- 课程作业：<https://www.coursera.org/specializations/deep-learning>\n"
  },
  {
    "path": "docs/深度学习/CS231.en.md",
    "content": "# CS231n: CNN for Visual Recognition\n\n## Course Introduction\n\n- Affiliated Universities：Stanford\n- Prerequisites: Foundations of Machine Learning\n- Programming Languages：Python\n- Course Difficulty：🌟🌟🌟🌟\n- Estimated hours: 80 hours\n\nStanford'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.\n\n## Course Resources\n\n- Course Website：<http://cs231n.stanford.edu/>\n- Course Video：[spring 2017 Bilibili (Classic)](https://www.bilibili.com/video/BV1nJ411z7fe), [spring 2025 YouTube (Latest)](https://www.youtube.com/playlist?list=PLoROMvodv4rOmsNzYBMe0gJY2XS8AQg16)\n- Course Materials: None\n- Coursework：<http://cs231n.stanford.edu/schedule.html>，3 Programming Assignments\n"
  },
  {
    "path": "docs/深度学习/CS231.md",
    "content": "# CS231n: CNN for Visual Recognition\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：机器学习基础\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：80 小时\n\nStanford 的 CV 入门课，由计算机领域的巨佬李飞飞院士领衔教授（CV 领域划时代的著名数据集 ImageNet 的研究团队），但其内容相对基础且友好，如果上过 CS230 的话可以直接上手 Project 作为练习。\n\n## 课程资源\n\n- 课程网站：<http://cs231n.stanford.edu/>\n- 课程视频：[spring 2017 Bilibili](https://www.bilibili.com/video/BV1nJ411z7fe), [spring 2025 YouTube (最新)](https://www.youtube.com/playlist?list=PLoROMvodv4rOmsNzYBMe0gJY2XS8AQg16)\n- 课程教材：无\n- 课程作业：<http://cs231n.stanford.edu/schedule.html>，3个编程作业\n"
  },
  {
    "path": "docs/深度学习/CS285.en.md",
    "content": "# CS285: Deep Reinforcement Learning\n\n## Course Overview\n\n- University：UC Berkeley\n- Prerequisites：CS188, CS189\n- Programming Language：Python\n- Course Difficulty：🌟🌟🌟🌟\n- Estimated Hours：80 hours\n\nThe 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.\n\nFor 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.\n\nIn 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.\n\n## Course Resources\n\n- Course Website: <http://rail.eecs.berkeley.edu/deeprlcourse/>\n- Course Videos: <https://www.youtube.com/playlist?list=PL_iWQOsE6TfX7MaC6C3HcdOf1g337dlC9>\n- Course Texbook: N/A\n- Course Assignments: <http://rail.eecs.berkeley.edu/deeprlcourse/>, 5 programming assignments\n"
  },
  {
    "path": "docs/深度学习/CS285.md",
    "content": "# CS285: Deep Reinforcement Learning\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS188, CS189\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：80 小时\n\nCS285 这一课程现由 Sergey Levine 教授讲授，课程内容覆盖了深度强化学习领域的各方面内容，适合有一定机器学习基础的同学进行学习，具体要求包括了解马尔可夫决策过程（MDP）等。整门课程中含有较多的公式，上课前需要有一定的心理准备。此外，教授会根据每年最新的研究进展更新课程内容以及作业，课程中能感受到教授尝试将深度强化学习领域的所有基础知识以及最近的发展在短短的数节课中进行传达。\n\n有关课程内容获取，22Fall 的授课方式为课前观看提前录制的视频，课上主要为 Q&A 环节，教授选择部分或者所有视频内的知识进行讲解同时回答学生现场提出的问题，因此所提供的课程视频链接实际上是已经包含了所有内容。课程作业则由5个编程作业组成，每一次作业主要为复现经典模型以及进行模型间的对比，偶尔也包含一些对最近提出的模型的复现，最后递交一份报告。考虑到作业本身已经提供了框架，且都是根据 hint 进行代码填空，因此作业难度并不大。\n\n总的来说，该课程适合新手入门深度强化学习。虽然学到后面越来越感觉到难，但整门课下来个人感觉还是收获颇丰。\n\n（另外 Levine 教授人真的很 nice）\n\n## 课程资源\n\n- 课程网站：<http://rail.eecs.berkeley.edu/deeprlcourse/>\n- 课程视频：<https://www.youtube.com/playlist?list=PL_iWQOsE6TfX7MaC6C3HcdOf1g337dlC9>\n- 课程教材：无\n- 课程作业：<http://rail.eecs.berkeley.edu/deeprlcourse/>，5个编程作业\n"
  },
  {
    "path": "docs/深度学习/EECS498-007.en.md",
    "content": "# UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision\n\n## Course Introduction\n\n- Offered by: UMich\n- Prerequisites: Basic Python, Matrix Theory (familiarity with matrix derivation is sufficient), Calculus\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 60 ~ 80 hours\n\nThe University of Michigan's Computer Vision course is of exceptionally high quality, with its videos and assignments covering an extensive range of topics. \n\nThe assignments gradually increase in difficulty and cover all stages of mainstream CV model development, making this an excellent introductory course for Computer Vision.\n\nIn each assignment, you'll build and train models or frameworks mentioned in the lectures, following the provided handouts.\n\nYou don't need any prior experience with deep learning frameworks. \n\nThe course will teach you from scratch how to use Pytorch in the early assignments, and it can subsequently serve as a reference book for you.\n\nAs each assignment deals with different themes, you'll not only gain a first-hand understanding of the development of mainstream CV models through these progressive assignments but also appreciate the impacts of different models and training methods on final performance and accuracy. \n\nMoreover, you'll get hands-on experience in implementing them.\n\nIn Assignment 1 (A1), you'll learn how to use Pytorch and Google Colab.\n\nIn Assignment 2 (A2), you will build a Linear Classifier and a two-layer neural network. Finally, you'll have the opportunity to work with the MNIST dataset, on which you will train and evaluate your neural network.\n\nIn Assignment 3 (A3), you'll encounter the classic Convolutional Neural Network (CNN) and experience the power of convolutional neural networks.\n\nIn Assignment 4 (A4), you'll have the opportunity to build an object detection model from scratch, following the handout to implement a One-Stage Detector and a Two-Stage Detector from two research papers.\n\nBy Assignment 5 (A5), you'll transition from CNN to RNN. You'll have the opportunity to build two different attention-based models, RNNs (Vanilla RNN & LSTM), and the famous Transformer.\n\nIn the final assignment (A6), you'll get a chance to implement two more advanced models, VAE and GAN, and apply them to the MNIST dataset. Finally, you'll implement two very cool features: network visualization and style transfer.\n\nBeyond the assignments, you can also implement a Mini-Project, building a complete deep learning pipeline. You can refer to the course homepage for specifics.\n\nAll the resources involved in the course, such as lectures, notes, and assignments, are open source. \n\nThe only downside is that the Autograder is only available to students enrolled at the University of Michigan. \n\nHowever, given that the correctness of the implementation and the expected results can already be confirmed in the provided *.ipynb (i.e., the Handout), I personally feel that the absence of Autograder doesn't affect the learning process.\n\nIt's worth mentioning that the main lecturer for this course, Justin Johnson, is a Ph.D. graduate of Fei-Fei Li and currently an Assistant Professor at the University of Michigan.\n\nThe open-source 2017 version of Stanford's CS231N was taught by Justin Johnson.\n\nBecause CS231N was mainly developed by Justin Johnson and Andrej Karpathy, this course also adopts some materials from CS231N. \n\nTherefore, students who have studied CS231N might find some materials in this course familiar.\n\nLastly, I recommend every student enrolled in this course to watch the lectures on YouTube. Justin Johnson's teaching style and content are very clear and easy to understand, making them a fantastic resource.\n\n## Course Resources\n\n- Course Website：<https://web.eecs.umich.edu/~justincj/teaching/eecs498/WI2022/>\n- Course Video：<https://www.youtube.com/playlist?list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r>\n- Course Materials: Only recommended textbooks, link: <https://www.deeplearningbook.org/>\n- Coursework：See the course homepage for details, six Assignments and one Mini-Project\n## Personal Resources\n@Michael-Jetson The 200,000 to 300,000 words of notes I have taken (and did not include homework, etc.) can be used as a reference:[Michael-Jetson/ML_DL_CV_with_pytorch](https://github.com/Michael-Jetson/ML_DL_CV_with_pytorch)\n"
  },
  {
    "path": "docs/深度学习/EECS498-007.md",
    "content": "# UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision\n\n## 课程简介\n\n- 所属大学：UMich\n- 先修要求：Python基础，矩阵论(熟悉矩阵求导即可)，微积分\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：60～80 小时\n\nUMich 的 Computer Vision 课，课程视频和作业质量极高，涵盖的主题非常全，同时 Assignments 的难度由浅及深，覆盖了 CV 主流模型发展的全阶段，是一门非常好的 Computer Vision 入门课。\n\n你在每个 Assignment 里会跟随 Handouts 搭建与训练 Lectures 中提到的模型/框架。\n\n你不需要有任何的深度学习框架的使用经验，在开始的 Assignment 里，这门课会从零开始教导每个学生如何使用 Pytorch，后续也可以当成工具书，随时翻阅。\n\n同时由于每个 Assignment 之间涉及到的主题都不同，你在递进式的 Assignment 中不仅可以亲身体会到 CV 主流模型的发展历程，领略到不同的模型和训练的方法对最终效果/准确率的影响，同时也能 Hands On 地实现它们。\n\n在 A1 中，你会学习 Pytorch 和 Google Colab 的使用。\n\n在 A2 中你会亲自搭建 Linear Classifier 以及一个两层的神经网络，最后你有机会亲自接触 MNIST 数据集并在此基础上训练并评估你搭建起的神经网络。\n\n在 A3 中，你会接触到最为经典的 Convolutional Neural Network (A.K.A. CNN)，亲自感受卷积神经网络的魅力。\n\n而在 A4 中，你将实际触及搭建物体检测模型的全流程，同时跟随 Handout 实现两篇论文中的 One-Stage Detector 和 Two-Stage Detector。\n\n到了 A5，就是从 CNN 到 RNN 的时刻了，你将有机会亲自搭建起两种不同的基于注意力的模型，RNNs (Vanilla RNN & LSTM) 和大名鼎鼎的 Transfomer。\n\n在最后一个 Assignment（A6）中，你将有机会实现两种更为 Fancy 的模型，VAE 和 GAN，并应用在 MINST 数据集上。最后，你会实现网络可视化和风格迁移这两个非常酷炫的功能。\n\n在 Assignments 之外，你还可以自己实现一个 Mini-Project，亲自搭建起一个完整的深度学习 Pipeline，具体可以参考课程主页。\n\n课程所涉及的资源，如 Lectures/Notes/Assignments 都是开源的，美中不足的是 Autograder 只对本校 Enrolled 的学生开放，但因为在提供的 `*.ipynb`（也就是 Handout） 中已经可以确定实现的正确性，以及预期的结果，所以我个人觉得 Autograder 的缺失没有任何影响。\n\n值得一提的是，这门课的主讲教授 Justin Johnson 正是 Fei-Fei Li 的博士毕业生，现在在 UMich 当 Assistant Professor。\n\n而现在开源的 2017 年版本的 Stanford CS231N 的主讲人就是 Justin Johnson。\n\n同时因为 CS231N 主要是由 Justin Johnson 和 Andrej Karpathy 建设起来的，这门课也沿用了 CS231N 的一些材料，所以学过 CS231N 的同学可能会觉得这门课的某些材料比较熟悉。\n\n最后，我推荐每一个 Enroll 这门课的同学都去看一看 Youtube 上面的 Lectures，Justin Johnson 的讲课方式和内容都非常清晰和易懂，是非常棒的参考。\n\n## 课程资源\n\n- 课程网站：<https://web.eecs.umich.edu/~justincj/teaching/eecs498/WI2022/>\n- 课程视频：<https://www.youtube.com/playlist?list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r>\n- 课程教材：仅有推荐教材，链接：<https://www.deeplearningbook.org/>\n- 课程作业：见课程主页，6 个 Assignment 和一个 Mini-Project\n## 资源汇总\n@Michael-Jetson 本人所做的二三十万字的笔记（并没有包括作业等），可以当做一个参考[Michael-Jetson/ML_DL_CV_with_pytorch](https://github.com/Michael-Jetson/ML_DL_CV_with_pytorch)\n"
  },
  {
    "path": "docs/深度学习/LHY.en.md",
    "content": "# National Taiwan University: Machine Learning by Hung-yi Lee\n\n## Course Overview\n\n- University: National Taiwan University\n- Prerequisites: Proficiency in Python\n- Programming Language: Python\n- Course Difficulty: 🌟🌟🌟🌟\n- Estimated Hours：80 hours\n\nProfessor 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.\n\nAlthough 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.\n\nDon'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.\n\nThe 2025 version of the course has undergone a reform of the course content, focusing more on RAG, AI Agent, LLM all sorts of fancier content; it differs greatly from the 2023 version and previous versions\n\n## Course Resources\n\n- Course Websites：[Spring2023](https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php), [Spring2025](https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php)\n- Course Videos：[Spring2023](https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php), [Spring2025](https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php)\n- Course Textbook: N/A\n- Course Assignments：[Spring2023](https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php)(15 labs covering a wide range of deep learning domains), [Spring2025](https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php) (focus on  LLM related work like AI Agent)\n"
  },
  {
    "path": "docs/深度学习/LHY.md",
    "content": "# 国立台湾大学：李宏毅机器学习\n\n## 课程简介\n\n- 所属大学：國立台灣大學\n- 先修要求：熟练掌握 Python\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：80 小时\n\n李宏毅老师是国立台湾大学的教授，其风趣幽默的授课风格深受大家喜爱，并且尤其喜欢在 PPT 中插入宝可梦等动漫元素，是个非常可爱的老师。\n\n这门课挂着机器学习的牌子，但其课程内容之广实在令人咋舌，其作业一共包含 15 个 lab，分别是 Regression、Classification、CNN、Self-Attention、Transformer、GAN、BERT、Anomaly Detection、Explainable AI、Attack、Adaptation、\nRL、Compression、Life-Long Learning 以及 Meta Learning。可谓是包罗万象，能让学生对于深度学习的绝大多数领域都有一定了解，从而可以进一步选择想要深入的方向进行学习。\n\n大家也大可不必担心作业的难度，因为所有作业都会提供助教的示例代码，帮你完成数据处理、模型搭建等，你只需要在其基础上进行适量的修改即可。这也是一个学习别人优质代码的极好机会，大家需要水课程大作业的话，这里也是一个不错的资料来源。\n\n2025年版课程的课程内容发生改革，更加侧重于RAG、AI Agent、LLM种种更fasion的内容；与2023版及之前版本差异极大\n\n## 课程资源\n\n- 课程网站：[Spring2023](https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php), [Spring2025](https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php)\n- 课程视频：[Spring2023](https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php), [Spring2025](https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php)，每节课的链接参见课程网站\n- 课程教材：无\n- 课程作业：[Spring2023](https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.php) (5 个 lab，几乎覆盖了主流深度学习的所有领域；部分作业colab上可能无法打开，这时候可以参考弘毅老师的github), [Spring2025](https://speech.ee.ntu.edu.tw/~hylee/ml/2025-spring.php) (主要关注 AI Agent 等 LLM 相关领域)\n"
  },
  {
    "path": "docs/深度学习/MIT6-7960.en.md",
    "content": "# MIT 6.7960: Deep Learning\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Linear Algebra, Probability/Statistics, and ML Foundations\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: ~90 hours\n\nA key strength of MIT 6.7960 is breadth. Beyond mainstream LLM/NLP topics, it also includes computer-vision-oriented content, making it a good choice if you want broader coverage rather than a single-track focus.\n\nThe course typically combines theory, model design, and application cases. For self-learners with basic foundations, its assignments/projects are practical for advanced training across multiple subfields.\n\n## Course Resources\n\n- Course Website: <https://ocw.mit.edu/courses/6-7960-deep-learning-fall-2024/>\n- Recordings: Lecture videos and related materials on MIT OCW\n- Textbooks: Lecture Notes + recommended papers\n- Assignments: Assignment and project information on MIT OCW\n\n## Personal Resources\n\nNo public personal repository is currently provided for this course.\n"
  },
  {
    "path": "docs/深度学习/MIT6-7960.md",
    "content": "# MIT 6.7960: Deep Learning\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：线性代数、概率统计、机器学习基础\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：90 小时\n\nMIT 6.7960 的优势在于覆盖面相对更广：除了主流的 LLM/NLP 主线，也会涉及计算机视觉等任务与方法，适合希望建立“多方向通识”的学习者，而不是只押注单一赛道。\n\n课程通常会把理论、模型设计和应用案例结合起来，帮助你理解“同一套深度学习思想”如何在不同任务中落地。对自学者来说，这门课的作业和项目也很适合做进阶练手。\n\n## 课程资源\n\n- 课程网站：<https://ocw.mit.edu/courses/6-7960-deep-learning-fall-2024/>\n- 课程视频：MIT OCW 页面提供 Lecture 视频与相关材料\n- 课程教材：Lecture Notes / 讲义 + 推荐论文\n- 课程作业：MIT OCW 页面提供作业与项目信息\n\n## 资源汇总\n\n暂未提供公开的个人课程笔记与作业仓库。\n"
  },
  {
    "path": "docs/深度学习/NYU-DLSP21.en.md",
    "content": "# NYU DLSP21: NYU Deep Learning Spring 2021\n\n## Descriptions\n\n- Offered by: NYU\n- Prerequisites: Linear Algebra, Probability, and Python Programming\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: ~80 hours\n\nThe most distinctive feature of this course is that it is taught by Yann LeCun. For many learners, this is a rare public opportunity to follow a full deep learning course from a top researcher.\n\nIts style balances theory and intuition with a research-oriented perspective. It works especially well as a high-quality follow-up after introductory courses, helping you build better instincts for problem framing and model design.\n\n## Course Resources\n\n- Course Website: <https://atcold.github.io/NYU-DLSP21/>\n- Recordings: Full lecture videos on the course website\n- Textbooks: Lecture Notes / Slides\n- Assignments: Assignments and practical materials on the course website\n\n## Personal Resources\n\nNo public personal repository is currently provided for this course.\n"
  },
  {
    "path": "docs/深度学习/NYU-DLSP21.md",
    "content": "# NYU DLSP21: NYU Deep Learning Spring 2021\n\n## 课程简介\n\n- 所属大学：NYU\n- 先修要求：线性代数、概率论、Python 编程\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：80 小时\n\n这门课最具辨识度的亮点是由 Yann LeCun 亲自授课。对很多同学而言，这是极少见的公开系统课程资源：可以完整地听到顶级学者从一线研究者视角讲解深度学习。\n\n课程讲解兼顾理论与直觉，整体偏研究导向，适合已完成入门课后继续提升“问题意识”和“建模品味”。把它作为主线课程之外的高质量补充，会非常有价值。\n\n## 课程资源\n\n- 课程网站：<https://atcold.github.io/NYU-DLSP21/>\n- 课程视频：课程网站提供完整 Lecture 视频\n- 课程教材：Lecture Notes / Slides\n- 课程作业：课程网站提供作业与实验材料\n\n## 资源汇总\n\n暂未提供公开的个人课程笔记与作业仓库。\n"
  },
  {
    "path": "docs/深度生成模型/MIT6.S184.en.md",
    "content": "# MIT6.S184: Generative AI with Stochastic Differential Equations\n\n## Course Introduction\n\n- University: MIT  \n- Prerequisites: Basic understanding of deep learning, and be comfortable with calculus and linear algebra  \n- Programming Language: Python (with PyTorch)  \n- Course Difficulty: 🌟🌟🌟🌟  \n- Estimated Study Hours: 20  \n\nThis course is an introductory diffusion model course offered during MIT's IAP term by MIT CSAIL. Taught by MIT students Peter Holderrieth and Ezra Erives, the course provides a clear and accessible explanation of the mathematical foundations of diffusion and flow-matching models from the perspective of differential equations. It also includes hands-on labs where students build diffusion models from scratch, concluding with lectures on applications in cutting-edge areas such as molecular design and robotics.\n\nThe accompanying lecture notes are exceptionally well-written and highly recommended for in-depth reading.\n\n## Course Resources\n\n- Course Website: https://diffusion.csail.mit.edu/  \n- Course Videos: See course website  \n- Course Textbook: [An Introduction to Flow Matching and Diffusion Models](https://arxiv.org/abs/2506.02070)  \n- Course Assignments: Three labs, see course website for details  \n"
  },
  {
    "path": "docs/深度生成模型/MIT6.S184.md",
    "content": "# MIT6.S184: Generative AI with Stochastic Differential Equations\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：Basic understanding of deep learning, and be comfortable with calculus and linear algebra\n- 编程语言：Python (with PyTorch)\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：20\n\n这门课程是由 MIT CSAIL 的 IAP 小学期开办的扩散模型入门课程。该课程由 MIT 学生 Peter Holderrieth 和 Ezra Erives 主讲，从微分方程的视角深入浅出地讲解了扩散模型和流匹配模型的数学理论基础，并且配以实践让学生从零构建扩散模型，最后通过讲座介绍其在分子设计和机器人学等前沿技术中的应用。\n\n课程配套的教材笔记写得非常好，推荐仔细阅读。\n\n## 课程资源\n\n- 课程网站：https://diffusion.csail.mit.edu/\n- 课程视频：参见课程网站\n- 课程教材：[An Introduction to Flow Matching and Diffusion Models](https://arxiv.org/abs/2506.02070)\n- 课程作业：三个实验，具体参见课程网站\n"
  },
  {
    "path": "docs/深度生成模型/roadmap.en.md",
    "content": "# Deep Generative Models Roadmap\n\nIn recent years, large language models (LLMs) have become a hot topic, which is also highly relevant to the author’s PhD research. This roadmap aims to share various course materials and references that the author found useful while getting familiar with and delving into the field of deep generative models. It’s intended to help practitioners in related areas or anyone interested in the underlying principles of generative models. Due to limited time outside of research, the author has not completed all the course assignments; updates will be added gradually when time permits.\n\nIn fact, LLMs are just one branch of deep generative models. Other types such as VAEs, GANs, Diffusion Models, and Flows still play an important role in the broader domain of \"generation.\" The term AIGC (AI-generated content) broadly refers to these technologies.\n\nRecommended courses for learning:\n\n- [MIT 6.S184: Generative AI with Stochastic Differential Equations](./MIT6.S184.md): An introductory GenAI course offered during MIT's IAP term. It explains the mathematical foundations behind Flow Matching and Diffusion Models from the perspective of differential equations, accompanied by simple hands-on labs to help students grasp the concepts through practice. Ideal for those interested in the underlying mathematical principles.\n\n- [MIT 6.S978: Deep Generative Models](https://mit-6s978.github.io/schedule.html): Taught by MIT’s rising star Prof. Kaiming He, this course covers fundamental theories and cutting-edge papers related to various generative models. The assignments include well-prepared scaffold code. While not overly difficult, they help deepen understanding and provide a quick, comprehensive view of the field.\n\n- [UCB CS294-158-SP24: Deep Unsupervised Learning](https://sites.google.com/view/berkeley-cs294-158-sp24/home): Taught by reinforcement learning giant Pieter Abbeel. Compared to the MIT course, this one is more comprehensive and includes lecture videos and slides. The homework only provides test code, so students must implement model architecture and training code themselves. Though demanding, it’s ideal for those who want hands-on experience in training models. As is well known, there are many practical tricks in deep learning, and the devil is often in the details. Nothing teaches those details better than training a model yourself.\n\n- [CMU 10423: Generative AI](https://www.cs.cmu.edu/~mgormley/courses/10423/schedule.html): CMU’s GenAI course focuses more on large language models compared to the previous two, but shares much of the same content otherwise. The assignments are quite engaging and worth trying out in your spare time.\n\nThe GPT series by OpenAI has demonstrated remarkable performance under the guidance of scaling laws, especially in mathematics and coding. If you are primarily interested in LLMs, the following courses are recommended:\n\n- [Stanford CS336: Language Modeling from Scratch](https://stanford-cs336.github.io/spring2025/index.html): As the title suggests, this course teaches you to build all the core components of an LLM from scratch, such as the tokenizer, model architecture, training optimizer, low-level operators, data cleaning, and post-training algorithms. Each assignment has a 40-50 page PDF handout—very rigorous. Highly recommended if you want to fully understand every low-level detail of LLMs.\n\n- [CMU 15-779: Advanced Topics in Machine Learning Systems (LLM Edition)](./大语言模型/CMU15-779.md) / [EN](./大语言模型/CMU15-779.en.md): A systems and performance-oriented course that explains how high-level models are decomposed into low-level kernels and executed efficiently on heterogeneous accelerators and in distributed environments. Topics include CUDA, ML compilation, graph-level optimizations, auto-parallelization, and LLM serving/inference acceleration, along with weekly paper reviews and a final systems project.\n\n- [CMU 11868: Large Language Model Systems](https://llmsystem.github.io/llmsystem2025spring/): This CMU course focuses on system-level optimization of LLMs, including GPU acceleration, distributed training/inference, and cutting-edge techniques. Great for students in systems research to gain a holistic understanding of the field. (Disclosure: One of my papers on PD decoupling is included in the syllabus, hence the personal recommendation.) Assignments involve implementing a mini-PyTorch framework and then building system-level LLM optimizations on top of it.\n\n- [CMU 11667: Large Language Models: Methods and Applications](https://cmu-llms.org/) and [CMU 11711: Advanced NLP](https://www.phontron.com/class/anlp-fall2024/): Compared to the previous two, these courses focus more on higher-level algorithms and applications. Each lecture includes many recommended readings, making them suitable for gaining a broad understanding of LLM research frontiers. You can then dive deeper into any subfield that interests you based on the reading materials.\n\nIn addition to courses, the following resources are also highly recommended:\n\n- [Awesome-LLM](https://github.com/Hannibal046/Awesome-LLM): A curated list of LLM-related resources.\n- [LLMSys-PaperList](https://github.com/AmberLJC/LLMSys-PaperList): A collection of system-related papers on LLMs.\n- [MLsys-Guide](https://github.com/PKU-DAIR/Starter-Guide/blob/main/docs/systems/Readme.md): A beginner’s guide to deep learning systems.\n"
  },
  {
    "path": "docs/深度生成模型/roadmap.md",
    "content": "# 深度生成模型学习路线\n\n近几年大语言模型成为大热的方向，也和笔者博士期间的课题非常相关。这篇路线图旨在分享笔者在熟悉和深入深度生成模型这一领域过程中学习和参考的各类课程资料，方便相关领域的从业者或者对生成模型的底层原理感兴趣的朋友共同学习。由于笔者科研之余时间有限，很多课程的实验并未完成，等后续有时间完成之后会在该目录下一一添加。\n\n其实，大语言模型只是深度生成模型的一个分支，而其他生成模型例如 VAE，GAN，Diffusion Model，Flow 等等，都还在“生成”这一领域占有重要地位，所谓的 AIGC，就是泛指这一类技术。\n推荐学习下列课程：\n\n- [MIT 6.S184: Generative AI with Stochastic Differential Equations](./MIT6.S184.md): MIT IAP 小学期的 GenAI 入门课程，主要通过微分方程的视角讲解了 Flow Matching 和 Diffusion Model 背后的数学原理，并且配有简单的小实验让学生在实践中理解，适合对底层数学原理感兴趣的同学入门。\n\n- [MIT 6.S978: Deep Generative Models](https://mit-6s978.github.io/schedule.html): MIT 新晋明星教授何恺明亲授，涵盖了各种生成模型的基础理论和相关前沿论文，几次作业都有丰富的脚手架代码，难度不高但能加深理解，能对这个领域有个快速全貌了解。\n\n- [UCB CS294-158-SP24: Deep Unsupervised Learning](https://sites.google.com/view/berkeley-cs294-158-sp24/home): 强化学习领域的顶级巨佬 Pieter Abbeel 主讲，相比 MIT 的课程内容更加丰富全面，并且有配套课程视频和 Slides。此外课后作业只有测试代码，需要学生自主编写模型架构定义和训练代码，虽然硬核但很适合有志于炼丹的同学练手。众所周知，深度学习理论实践中存在着很多经验技巧，魔鬼往往存在于细节里。没有什么比自己上手训一个模型更能掌握这些细节了。\n\n- [CMU 10423: Generative AI](https://www.cs.cmu.edu/~mgormley/courses/10423/schedule.html): CMU 的 GenAI 课程，相比前两门课更侧重于大语言模型一些，其他内容和前两门课重合较多。不过课程作业都挺有意思，推荐闲暇时间练练手。\n\n\nOpenAI 的 GPT 系列让大语言模型在 Scaling Law 的指引下展现出惊人的效果，在数学和代码领域取得了很大进展。如果你主要关注大语言模型这个方向，那么推荐如下课程：\n\n- [Stanford CS336: Language Modeling from Scratch](https://stanford-cs336.github.io/spring2025/index.html): 正如课程标题写的，在这门课程中你将从头编写大语言模型的所有核心组件，例如 Tokenizer，模型架构，训练优化器，底层算子，训练数据清洗，后训练算法等等。每次作业的 handout 都有四五十页 pdf，相当硬核。如果你想充分吃透大语言模型的所有底层细节，那么非常推荐学习这门课程。\n\n- [CMU 15-779: Advanced Topics in Machine Learning Systems (LLM Edition)](./大语言模型/CMU15-779.md) / [EN](./大语言模型/CMU15-779.en.md): 偏系统与性能优化视角，重点讲清“高层模型如何分解成 kernel 并在异构加速器与分布式环境中高效执行”，覆盖 CUDA、ML 编译、图级优化、自动并行化、LLM Serving 与推理加速等内容，并配套按周论文阅读与期末系统项目。\n\n- [CMU 11868: Large Language Model Systems](https://llmsystem.github.io/llmsystem2025spring/): CMU 的大语言模型系统课程，侧重底层系统优化，例如 GPU 加速，分布式训练和推理，以及各种前沿技术。非常适合从事系统领域的同学对这个方向有个全貌性的了解。课表里还包含了一篇我发表的 PD 分离相关的文章，因此私心推荐一下。课程作业的话会让你先实现一个迷你 Pytorch，然后在上面实现各种大语言模型的系统级优化。\n\n- [CMU 11667: Large Language Models: Methods and Applications](https://cmu-llms.org/) 和 [CMU 11711: Advanced NLP](https://www.phontron.com/class/anlp-fall2024/): 和前两门课相比，这两门课更偏重上层算法和应用，而且每节课都列举了很多相关阅读材料，适合对大语言模型发展前沿的各个方向都有个粗糙的认识，如果对某个子领域感兴趣的话再寻着参考资料深入学习。\n\n除了课程以外，还有很多不错的资料作为参考：\n\n- [Awesome-LLM](https://github.com/Hannibal046/Awesome-LLM): 大语言模型相关资料汇总\n- [LLMSys-PaperList](https://github.com/AmberLJC/LLMSys-PaperList): 大语言模型系统相关论文汇总\n- [MLsys-Guide](https://github.com/PKU-DAIR/Starter-Guide/blob/main/docs/systems/Readme.md): 深度学习系统入门指南"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-667.en.md",
    "content": "# CMU11-667: Large Language Models: Methods and Applications\n\n## Course Overview\n\n- University: Carnegie Mellon University  \n- Prerequisites: Solid background in machine learning (equivalent to CMU 10-301/10-601) and natural language processing (equivalent to 11-411/11-611); proficiency in Python and familiarity with PyTorch or similar deep learning frameworks.  \n- Programming Language: Python  \n- Course Difficulty: 🌟🌟🌟🌟  \n- Estimated Study Hours: 100+ hours  \n\nThis graduate-level course provides a comprehensive overview of methods and applications of Large Language Models (LLMs), covering a wide range of topics from core architectures to cutting-edge techniques. Course content includes:\n\n1. **Foundations**: Neural network architectures for language modeling, training procedures, inference, and evaluation metrics.  \n2. **Advanced Topics**: Model interpretability, alignment methods, emergent capabilities, and applications in both textual and non-textual domains.  \n3. **System & Optimization Techniques**: Large-scale pretraining strategies, deployment optimization, and efficient training/inference methods.  \n4. **Ethics & Safety**: Addressing model bias, adversarial attacks, and legal/regulatory concerns.\n\nThe course blends lectures, readings, quizzes, interactive exercises, assignments, and a final project to offer students a deep and practical understanding of LLMs, preparing them for both research and real-world system development.\n\n**Self-Study Tips**:\n\n- Thoroughly read all assigned papers and materials before each class.  \n- Become proficient with PyTorch and implement core models and algorithms by hand.  \n- Complete the assignments diligently to build practical skills and reinforce theoretical understanding.\n\n## Course Resources\n\n- Course Website: <https://cmu-llms.org/>  \n- Course Videos: Selected lecture slides and materials are available on the website; full lecture recordings may require CMU internal access.  \n- Course Materials: Curated research papers and supplementary materials, with the full reading list available on the course site.  \n- Assignments: Six programming assignments covering data preparation, Transformer implementation, retrieval-augmented generation, model evaluation and debiasing, and training efficiency. Details at <https://cmu-llms.org/assignments/>\n"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-667.md",
    "content": "# CMU11-667: Large Language Models: Methods and Applications\n\n## 课程简介\n\n- 所属大学：Carnegie Mellon University\n- 先修要求：具备机器学习基础（相当于 CMU 的 10-301/10-601）和自然语言处理基础（相当于 11-411/11-611）；熟练掌握 Python，熟悉 PyTorch 等深度学习框架。\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 学时以上\n\n该研究生课程全面介绍了大型语言模型（LLM）的方法与应用，涵盖从基础架构到前沿技术的广泛主题。课程内容包括：\n\n1. **基础知识**：语言模型的网络架构、训练、推理和评估方法。\n2. **进阶主题**：模型解释性、对齐方法、涌现能力，以及在语言任务和非文本任务中的应用。\n3. **扩展技术**：大规模预训练技术、模型部署优化，以及高效的训练和推理方法。\n4. **伦理与安全**：模型偏见、攻击方法、法律问题等。\n\n课程采用讲座、阅读材料、小测验、互动活动、作业和项目相结合的方式进行，旨在为学生提供深入理解 LLM 的机会，并为进一步的研究或应用打下坚实基础。\n\n**自学建议**：\n\n- 认真阅读每次课前指定的论文和材料。\n- 熟悉 PyTorch 等深度学习框架，动手实现模型和算法。\n- 扎实完成课程作业。\n\n## 课程资源\n\n- 课程网站：<https://cmu-llms.org/>\n- 课程视频：部分讲座幻灯片和材料可在课程网站获取，完整视频可能需通过 CMU 内部平台访问。\n- 课程教材：精选论文和资料，具体阅读列表详见课程网站。\n- 课程作业：共六次作业，涵盖预训练数据准备、Transformer 实现、检索增强生成、模型比较与偏见缓解、训练效率提升等主题，详情见 <https://cmu-llms.org/assignments/>\n"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-711.en.md",
    "content": "# CMU 11-711: Advanced Natural Language Processing (ANLP)\n\n## Course Overview\n\n* University: Carnegie Mellon University  \n* Prerequisites: No strict prerequisites, but students should have experience with Python programming, as well as a background in probability and linear algebra. Prior experience with neural networks is recommended.  \n* Programming Language: Python  \n* Course Difficulty: 🌟🌟🌟🌟  \n* Estimated Workload: 100 hours  \n\nThis is a graduate-level course covering both foundational and advanced topics in Natural Language Processing (NLP). The syllabus spans word representations, sequence modeling, attention mechanisms, Transformer architectures, and cutting-edge topics such as large language model pretraining, instruction tuning, complex reasoning, multimodality, and model safety. Compared to similar courses, this course stands out for the following reasons:\n\n1. **Comprehensive and research-driven content**: In addition to classical NLP methods, it offers in-depth discussions of recent trends and state-of-the-art techniques such as LLaMa and GPT-4.  \n2. **Strong practical component**: Each lecture includes code demonstrations and online quizzes, and the final project requires reproducing and improving upon a recent research paper.  \n3. **Highly interactive**: Active engagement is encouraged through Piazza discussions, Canvas quizzes, and in-class Q&A, resulting in an immersive and well-paced learning experience.\n\nSelf-study tips:\n\n* Read the recommended papers before class and follow the reading sequence step-by-step.  \n* Set up a Python environment and become familiar with PyTorch and Hugging Face, as many hands-on examples are based on these frameworks.\n\n## Course Resources\n\n* Course Website: [https://www.phontron.com/class/anlp-fall2024/](https://www.phontron.com/class/anlp-fall2024/)  \n* Course Videos: Lecture recordings are available on Canvas (CMU login required)  \n* Course Texts: Selected classical and cutting-edge research papers + chapters from *A Primer on Neural Network Models for Natural Language Processing* by Yoav Goldberg  \n* Course Assignments: [https://www.phontron.com/class/anlp-fall2024/assignments/](https://www.phontron.com/class/anlp-fall2024/assignments/)\n"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-711.md",
    "content": "# CMU 11-711: Advanced Natural Language Processing (ANLP)\n\n## 课程简介\n\n* 所属大学：Carnegie Mellon University\n* 先修要求：无硬性先修要求，但需具备 Python 编程经验，以及概率论和线性代数基础；有神经网络使用经验者更佳。\n* 编程语言：Python\n* 课程难度：🌟🌟🌟🌟\n* 预计学时：100 学时\n\n该课程为研究生级别的 NLP 入门与进阶课程，覆盖从词表征、序列建模，到注意力机制、Transformer 架构，再到大规模语言模型预训练、指令微调与复杂推理、多模态和安全性等前沿主题。与其他同类课程相比，本课程：\n\n1. **内容全面且紧跟最新研究**：除经典算法外，深入讲解近年热门的大模型方法（如 LLaMa、GPT-4 等）。\n2. **实践性强**：每次课配套代码演示与在线小测，学期末项目需复现并改进一篇前沿论文。\n3. **互动良好**：Piazza 讨论、Canvas 测验及现场答疑，学习体验沉浸而有节奏。\n\n自学建议：\n\n* 提前阅读课前推荐文献，跟着阅读顺序循序渐进。\n* 准备好 Python 环境并熟悉 PyTorch/Hugging Face，因为大量实战代码示例基于此。\n* 扎实完成课程作业。\n\n## 课程资源\n\n* 课程网站：[https://www.phontron.com/class/anlp-fall2024/](https://www.phontron.com/class/anlp-fall2024/)\n* 课程视频：课堂讲座录制并上传至 Canvas（需 CMU 帐号登录）\n* 课程教材：各类经典与前沿论文＋Goldberg《A Primer on Neural Network Models for Natural Language Processing》章节阅读\n* 课程作业：[https://www.phontron.com/class/anlp-fall2024/assignments/](https://www.phontron.com/class/anlp-fall2024/assignments/)\n"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-868.en.md",
    "content": "# CMU 11-868: Large Language Model Systems\n\n## Course Overview\n\n- University: Carnegie Mellon University  \n- Prerequisites: Strongly recommended to have taken Deep Learning (11-785) or Advanced NLP (11-611 or 11-711)  \n- Programming Language: Python  \n- Course Difficulty: 🌟🌟🌟🌟  \n- Estimated Workload: 120 hours  \n\nThis graduate-level course focuses on the full stack of large language model (LLM) systems — from algorithms to engineering. The curriculum covers, but is not limited to:\n\n1. **GPU Programming and Automatic Differentiation**: Master CUDA kernel calls, fundamentals of parallel programming, and deep learning framework design.  \n2. **Model Training and Distributed Systems**: Learn efficient training algorithms, communication optimizations (e.g., ZeRO, FlashAttention), and distributed training frameworks like DDP, GPipe, and Megatron-LM.  \n3. **Model Compression and Acceleration**: Study quantization (GPTQ), sparsity (MoE), compiler technologies (JAX, Triton), and inference-time serving systems (vLLM, CacheGen).  \n4. **Cutting-Edge Topics and Systems Practice**: Includes retrieval-augmented generation (RAG), multimodal LLMs, RLHF systems, and end-to-end deployment, monitoring, and maintenance.\n\nCompared to similar courses, this one stands out for its **tight integration with recent papers and open-source implementations** (hands-on work expanding CUDA support in the miniTorch framework), a **project-driven assignment structure** (five programming assignments + a final project), and **guest lectures from industry experts**, offering students real-world insights into LLM engineering challenges and solutions.\n\n**Self-Study Tips**:\n\n- Set up a CUDA-compatible environment in advance (NVIDIA GPU + CUDA Toolkit + PyTorch).  \n- Review fundamentals of parallel computing and deep learning (autograd, tensor operations).  \n- Carefully read the assigned papers and slides before each lecture, and follow the assignments to extend the miniTorch framework from pure Python to real CUDA kernels.\n\nThis course assumes a solid understanding of deep learning and is **not suitable for complete beginners**. See the [FAQ](https://llmsystem.github.io/llmsystem2024spring/docs/FAQ) for more on prerequisites.\n\nThe assignments are fairly challenging and include:\n\n1. **Assignment 1**: Implement an autograd framework + custom CUDA ops + basic neural networks  \n2. **Assignment 2**: Build a GPT2 model from scratch  \n3. **Assignment 3**: Accelerate training with custom CUDA kernels for Softmax and LayerNorm  \n4. **Assignment 4**: Implement distributed model training (difficult to configure independently for self-study)\n\n## Course Resources\n\n- Course Website: <https://llmsystem.github.io/llmsystem2025spring/>  \n- Syllabus: <https://llmsystem.github.io/llmsystem2025spring/docs/Syllabus/>  \n- Assignments: <https://llmsystem.github.io/llmsystem2025springhw/>  \n- Course Texts: Selected research papers + selected chapters from *Programming Massively Parallel Processors (4th Edition)*\n"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU11-868.md",
    "content": "# CMU 11-868: Large Language Model Systems\n\n## 课程简介\n\n- 所属大学：Carnegie Mellon University\n- 先修要求：强烈建议已修读 Deep Learning (11785) 或 Advanced NLP (11-611 或 11-711)\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟  \n- 预计学时：120 学时  \n\n该课程面向研究生开设，聚焦“从算法到工程”的大语言模型系统构建全过程。课程内容包括但不限于：\n\n1. **GPU 编程与自动微分**：掌握 CUDA kernel 调用、并行编程基础，以及深度学习框架设计原理。  \n2. **模型训练与分布式系统**：学习高效的训练算法、通信优化（ZeRO、FlashAttention）、分布式训练框架（DDP、GPipe、Megatron-LM）。  \n3. **模型压缩与加速**：量化（GPTQ）、稀疏化（MoE）、编译技术（JAX、Triton）、以及推理时的服务化设计（vLLM、CacheGen）。  \n4. **前沿技术与系统实践**：涵盖检索增强生成（RAG）、多模态 LLM、RLHF 系统，以及端到端的在线维护和监控。  \n\n与同类课程相比，本课程的优势在于**紧密结合最新论文与开源实现**（通过 miniTorch 框架动手扩展 CUDA 支持）；**项目驱动**的作业体系（五次编程作业 + 期末大项目）；以及**工业嘉宾讲座**，能让学生近距离了解真实世界中 LLM 工程实践的挑战与解决方案。\n\n**自学建议**：\n\n- 提前配置好支持 CUDA 的开发环境（NVIDIA GPU + CUDA Toolkit + PyTorch）。  \n- 复习并行计算和深度学习基础（自动微分、张量运算）。  \n- 阅读每次课前指定的论文与幻灯片，跟着作业把 miniTorch 框架从纯 Python 拓展到真实 CUDA 内核。  \n\n该课程要求你对深度学习有一定的预备知识，不适合纯小白入手，可见 [FAQ](https://llmsystem.github.io/llmsystem2024spring/docs/FAQ) 的先修要求。\n实验总体来说是有难度的，主要内容如下：\n\n1. Assignment1: 自动微分框架 + CUDA 手写算子 + 基础神经网络构建\n2. Assignmant2: GPT2 模型构建\n3. Assignment3: 通过手写 CUDA 的 Softmax 和 LayerNorm 算子优化模型训练速度\n4. Assignment4: 分布式模型训练，自学的话可能不太好配置环境\n\n## 课程资源\n\n- 课程网站：<https://llmsystem.github.io/llmsystem2025spring/>  \n- 课程大纲：<https://llmsystem.github.io/llmsystem2025spring/docs/Syllabus/>  \n- 课程作业：<https://llmsystem.github.io/llmsystem2025springhw/>  \n- 课程教材：精选论文 + 《Programming Massively Parallel Processors, 4th Ed》 部分章节\n"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU15-779.en.md",
    "content": "# CMU 15-779: Advanced Topics in Machine Learning Systems (LLM Edition)\n\n## Course Overview\n\n- University: Carnegie Mellon University\n- Prerequisites: No strict prerequisites; an intro ML background and hands-on deep learning training experience are recommended; familiarity with PyTorch helps; basic CUDA/GPU knowledge will significantly improve the learning curve\n- Programming Language: Python (systems and kernel-level topics involve CUDA/hardware concepts)\n- Course Difficulty: 🌟🌟🌟🌟 \n- Estimated Study Hours: 80-120 hours\n\nThis course takes a systems-first view of modern machine learning and LLM infrastructure. The core question it repeatedly answers is: how does a model written in a high-level framework (e.g., PyTorch) get decomposed into low-level kernels, and how is it executed efficiently on heterogeneous accelerators (GPUs/TPUs) and in distributed environments. The syllabus covers GPU programming, ML compilers, graph-level optimizations, distributed training and auto-parallelization, and LLM serving and inference acceleration. It is a strong fit if you want to connect “framework-level experience” with “kernels, compilation, hardware, and cluster execution.”\n\nThe workload is organized around consistent pre-lecture reading assignments (paper reviews) and a team-based final course project (proposal, presentation, report). For self-study, it is best to follow the schedule week by week rather than treating it as a slide-only course.\n\n## Topics Covered\n\nThe course is structured as lectures, with major themes including:\n\n1. ML systems fundamentals via TensorFlow/PyTorch (abstractions, execution models)\n2. GPU architecture and CUDA programming (memory, performance tuning)\n3. Transformer and attention case studies (FlashAttention and IO-aware attention)\n4. Advanced CUDA techniques (warp specialization, mega kernels)\n5. ML compilation (tile-based DSLs like Triton, kernel auto-tuning, graph-level optimizations, superoptimization such as Mirage)\n6. Parallelization and distributed training (ZeRO/FSDP, model/pipeline parallelism, auto-parallelization such as Alpa)\n7. LLM serving and inference (batching, PagedAttention, RadixAttention, speculative decoding)\n8. Post-training and architectures (PEFT like LoRA/QLoRA, MoE architectures/kernels/parallelism)\n\n## Course Resources\n\n- Course Website: <https://www.cs.cmu.edu/~zhihaoj2/15-779/>\n- Schedule (slides and reading list per lecture): <https://www.cs.cmu.edu/~zhihaoj2/15-779/schedule.html>\n- Slides (PDF): <https://www.cs.cmu.edu/~zhihaoj2/15-779/slides/>\n- Logistics (grading, paper reviews, course project): <https://www.cs.cmu.edu/~zhihaoj2/15-779/logistics.html>\n- Materials (intro deep learning materials): <https://www.cs.cmu.edu/~zhihaoj2/15-779/materials.html>\n\n"
  },
  {
    "path": "docs/深度生成模型/大语言模型/CMU15-779.md",
    "content": "# CMU 15-779: Advanced Topics in Machine Learning Systems (LLM Edition)\n\n## 课程简介\n\n- 所属大学：Carnegie Mellon University\n- 先修要求：无硬性先修要求；建议具备机器学习入门与深度学习训练经验，熟悉 PyTorch；了解 CUDA/GPU 基础会显著提升学习效率\n- 编程语言：Python（系统与算子层面内容可能涉及 CUDA/硬件概念）\n- 课程难度：4/5\n- 预计学时：80-120 学时\n\n这门课从系统视角系统性回答一个核心问题：一个用高层框架（例如 PyTorch）写出来的模型，是如何被分解为底层 kernel，并在异构硬件加速器（GPU/TPU）与分布式环境中高效执行的。课程覆盖 GPU 编程、ML 编译器、图级优化、分布式训练与自动并行化、LLM Serving 与推理加速等主题，强系统导向，适合希望把“框架层经验”向“算子/编译/硬件/集群执行”打通的人。\n\n从教学组织上，这门课会要求你持续完成课前论文阅读（paper review / reading assignments），并以小组形式完成期末系统类课程项目（proposal、presentation、report），因此自学时建议把它当成一个“按周推进的系统训练营”，而不是只看几份 slide。\n\n## 课程内容\n\n课程内容以 lecture 为主线，主题大致包括：\n\n1. ML 系统基础：以 TensorFlow/PyTorch 为例理解计算图、执行模型与系统抽象\n2. GPU 架构与 CUDA 编程：硬件与编程模型、内存与性能优化要点\n3. Transformer 与 Attention 案例：FlashAttention 等 IO-aware attention 优化思路\n4. 高级 CUDA 编程：warp specialization、mega kernel 等低延迟/高吞吐优化技术\n5. ML 编译：Tile-based DSL（Triton 等）、内核自动调优（Ansor 等）、图级优化（TASO/PET 等）、超优化（Mirage）\n6. 并行化与分布式训练：ZeRO/FSDP、模型/流水线并行、自动并行化（Alpa 等）\n7. LLM 推理与服务：批处理、PagedAttention、RadixAttention、推测解码等\n8. 后训练与模型结构：参数高效微调（LoRA/QLoRA）、MoE（架构、kernel、并行化）\n\n## 课程资源\n\n- 课程网站：<https://www.cs.cmu.edu/~zhihaoj2/15-779/>\n- 课程安排（含每讲 slide 与阅读列表）：<https://www.cs.cmu.edu/~zhihaoj2/15-779/schedule.html>\n- 课程讲义（PDF slides）：<https://www.cs.cmu.edu/~zhihaoj2/15-779/slides/>\n- 课程规则与项目要求（Grading、Paper Review、Course Project）：<https://www.cs.cmu.edu/~zhihaoj2/15-779/logistics.html>\n- 预备材料（深度学习入门材料汇总）：<https://www.cs.cmu.edu/~zhihaoj2/15-779/materials.html>\n\n"
  },
  {
    "path": "docs/电子基础/EE16.en.md",
    "content": "# UCB EE16A&B: Designing Information Devices and Systems I&II\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: None\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟\n- Class Hour: 150 hours\n\nThis 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.\n\n## Course Resources\n\n- Course Website: [EE16A](https://inst.eecs.berkeley.edu/~ee16a/su20/), [EE16B](https://eecs16b.org/)\n- Recordings: [EE16A](https://www.youtube.com/playlist?list=PL6nn4B7IPh8YwpxeJqCoNJ7wh0jme6WNr), [EE16B](https://www.youtube.com/playlist?list=PLfSttCKflps1UrUS1ZaV9KQJkoPFzdZAk)\n- Textbooks: [EE16A](https://inst.eecs.berkeley.edu/~ee16a/sp22/#notes), [EE16B](https://eecs16b.org/#notes)\n- Assignments: [EE16A](https://inst.eecs.berkeley.edu/~ee16a/sp22/hw-practice.html), [EE16B](https://eecs16b.org/hw-practice/?)\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/EE16A - GitHub](https://github.com/PKUFlyingPig/EE16A).\n"
  },
  {
    "path": "docs/电子基础/EE16.md",
    "content": "# UCB EE16A&B: Designing Information Devices and Systems I&II\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：无\n- 编程语言：Python\n- 课程难度：🌟🌟🌟\n- 预计学时：150 小时\n\nUC Berkeley 电子系学生的大一入门课，通过电路基础知识的讲授，配合各类动手实操的 lab，让学生体验通过电路从环境中收集信息并进行分析，作出预测和反馈。由于疫情的缘故，所有 lab 都有远程在线版，非常适合大家在家自学。\n\n## 课程资源\n\n- 课程网站：[EE16A](https://inst.eecs.berkeley.edu/~ee16a/su20/), [EE16B](https://eecs16b.org/)\n- 课程视频：B 站搜索\n- 课程教材：参见课程 notes\n- 课程作业：参见课程主页\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/EE16A - GitHub](https://github.com/PKUFlyingPig/EE16A) 中。\n"
  },
  {
    "path": "docs/电子基础/Signals_and_Systems_AVO.en.md",
    "content": "# MIT 6.007 Signals and Systems\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Calculus, Linear Algebra\n- Programming Languages: Matlab Preferred\n- Difficulty: 🌟🌟\n- Class Hour: 50-70 hours\n\nThe name of the instructor: Prof. Alan V. Oppenheim\n\nOkay, enough reason to take this class.\n\n## Course Resources\n\n- Course Website: <https://ocw.mit.edu/resources/res-6-007-signals-and-systems-spring-2011/index.htm>\n- Recordings: <https://www.bilibili.com/video/BV1CZ4y1j7hs>\n- Textbooks: Signals and Systems, 2nd Edition\n- Assignments: <https://ocw.mit.edu/resources/res-6-007-signals-and-systems-spring-2011/assignments>\n"
  },
  {
    "path": "docs/电子基础/Signals_and_Systems_AVO.md",
    "content": "# MIT 6.007 Signals and Systems\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：Calculus, Linear Algebra\n- 编程语言：Matlab Preferred\n- 课程难度：🌟🌟\n- 预计学时：50-70 小时\n\n看到课程老师的名字：Prof. Alan V. Oppenheim\n\n好的，上这门课的理由已经足够了。\n\n## 课程资源\n\n- 课程网站：<https://ocw.mit.edu/resources/res-6-007-signals-and-systems-spring-2011/index.htm>\n- 课程视频：<https://www.bilibili.com/video/BV1CZ4y1j7hs>\n- 课程教材：Signals and Systems, 2nd Edition\n- 课程作业：<https://ocw.mit.edu/resources/res-6-007-signals-and-systems-spring-2011/assignments>\n"
  },
  {
    "path": "docs/电子基础/signal.en.md",
    "content": "# UCB EE120: Signal and Systems\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS70, Calculus, Linear Algebra\n- Programming Languages: Python\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nThe 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.\n\n## Course Resources\n\n- Course Website: <https://inst.eecs.berkeley.edu/~ee120/fa19/>\n- Recordings: refer to the course website\n- Assignments: refer to the course website\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/UCB-EE120 - GitHub](https://github.com/PKUFlyingPig/UCB-EE120)\n"
  },
  {
    "path": "docs/电子基础/signal.md",
    "content": "# UCB EE120: Signal and Systems\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS61A, CS70，微积分，线性代数\n- 编程语言：Python\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：100 小时\n\n这门课最精华的部分就是 6 个超有趣的编程作业了，会让你用 Python 通过学习到的信号与系统的理论知识，解决各类实际问题。例如 lab3 会让你实现 FFT 算法，并和 Numpy 的官方实现进行性能对比；lab4 会通过分析手指头的影像数据推断心率；lab5 就更牛了，会让你给哈勃望远镜拍到的照片进行降噪处理，恢复绚烂清晰的星空；lab6 会让你构造一个反馈系统，平衡小车上的细杆。\n\n## 课程资源\n\n- 课程网站：<https://inst.eecs.berkeley.edu/~ee120/fa19/>\n- 课程教材：参见课程 notes\n- 课程作业：5 个书面作业 + 6 个编程作业\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-EE120 - GitHub](https://github.com/PKUFlyingPig/UCB-EE120) 中。\n"
  },
  {
    "path": "docs/系统安全/CS161.en.md",
    "content": "# UCB CS161: Computer Security\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: CS61A, CS61B, CS61C\n- Programming Languages: C, Go\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 150 Hours\n\nComputer Security course from UC Berkeley, devided into 5 parts:\n\n- Security principles: how to design a secure system\n- Memory safety: buffer overflow attack\n- Cryptography: symmetric encryption, asymmetric encryption, MAC, digital signature .........\n- Web: SQL-injection, XSS, XSRF .......\n- Networking: attacks for each layer\n\nThe 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.\n\nIn 2020 summer semester, the lecture recordings are posted publicly, which can be found in the links below.\n\n## Course Resources\n\n- Course Website: <https://su20.cs161.org/>\n- Recordings: refer to the course website\n- Textbooks: <https://textbook.cs161.org/>\n- Assignments: 7 online HWs + 3 Labs + 3 Projects\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/UCB-CS161 - GitHub](https://github.com/PKUFlyingPig/UCB-CS161).\n"
  },
  {
    "path": "docs/系统安全/CS161.md",
    "content": "# UCB CS161: Computer Security\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：CS61A, CS61B, CS61C\n- 编程语言：C, Go\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\n伯克利的计算机系统安全课程，课程内容分为5个部分：\n\n- Security principles: how to design a secure system\n- Memory safety: buffer overflow attack\n- Cryptography: symmetric encryption, asymmetric encryption, MAC, digital signature .........\n- Web: SQL-injection, XSS, XSRF .......\n- Networking: attacks for each layer\n\n这门课让我印象最为深刻的部分是 Project2，让你用 Go 语言设计和实现一个安全的文件分享系统。我花了整整三天才完成了这个非常虐的 Project，总代码量超过 3k 行。这样密集型的开发过程，能极大地锻炼你设计和实现一个安全系统的能力。\n\n2020 年夏季学期的版本开源了课程录影，大家可以在下面的课程网站链接里找到。\n\n## 课程资源\n\n- 课程网站：<https://su20.cs161.org/>\n- 课程视频：参见课程网站\n- 课程教材：<https://textbook.cs161.org/>\n- 课程作业：7 个在线 HW + 3 个 Lab + 3 个 Project\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-CS161 - GitHub](https://github.com/PKUFlyingPig/UCB-CS161) 中。\n"
  },
  {
    "path": "docs/系统安全/CSE365.en.md",
    "content": "# ASU CSE365: Introduction to Cybersecurity\n\n## Descriptions\n\n- Offered by: Arizona State University\n- Prerequisites: None\n- Programming Languages: C, Python, x86 assembly\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: Varying from person to person\n\nAn introductory course on web security at Arizona State University, the course contains several modules, mainly including:\n\n- Program Misuse: Linux commandline, privilege escalation\n- Web fundamentals: http, server, intercept\n- Assembly: registers, memory, control flow\n- Cryptography: Symmetric/Asymmetric encryption, hashing, trust\n- Web security: Command/HTML/SQL/Stack injection\n\nThe 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.\n\nFor 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.\n\n## Course Resources\n\n- Course Website: <https://pwn.college/cse365-s2025/>\n- Recordings: See course website\n- Textbooks: None\n- Assignments: 8 modules (444 challenges)\n\n## Personal Resources\n\n- Lectures on YouTube: <https://youtube.com/pwncollege>\n- Live Broadcasts on Twitch: <https://twitch.tv/pwncollege>\n- Chat on Discord: <https://discord.com/channels/750635557666816031/1328463339528913058>\n- Open Source on GitHub: <https://github.com/pwncollege>\n- Contact us via Email: <cse365@pwn.college>\n\nIn 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.\n"
  },
  {
    "path": "docs/系统安全/CSE365.md",
    "content": "# ASU CSE365: Introduction to Cybersecurity\n\n## 课程简介\n\n- 所属大学：Arizona State University\n- 先修要求：无\n- 编程语言：C, Python, x86 assembly\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：因人而异\n\n亚利桑那州立大学 Web 安全的导论课，课程以模块化的形式构成，主要包含以下方面：\n\n- Program Misuse: Linux commandline, privilege escalation\n- Web fundamentals: http, server, intercept\n- Assembly: registers, memory, control flow\n- Cryptography: Symmetric/Asymmetric encryption, hashing, trust\n- Web security: Command/HTML/SQL/Stack injection\n\n课程以 Challenge 为主，Lectures and Reading 为辅。Challenge 中的习题以 CTF 的形式展开，难度依次递增。\n\n对于基础较弱的学习者，卡关是正常现象。如果在解题过程中遇到困难，可以在首页 Chat 栏目中给出的 Discord Server 寻求帮助。\n\n## 课程资源\n\n- 课程网站：<https://pwn.college/cse365-s2025/>\n- 课程视频：参见课程网站\n- 课程教材：无\n- 课程作业：8 个模块（444 个 challenges）\n\n## 资源汇总\n\n- Lectures on YouTube: <https://youtube.com/pwncollege>\n- Live Broadcasts on Twitch: <https://twitch.tv/pwncollege>\n- Chat on Discord: <https://discord.com/channels/750635557666816031/1328463339528913058>\n- Open Source on GitHub: <https://github.com/pwncollege>\n- Contact us via Email: <cse365@pwn.college>\n\n另外，出于评定 ASU 学生课程成绩的重要因素，官方不鼓励上传解题思路，每个模块的前两题除外。\n"
  },
  {
    "path": "docs/系统安全/CSE466.en.md",
    "content": "# ASU CSE466: Computer Systems Security\n\n## Descriptions\n\n- Offered by: Arizona State University\n- Prerequisites: None\n- Programming Languages: C, Python, x86 assembly\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: Varying from person to person\n\nA hard-core course on system security at Arizona State University, the course contains several modules, mainly including:\n\n- Linux commandline: Program misuse, program interaction\n- Shellcoding: Assembly, shellcode injection, prevention\n- Reverse Engineering: Function frame, static/dynamic reversing tools\n- Program Exploitation: Hijacking to shellcode, JIT spray\n- System Exploitation: Kernel modules, privilege escalation\n- Miscellaneous: Sandboxing, Memory Errors, Race conditions\n\nLike CSE365, the course is also based on challenges, supplemented by lectures and reading materials. The challenges are developed in the form of CTF, and the difficulty increases in order.\n\nThe quality of the exercises is excellent, but some modules are quite difficult, especially the parts involving the kernel. Sometimes you'll spend a whole day struggling at one challenge with no progress. If you encounter difficulties in solving the problem, you can seek help from the Discord Server given in the Chat column on the homepage.\n\n## Course Resources\n\n- Course Website: <https://dojo.pwn.college/cse466/>\n- Recordings: See course website\n- Textbooks: None\n- Assignments: 13 modules (358 challenges)\n\n## Personal Resources\n\n- Lectures on YouTube: <https://youtube.com/pwncollege>\n- Live Broadcasts on Twitch: <https://twitch.tv/pwncollege>\n- Chat on Discord: <https://pwn.college/discord>\n- Open Source on GitHub: <https://github.com/pwncollege>\n- Contact us via Email: <pwn-college@asu.edu>\n\nIn 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 and challenge 16 in the reversing module.\n"
  },
  {
    "path": "docs/系统安全/CSE466.md",
    "content": "# ASU CSE466: Computer Systems Security\n\n## 课程简介\n\n- 所属大学：Arizona State University\n- 先修要求：无\n- 编程语言：C, Python, x86 assembly\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：因人而异\n\n亚利桑那州立大学系统安全的核心课，课程以模块化的形式构成，主要包含以下方面：\n\n- Linux commandline: Program misuse, program interaction\n- Shellcoding: Assembly, shellcode injection, prevention\n- Reverse Engineering: Function frame, static/dynamic reversing tools\n- Program Exploitation: Hijacking to shellcode, JIT spray\n- System Exploitation: Kernel modules, privilege escalation\n- Miscellaneous: Sandboxing, Memory Errors, Race conditions\n\n与 CSE365 相同，课程以 Challenge 为主，Lectures and Reading 为辅。Challenge 中的习题以 CTF 的形式展开，难度依次递增。\n\n习题质量挺高的，但某些模块难度较大，尤其是涉及到内核的部分，有的时候一天都写不出一道题。如果在解题过程中遇到困难，可以在首页 Chat 栏目中给出的 Discord Server 寻求帮助。\n\n## 课程资源\n\n- 课程网站：<https://dojo.pwn.college/cse466/>\n- 课程视频：参见课程网站\n- 课程教材：无\n- 课程作业：13 个模块（358 个 challenge）\n\n## 资源汇总\n\n- Lectures on YouTube: <https://youtube.com/pwncollege>\n- Live Broadcasts on Twitch: <https://twitch.tv/pwncollege>\n- Chat on Discord: <https://pwn.college/discord>\n- Open Source on GitHub: <https://github.com/pwncollege>\n- Contact us via Email: <pwn-college@asu.edu>\n\n另外，出于评定 ASU 学生课程成绩的重要因素，官方不鼓励上传解题思路，每个模块的前两题与逆向部分的 16 题除外。\n"
  },
  {
    "path": "docs/系统安全/MIT6.1600.en.md",
    "content": "# MIT6.1600: Foundations of Computer Security\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: discrete mathematics, basic programming, basic knowledge of computer systems\n- Programming Languages: Python3\n- Difficulty: 🌟🌟🌟\n- Class Hour: 50 hours\n\nMIT6.1600 is the undergraduate course on computer system security at MIT. The course is divided into five modules: authentication, transport security, platform security, software security, and human/end-user security. The organization of the course is quite clear: the authentication module focuses on authentication security, that is, how to prove that the \"you\" in the computer world is indeed \"you\". It then moves to the topic on communication security, such as data encryption and decryption, key exchange, etc. However, transport is only one aspect; the code ultimately needs to run on a device, which involves the security of the platform on which the code runs and even the software code itself. The course will also cover some content about privacy security, discussing group information security from a sociological perspective. \n\nAfter completing this course, you will master many important fundamental concepts of computer security, such as public and private key encryption algorithms, hash algorithms, digital signatures, key exchange algorithms, and more. Besides the mathematics and theorem proofs, the course also uses the theoretical knowledge to explain many real-world security vulnerabilities, giving you a more concrete understanding of these security concepts. Additionally, there are six interesting labs that allow you to exploit many vulnerabilities through programming, deepening your understanding of the knowledge in practice, which I personally find quite interesting.\n\n## Course Resources\n\n- Course Website: [fall23](https://61600.csail.mit.edu/2023/), [fall22](https://61600.csail.mit.edu/2022/)\n- Recordings: Refer to the course website.\n- Textbooks: There is no required textbook, but the lecture notes are good reading materials.\n- Assignments: 6 labs in total.\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/MIT6.1600 - GitHub](https://github.com/PKUFlyingPig/MIT6.1600).\n"
  },
  {
    "path": "docs/系统安全/MIT6.1600.md",
    "content": "# MIT6.1600: Foundations of Computer Security\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：离散数学，编程基础，计算机系统基础\n- 编程语言：Python3\n- 课程难度：🌟🌟🌟\n- 预计学时：50小时\n\nMIT 的计算机系统安全本科生课程，共分为 authentication, transport security, platform security, software security, 和 human/end-user security 五个模块。课程组织还是相当清晰的：authentication 关注于认证安全，即如何证明计算机世界的“你”确实是“你”。接着讲解大家了解较多的通信安全，例如数据传输的加密解密，密钥的交换等。但传输是一方面，代码最终需要在终端上执行，这就涉及到运行代码的平台本身甚至软件代码本身的安全性。最后课程还会讲一些关于隐私安全的内容，上升到社会学的范畴去讨论群体信息安全。学完该课程，你将会掌握计算机安全的很多重要基本概念，例如公钥私钥加密算法、哈希算法、电子签名、密钥交换算法等等。除了稍显复杂枯燥的数学和定理证明外，课程中还会结合具体知识点讲解很多现实发生的安全漏洞，让你对这些安全概念有更感性的认识。此外，还有6个课程实验让你通过编程实现很多漏洞的利用，在实际中加深对知识的理解，个人感觉还是很有意思的。\n\n## 课程资源\n\n- 课程网站：[fall23](https://61600.csail.mit.edu/2023/), [fall22](https://61600.csail.mit.edu/2022/)\n- 课程视频：参见课程网站\n- 课程教材：没有指定教材，每节课有 notes\n- 课程作业：一共6个实验，难度适中\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.1600 - GitHub](https://github.com/PKUFlyingPig/MIT6.1600) 中。"
  },
  {
    "path": "docs/系统安全/MIT6.858.en.md",
    "content": "# MIT 6.858: Computer System Security\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: Computer Architecture, basic knowledge about programming and computer system\n- Programming Languages: C, Python\n- Difficulty:🌟🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nThis is MIT's Computer Systems Security course. Lectures cover threat models, attacks that compromise security, and techniques for achieving security, based on recent research papers. Topics include operating system (OS) security, capabilities, information flow control, language security, network protocols, hardware security, and security in web applications.\n\nAssignments include labs that involve implementing and compromising a secure web server and web application, and a group final project:\n\n- Lab 1: you will explore the zoobar web application, and use buffer overflow attacks to break its security properties.\n- 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.\n- 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.\n- Lab 4: you will improve the zoobar application against browser attacks.\n\nI mainly did Lab 3 in this course. Lab 3 requires you to traverse all the branches of a program by concolic execution, and it is not difficult to do once you understand the idea of symbolic execution. This Lab visually demonstrates the use of symbolic execution.\n\nIn the Final Project, you will build a remote file system, [SecFS](https://www.usenix.org/legacy/event/osdi04/tech/full_papers/li_j/li_j.pdf), that provides both confidentiality and integrity in the face of a completely untrusted server. Reference Papers: [SUNDR](https://www.usenix.org/legacy/event/osdi04/tech/full_papers/li_j/li_j.pdf)\n\n## Resources\n\n- Course Website: <http://css.csail.mit.edu/6.858/2022/>\n- Assignments: refer to the course website.\n- Textbook: None\n- Assignments:  4 Labs + Final Project / Lab5\n"
  },
  {
    "path": "docs/系统安全/MIT6.858.md",
    "content": "# MIT 6.858: Computer System Security\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：计算机体系结构，对计算机系统有初步了解\n- 编程语言：C, Python\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\nMIT 的计算机系统安全课程，实验环境是一个 Web Application Zoobar。学生学习攻防技术并应用于该 Web Application。\n\n- Lab 1: you will explore the zoobar web application, and use buffer overflow attacks to break its security properties.\n- 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.\n- 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.\n- Lab 4: you will improve the zoobar application against browser attacks.\n\n这个课我主要是做了 Lab 3。Lab 3 是通过混合符号执行来遍历程序的所有分支，理解了符号执行的思想后 Lab 并不难做。这个 Lab 直观展示符号执行这种技术的使用方法。\n\n这个课的 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)。\n\n## 课程资源\n\n- 课程网站：<http://css.csail.mit.edu/6.858/2022/>\n- 课程视频：参见课程网站\n- 课程教材：无\n- 课程作业：4 个 Lab + Final Project / Lab5\n"
  },
  {
    "path": "docs/系统安全/SEEDLabs.en.md",
    "content": "# SEEDLabs\n\n## Descriptions\n\n- Offered by: Syracuse University\n- Prerequisites: None\n- Programming Languages: C, x86 assembly\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 150 Hours\n\nSyracuse University's cybersecurity course, supported by a $1.3 million grant from the NSF, has developed hands-on practical lab exercises known as SEED Labs. This course emphasizes both theoretical instruction and practical hands-on experience, providing detailed open-source lecture materials, video tutorials, textbooks printed in multiple languages, and ready-to-use attack and defense environments based on virtual machines and Docker. Currently, 1,050 research institutions worldwide are using this project.\n\nIt covers a wide range of topics in the field of computer and information security, including software security, network security, web security, operating system security, and mobile application security.\n\n## Course Resources\n\n- Course Website: <https://seedsecuritylabs.org/index.html>\n- Recordings: <https://www.handsonsecurity.net/video.html>\n- Textbooks: <https://www.handsonsecurity.net/index.html>\n- Assignments: There are more than 40 labs in this course, the lab environment can be built with customized virtual machines and docker provided by the course in [quickly set up](https://seedsecuritylabs.org/labsetup.html) , and detailed principle explanations and experimental guidance are also provided. Take [Buffer Overflow Experiment](https://seedsecuritylabs.org/Labs_20.04/Software/Buffer_Overflow_Setuid/) as an example. This experiment belongs to [Software Security Topic](https://seedsecuritylabs.org/Labs_20.04/Software /), here is its [Experimental Guide](https://seedsecuritylabs.org/Labs_20.04/Files/Buffer_Overflow_Setuid/Buffer_Overflow_Setuid.pdf), here is its corresponding [Textbook Content](https://www.handsonsecurity .net/files/chapters/buffer_overflow_c.pdf)\n\n## Personal Resources\n\nAll resources and assignment implementations used by @LaPhilosophie in learning this course are maintained in [LaPhilosophie/seedlab - GitHub](https://github.com/LaPhilosophie/seedlab). "
  },
  {
    "path": "docs/系统安全/SEEDLabs.md",
    "content": "# SEEDLabs\n\n## 课程简介\n\n- 所属大学：雪城大学\n- 先修要求：无\n- 编程语言：C，汇编\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：150 小时\n\n雪城大学的网安课程，由 NSF 提供130万美元的资金支持，为网安教育开发了动手实践性的实验练习（称为 SEED Lab）。课程理论教学和动手实践并重，包含详细的 [开源讲义](https://github.com/seed-labs/seed-labs) 、视频教程、教科书（被印刷为多种语言）、开箱即用的基于虚拟机和 docker 的攻防环境等。目前全球有1050家研究机构在使用该项目。\n\n涵盖计算机和信息安全领域的广泛主题，包括软件安全、网络安全、Web 安全、操作系统安全和移动应用安全。\n\n## 课程资源\n\n- 课程网站：<https://seedsecuritylabs.org/index.html>\n- 课程视频：<https://www.handsonsecurity.net/video.html>\n- 课程教材：<https://www.handsonsecurity.net/index.html>\n- 课程作业：四十多个安全领域的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)  \n\n## 资源汇总\n\n@LaPhilosophie 在学习这门课中用到的所有资源和作业实现都汇总在  [LaPhilosophie/seedlab - GitHub](https://github.com/LaPhilosophie/seedlab) 中。\n\n"
  },
  {
    "path": "docs/编程入门/C/CS50.en.md",
    "content": "# CS50: This is CS50x\n\n## Descriptions\n\n- Offered by: Harvard\n- Prerequisites: None\n- Programming Languages: C, Python, SQL, HTML, CSS, JavaScript\n- Difficulty: 🌟🌟\n- Class Hour: 20 hours\n\nThis 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.\n\n## Course Resources\n\n- 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/)\n- 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/)\n- 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/)\n\n## Personal Resources\n\nAll the resources and assignments used by @mancuoj in this course are maintained in [mancuoj/CS50x - GitHub](https://github.com/mancuoj/CS50x).\n"
  },
  {
    "path": "docs/编程入门/C/CS50.md",
    "content": "# CS50: This is CS50x\n\n## 课程简介\n\n- 所属大学：Harvard\n- 先修要求：无\n- 编程语言：C, Python, SQL, HTML, CSS, JavaScript\n- 课程难度：🌟🌟\n- 预计学时：20 小时\n\n连续多年被哈佛大学学生评为最受欢迎的公选课程。Malan 教授上课非常有激情，撕黄页讲二分法的场面让人记忆犹新（笑）。但因为它的入门以及全校公选的属性，课程内容难度比较温和，但是课程作业质量非常高而且全部免费开源，非常适合小白入门，或者大佬休闲。\n\n## 课程资源\n\n- 课程网站：[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/)\n- 课程视频：原版参考课程网站，也可以在 B 站找到[中文字幕版](https://www.bilibili.com/video/BV1HW4y1A7Yi/?spm_id_from=333.999.0.0&vd_source=a4d76d1247665a7e7bec15d15fd12349)。\n- 课程教材：无\n- 课程作业：参考课程网站。\n\n## 资源汇总\n\n@mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 [mancuoj/CS50x - GitHub](https://github.com/mancuoj/CS50x) 中。\n\n@figuretu 将有价值的提问讨论以及相关学习资源整理在共享文档 [CS50 - 资源总目录](https://uufyjevghz.feishu.cn/docx/DP78d2U5TosTOTx9QCbcjp8GnBh) 中。\n"
  },
  {
    "path": "docs/编程入门/C/Duke-Coursera-Intro-C.en.md",
    "content": "# Introductory C Programming Specialization\n\n## Descriptions\n\n- Offered by: Duke\n- Prerequisites: None\n- Programming Languages: C\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 110 hours\n\nThis is an excellent course which I benefited a lot from.\n\n- The course teaches fundamental concepts such as frame, stack memory, heap memory, etc.\n- There are great programming assignments to deepen and reinforce your understanding of the hardest part in C, like pointers.\n- The course provides excellent practice in GDB, Valgrind, and the assignments will cover some basic Git exercises.\n- 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.\n- It may require payment, but I think it's worth it.\n- Although this is an introductory course, it has both breadth and depth.\n\n## Course Resources\n\n- Course Website: <https://www.coursera.org/specializations/c-programming>\n- Recordings: refer to the course website\n- Textbook: refer to the course website\n- Assignments: refer to the course website\n\n## Personal Resources\n\nAll 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.\n"
  },
  {
    "path": "docs/编程入门/C/Duke-Coursera-Intro-C.md",
    "content": "# Introductory C Programming Specialization\n\n## 课程简介\n\n- 所属大学：Duke\n- 先修要求：无\n- 编程语言：C\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：110 小时\n\n非常好的课程，自我感觉收益非常大：\n\n- 侧重基础和基本概念：如 frame、stack memory、heap memory 等讲得很透。\n- 针对C最难掌握的指针，有好的练习和编程来加深和强化理解。\n- 非常好的 GDB，Valgrind 上手训练，作业也会涉及一些基本的 Git 练习。\n- 老师建议作业用 Emacs，所以对 Emacs 小白来说，是个不错的入门。如果你会用 Vim ，我建议你用 Evil 插件。这样你不会丢掉 Vim 的编辑功能，同时可以体会 Emacs 的强大。工具箱里同时有 Emacs 和 Vim 时，效率会有不少提高。Emacs 的 org-mode，和 GDB 的顺滑整合，等等等等，都会让你如虎添翼。\n- 虽然可能需要付费，但我觉得值。\n- 虽说课名是入门，但兼具广度和深度。\n\n## 课程资源\n\n- 课程网站：<https://www.coursera.org/specializations/c-programming>\n- 课程视频：同上\n- 课程教材：同上\n- 课程作业：同上\n\n## 资源汇总\n\n@haidongji 在学习这门课中的作业实现都汇总在 [Duke Coursera Intro C](https://code.haidongji.com/Duke_Coursera_Intro_C/) 中。因为时间关系，我最后一课最后一周的几个作业到目前还没有完成。\n"
  },
  {
    "path": "docs/编程入门/DeCal.en.md",
    "content": "# UCB: Sysadmin DeCal\n\n## Course Introduction\n\n- Offered by: UCB\n- Prerequisites: None\n- Programming Language: Shell\n- Difficulty: 🌟🌟🌟\n- Class Hour: 20 hours\n\nThis is an introductory course on Linux from UCB, which I find more systematic and clearer than MIT's similarly aimed open course, Missing Semester. This is the main reason I recommend it. While Missing Semester seems more like a course for filling gaps for students who have started programming but haven't systematically used these tools, DeCal is more suitable for absolute beginners. The twelve-week course covers Linux basics, shell programming (including tmux and vim), package management, services, basic computer networks, network services, security (key management), Git, Docker, Kubernetes, Puppet, and CUDA. It's ideal for newcomers to understand and get started with the Linux environment.\n\nA slight drawback is that some course assignments require operations on remote servers, like exercises on ssh, which need UCB internal account access. However, most assignments can be practiced by setting up a virtual machine and using tools like Xshell or directly using a Linux desktop version. After completing the full course and assignments, you should have a basic understanding of Linux.\n\nTo compensate for the inability to use remote servers and to familiarize with the Linux command line, I recommend [bandit](https://overthewire.org/wargames/bandit/). Bandit is a Wargame from OverTheWire, providing a free practice range for CTF enthusiasts. The first 15 levels of bandit are basic Linux operations without any CTF knowledge. These exercises perfectly supplement the parts of DeCal that are inaccessible to external students (mainly remote connections, file permissions, etc.).\n\n## Course Resources\n\n- Course Website: [Official Site](https://decal.ocf.berkeley.edu/)\n- Course Videos: Available on the official course website, [Bilibili](https://www.bilibili.com/video/BV1rs4y1T7zJ/?share_source=copy_web) has an incomplete translation that only includes the first part.\n- Course Textbook: No specified textbook, but each week's labs contain enough reading material for in-depth study.\n- Course Assignments: Available on the official course website."
  },
  {
    "path": "docs/编程入门/DeCal.md",
    "content": "# UCB: Sysadmin DeCal\n\n## 课程简介\n\n- 所属大学：UCB\n- 先修要求：无\n- 编程语言：shell\n- 课程难度：🌟🌟🌟\n- 预计学时：20小时\n\n来自 UCB 的一门讲解 Linux 的入门课程，比起定位相同的 MIT 的公开课 Missing Semester，Decal 讲解得更加系统、也更加清晰，这也是我推荐它的主要原因。比起 Missing Semester 更像是给已经开始编程但没有系统使用过这些工具的学生的查缺补漏，DeCal 更像是面向零基础的同学的课程。一共十二周的课程内容，包括 Linux 基础、shell 编程（还有tmux 、vim）、包管理、服务(Services)、基础计算机网络、网络服务、安全(密钥管理)、Git、Docker、Kubernetes、Puppet 和 CUDA。 十分适合新手了解和入门 Linux 环境相关内容。\n\n美中不足的是部分课程作业需要在远程服务器操作，比如关于 ssh 的练习，需要 UCB 内部账号访问。但是大部分作业可以通过自己搭建的虚拟机 + 使用 Xshell 等工具或者直接使用 Linux 桌面版来操作练习，在听完完整课程和做完作业后，相信已经对 Linux 有最基本的了解了。\n\n为弥补无法使用远程服务器的不足以及熟悉 linux 命令行的需求，在此推荐 [bandit](https://overthewire.org/wargames/bandit/) 。bandit 是一款来自OverTheWire 网站的 Wargame，为 CTF 爱好者提供免费的练习靶场。bandit 的前 15 个 level 都是基础的 linux 操作而不涉及任何 CTF 知识。这些练习也正好弥补了 DeCal 外校无法访问的部分（主要是远程链接、文件权限）等内容。\n\n## 课程资源\n\n- 课程网站：[官网](https://decal.ocf.berkeley.edu/)\n- 课程视频：原版视频见课程官网，[B站](https://space.bilibili.com/483435468/video)也有搬运。\n- 课程教材：无指定教材，但每一周的 labs 之中都有足够的阅读材料供你深入细节。\n- 课程作业：见课程官网\n\n"
  },
  {
    "path": "docs/编程入门/Functional/CS3110.en.md",
    "content": "# CS3110：OCaml Programming Correct + Efficient + Beautiful\n\n## Descriptions\n\n- Offered by: Cornell University\n- Prerequisites: basic knowledge about imperative programming，such as C, Python, Java\n- Programming Languages: OCaml\n- Difficulty: 🌟🌟🌟\n- Class Hour: 40 hours\n\n### Evaluation for course: Modern SICP\n\nIf the best course for getting started with programming is SICP, then following it is CS3110.\n\nIf you are unfamiliar with what a functional programming language is, or have only heard the term, then this course, just like its name, will allow you to experience what is meant by correctness, efficiency, and elegance.\n\nCS3110 is not only limited to functional programming, but it also combines theory and practical applications extensively. The course content goes further, covering OCaml language fundamentals, data structures and algorithms, test development, formal proofs, language feature implementation, and many more topics. Moreover, these contents are not isolated; instead, they are progressive and complementary, making it highly worth studying.\n\nThe main instructor, Michael Ryan Clarkson, with years of immersion in programming, employs simple language, clear explanations, and dissects the content with precision. The course videos are even useful for improving listening skills, and understanding is effortless with the aid of English subtitles.\n\n### A Brief History of CS 3110\n\nCS3110 is a course meticulously crafted by Cornell University over more than 20 years. Initially inspired by MIT6.001 SICP, it has been enriched with stricter methodologies and materials, encompassing functional programming, environment modeling, data structures, algorithms, and language implementation. In 2008, its formal title changed to CS3110, transitioning to the OCaml language. In the fall of 2018, the process of writing the [course textbook](https://cs3110.github.io/textbook) began. The current course instructor announced [course videos](https://www.youtube.com/playlist?list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU) on YouTube in 2021.\n\n## Course Resources\n\n- Recordings on youtube: <https://www.youtube.com/playlist?list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU>\n- Recordings on Bilibili: <https://www.bilibili.com/video/BV1dv4y127Ui/>\n- Textbook：<https://cs3110.github.io/textbook>\n- Assignments：In the textbook, exercises are optional, with difficulty ranging from 1 to 4 stars, noting that the difficulty between 3-star and 4-star exercises varies significantly.\n\n## Personal Resources\n\nAll the resources and assignments used by @featherwit001 in this course are maintained in[featherwit001/CS3110_OCaml_Programming - GitHub](https://github.com/featherwit001/CS3110_OCaml_Programming)\n"
  },
  {
    "path": "docs/编程入门/Functional/CS3110.md",
    "content": "# CS3110：OCaml Programming Correct + Efficient + Beautiful\n\n## 课程简介\n\n- 所属大学：Cornell\n- 先修要求：了解一门命令式编程语言，类C语言\n- 编程语言：OCaml\n- 课程难度：🌟🌟🌟\n- 预计学时：40 小时\n\n### 课程评价： modern SICP\n\n如果说编程入门的最好的课程是 SICP。在其之后，就是 CS3110。\n\n如果你不知道什么叫函数式编程语言，或者只是听过这个名词，那么这门课程，正如它的名字，会让你体会到什么叫正确，高效和美。\n\nCS3110 不仅局限于函数式编程，更是将理论和实用充分结合。课程内容更进一步，涵盖了 OCaml 语言基础，数据结构和算法，测试开发，形式证明，语言特性实现等诸多内容。而且内容之间并不割裂，而是递进和互补，非常值得学习。\n\n主讲老师 Michael Ryan Clarkson，浸淫编程多年，用词简单，表述清晰，内容环环相扣，剖析一针见血。课程视频甚至用来练听力，听不懂开英文字幕理解起来毫不费力。\n\n### 课程简史，摘自课程教材\n\nCS3110 是康奈尔大学打磨 20 余年的课程。最初发源于 MIT6.001 SICP，在其基础上增加更严格方法和材料，涵盖函数式编程，环境模型，数据结构，算法和语言实现。2008 年，正式名称改为 CS3110，改用 OCaml 语言。2018 年秋季，开始编写[课程教材](https://cs3110.github.io/textbook)。现任课程的主讲老师于 2021 年在 youtube 上公布了[课程视频](https://www.youtube.com/playlist?list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU)。\n\n## 课程资源\n\n- 课程视频油管: <https://www.youtube.com/playlist?list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU>\n- 课程视频B站: <https://www.bilibili.com/video/BV1dv4y127Ui/>\n- 课程教材：<https://cs3110.github.io/textbook>\n- 课程作业：课程教材中 exercises 自选，难度 1 至 4 星，注意 3 星至 4 星的难度跨越很大。\n\n## 资源汇总\n\n@featherwit001 在学习这门课中用到的所有资源和作业实现都汇总在 [featherwit001/CS3110_OCaml_Programming - GitHub](https://github.com/featherwit001/CS3110_OCaml_Programming) 中。\n"
  },
  {
    "path": "docs/编程入门/Functional/Haskell-MOOC.en.md",
    "content": "# Haskell MOOC\n\n## Descriptions\n\n- Offered by: University of Helsinki\n- Prerequisites: None\n- Programming Languages: Haskell\n- Difficulty: 🌟🌟\n- Class Hour: Varying according to the learner\n\nFunctional programming is increasingly being integrated into modern programming languages. Streams in Java, Promises in JavaScript, and Record & Tuple in the draft phase of ECMAScript... When I was learning these things, I always felt like I was memorizing the behaviours of their API, and although I was able to write some programs using them, I never felt like I had mastered them. Why do they exist? Why are they like that? What is the idea behind their design? Learning functional programming will give you the answer.\n\nIts core ingredient is functional programming. Just like Java is probably the default choice for teaching object-oriented programming.\n\nThis course will teach just enough Haskell syntax, library functions, and a small number of tools to explain the core program semantics and the core idea of functional programming. This will save you time not getting bogged down in the details of the language and its ecology, which I think is the biggest advantage of the course.\n\nTopics covered in the course:\n\n- Pure Function\n- Lazy Evaluation\n- Strongly Typed\n- Type Inferred\n- Curry\n- Monoid / Functor / Monad / Applicative\n\nIf you have some programming experience, part 1 of the course is very easy. Most of the difficulties lie in part 2, after chap 13. Its exercises are great, which can give you a feeling of doing exercise of [CS61A](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/CS61A/). There are enough hints in the comments and the solutions will be given to you after submission, and you can ask questions or discuss them with others in the official Telegram community.\n\n## Course Resources\n\n- Course Website: <https://haskell.mooc.fi/>\n- Recordings: None\n- Textbooks: <https://haskell.mooc.fi/>\n- Assignments: <https://github.com/moocfi/haskell-mooc>\n- Community: <https://t.me/haskell_mooc_fi>\n\n## Personal Resources\n\nAll the resources and assignments used by @showtheunli in this course are maintained in [showthesunli/haskell-mooc - GitHub](https://github.com/showthesunli/haskell-mooc). (It is highly discouraged to refer to other people's implementations when working on assignments.)\n"
  },
  {
    "path": "docs/编程入门/Functional/Haskell-MOOC.md",
    "content": "# Haskell MOOC\n\n## 课程简介\n\n- 所属大学：University of Helsinki\n- 先修要求：无\n- 编程语言：Haskell\n- 课程难度：🌟🌟\n- 预计学时：因人而异\n\n函数式编程正在越来越多的融合入现代编程语言。Java 的 Streams，JavaScript 的 Promises，以及在 ECMAScript 草案阶段的 Record & Tuple。在学习这些内容时，我总是感觉我在死记它们这些 api 的行为，虽然能够使用它们写出一些程序，但总感觉不到掌握了它们。究其原因，它们为什么存在？它们为什么是这样的？设计它们的思想是什么？学完函数式编程会给你答案。\n\n虽然这门课的名字是 Haskell，但它的核心内容是函数式编程思想。就像学习面向对象程序设计，大概率不会选择 Java 之外的语言。\n\n学习 Haskell，但重点不在于使用它。这门课会让你用刚刚够用的 Haskell 语法，刚刚够用的库函数，一丁点的工具，去解释核心的程序语义，也就是函数式编程的核心思想。这不会让你浪费时间陷入语言细节以及语言生态中，我觉得它是这门课的最大优势。\n\n这门课覆盖的内容：\n\n- Pure Function\n- Lazy Evaluation\n- Strongly Typed\n- Type Inferred\n- Curry\n- Monoid / Functor / Monad / Applicative\n\n如果你有编程经验，课程的 Part1 很简单，难度集中在 Part2 的十三章之后。课程的练习很棒，它有一种在做 [CS61a](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/CS61A/) 练习的感觉。练习的注释中有足够的提示，作业在你提交之后会给你标准答案，你还可以在官方的 Telegram 中提问或与他人讨论。\n\n## 课程资源\n\n- 课程网站：<https://haskell.mooc.fi/>\n- 课程视频：无\n- 课程教材：<https://haskell.mooc.fi/>\n- 课程作业：<https://github.com/moocfi/haskell-mooc>\n- 社区：<https://t.me/haskell_mooc_fi>\n\n## 资源汇总\n\n@showtheunli 在学习这门课中用到的所有资源和作业实现都汇总在 [showthesunli/haskell-mooc - GitHub](https://github.com/showthesunli/haskell-mooc) 中。(非常不建议在作业时，参考别人的实现)\n"
  },
  {
    "path": "docs/编程入门/Java/MIT 6.092.en.md",
    "content": "# MIT 6.092: Introduction To Programming In Java\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: None\n- Programming Languages: Java\n- Difficulty: 🌟🌟\n- Class Hour: less than 15 hours\n\nMIT's Java introductory course is suitable for beginners with no programming background. Each session consists of one hour of lecture (knowledge explanation) and one hour of lab (code practice), with a total of seven sessions. Although it's a fourteen-hour course, the learning process is fast, and you can complete it in about a day. It feels quite manageable for beginners.\n\nThe course content includes:\n\n1. Rapid introduction to fundamental concepts needed for Java: the Java compilation principle, the classic \"Hello world\" code, and the eight primitive types in the first session.\n2. How to maintain good code style: emphasizing naming conventions, indentation, and proper use of spaces in the third session.\n3. Debugging techniques: Using Eclipse warnings, assertions in the sixth session, and handling exceptions in the seventh session.\n\nThe assignments in the lab are not very difficult, and many of them are discussed in the following lecture after each lab session. The key point to note is that coding is a skill that requires practical experience. For beginners, the most important aspect of learning to code is to practice and write code regularly, whether in lectures or lab sessions.\n\nFor those who want to advance after completing this course, you can consider studying [MIT 6.005/6.031](../../软件工程/6031.en.md).\n\n## Course Resources\n\n- Course Website: [Winter 2010](https://ocw.mit.edu/courses/6-092-introduction-to-programming-in-java-january-iap-2010/pages/syllabus/)\n- Textbooks: [How to Think Like a Computer Scientist](https://greenteapress.com/wp/think-java/)\n- Assignments: <https://ocw.mit.edu/courses/6-092-introduction-to-programming-in-java-january-iap-2010/pages/assignments/>\n\n## Personal Resources\n\nAll the resources and assignments used by @SinanTang are maintained in [SinanTang/MIT6092-Introduction-to-Programming-in-Java_problem-sets - GitHub](https://github.com/SinanTang/MIT6092-Introduction-to-Programming-in-Java_problem-sets).\n\nAll the resources and assignments used by @sirrice are maintained in [sirrice/6092 - GitHub](https://github.com/sirrice/6092).\n\nAll the resources and assignments used by @Harbour-z are maintained in [Harbour-z/MIT6.092 - Github](https://github.com/Harbour-z/Course_learning/tree/main/MIT6.092)."
  },
  {
    "path": "docs/编程入门/Java/MIT 6.092.md",
    "content": "# MIT 6.092: Introduction To Programming In Java\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：无\n- 编程语言：Java\n- 课程难度：🌟🌟\n- 预计学时：少于 15 小时\n\nMIT 的 Java 入门课程，不需要有任何编程基础也可以开始学习。一节课是一小时 Lec （知识点讲解）+一小时 Lab （代码训练），整个课程是七节课。虽说是十四个小时的课时，真正学起来却很快，一天其实差不多就能结束。感觉是比较适合新手上手的强度。\n\n课程内容包括了：\n\n1. 快速入门 Java 所需的基础知识概念，如第一节课的 Java 编译原理、经典代码 \"Hello world\" 、八大基础类型等。\n2. 如何拥有良好的代码风格，如第三节课强调的命名规范、缩进、空格使用等。\n3. 如何 Debug ：第六节课的使用 Eclipse warning, Assertion 和第七节课的 Exception 等。\n\nLab 的 Assignment 倒不是很难，很多前一节课的 Assignment 后一节课 Lec 上就会讲到。唯一需要注意的就是代码是一个很注重实践的技能，新手入门写代码最重要的就是多写多练，无论是 Lec 还是 Lab 上的代码都不要偷懒不写。\n\n学完这门课想要进阶的可以学习 [MIT 6.005/6.031](../../软件工程/6031.md) 。\n\n## 课程资源\n\n- 课程网站：[Winter 2010](https://ocw.mit.edu/courses/6-092-introduction-to-programming-in-java-january-iap-2010/pages/syllabus/)\n- 课程教材：[How to Think Like a Computer Scientist - 如何像计算机科学家一样思考](https://greenteapress.com/wp/think-java/)\n- 课程作业：<https://ocw.mit.edu/courses/6-092-introduction-to-programming-in-java-january-iap-2010/pages/assignments/>\n\n## 资源汇总\n\n@SinanTang 在学习这门课中用到的所有资源和作业实现都汇总在 [SinanTang/MIT6092-Introduction-to-Programming-in-Java_problem-sets - GitHub](https://github.com/SinanTang/MIT6092-Introduction-to-Programming-in-Java_problem-sets) 中。\n\n@sirrice 在学习这门课中用到的所有资源和作业实现都汇总在 [sirrice/6092 - GitHub](https://github.com/sirrice/6092) 中。\n\n@Harbour-z 在学习这门课中用到的所有资源和作业实现都汇总在 [Harbour-z/MIT6.092 - Github](https://github.com/Harbour-z/Course_learning/tree/main/MIT6.092) 中。\n"
  },
  {
    "path": "docs/编程入门/MIT-Missing-Semester.en.md",
    "content": "# MIT: The Missing Semester of Your CS Education\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: None\n- Programming Languages: Shell\n- Difficulty: 🌟🌟\n- Class Hour: 10 hours\n\nJust 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!\n\n## Course Resources\n\n- Course Website: <https://missing.csail.mit.edu/>\n- Recordings: [IAP 2020](https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J), [IAP 2026](https://www.youtube.com/playlist?list=PLyzOVJj3bHQunmnnTXrNbZnBaCA-ieK4L) in YouTube\n- Assignments: Some exercises after each lecture, refer to the course website.\n"
  },
  {
    "path": "docs/编程入门/MIT-Missing-Semester.md",
    "content": "# MIT-Missing-Semester\n\n## 课程简介\n\n- 先修要求：无\n- 编程语言：shell\n- 课程难度：🌟🌟\n- 预计学时：10 小时\n\n正如课程名字所言：“计算机教学中消失的一个学期”，这门课将会教会你许多大学的课堂上不会涉及但却对每个 CSer 无比重要的工具或者知识点。例如 Shell 编程、命令行配置、Git、Vim、`tmux`、`ssh` 等等。如果你是一个计算机小白，那么我非常建议你学习一下这门课，因为它基本涉及了本书必学工具中的绝大部分内容。\n\n除了 MIT 官方的学习资料外，北京大学图灵班开设的前沿计算实践中也开设了相关课程，资料位于[这个网站](http://vcl.pku.edu.cn/course/PFCII/2021-spring/index.html)下，供大家参考。\n\n## 课程资源\n\n- 课程网站：<https://missing.csail.mit.edu/2020/>\n- 课程中文网站: <https://missing-semester-cn.github.io/>\n- 课程视频：[IAP 2020](https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J), [IAP 2026](https://www.youtube.com/playlist?list=PLyzOVJj3bHQunmnnTXrNbZnBaCA-ieK4L) in YouTube\n- 课程中文字幕视频：\n    - Missing_Semi_中译组（未完结）：<https://space.bilibili.com/1010983811?spm_id_from=333.337.search-card.all.click>\n    - 刘黑黑a（已完结）：<https://space.bilibili.com/518734451?spm_id_from=333.337.search-card.all.click>\n- 课程作业：一些随堂小练习，具体见课程网站。\n"
  },
  {
    "path": "docs/编程入门/Python/CS50P.en.md",
    "content": "# CS50P Introduction to Programming with Python\n\n## Descriptions\n\n- Offered by: Harvard University\n- Prerequisites: No prerequisites\n- Programming Languages: Python\n- Difficulty: 🌟🌟\n- Class Hour: 30-40 hours\n\nOne 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.\n\nNo programming experiences are assumed. So it may be appropriate for anyone who wants to learn Python.\n\n## Course Resources\n\n- Course Website: [2022](https://cs50.harvard.edu/python/2022/)\n- Recordings: [2022](https://www.bilibili.com/video/BV1z5411X7wX)\n- Textbooks: No textbook required\n- Assignments: [2022](https://cs50.harvard.edu/python/2022/)\n\n## Personal Resources\n\nAll the resources and assignments used by @mancuoj in this course are maintained in [mancuoj/CS50P - GitHub](https://github.com/mancuoj/CS50P).\n"
  },
  {
    "path": "docs/编程入门/Python/CS50P.md",
    "content": "# CS50P Introduction to Programming with Python\n\n## 课程简介\n\n- 所属大学：Harvard University\n- 先修要求：无\n- 编程语言：Python\n- 课程难度：🌟🌟\n- 预计学时：30-40 hours\n\nCS50的番外篇，依旧由 David J. Malan 授课。在该课程中你将学会 Python 的基础与进阶语法，以及各种 “Pythonic” 的编程方法。此外对于 Python 特色的代码库、代码测试以及错误处理，该课程也会较为深入地探究。\n\n该课程无需任何编程基础，且相对平易近人。适合所有想要快速入门 Python 语言的各阶段学生。\n\n## 课程资源\n\n- 课程网站：[2022](https://cs50.harvard.edu/python/2022/)\n- 课程视频：[2022](https://www.bilibili.com/video/BV1z5411X7wX)\n- 课程教材：无\n- 课程作业：[2022](https://cs50.harvard.edu/python/2022/)\n\n## 资源汇总\n\n@mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 [mancuoj/CS50P - GitHub](https://github.com/mancuoj/CS50P) 中。"
  },
  {
    "path": "docs/编程入门/Python/CS61A.en.md",
    "content": "# CS61A: Structure and Interpretation of Computer Programs\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: None\n- Programming Languages: Python, Scheme, SQL\n- Difficulty: 🌟🌟\n- Class Hour: 50 hours\n\nThis is the first course in the Berkeley CS61 series, and my introductory course to Python.\n\nThe CS61 series is composed of introductory courses to the CS major at Berkeley, where\n\n- CS61A: Emphasizes abstraction and equips students to use programs to solve real-world problems without focusing on the underlying hardware details.\n- CS61B: Focuses on algorithms and data structures and the construction of large-scale programs, where students combine knowledge of algorithms and data structures with the Java language to build large-scale projects at the thousand-line code level (such as a simple Google Maps, a two-dimensional version of Minecraft).\n- CS61C: Focusing on computer architecture, students will understand how high-level languages (e.g. C) are converted step-by-step into machine-understandable bit strings and executed on CPUs. Students will learn about the RISC-V architecture and implement a CPU on their own by using Logism.\n\nCS61B and CS61C are both included in this guidebook.\n\nGoing back to CS61A, you will note that this is not just a programming language class, but goes deeper into the principles of program construction and operation. Finally you will implement an interpreter for Scheme in Python in Project 4. In addition, abstraction will be a major theme in this class, as you will learn about functional programming, data abstraction, object orientation, etc. to make your code more readable and modular. Of course, learning a programming language is also a big part of this course. You will master three programming languages, Python, Scheme, and SQL, and in learning and comparing them, you will be equiped with the ability to quickly master a new programming language.\n\nNote: If you have no prior programming experience at all, getting started with CS61A requires a relatively high level of learning ability and self-discipline. To avoid the frustration of a struggling experience, you may choose a more friendly introductory programming course at first. For example, [CS10](https://cs10.org/sp22/) at Berkeley or [CS50](https://csdiy.wiki/编程入门/C/CS50/) at Harvard are both good choices.\n\n## Course Resources\n\n- [Course Website](https://cs61a.org)\n- Course Website (backup): [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/)\n- Recordings: [spring2024](https://www.bilibili.com/video/BV1sy411z7nA/), [fall2022](https://www.bilibili.com/video/BV1GK411Q7qp/), [fall2020](https://www.bilibili.com/video/BV1s3411G7yM/)\n- [Textbook](https://www.composingprograms.com/)\n- [Epub of the Textbook](https://github.com/CC-bit/UCB-CS61A-Textbook/)\n- [Textbook(Chinese)](https://composingprograms.netlify.app/)\n- Assignments: [fall2024](https://github.com/InsideEmpire/CS61A-Assignments)\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS61A - GitHub](https://github.com/PKUFlyingPig/CS61A)\n\nAll the resources and assignments used by @InsideEmpire in this course are maintained in [InsideEmpire/CS61A - GitHub](https://github.com/InsideEmpire/CS61A-PathwayToSuccess/)\n"
  },
  {
    "path": "docs/编程入门/Python/CS61A.md",
    "content": "# CS61A: Structure and Interpretation of Computer Programs\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：无\n- 编程语言：Python, Scheme, SQL\n- 课程难度：🌟🌟🌟\n- 预计学时：50 小时\n\n伯克利 CS61 系列的第一门课程，也是我的 Python 入门课。\n\nCS61 系列是伯克利 CS 专业的入门课，其中：\n\n- CS61A: 强调抽象，让学生掌握用程序来解决实际问题，而不关注底层的硬件细节。\n- CS61B: 注重算法与数据结构以及大规模程序的构建，学生会用 Java 语言结合算法与数据结构的知识来构建千行代码级别的大型项目（一个简易的谷歌地图，一个二维版的 Minecraft）。\n- CS61C: 关注计算机体系结构，让学生理解高级语言（例如 C）是如何一步步转换为机器可以理解的 01 串并在 CPU 执行的，学生将会学习 RISC-V 架构并自己用 Logisim 实现一个 CPU。\n\nCS61B 和 CS61C 在本书中均有收录。\n\n回到 CS61A，注意这不仅仅是一门编程语言课，而是会深入到程序构造与运行的原理。最后你将在第 4 个 Project 中用 Python 实现一个 Scheme 的解释器。此外，抽象将是这门课的一大主题，你将学习到函数式编程、数据抽象、面向对象等等知识来让你的代码更易读，更模块化。当然，学习编程语言也是这门课的一大内容，你将会掌握 Python、Scheme 和 SQL 这三种编程语言，在它们的学习和比较中，相信你会拥有快速掌握一门新的编程语言的能力。\n\n注意：如果此前完全没有编程基础，直接上手 CS61A 需要一定的学习能力和自律要求。为避免课程难度过高而导致的信心挫折，可以选择一个更为友好的入门编程课程。例如伯克利的 [CS10](https://cs10.org/sp22/) 或者哈佛大学的 [CS50](https://csdiy.wiki/编程入门/C/CS50/)。\n\n## 课程资源\n\n- [课程网站](https://cs61a.org)\n- 课程网站 (页面备份): [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/)\n- 课程视频: [spring2024](https://www.bilibili.com/video/BV1sy411z7nA/), [fall2022](https://www.bilibili.com/video/BV1GK411Q7qp/), [fall2020](https://www.bilibili.com/video/BV1s3411G7yM/)\n- [课程教材](https://www.composingprograms.com/)\n- [课程教材电子书](https://github.com/CC-bit/UCB-CS61A-Textbook/)\n- [课程教材中文翻译](https://composingprograms.netlify.app/)\n- 课程作业: [fall2024](https://github.com/InsideEmpire/CS61A-Assignments)\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS61A - GitHub](https://github.com/PKUFlyingPig/CS61A) 中。\n\n@InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 [InsideEmpire/CS61A - GitHub](https://github.com/InsideEmpire/CS61A-PathwayToSuccess/)\n"
  },
  {
    "path": "docs/编程入门/Python/MIT6.100L.en.md",
    "content": "# MIT6.100L: Introduction to CS and Programming using Python\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: None\n- Programming Languages: Python\n- Difficulty: 🌟🌟\n- Class Hour: 50 hours+\n\nThis course, introduced as part of MIT's 2022 curriculum reform, is a required introductory programming course offered by the Department of Electrical Engineering and Computer Science (EECS). It is designed for students in the [Computer Science and Engineering](https://www.eecs.mit.edu/academics/undergraduate-programs/curriculum/6-3-computer-science-and-engineering/), [Artificial Intelligence and Decision-Making](https://www.eecs.mit.edu/academics/undergraduate-programs/curriculum/6-4-artificial-intelligence-and-decision-making/), and [Electrical Engineering and Computation](https://www.eecs.mit.edu/academics/undergraduate-programs/curriculum/6-5-electrical-engineering-with-computing/) majors (taken as an alternative to 6.100A). The course includes all content from 6.100A and covers fundamental concepts of computation, the Python programming language, basic algorithms and data structures, testing and debugging, and algorithmic complexity.\n\nProfessor Ana Bell, who has been a lecturer in the EECS department for many years, delivers clear and engaging explanations. The course consists of 26 lectures. Students are encouraged to download the course code in advance and follow along during the lectures. There is ample practice material both during and after class, with complete solutions provided (except for Problem Sets).With a smooth progression in difficulty, the course's official materials are freely available and open source, making it an excellent choice for beginners to gradually step into the world of Computer Science.\n\n## Course Resources\n\n- Course Website: [fall2022](https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/material-by-lecture/)\n- Recordings: refer to the course website\n- Textbooks: Whether or not you have the textbook does not significantly impact your ability to follow the course.\n- Assignments: refer to the course website\n\n## Personal Resources\n\nAll the resources and assignments used by @Alidme in this course are maintained in [Alidme/MIT6.100L - GitHub](https://github.com/Alidme/MIT6.100L).\n"
  },
  {
    "path": "docs/编程入门/Python/MIT6.100L.md",
    "content": "# MIT6.100L: Introduction to CS and Programming using Python\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：无\n- 编程语言：Python\n- 课程难度：🌟🌟\n- 预计学时：50h+\n\n这门课程是自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 编程语言、简单的算法和数据结构、测试与调试以及算法复杂度等。\n\n授课教师 Ana Bell 教授在 EECS 系做了多年讲师，讲解深入浅出。这门课程共有26节课，课前提前下载好本课代码，与课程同步进行。课上课后作业练习充足，答案齐全（除 Problem Sets 不提供）。总体难度平滑，官网材料免费开源，适合计算机小白循序渐近地进入 CS 的世界。\n\n\n## 课程资源\n\n- 课程网站：[fall2022](https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/material-by-lecture/)\n- 课程视频：原版视频参考官网，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)\n- 课程教材：参考课程官网，有无教材基本不影响上课\n- 课程作业：课程官网已经将所有材料分类完全\n\n## 资源汇总\n\n@Alidme 在学习这门课时，总结了关于此课程的相关文档 [MIT6.100L 食用指南(持续更新)](https://k14eszn58mj.feishu.cn/docx/NFxmd1JxPodkWjxeuHIcSK5Qnag)。此外，其在学习这门课的 Problem Sets 的实现都汇总在 [Alidme/MIT6.100L - GitHub](https://github.com/Alidme/MIT6.100L) 中。\n"
  },
  {
    "path": "docs/编程入门/Rust/CS110L.en.md",
    "content": "# CS110L: Safety in Systems Programming\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: basic knowledge about programming and computer system\n- Programming Languages: Rust\n- Difficulty: 🌟🌟🌟\n- Class Hour: 30 hours\n\nIn this course, you will learn a fantastic language, Rust.\n\nIf you have studied C and have some knowledge of systems programming, you should have heard about memory leaks and the danger of pointers, but C's high efficiency makes it impossible to be replaced by other higher-level languages with garbage collection such as Java in system-level programming. Whereas Rust aims to make up for C's lack of security while having competitive efficiency. Therefore, Rust was designed from a system programmer's point of view. By learning Rust, you will learn the principles to write safer and more elegant system code (e.g., operating systems, etc.).\n\nThe latter part of this course focuses on the topic of concurrency, where you will systematically learn multi-processing, multi-threading, event-driven programming, and several other techniques. In the second project, you will compare the pros and cons of each method. \n\nPersonally, I find the concept of \"futures\" in Rust fascinating and elegant, and mastering this idea will help you in your following systems-related courses. In addition, Tsinghua University's operating system lab, rCore is based on Rust. You can see the [documentation](https://rcore-os.github.io/rCore-Tutorial-Book-v3/index.html) for more details.\n\n## Course Resources\n\n- Course Website: <https://reberhardt.com/cs110l/spring-2020/>\n- Recordings: <https://youtu.be/j7AQrtLevUE>\n- Textbook: None\n- Assignments: 6 Labs, 2 Projects, the course website has specific requirements. The projects are quite interesting where you will Implement a GDB-like debugger and a load balancer in Rust.\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/CS110L - GitHub](https://github.com/PKUFlyingPig/CS110L).\n\nDue to the rapid evolution of Rust, the libraries used in the 2020 version of the course project are obsolete, so [@fung-hwang](https://github.com/fung-hwang) tried to adapt these libraries (in November 2022). His adaptation advice and completed assignments are maintained in [fung-hwang/CS110L-2020spr - GitHub](https://github.com/fung-hwang/CS110L-2020spr). It is possible that Rust and these libraries will have changed again when you start to learn CS110L, but you can still refer to this repo for help.\n"
  },
  {
    "path": "docs/编程入门/Rust/CS110L.md",
    "content": "# CS110L: Safety in Systems Programming\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：最好有一定的编程背景并对计算机系统有初步的认识。\n- 编程语言：Rust\n- 课程难度：🌟🌟🌟\n- 预计学时：30 小时\n\n在这门课中你将会学习 Rust 这门神奇的语言。\n\n如果你学过 C 并接触过一些系统编程的话，应该对 C 的内存泄漏以及指针的危险有所耳闻，但 C 的底层特性以及高效仍然让它在系统级编程中无法被例如 Java 等自带垃圾收集机制的高级语言所替代。而 Rust 的目标则是希望在 C 的高效基础上，弥补其安全不足的缺点。因此 Rust 在设计之初，就有带有很多系统编程的观点。学习 Rust，也能让你之后能用 C 语言编写出更安全更优雅的系统级代码（例如操作系统等）。\n\n这门课的后半部分关注在并发（concurrency）这一主题上，你将会系统地掌握多进程、多线程、基于事件驱动的并发等若干并发技术，并在第二个 Project 中比较它们各自的优劣。Rust 中 “futures” 的概念非常有趣和优雅，这些基础知识对你后续对计算机系统相关课程的学习很有帮助。另外，清华大学的操统实验 rCore 就是基于 Rust 编写的，具体参见[文档](https://rcore-os.github.io/rCore-Tutorial-Book-v3/index.html)。\n\n## 课程资源\n\n- 课程网站：<https://reberhardt.com/cs110l/spring-2020/>\n- 课程视频：<https://youtu.be/j7AQrtLevUE>\n- 课程教材：无\n- 课程作业：共 6 个 Lab 和 2 个 Project，作业文档和代码框架详见课程网站。其中两个 Project 非常有趣，分别是：\n  1. 用 Rust 实现一个类似于 GDB 的 debugger\n  2. 用 Rust 实现一个负载均衡器\n\n> [CS 242: Programming Languages, Fall2019](https://stanford-cs242.github.io/f19/) week6 到 week9 关于 Rust 内容的讲解非常细致， 可以作为该课程的讲义补充。 另外， Ryan 在 <https://reberhardt.com/cs110l/spring-2021/> 中补充了 2020 版本缺失的关于 Futures Trait 内容的视频。\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS110L - GitHub](https://github.com/PKUFlyingPig/CS110L) 中。\n\n在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 和这些库又发生了变化，但你仍可以参考并从中获得启发。\n"
  },
  {
    "path": "docs/编程入门/Rust/cs220.en.md",
    "content": "# CS220: Programming Principles\n\n## Descriptions\n\n- Offered by: KAIST\n- Prerequisites: Any programming language\n- Programming Languages: Rust\n- Difficulty: 🌟🌟🌟\n- Class Hour: 40 hours\n\n[Jeehoon Kang](https://cp.kaist.ac.kr/jeehoon.kang) from KAIST and his [Concurrency and Parallelism Laboratory](https://cp.kaist.ac.kr/) appear to be strong advocates of the Rust programming language. Their contributions include [CS431](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/Rust/cs431/) and [CS420](https://csdiy.wiki/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86/CS420/) in the csdiy curriculum. Naturally, they have developed an introductory course for Rust, which is this course. It covers most of the essential topics needed to get started with Rust.\n\nThis course does not have an official textbook. The course homepage recommends using the [Rust book](https://doc.rust-lang.org/book/) for learning and provides a structured learning path in the [slides](https://docs.google.com/presentation/d/17G3SwkE_tq0H3lTt9N0ysIbHhqDZBfHkoWD5LwwAKSo/edit#slide=id.p). Although there are no publicly available lecture videos, the comprehensive testing system makes this course an excellent resource for practicing Rust. Some exercises can serve as a great supplement to [CS110L](https://csdiy.wiki/%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8/Rust/CS110L/). If you still feel the need for more practice after completing CS110L, this course is a good choice. Some exercises are quite challenging, and Jeehoon Kang encourages the use of AI-assisted programming. However, AI is not perfect, and the core work must still be done by yourself.\n\n## Course Resources\n\n- Course Website: [Github Repository](https://github.com/kaist-cp/cs220)\n- Recordings: None\n- Textbooks: [slides](https://docs.google.com/presentation/d/17G3SwkE_tq0H3lTt9N0ysIbHhqDZBfHkoWD5LwwAKSo/edit#slide=id.p)\n- Assignments: [Github Repository](https://github.com/kaist-cp/cs220/tree/main/src/assignments)\n\n## Personal Resources\n\nThere are no publicly available answer keys, and it is unclear whether the course instructor supports the idea of sharing solutions. If you encounter difficulties, you can find discussions about the assignments in the [ISSUE](https://github.com/kaist-cp/cs220/issues) section of the repository.\n"
  },
  {
    "path": "docs/编程入门/Rust/cs220.md",
    "content": "# CS220: Programming Principles\n\n## 课程简介\n\n- 所属大学：KAIST\n- 先修要求：其他任何一门编程语言\n- 编程语言：Rust\n- 课程难度：🌟🌟🌟\n- 预计学时：40 小时\n\n来自 KAIST 的 [Jeehoon Kang](https://cp.kaist.ac.kr/jeehoon.kang) 以及他所领导的 [Concurrency and Parallelism Laboratory](https://cp.kaist.ac.kr/) 实验室似乎是 Rust 语言的忠实拥趸，csdiy 之中的 [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 入门所需的绝大多数知识点。\n\n本课没有指定官方教材，课程主页推荐采用 [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 并不完美，核心工作仍需自己完成。\n\n## 课程资源\n\n- 课程网站：[Github 主页](https://github.com/kaist-cp/cs220)\n- 课程视频：无\n- 课程教材：[slides](https://docs.google.com/presentation/d/17G3SwkE_tq0H3lTt9N0ysIbHhqDZBfHkoWD5LwwAKSo/edit#slide=id.p)\n- 课程作业：[Github](https://github.com/kaist-cp/cs220/tree/main/src/assignments)\n\n## 资源汇总\n\n互联网上并没有公开的参考答案，也并不确定本课程主讲人是否赞同这种公开答案的行为。如果遇到困难，课程的 [ISSUE](https://github.com/kaist-cp/cs220/issues) 之中可以找到关于作业的讨论。\n"
  },
  {
    "path": "docs/编程入门/Rust/cs431.en.md",
    "content": "# CS431: Concurrent Programming\n\n## Descriptions\n\n- Offered by: KAIST\n- Prerequisites: Basic Understanding of Concurrency and Rust Programming\n- Programming Languages: Rust\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 50 hours\n\nCS431 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.\n\nThis 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.\n\nThis 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.\n\n## Course Resources\n\n- Course Website:[Website](https://github.com/kaist-cp/cs431)\n- Recordings:[Youtube](https://www.youtube.com/playlist?list=PL5aMzERQ_OZ9j40DJNlsem2qAGoFbfwb4)\n- Textbooks: [Slides](https://docs.google.com/presentation/d/1NMg08N1LUNDPuMxNZ-UMbdH13p8LXgMM3esbWRMowhU/edit?usp=sharing)\n- Assignments: [Homework](https://github.com/kaist-cp/cs431/tree/main/homework)\n"
  },
  {
    "path": "docs/编程入门/Rust/cs431.md",
    "content": "# CS431: Concurrent Programming\n\n## 课程简介\n\n- 所属大学：KAIST\n- 先修要求：Rust 编程基础与对并发的初步了解\n- 编程语言：Rust\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：50 小时\n\nCS431是一门讨论并发编程的课程，主要使用 Rust 语言。课程内容主要包括理论与实践两个部分。理论部分聚焦于建立并发情形下的编程模型，而实践部分则主要是理解 Rust 相关库中锁与无锁数据结构的实现原理。\n\n这门课程同时配有一系列代码量不大但并不简单的作业来巩固你对并发编程的理解，从基于锁的并发安全缓存设计和链表，到无锁的哈希表和著名的 [hazard pointer](https://ieeexplore.ieee.org/document/1291819). 和众多高质量课程一样，这些作业质量较高且配有详细的本地测试，适合自学。\n\n这门课程比我预想的要深入的多，我所知晓的关于自旋锁，互斥锁的知识在该门课程中都是最基础的，而对于 promising semantics, 访存模型和无锁数据结构的介绍让我对并发和 Rust 都有更深入的理解。\n\n## 课程资源\n\n- 课程网站：[Website](https://github.com/kaist-cp/cs431)\n- 课程视频：[Youtube](https://www.youtube.com/playlist?list=PL5aMzERQ_OZ9j40DJNlsem2qAGoFbfwb4)\n- 课程教材：[Slides](https://docs.google.com/presentation/d/1NMg08N1LUNDPuMxNZ-UMbdH13p8LXgMM3esbWRMowhU/edit?usp=sharing)\n- 课程作业：[Homework](https://github.com/kaist-cp/cs431/tree/main/homework)\n"
  },
  {
    "path": "docs/编程入门/cpp/AUT1400.en.md",
    "content": "# Amirkabir University of Technology 1400-2: Advanced Programming Course\n\n## Course Introduction\n\n- Affiliated University: Amirkabir University of Technology\n- Prerequisites: None\n- Programming Language: C++\n- Course Difficulty: 🌟🌟🌟🌟🌟\n- Estimated Study Time: 50 hours\n\nThis 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:\n\n1. Implement a Matrix class and related functions.\n\n2. Implement a program that simulates the operation of a cryptocurrency client/server.\n\n3. Implement a Binary Search Tree (BST).\n\n4. Implement SharedPtr and UniquePtr smart pointers in C++.\n\n5. Use inheritance and polymorphism to implement multiple classes.\n\n6. Solve 4 problems using the STL library.\n\n7. There's a Python project, for those interested.\n\nThe course homepage was not found, but the source code for the homework (named AP1400-2-HW) can be found on GitHub.\n\n## Course Resources\n\n- Course Website: None\n- Course Code: <https://github.com/courseworks>\n- Course Textbook: None\n- Course Assignments: 7 homework assignments"
  },
  {
    "path": "docs/编程入门/cpp/AUT1400.md",
    "content": "# Amirkabir University of Technology 1400-2: Advanced Programming Course\n\n## 课程简介\n\n- 所属大学：Amirkabir University of Technology\n- 先修要求：无\n- 编程语言：C++\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：50 小时\n\n无意中发现的一个 C++ 课程。课程的 homework 质量很高，每个 homework 相互独立结构简单，且有完善的单元测试，非常适合用来学习 C++ 的编程。本课程共 7 个 homework，如下所示：\n\n1. 实现一个 Matrix 类以及相关函数。\n\n2. 实现一个模拟加密货币客户端/服务端执行过程的程序。\n\n3. 实现一个 Binary Search Tree (BST)。\n\n4. 实现 C++ 中的 SharedPtr 和 UniquePtr 智能指针。\n\n5. 使用继承和多态实现多个类。\n\n6. 使用 STL 库解决 4 个问题。\n\n7. 是个 python 项目，有兴趣的可以看看。\n\n没找到课程的主页，只有在 github 有 homework 的源码（名字为 AP1400-2-HW 的那几个）。\n\n## 课程资源\n\n- 课程网站：无\n- 课程代码：<https://github.com/courseworks>\n- 课程教材：无\n- 课程作业：7 homework\n\n"
  },
  {
    "path": "docs/编程入门/cpp/CS106B_CS106X.en.md",
    "content": "# Stanford CS106B/X: Programming Abstractions in C++\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: CS50/CS106A/CS61A or equivalent\n- Programming Languages: C++\n- Difficulty: 🌟🌟\n- Class Hour: 50-70 hours\n\nCS106B/X are advanced programming courses at Stanford. CS106X is more difficult and in-depth than CS106B, but the main content is similar. Based on programming assignments in C++ language, students will develop the ability to solve real-world problems through programming abstraction. It also covers some simple data structures and algorithms, but is generally not as systematic as a specialized data structures course.  \n\nSome very basic but practical data structures and algorithms: 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. Additionally, some very useful techniques, such as how to use a debugger to troubleshoot, and how to escape from an initialized maze by reading the content in the debugger in assignment 8.\n\nLike CS61A, code frameworks and test programs are provided. Although not as detailed as the CS61A tests, the assignments also require you to add your own test cases. Each assignment comes with a detailed document that guides you step-by-step to achieve each milestone. In the end, you can observe the results of your data structures and algorithm implementations in the GUI provided by the starter code, which is very rewarding. Each assignment corresponds to very interesting and practical cases, such as the final task of implementing Huffman encoding to compress and decompress files.\n\n## Resources\n\n- Course Website: [CS106B](https://web.stanford.edu/class/cs106b/), [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/), [CS106X](https://web.stanford.edu/class/cs106x/)\n- Textbook: <https://web.stanford.edu/class/cs106x/res/reader/CS106BX-Reader.pdf>\n- Recordings: <https://www.bilibili.com/video/BV1G7411k7jG> <https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d>\n- assignments: [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/) 9 assignments\n\n## Complementary Resources\n\n@Andy-xiaokang All the resources and assignment implementations used in studying this course are compiled in [Andy-xiaokang/CS106B - GitHub](https://github.com/Andy-xiaokang/CS106B)  \nabout the incompatible libray you can refer to [readme](https://github.com/Andy-xiaokang/CS106B/blob/master/README.md#postscript) and I recommend the video [youtube spring 2015](https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d)"
  },
  {
    "path": "docs/编程入门/cpp/CS106B_CS106X.md",
    "content": "# Stanford CS106B/X: Programming Abstractions in C++\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：计算机基础 (CS50/CS106A/CS61A or equivalent)\n- 编程语言：C++\n- 课程难度：🌟🌟\n- 预计学时：50-70 小时\n\nStanford 的进阶编程课，CS106X 在难度和深度上会比 CS106B 有所提高，但主体内容类似。主要通过 C++ 语言让学生在实际的编程作业里培养通过编程抽象解决实际问题的能力，同时也会涉及一些简单的数据结构和算法的知识，但总体来说没有一门专门的数据结构课那么系统。  \n\n课程内容包括很多基础但实用的数据结构和算法以及相关概念：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 中的内容逃出迷宫。  \n\n和 CS61A 一样提供代码框架和测试程序，虽然没有 CS61A 测试的那么详细，但是作业中也有要求可以自己添加测试用例。每一个作业都会给出一份详细的文档，一步一步地实现每一个 milestone, 最后便可以在 starter code 给出的 GUI 中观察到自己的数据结构和算法实现的效果，非常有成就感。每一个作业都对应非常有趣又实际的案例，比如最后的任务是实现 huffman encoding 来压缩文件和解压文件。\n\n## 课程资源\n\n- 课程网站：[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/)\n- 课程教材：<https://web.stanford.edu/class/cs106x/res/reader/CS106BX-Reader.pdf>\n- 课程视频：[youtube spring 2015](https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d), [bilibili 2018 winter](https://www.bilibili.com/video/BV1G7411k7jG)\n- 课程作业：详见 [CS106B 2022 winter](https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1224/), 最重要的是9个 assignment\n\n## 资源汇总\n\n@akun0311 在学习这门课中用到的所有资源和作业实现都汇总在 [akun0311/CS106B-X-CS106L - GitHub](https://github.com/akun0311/CS106B-X-CS106L-) 中。  \n@Andy-xiaokang 在学习这门课中用到的所有资源和作业实现都汇总在 [Andy-xiaokang/CS106B - GitHub](https://github.com/Andy-xiaokang/CS106B) 中。\n\n关于 assignments 中版本不兼容的问题可以详见 [readme](https://github.com/Andy-xiaokang/CS106B/blob/master/README.md#postscript)  \n课程视频我推荐 [youtube spring 2015](https://www.youtube.com/watch?v=FIroM06V2MA&list=PL-h0BZdG_K4kAmsfvAik-Za826pNbQd0d) 这个版本，授课激情，并且可以看到老师和学生之间在提问环节的精彩交互（几百名优秀 compiler 的观察总会提出一些有趣的问题）\n"
  },
  {
    "path": "docs/编程入门/cpp/CS106L.en.md",
    "content": "# CS106L: Stanford C++ Programming\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: better if you are already proficient in a programming language\n- Programming Languages: C++\n- Difficulty: 🌟🌟🌟\n- Class Hour: 20 hours\n\nI've been writing C++ code since freshman year, and it wasn't until I finished this class that I realized the C++ code I was writing was probably just C + `cin`/`cout`.\n\nThis class will dive into a lot of standard C++ features and syntax that will allow you to write quality C++ code. Techniques such as auto binding, uniform initialization, lambda function, move semantics, RAII, etc. have been used repeatedly in my coding career since then and are very useful.\n\nIt is worth mentioning that in this class, you will implement a HashMap (similar to `unordered_map` in STL), which almost ties the whole course together and is a great test of coding skills. Especially after the implementation of `iterator`, I started to understand why Linus is so sarcastic about C/C++, because it is really hard to write correctly.\n\nIn short, the course is not difficult but very informative which requires you to consolidate repeatedly in later practice. The reason why Stanford offers a single C++ programming class is that many of the subsequent CS courses' projects are based on C++. For example, CS144 Computer Networks and CS143 Compilers. Both of these courses are included in this book.\n\n## Course Resources\n\n- Course Website: <http://web.stanford.edu/class/cs106l/>\n- Recordings: <https://www.youtube.com/channel/UCSqr6y-eaQT_qZJVUm_4QxQ/playlists>\n- Textbook: <http://web.stanford.edu/class/cs106l/full_course_reader.pdf>\n- Assignment1 Download: <https://github.com/snme/cs106L-assignment1>\n- Assignment2 Download: <https://github.com/snme/cs106L-assignment2>\n- Assignments: refer to the course website\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig are maintained in [PKUFlyingPig/CS106L - GitHub](https://github.com/PKUFlyingPig/CS106L).\n"
  },
  {
    "path": "docs/编程入门/cpp/CS106L.md",
    "content": "# CS106L: Standard C++ Programming\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：最好掌握至少一门编程语言\n- 编程语言：C++\n- 课程难度：🌟🌟🌟\n- 预计学时：20 小时\n\n我从大一开始一直都是写的 C++ 代码，直到学完这门课我才意识到，我写的 C++ 代码大概只是 C 语言 + `cin`/`cout` 而已。\n\n这门课会深入到很多标准 C++ 的特性和语法，让你编写出高质量的 C++ 代码。例如 auto binding, uniform initialization, lambda function, move semantics，RAII 等技巧都在我此后的代码生涯中被反复用到，非常实用。\n\n值得一提的是，这门课的作业里你会实现一个 HashMap（类似于 STL 中的 `unordered_map`), 这个作业几乎把整个课程串联了起来，非常考验代码能力。特别是 `iterator` 的实现，做完这个作业我开始理解为什么 Linus 对 C/C++ 嗤之以鼻了，因为真的很难写对。\n\n总的来讲这门课并不难，但是信息量很大，需要你在之后的开发实践中反复巩固。Stanford 之所以单开一门 C++ 的编程课，是因为它后续的很多 CS 课程 Project 都是基于 C++的。例如 CS144 计算机网络和 CS143 编译器。这两门课在本书中均有收录。\n\n## 课程资源\n\n- 课程网站：<http://web.stanford.edu/class/cs106l/>\n- 课程视频：<https://www.youtube.com/channel/UCSqr6y-eaQT_qZJVUm_4QxQ/playlists>\n- 课程教材：<http://web.stanford.edu/class/cs106l/full_course_reader.pdf>\n- Assignment1下载网址：<https://github.com/snme/cs106L-assignment1>\n- Assignment2下载网址：<https://github.com/snme/cs106L-assignment2>\n- 课程作业：具体内容见课程网站，我做的时候一共是两个：\n  1. 实现一个 WikiRacer 的小游戏\n  2. 实现一个类似 STL 库的 HashMap\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS106L - GitHub](https://github.com/PKUFlyingPig/CS106L) 中。\n"
  },
  {
    "path": "docs/编程语言设计与分析/CS242.en.md",
    "content": "# CS242 Programming Languages\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: basic knowledge about programming language theory and computer system\n- Programming Languages: OCaml, Rust\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 60 hours\n\nCS242 is a course about programming languages (PL), but it is not a pure theoretical course in the traditional sense. This course first introduces classic PL theories such as Lambda calculus and type system, then uses the ideas and actual programming languages of system programming to motivate students to understand these theories, and shows how they help developers avoid various errors in actual programming.\n\nThe instructor Will Crichton also wrote his course design ideas into a paper [From Theory to Systems: A Grounded Approach to Programming Language Education](https://arxiv.org/abs/1904.06750), which elaborates this teaching route from theory to systems.\n\nWe help readers understand the specific content of this course by simply introducing each assignment:\n\n- Formalization and proof of JSON\n- Classic Lambda calculus in PL\n- Introduction to functional programming using OCaml\n- Use OCaml to implement a type checker and interpreter for a functional language, which is also a classic assignment in PL\n- Theory and practice of WebAssembly\n- Linear Type and Rust's ownership mechanism\n- Rust's asynchronous programming basics\n- Design state machines and implement session-typed TCP libraries using Rust's type system\n- The final assignment has four options:\n    1. Theorem proving in Lean\n    2. Read-Log-Update in Rust\n    3. Verified filesystems in F-Star\n    4. Deep learning framework in OCaml from a PL perspective\n\nThese assignments cover a wide range of knowledge, from the classic PL theory and practice to the impact of programming languages such as Rust on programming and system design, and finally the distinctive projects. Almost all programming assignments have detailed local tests, especially the deep learning framework in the final project has more than 200 tests, which is suitable for self-study.\n\nThe first few assignments are more about PL theory, and the later assignments are more about system programming.\nIf you think that the course content and assignments in the first few times are too theoretical, you can focus on the assignment of implementing the interpreter using OCaml, which can not only help you have a deeper understanding of the previous theory, but also let you practice the type checking and interpretation of a functional language.\n\nThe later assignments tend to use theory to guide system programming and design, especially Rust and its unique ownership mechanism and type system. Although we often have to fight with the compiler, this also just shows the significance of type systems and theories for programming and design.\n\nI personally feel that the assignments are difficult, but the gains are great. When the programming practice in the later assignments intersects with the theoretical knowledge learned before, there will be a pleasant feeling of sudden enlightenment. If you encounter difficulties in completing the assignments, this is normal. Please calm down and think carefully, or read the assignment guide again.\n\n## Course Resources\n\n- Course Website: [Latest](https://web.stanford.edu/class/cs242/) [2019 Fall](https://stanford-cs242.github.io/f19/)\n- Recordings: None, the main learning resources are the course notes and assignments\n- Textbooks: The first half of the course is based on the famous [TAPL](https://www.cis.upenn.edu/~bcpierce/tapl/), and the second half has no fixed textbook\n- Assignments: [Assignment Guide](https://stanford-cs242.github.io/f19/assignments/) and [Assignment Repository](https://github.com/stanford-cs242/f19-assignments)\n"
  },
  {
    "path": "docs/编程语言设计与分析/CS242.md",
    "content": "# CS242 Programming Languages\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：对计算机系统和编程语言理论有初步了解\n- 编程语言：OCaml, Rust\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：60 小时\n\nCS242是一门讲程序语言 (Programming Language, PL) 的课程，但不是传统意义上的纯理论导向。这门课程首先介绍了如 Lambda 演算，类型系统这样的经典 PL 理论，然后借助系统编程的思想和实际的编程语言来驱动学生理解这些理论，展示了它们是如何在实际编程中帮助开发者避免各种错误。\n\n主讲老师 Will Crichton 还将他的课程设计思想写成了论文 [From Theory to Systems: A Grounded Approach to Programming Language Education](https://arxiv.org/abs/1904.06750)，阐述了这条从理论走向系统的教学路线。\n\n我们通过简单介绍每个作业来帮助读者了解这门课程的具体内容：\n\n- 对 JSON 的形式化与证明\n- PL 中经典的 Lambda 演算\n- 以 OCaml 为例的函数式编程入门\n- 使用 OCaml 实现一个函数式语言的类型检查器和解释器，同样是 PL 的经典作业\n- WebAssembly 的理论与实践\n- Linear Type 和 Rust 的所有权机制\n- Rust 的异步编程基础\n- 利用 Rust 类型系统设计状态机和实现 session-typed TCP 库\n- 最后的大作业有四个可选项：\n    1. 使用 Lean 进行定理证明\n    2. 使用 Rust 实现 Read-Log-Update 同步机制\n    3. 利用 F* 语言验证文件系统的正确性\n    4. 在程序语言视角下使用 OCaml 实现一个深度学习框架\n\n这些作业涵盖知识跨度非常大，从最经典的编程语言理论证明和实践到以 Rust 为例的编程语言对于编程和系统设计的影响，再到最后各有特色的大作业。几乎所有的编程作业都有详尽的本地测试，尤其是大作业中的深度学习框架更有超过 200 个测试，适合自学。\n\n前面几次的作业偏 PL 理论，后面几次的作业偏系统编程。\n如果你觉得前面几次的课程内容和作业过于理论，可以重点尝试使用 OCaml 实现解释器的作业，它既能让你对之前的理论有更深刻的理解，又能让你实战一个函数式语言的类型检查和解释。\n\n而后面的作业则更倾向于利用理论来指导系统编程与设计，尤其是 Rust 和它独特的所有权机制与类型系统。虽然我们要经常与编译器搏斗，但这也恰好说明了类型系统和理论对于编程和设计的意义。\n\n个人自学过程中感觉作业还是偏难的，但收获很大，在后续作业的编程实践和前面所学的理论知识产生交集时会有恍然大悟的愉悦。如果你在完成作业时遇到了困难，这是十分正常的，请静下心来认真思考，或者再读一遍实验指导。\n\n## 课程资源\n\n- 课程网站：[官网](https://web.stanford.edu/class/cs242/) [2019秋](https://stanford-cs242.github.io/f19/)\n- 课程视频：无，主要学习途径是课程笔记和完成作业\n- 课程教材：前半部分是著名的[TAPL](https://www.cis.upenn.edu/~bcpierce/tapl/)，后半部分则无固定教材\n- 课程作业：[实验指导](https://stanford-cs242.github.io/f19/assignments/)与[作业仓库](https://github.com/stanford-cs242/f19-assignments)\n"
  },
  {
    "path": "docs/编程语言设计与分析/Cambridge-Semantics.en.md",
    "content": "# Cambridge: Semantics of Programming Languages\n\n## Descriptions\n\n- Offered by: University of Cambridge\n- Prerequisites: elementary Discrete Mathematics, including logic and proof methodology, basic functional programming\n- Programming Languages: OCaml (ML)\n- Difficulty: 🌟🌟🌟\n- Class Hour: 20 to 30 hours (12 hours of lecture)\n\nThis course offers a structural, operational approach to programming language semantics. It provides a very beginner-friendly but mathematically rigorous introduction to the constructs and specification declaration of programming languages, in the context of actually defining and designing a language. It is also one of the few PLT courses that offers publicly available videos.\n\nThe course covers semantics topics ranging from operational and denotational semantics. The course starts with introducing the basic operational semantics of a simple imperative language defined by BNF, and gradually coming to introducing formal type systems, using mathematical induction (especially structural induction) to build rule-based induction proofs. It then comes to how we manipulate data under a functional programming perspective and introduces subtyping and handling of functions. Finally it comes to the discussion of semantics equivalence, congruence property and semantics under concurrency.\n\nThis course was taught to 2nd year undergraduate students, however building up some very important concepts. It would be a pivotal capstone for further studies on type theory, category theory, hoare logic and model checking.\n\n## Course Resources\n\n- Course Website: [Latest](https://www.cl.cam.ac.uk/teaching/2324/Semantics/)\n- Recordings: [YouTube](https://www.youtube.com/playlist?list=PL-2hPK7m5S3hVagseKDPxCBZEqg0PqZhs)\n- Textbooks:\n  - Pierce, B.C. (2002). _Types and programming languages_. MIT Press.\n  - Winskel, G. (1993). _The formal semantics of programming languages_. MIT Press.\n- Assignments: Related Past Paper Questions are listed [here](https://www.cl.cam.ac.uk/teaching/exams/pastpapers/t-SemanticsofProgrammingLanguages.html), however solutions and tutorial sheets are visible to internal students only.\n"
  },
  {
    "path": "docs/编程语言设计与分析/Cambridge-Semantics.md",
    "content": "# Cambridge: Semantics of Programming Languages\n\n## 课程简介\n\n- 所属大学：University of Cambridge\n- 先修要求：基础离散数学\n- 编程语言：OCaml/ML\n- 课程难度：🌟🌟🌟\n- 预计学时：20 至 30 小时\n\n这门课程系统性地讲述了编程语言中的语义学 (Semantics)。它在定义和设计语言的背景下，为编程语言的构造和规范声明提供了一个非常适合初学者，但同样严谨且形式化的介绍。这也是为数不多的提供公开视频的编程语言理论课程之一。\n\n课程内容涵盖了从操作语义 (Operational Semantics) 到指称语义 (Denotational Semantics) 的各个主题。课程开始会先介绍一个使用 BNF 约束的简单命令式语言的基本操作语义，然后逐步引入形式类型系统，使用归纳法，特别是结构归纳法 (Structural Induction) 来构建基于规则的归纳证明，介绍了程序语言语义学中的许多基本性质及其证明。然后讨论在函数式编程视角下如何操作数据，并介绍着重子类型和函数处理。最后讨论语义等价性、一致性性质以及在并发环境下的语义学。\n\n这门课在校内面向二年级本科生，难度不高，但同时引入了一些非常重要的概念。它将是进一步研究类型理论、范畴理论、霍尔逻辑和模型检测的关键要素。\n\n## 课程资源\n\n- 课程网站：[Latest](https://www.cl.cam.ac.uk/teaching/2324/Semantics/)\n- 课程视频：[YouTube](https://www.youtube.com/playlist?list=PL-2hPK7m5S3hVagseKDPxCBZEqg0PqZhs)\n- 课程教材：\n  - Pierce, B.C. (2002). _Types and programming languages_. MIT Press.\n  - Winskel, G. (1993). _The formal semantics of programming languages_. MIT Press.\n- 课程作业：考试真题中的相关题目汇总在 [这里](https://www.cl.cam.ac.uk/teaching/exams/pastpapers/t-SemanticsofProgrammingLanguages.html)，但是相关作业题 (Cambridge 内部的 supervision) 以及所有题目的答案均不公开。\n"
  },
  {
    "path": "docs/编程语言设计与分析/NJU-SoftwareAnalysis.en.md",
    "content": "# NJU Software Analysis\n\n## Descriptions\n\n- Offered by: Nanjing University\n- Prerequisite: Data Structures and Algorithms, familiar with at least one programming language\n- Programming Languages: Java\n- Difficulty: 🌟🌟🌟\n- Learning Hours: 60 hours\n\nSoftware Analysis is a course jointly offered by Yue Li and Tian Tan of Nanjing University. It mainly introduces program analysis, which refers to the theory and practice of static analysis. The idea of static analysis is to obtain **approximate** answers about specific properties of the program without running it. This course starts with the abstract syntax tree, control flow graph and intermediate representation, then introduces the theory and practice of data flow analysis and pointer analysis, and finally introduces several advanced topics, such as IFDS.\n\nIn my opinion, there are two reasons why this course is worth learning:\n\n- Teaching. Program analysis is generally not easy to get started, but the two teachers are particularly meticulous in their lectures, and they will also guide you step by step through the process of an algorithm. Personally, I think that as long as you listen carefully in class, there is no problem that you can't understand.\n\n- Assignments. The assignments are based on the Java program analysis framework Tai-e created by the teachers. The eight assignments cover a variety of static analysis techniques, including compiler optimization (liveness analysis, constant propagation, dead code detection), basic program analysis (program call graph construction, non/context-sensitive pointer analysis), and the application of program analysis in software security (taint analysis). The course also provides an online evaluation system available to **everyone**, which is suitable for self-study.\n\nThe assignments are mainly to implement the pseudo-code algorithms in class, so as to better help you understand the knowledge taught in class. I feel that the difficulty is not particularly high, especially suitable for completing the corresponding experiments after class to test your mastery of the knowledge taught in class. However, it is still challenging to pass all the test cases of each assignment.\n\n## Resources\n\n- Course Website: [Homepage](https://tai-e.pascal-lab.net/lectures.html)\n- Course Video: [Bilibili](https://www.bilibili.com/video/BV1b7411K7P4/?spm_id_from=333.999.0.0&vd_source=b58da8cd0259ee873ef3dc2c9aa36d74)\n- Course Textbook: None\n- Course Assignments: [Homepage](https://tai-e.pascal-lab.net/intro/overview.html)\n- OJ: [OJ](https://oj.pascal-lab.net/problem)\n"
  },
  {
    "path": "docs/编程语言设计与分析/NJU-SoftwareAnalysis.md",
    "content": "# NJU 软件分析\n\n## 课程简介\n\n- 所属大学：南京大学\n- 先修要求：数据结构与算法，至少熟悉一门编程语言\n- 编程语言：Java\n- 课程难度：🌟🌟🌟\n- 预计学时：60 小时\n\n软件分析是由南京大学李樾老师和谭添老师共同开设的一门课程，主要介绍了程序分析，在这里特指静态分析的理论与实践。\n静态分析的理念是在不运行程序的情况下，通过分析其源代码和各种表示来获得关于程序特定性质的**近似**结论。\n这门课从程序的抽象语法树，控制流图和中间表示这些基础知识开始介绍，再到数据流分析和指针分析的理论与实践，最后介绍了若干高级主题，如 IFDS 等。\n\n这门课程值得学习的原因在我看来有两部分：\n\n- 授课。程序分析一般来说并不太好上手，但两位老师讲的尤其细致入微，还会在课上带你一步一步走某一个算法的流程。个人认为只要认真听课，对于课上的知识不存在学不懂或者讲的不清楚的问题。\n\n- 作业。作业围绕其自创的 Java 程序分析框架太阿进行。\n八个作业涵盖多种静态分析技术，包括编译优化（活跃变量分析、常量传播、死代码检测），基础程序分析（程序调用图构建、非/上下文敏感指针分析），以及程序分析在软件安全性的应用（污点分析）。\n课程同时还提供**所有人**可用的在线评测系统，适合自学。\n\n作业主要是实现课上的伪代码算法，从而更好的帮助你理解课上所讲的知识。我感觉难度并不是特别大，特别适合在上完课后完成对应的实验来检验自己对课上知识的掌握程度。\n不过想要通过每个作业的所有测试点还是很有难度的。\n\n## 课程资源\n\n- 课程网站：[主页](https://tai-e.pascal-lab.net/lectures.html)\n- 课程视频：[Bilibili](https://www.bilibili.com/video/BV1b7411K7P4/?spm_id_from=333.999.0.0&vd_source=b58da8cd0259ee873ef3dc2c9aa36d74)\n- 课程教材：无\n- 课程作业：[实验主页](https://tai-e.pascal-lab.net/intro/overview.html)\n- 在线评测： [OJ](https://oj.pascal-lab.net/problem)\n"
  },
  {
    "path": "docs/编程语言设计与分析/PKU-SoftwareAnalysis.en.md",
    "content": "# PKU Software Analysis\n\n## Descriptions\n\n- Offered by: Peking University\n- Prerequisite: Data Structures and Algorithms, familiar with at least one programming language\n- Programming Languages: Java, Python\n- Difficulty: 🌟🌟🌟🌟\n- Learning Hours: 60 hours\n\nSoftware Analysis is a course offered by Prof. Yingfei Xiong from Peking University. The course mainly covers the following topics:\n\n1. Program analysis based on abstract interpretation (data flow analysis, inter-procedural analysis, pointer analysis, abstract interpretation, etc.)\n2. Program analysis based on constraint solving (SAT, SMT, symbolic execution, etc.)\n3. Software analysis applications (program synthesis, bug localization, bug repair, etc.)\n\nCompared 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 :)\n\nThe 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.\n\n## Resources\n\n- 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/).\n- Course Video: [2020](https://liveclass.org.cn/cloudCourse/#/courseDetail/8mI06L2eRqk8GcsW)\n- Course Textbook: None\n"
  },
  {
    "path": "docs/编程语言设计与分析/PKU-SoftwareAnalysis.md",
    "content": "# 北京大学 软件分析技术\n\n## 课程简介\n\n- 所属大学：北京大学\n- 先修要求：数据结构与算法，至少熟悉一门编程语言\n- 编程语言：Java, Python\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：60 小时\n\n软件分析技术是由北京大学熊英飞老师开设的一门课程，主要介绍了以下内容：\n\n1. 基于抽象解释的程序分析（数据流分析、过程间分析、指针分析、抽象解释等）\n2. 基于约束求解的程序分析（SAT、SMT、符号执行等）\n3. 软件分析应用（程序合成、缺陷定位、缺陷修复等）\n\n和南京大学的[软件分析课程](./NJU-SoftwareAnalysis.md)对比，这门课程的特点是讲了**更多更全面**的程序分析的理论与实践相关内容，难度也更大。这门课程我的主要的学习途径是听课，熊老师上课十分有趣，除了理论内容讲的很好偶尔也会讲一些学术相关的小段子:)\n\n而本实验的的课程项目是实现一个Java上的指针分析系统和一个程序合成工具，也是十分有趣的实践。\n\n## 课程资源\n\n- 课程网站：[主页](https://xiongyingfei.github.io/SA/2020/main.htm) 这是 2020 年的课程主页，在[熊老师的主页](https://xiongyingfei.github.io/)上可以找到更多年份的课程内容。\n- 课程视频：[2020 燕云直播](https://liveclass.org.cn/cloudCourse/#/courseDetail/8mI06L2eRqk8GcsW)\n- 课程教材：无\n"
  },
  {
    "path": "docs/编译原理/CS143.en.md",
    "content": "# Stanford CS143: Compilers\n\n## Descriptions\n\n- Offered by: Stanford University\n- Prerequisite: Computer Architecture\n- Programming Languages: Java or C++\n- Difficulty: 🌟🌟🌟🌟🌟\n- Learning Hours: 150\n\nThis 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.\n\nFollowing 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.\n\n## Course Resources\n\n- Course Website: <http://web.stanford.edu/class/cs143/>\n- Recordings: <https://www.bilibili.com/video/BV17K4y147Bz>\n- Textbook: Compilers: Principles, Techniques and Tools (Dragon Book)\n- Assignments: 5 written assignments + 5 programming labs\n\n## Collection of Course Resources\n\n@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).\n"
  },
  {
    "path": "docs/编译原理/CS143.md",
    "content": "# Stanford CS143: Compilers\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：计算机体系结构\n- 编程语言：Java 或 C++\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\n斯坦福的编译原理课程，设计者开发了一个 Classroom-Object-Oriented-Language，简称 COOL 语言。这门课的核心就是通过理论知识的学习，为 COOL 语言实现一个编译器，将 COOL 高级语言编译为 MIPS 汇编并在 Spim 这个 MIPS 模拟器上成功执行。\n\n理论部分基本按照龙书的顺序覆盖了词法分析、语法分析、语义分析、运行时环境、寄存器分配、代码优化与生成等内容，实践部分则相应地分为词法分析、语法分析、语义分析、代码生成四个阶段，难度循序渐进，并在优化部分给学生留下了很大的设计空间。\n\n## 课程资源\n\n- 课程网站：<http://web.stanford.edu/class/cs143/>\n- 课程视频：<https://www.bilibili.com/video/BV17K4y147Bz>\n- 课程教材：龙书\n- 课程作业：5 个书面作业 + 5 个编程作业带你实现一个编译器\n\n## 资源汇总\n\n@skyzluo 在学习这门课中用到的所有资源和作业实现都汇总在 [skyzluo/CS143-Compilers-Stanford - GitHub](https://github.com/skyzluo/CS143-Compilers-Stanford) 中。\n"
  },
  {
    "path": "docs/编译原理/CS420.en.md",
    "content": "# CS420: Compiler Design\n\n## Descriptions\n\n- Offered by:·KAIST\n- Prerequisites: Data Structures, Basic Understanding of Computer Systems and Rust Programming\n- Programming Languages: Rust\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 80 hours\n\nThis 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:\n\n- The course focuses on the real C language rather than a custom toy language, and uses C language fuzzing tools(Csmith) for testing.\n- 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.\n- The course comes with accompanying videos that provide detailed code tours, which is beginner-friendly.\n\n## Course Resources\n\n- Course Website:<https://github.com/kaist-cp/cs420>\n- Recordings:<https://www.youtube.com/playlist?list=PL5aMzERQ_OZ8RWqn-XiZLXm1IJuaQbXp0>\n- Textbooks:<https://github.com/kaist-cp/cs420?tab=readme-ov-file#textbook>\n- Assignments:<https://github.com/kaist-cp/cs420?tab=readme-ov-file#homework-60>\n"
  },
  {
    "path": "docs/编译原理/CS420.md",
    "content": "# CS420: Compiler Design\n\n## 课程简介\n\n- 所属大学：KAIST\n- 先修要求：数据结构、计算机系统基础、Rust 编程基础\n- 编程语言：Rust\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：80小时\n\n这门课程提供了一个 Rust 语言编写的编译器 KECC(KAIST Educational C Compiler) 框架代码，在此基础上构建编译器的一些核心部分，包括语法树打印、SSA中间代码生成、中间代码优化（包括 CFG 简化，GVN 等）以及目标代码生成。与其他编译器课程相比，本课程主要有以下特点：\n\n- 该课程面向真实的 C 语言而非自定义的玩具语言，并且会使用 C 语言 Fuzzing 工具 (Csmith) 进行测试。\n- 该课程注重实用性，对编译器前端理论涉及很少，第一个实验也是直接从抽象语法树的遍历开始，并不要求你手动完成前端。课程重点关注于 IR 的设计、生成和优化，以及 RISC-V 汇编代码生成。本课程对于理解和学习 LLVM 也很有帮助。\n- 课程配套视频有详细的代码讲解，对初学者友好。\n\n## 课程资源\n\n- 课程网站：<https://github.com/kaist-cp/cs420>\n- 课程视频：<https://www.youtube.com/playlist?list=PL5aMzERQ_OZ8RWqn-XiZLXm1IJuaQbXp0>\n- 课程教材：<https://github.com/kaist-cp/cs420?tab=readme-ov-file#textbook>\n- 课程作业：<https://github.com/kaist-cp/cs420?tab=readme-ov-file#homework-60>\n"
  },
  {
    "path": "docs/编译原理/NJU-Compilers.en.md",
    "content": "# NJU Compilers\n\n## Descriptions\n\n- Offered by: Nanjing University\n- Prerequisite: Discrete Mathematics\n- Programming Languages: Java\n- Difficulty: 🌟🌟🌟\n- Learning Hours: 80\n\nThe compiler principles course at Nanjing University utilizes the popular ANTLR (ANother Tool for Language Recognition) v4 programming language parsing and code generation tool to aid in teaching. This tool allows users to focus on designing lexical or syntactic analysis while ANTLR 4 generates repetitive template code. IDE plugins are also available, enabling real-time visualization of the parse tree for easier student comprehension.\n\nANTLR 4 is an LL parser generator, which, compared to LR and LALR parser generators, can handle a narrower scope of grammars. However, its generated parsers have the advantage of being easier to understand and use. Additionally, its support for \"infinite lookahead\" scanning improves handling of narrow grammar scopes.\n\nThe instructor delivers lectures on compiler design in a humorous and engaging manner, incorporating appropriate diagrams and real-life examples to maintain student interest. Particularly in this version of the course, the approach involves first practically completing small examples using ANTLR 4, followed by supplementing with theoretical knowledge. This allows students to approach theoretical aspects with specific questions in mind, enhancing memorability. Through the study of theoretical knowledge, the \"mysterious veil\" of the C language is gradually lifted.\n\nThe theoretical part follows the rhythm outlined in the \"Dragon Book,\" covering topics such as lexical analysis, syntax analysis, semantic analysis, runtime environments, register allocation, code optimization, and generation.\n\nThe practical aspect is the highlight of this course, guiding students step by step to implement their own compiler from simple to complex.\n\nThe instructor is extremely generous, allowing even non-university students to access the Online Judge and participate in course discussions. The instructor also meticulously organizes study materials from previous years, making them easily accessible on the course website.\n\nThe instructor also openly shares the [Zulip](https://2024-compilers-at-software-nju.zulipchat.com/join/wxwq3fib56ltlff2mk6qyrz5/) address for the teaching group (if there are any changes, they can be found on the course website), meaning that students can ask questions and see the questions of other Nanjing University students studying the same material. These questions receive responses from teaching assistants and the instructor, eliminating the need to reiterate pitfalls or experiences, as students can exchange information on one platform with others studying the same content.\n\nThe biggest takeaway is that there is no longer a sense of difficulty or uncertainty in implementing a compiler. Upon completing the course, students have a preliminary and effective approach that enables them to face challenges confidently.\n\n## Course Resources\n\n- Course Website: <http://docs.compilers.cpl.icu/>\n- Recordings: <https://space.bilibili.com/479141149/lists/2312309>\n- Textbook: Compilers: Principles, Techniques and Tools (Dragon Book)\n- Assignments: 10 written assignments + 8~10 programming labs\n\n"
  },
  {
    "path": "docs/编译原理/NJU-Compilers.md",
    "content": "# NJU 编译原理\n\n## 课程简介\n\n- 所属大学：南京大学\n\n- 先修要求：离散数学\n\n- 编程语言：Java\n\n- 课程难度：🌟🌟🌟\n\n- 预计学时：80 小时\n\n  \n\n南京大学的编译原理课程，设计者选用了当下热门的 ANTLR （ANother Tool for Language Recognition） v4 编程语言解析生成工具辅助教学，能让使用者专心词法或者语法分析的设计，而让 ANTLR 4 来生成重复的模板代码。IDE 也有其插件，装上后，可以实现即时的可视化语法树，方便学生理解。\n\nANTLR 4 是 LL 解析器生成器，比起 LR 和 LALR 解析器生成器，它可处理语法的范围相对狭窄。但另一方面其生成的解析器有易于理解和使用的优势。此外，因为其支持“无限长的 token 超前扫描”，所以可处理语法范围狭窄的问题也得到了很好的改善。\n\n老师通过适当的图解和生活例子，幽默风趣地讲述编译原理，让人听来不算乏闷。尤其是今年这版，采取先实际使用 ANTLR 4 完成一些小例子，再补足理论知识的方式。让人能带着问题去找到适配的理论，更让人印象深刻。通过理论知识的学习，逐渐揭开 C 语言的“神秘面纱”。\n\n理论部分基本按照龙书节奏叙述。包括词法分析、语法分析、语义分析、运行时环境、寄存器分配、代码优化与生成等内容。\n\n实践则是本课程的亮点，一步步的，由简单到复杂地实现一个属于自己的编译器。\n\n教授本课的老师极为慷慨，校外学生同样能享受到 Online Judge 以及参与课程讨论，老师还极为细心地整理历年来的学习资料，在课程网站里十分容易找到。\n\n老师还把教学班的 [Zulip](https://2024-compilers-at-software-nju.zulipchat.com/join/wxwq3fib56ltlff2mk6qyrz5/) 地址公开（若有变更，在课程网站也能找到），这意味着你有任何问题，都能在上面提问，同时你也能看到跟你一起学习的南大学生的问题，这些问题都会得到助教和老师的回答，所以我并不用再赘述踩了哪些坑或者经验，因为你能在一个平台上，和一帮正在学习相同内容的人，一起交流问题。\n\n最大感受是，心里不再对实现一个编译器有畏难情绪，也不再无从下手，学完课程，会有一套初步的行之有效的思路，让我们面对挑战。\n\n## 课程资源\n\n- 课程网站：<http://docs.compilers.cpl.icu/>\n- 课程视频：<https://space.bilibili.com/479141149/lists/2312309>\n- 课程教材：龙书等\n- 课程作业：10 个书面作业 + 8 ~ 10 个编程作业带你实现一个编译器\n\n"
  },
  {
    "path": "docs/编译原理/PKU-Compilers.en.md",
    "content": "# PKU Compiler Principles Practice\n\n## Descriptions\n\n- Offered by: Peking University\n- Prerequisites: Basics of Computer Systems, Data Structures and Algorithms, Programming Fundamentals\n- Programming Languages: Choose one from C/C++/Rust\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 60 hours\n\nThe practice course of Compiler Principles at Peking University aims to teach student to implement a compiler that translates from a simplified version of the C language — SysY to RISC-V assembly. Unlike other courses that provide skeleton code, this course grants you a great degree of freedom. The test programs only check the correctness of the assembly code your compiler outputs, without imposing any restrictions on the specific design of your compiler or even the programming language used. You need to start from scratch and gradually build your own compiler. However, this is quite challenging even for Peking University students, so in 2022, the course TA [@MaxXing](https://github.com/MaxXSoft) significantly upgraded this course, designing a special intermediate representation, Koopa IR, for the course. Koopa IR is more rationally designed and, while similar to LLVM IR, it simplifies many details, focusing only on the practical aspects needed. At the same time, a corresponding runtime library was designed for Koopa IR, allowing you to easily parse/generate/modify/output Koopa IR without having to consider other superfluous details. Additionally, a detailed document breaks down the large project of building a compiler into nine small steps, making it easier for any student willing to invest the time to implement their own compiler.\n\nThe following content is excerpted from @MaxXing's [Blog](https://blog.maxxsoft.net/index.php/archives/145/) which introduces this course in more details:\n\n---\n\nYou may have seen countless tutorials teaching how to write a compiler, but they may have various issues that still leave you puzzled about where to start:\n\n- The tutorials are not aimed at people with \"zero compiler foundation,\" and can be difficult to understand.\n- They teach how to make a compiler but not why to do it that way, leaving you still in a fog after reading.\n- Complicated environment setup is required before starting coding, discouraging beginners at the start.\n- The initial tasks are unrelated to \"compiling a program,\" and it can take a month following the tutorial to see a running program from your compiler, resulting in a long feedback cycle.\n- What you finally write is just an interpreter, or it can't compile to a real ISA (like outputting some bytecode), or it's highly dependent on other frameworks (like LLVM), which doesn't let you feel the accomplishment of \"I really made a compiler\" and the exhilaration of \"doing everything myself.\"\n- The compiler implemented can only compile simple programs, such as sorting algorithms, which seem very boring. Who sorts just for fun?\n- Tutorials and their resources are not in Chinese, or they require payment and are not open source.\n\nDuring my graduate studies, I was the TA in the undergraduate Compiler Principles course. To help undergraduates better understand how compilers work, after referring to several other tutorials, I designed a new set of tutorials that teach you how to write a compiler from scratch:\n\n- You can use C/C++/Rust to develop your compiler, the tutorial only requires you to have the ability to program in these languages, without any need for foundational knowledge of compiler principles or related practical experience.\n- The tutorial not only tells you how to write a compiler but also why to do it that way, and what else you could do.\n- The tutorial adopts an incremental, iterative approach, guiding you from a compiler that can only handle the main function to gradually expanding to implement a compiler for a C-like language that includes control flow, function calls, and arrays. The compiler can output RISC-V assembly.\n- Providing a Docker-based environment for one-click setup. The environment also includes automatic testing scripts for one-click testing of your compiler.\n- The tutorial introduces tools that can take over some of the tedious grunt work, such as generating lexer/parser, parsing and generating IR, etc. The rest, like building AST, semantic analysis, generating IR, and producing target code, is entirely up to you to implement.\n- The compiler you ultimately implement will be capable of compiling many complex programs, such as the Mandelbrot set drawing program or a Lisp interpreter (this interpreter can even interpret another Lisp interpreter). We will provide these programs for you to experience the real joy of using your compiler.\n- The tutorial and its accompanying tools, experimental environments, etc., are all open source and completely free!\n- You can access this tutorial on GitHub Pages: [Peking University Compiler Practice Course Online Documentation](https://pku-minic.github.io/online-doc/#/). If you have never tried writing a compiler yourself, why not try it now?\n\nMy wish is that everyone feels the joy of writing compilers.\n\n---\n\nFinally, my highest regards to @MaxXing. — from PKUFlyingPig"
  },
  {
    "path": "docs/编译原理/PKU-Compilers.md",
    "content": "# PKU 编译原理实践\n\n## 课程简介\n\n- 所属大学：北京大学\n- 先修要求：计算机系统基础、数据结构与算法、编程基础\n- 编程语言：C/C++/Rust 任选其一\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：60 小时\n\n北京大学的编译原理实践课程旨在实现一个从精简版的 C 语言 —— SysY 编译到 RISC-V 汇编的编译器。和其他提供了框架代码的课程不同，该课程给予了你极大的自由度，测试程序只会对你输出的汇编代码的正确性进行测试，而不会对你编译器的具体设计甚至使用的编程语言做任何限制。你需要从一个空文件夹开始一步步构建出独属于你自己的编译器。但平地起高楼即使对于北大的同学也是相当有难度的，因此课程助教 [@MaxXing](https://github.com/MaxXSoft) 在2022年对课程实验进行重大升级，为课程专门设计了一种中间表示 Koopa IR (intermediate representation)。Koopa IR 在设计上更为合理，在形式上类似于 LLVM IR，但简化了相当多的内容，只专注于实践需要的部分。与此同时，还为 Koopa IR 设计了配套的运行时库，你可以借助这套运行时库轻松地解析/生成/修改/输出 Koopa IR，完全不需要对其他无用的细节做过多考虑。另外，还有一份保姆级的文档将构建编译器这样一个大工程循序渐进地拆分成了9个小步骤，让任何愿意花时间的同学都可以更容易地实现自己的编译器。\n\n以下内容摘自 @MaxXing 在其 [Blog](https://blog.maxxsoft.net/index.php/archives/145/) 中对该课程实验的介绍：\n\n---\n\n你可能已经见过无数个教你写编译器的教程了，但它们也许或多或少存在各种问题，导致你看了它们之后，依然觉得无从下手：\n\n- 教程并非面向“零编译器基础”的人群，理解起来比较费劲。\n- 只教了怎么做一个编译器，但没教为什么这么做，读完之后还是觉得一头雾水。\n- 开始编码之前，需要复杂的环境配置，开局劝退。\n- 上来先做和“编译一个程序”这件事八竿子打不着的东西，跟着教程学一个月才能看到自己的编译器编出一个能跑的程序，反馈周期过长。\n- 最终写出来的只是个解释器，或者不能编译到真实的 ISA（例如输出了某种字节码），或者高度依赖其他框架（例如 LLVM），让人体会不到那种“我真的写出个编译器”的成就感，以及“所有事情都由自己实现”的酣畅感。\n- 实现的编译器只能编译一些过于简单的程序，比如排序算法等等，看起来非常无聊。谁会没事干排序玩啊？\n- 教程及其配套资源非中文，或需要付费，且不开源。\n\n研究生期间，我一直在担任本科编译原理课程的助教。为了让本科生更好地理解编译器工作的原理，在参考多个其他教程之后，我设计了一套全新的，教你从零开始写个编译器的教程：\n\n- 你可以使用 C/C++/Rust 开发你的编译器，教程只要求你具备使用这些语言编程的能力，不要求任何编译原理的基础和相关实践经验。\n- 教程除了告诉你要如何写一个编译器，还会告诉你为什么这么做，以及除此之外还能怎么做。\n- 教程采用增量式、迭代式的思路，引导你从一个只能处理 main 函数的编译器开始，逐步扩展实现一个能处理包括控制流、函数调用、数组在内的，类 C 语言的编译器。编译器可以输出 RISC-V 汇编。\n- 提供基于 Docker 的实验环境，一键配置。环境中还附带自动测试脚本，一键测试你写的编译器。\n- 教程介绍了相关工具，可以为你代劳一些枯燥的苦力活，比如生成 lexer/parser，解析和生成 IR 等等。剩下的事情，如构建 AST、语义分析、生成 IR 以及生成目标代码，完全由你自己编程实现。\n- 你最终实现的编译器足以编译很多复杂的程序，例如 Mandelbrot 集绘制程序，或者 Lisp 解释器（这个解释器甚至可以解释另一个 Lisp 解释器）。我们会提供这些程序，让你用你写的编译器体验到最真实的快乐。\n- 教程及其配套工具、实验环境等，全部开源，完全免费！\n- 你可以从 GitHub Pages 上访问到这个教程：[北京大学编译实践课程在线文档](https://pku-minic.github.io/online-doc/#/)。如果你之前从来没有尝试过自己写一个编译器，不如现在就来试一下吧！\n\n我的愿望是，让每个人都感受到写编译器的快乐。\n\n---\n\n最后，向 @MaxXing 致以我崇高的敬意。—— from PKUFlyingPig"
  },
  {
    "path": "docs/编译原理/SJTU-Compilers.en.md",
    "content": "# SJTU Compiler Principles\n\n## Course Introduction\n\n- Offered by: Shanghai Jiao Tong University\n- Prerequisites: Basic Computer Systems, Data Structures and Algorithms, Programming Fundamentals\n- Programming Language: C++\n- Course Difficulty: 🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nThe Compiler Principles course at Shanghai Jiao Tong University aims to implement a compiler for the Tiger language. In this course, you will learn about lexical analysis, grammar analysis, semantic analysis, escape analysis, activation records (stack frames), LLVM IR, liveness analysis, register allocation, garbage collection, object-oriented programming, functional programming, and many other topics. Similar to the Compiler Principles course at Peking University, this course offers you a great deal of freedom. The test programs will only check the correctness of the assembly code you output and will not impose any restrictions on the specific design of your compiler. You will need to build your own compiler step by step from scratch.\n\nIn this course, you will learn how to use frameworks such as `Flex`, `Bison`, and `LLVM`, and enhance your debugging skills through practice. The theoretical part of the course is taught by teachers from the IPADS Laboratory at Shanghai Jiao Tong University.\n\n## Course Resources\n\n- Course Website: <https://ipads.se.sjtu.edu.cn/courses/compilers>\n- Slides: <https://ipads.se.sjtu.edu.cn/courses/compilers/Schedule.html>\n- Framework Code: Not yet open-sourced. Old version: <https://gitee.com/east-china-normal-university_ttb_cs/tiger-compiler-25sp>; For the newest version, please contact to the TA.\n- Course Textbook: \"Tiger Book\" (Modern Compiler Implementation in C) <https://ipads.se.sjtu.edu.cn/courses/compilers/textbook/TigerBook-English.pdf>\n- 2 Quizzes + 5 essential labs + 2 optional labs\n    - Lab 1: Straight-line Program Interpreter\n    - Lab 2: Lexer\n    - Lab 3: Parser\n    - Lab 4: Type Checking\n    - Lab 5\n        - Part 1: Escape Analysis\n        - Part 2: Translate to LLVM\n    - (Optional) Lab 6: Code Generation\n    - (Optional) Lab 7: Register Allocation\n"
  },
  {
    "path": "docs/编译原理/SJTU-Compilers.md",
    "content": "# SJTU 编译原理\n\n## 课程简介\n\n- 所属大学：上海交通大学\n- 先修要求：计算机系统基础、数据结构与算法、编程基础\n- 编程语言：C++\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：150 小时\n\n上海交通大学的编译原理课程旨在实现一个 Tiger 语言的编译器。在这门课上你可以学习到词法分析、文法分析、语义分析、逃逸分析、活动记录（栈帧）、LLVM IR、活跃分析、寄存器分配、垃圾收集、面向对象、函数式程序等众多话题。和北大的编译原理课程相似，该课程给予了你极大的自由度，测试程序只会对你输出的汇编代码的正确性进行测试，而不会对你编译器的具体设计做任何限制。你需要从一个个空文件中一步步构建出属于你自己的编译器。\n\n在这门课上你将学到 `Flex`、`Bison`、`LLVM` 等框架的使用方法，并在练习过程中加强自己的调试能力。\n\n理论部分由上海交通大学 IPADS 实验室的老师讲述。\n\n\n## 课程资源\n\n\n- 课程网站：<https://ipads.se.sjtu.edu.cn/courses/compilers>\n- 课件：<https://ipads.se.sjtu.edu.cn/courses/compilers/Schedule.html>\n- 框架代码：暂不开源，旧版本可以见 <https://gitee.com/east-china-normal-university_ttb_cs/tiger-compiler-25sp>，新版本可以邮件联系当届助教。\n- 课程教材：虎书（Modern Compiler Implementation in C）<https://ipads.se.sjtu.edu.cn/courses/compilers/textbook/TigerBook-Chinese.pdf>\n- 2 次 Quiz + 5 个必做 Lab + 2 个选做 Lab\n    - Lab 1: Straight-line Program Interpreter\n    - Lab 2: Lexer\n    - Lab 3: Parser\n    - Lab 4: Type Checking\n    - Lab 5\n        - Part 1: Escape Analysis\n        - Part 2: Translate to LLVM\n    - (Optional) Lab 6: Code Generation\n    - (Optional) Lab 7: Register Allocation\n"
  },
  {
    "path": "docs/编译原理/USTC-Compilers.en.md",
    "content": "# USTC: Principles and Techniques of Compiler\n\n## Descriptions\n\n- Offered by: University of Science and Technology of China (USTC)\n- Prerequisites:  \n- Programming Languages:  \n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nThe 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.\n\n- The course labs use scripts to provide comprehensive automated testing, with complete tutorials available on the course homepage.\n- The course includes a full set of open-source course materials, lab framework code, and lab tutorials, making it beginner-friendly.\n- The labs progress gradually, increasing in difficulty, ensuring that students with varying levels of prior knowledge can benefit.\n- 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.\n\n## Course Resources\n\n- Course Website: <https://ustc-compiler-principles.github.io/2023>\n- Recordings: <https://www.bilibili.com/video/BV1D7421N7c4>\n- Textbook: See the course website\n- Assignments: <https://ustc-compiler-principles.github.io/textbook>"
  },
  {
    "path": "docs/编译原理/USTC-Compilers.md",
    "content": "# USTC: Principles and Techniques of Compiler\n\n## 课程简介\n\n- 所属大学：中国科学技术大学\n- 先修要求：数据结构、计算机系统基础、C++ 编程基础\n- 编程语言：C++\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100小时\n\n这门课程的理论部分内容广泛，既涵盖了传统编译原理课程的词法分析、语法分析、语法制导翻译、中间代码翻译，又覆盖了运行时管理、机器无关与面向机器的代码优化。实验部分则提供了 C++ 语言编写的Cminusf编译器框架代码，于6个实验中逐步构建一个具备现代完整流程的编译器。与其他编译原理课程的实验不同的是，本课程的实验采用现代LLVM的子集作为中间代码，更具前瞻性，同时包括了后端代码的生成和中间代码优化的部分，堪称国际一流的编译原理课程。\n\n- 课程实验使用脚本提供全面的自动化测试，并于课程主页提供了完整的教程。\n- 课程包含全套开源的课件、实验框架代码、实验教程，对初学者友好。\n- 课程实验循序渐进，逐渐增加难度，能让不同基础的学生都有收获。\n- 课程实验中Lab1使用Flex和Bison实现编译器前端，Lab2实现LightIR(LLVM子集)中间代码生成，Lab3实现后端代码生成龙芯汇编语言，Lab4实现中间代码优化，Lab5实现机器无关优化，Lab6实现寄存器分配。\n\n## 课程资源\n\n- 课程网站：<https://ustc-compiler-principles.github.io/2023>\n- 课程视频：<https://www.bilibili.com/video/BV1D7421N7c4>\n- 课程教材：见课程网站\n- 课程作业：<https://ustc-compiler-principles.github.io/textbook>\n"
  },
  {
    "path": "docs/计算机图形学/15462.en.md",
    "content": "# CMU 15-462 : COMPUTER GRAPHICS\r\n\r\n## Descriptions\r\n\r\n- Offered by: CMU\r\n- Prerequisites: Basic vector calculus and linear algebra , basic C/C++ programming skills.\r\n- Programming Languages: C/C++\r\n- Difficulty: 🌟🌟🌟🌟\r\n- Class Hour: 100 hours\r\n\r\nThis course provides a comprehensive introduction to computer graphics. It focuses on fundamental concepts and techniques, and their cross-cutting relationship to multiple problem domains in graphics (rendering, animation, geometry, imaging). Topics include: sampling, aliasing, interpolation, rasterization, geometric transformations, parameterization, visibility, compositing, filtering, convolution, curves & surfaces, geometric data structures, subdivision, meshing, spatial hierarchies, ray tracing, radiometry, reflectance, light fields, geometric optics, Monte Carlo rendering, importance sampling, camera models, high-performance ray tracing, differential equations, time integration, numerical differentiation, physically-based animation, optimization, numerical linear algebra, inverse kinematics, Fourier methods, data fitting, example-based synthesis.\r\n\r\n## Course Resources\r\n\r\n- Course Website: [http://15462.courses.cs.cmu.edu/fall2022/](http://15462.courses.cs.cmu.edu/fall2022/)\r\n- Recordings: [Youtube](https://www.youtube.com/watch?v=W6yEALqsD7k&list=PL9_jI1bdZmz2emSh0UQ5iOdT2xRHFHL7E&index=1)\r\n- Textbooks: There is no required textbook for 15-462, though a variety of books may provide good supplementary material:\r\n    - [Fundamentals of Computer Graphics. A K Peters, 2009](http://www.amazon.com/Fundamentals-Computer-Graphics-Peter-Shirley/dp/1568814690)\r\n    - [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)\r\n    - [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)\r\n- Assignments: refer to the course website\r\n"
  },
  {
    "path": "docs/计算机图形学/15462.md",
    "content": "# CMU 15-462 : COMPUTER GRAPHICS\r\n\r\n## 课程简介\r\n\r\n- 所属大学：CMU\r\n- 先修要求：基础的向量微积分和线性代数 , 基础的 C/C++ 编程能力。\r\n- 编程语言：C/C++\r\n- 课程难度：🌟🌟🌟🌟\r\n- 预计学时：100 小时\r\n\r\n本课程全面介绍了计算机图形学。它侧重于基本概念和技术，以及它们与图形中多个问题领域（渲染、动画、几何、成像）的交叉关系。主题包括：采样、混叠、插值、光栅化、几何变换、参数化、可见性、合成、过滤、卷积、曲线和曲面、几何数据结构、细分、网格划分、空间层次结构、光线追踪、辐射测量、反射率、光场、几何光学，蒙特卡洛渲染，重要性采样，相机模型，高性能光线追踪，微分方程，时间积分，数值微分，基于物理的动画，优化，数值线性代数，逆运动学，傅立叶方法，数据拟合.\r\n\r\n## 课程资源\r\n\r\n- 课程网站：[http://15462.courses.cs.cmu.edu/fall2022/](http://15462.courses.cs.cmu.edu/fall2022/)\r\n- 课程视频：\r\n    - [Youtube](https://www.youtube.com/watch?v=W6yEALqsD7k&list=PL9_jI1bdZmz2emSh0UQ5iOdT2xRHFHL7E&index=1)\r\n    - [bilibili](https://www.bilibili.com/video/BV1QZ4y1K7ga)\r\n- 课程教材：15-462 没有唯一的课本, 提供了各种书籍供你参考. 如下:\r\n    - [Fundamentals of Computer Graphics. A K Peters, 2009](http://www.amazon.com/Fundamentals-Computer-Graphics-Peter-Shirley/dp/1568814690)\r\n    - [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)\r\n    - [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)\r\n- 课程作业：参见课程主页\r\n"
  },
  {
    "path": "docs/计算机图形学/CS148.en.md",
    "content": "# Stanford CS148\n\n## Course Introduction\n\n- **University**: Stanford\n- **Prerequisites**: Linear Algebra, Advanced Mathematics, Python\n- **Programming Language**: Python\n- **Course Difficulty**: 🌟🌟🌟\n- **Estimated Study Time**: 40 hours\n\nOfficial Description:\n\nThis 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.\n\nFor more detailed information, you can visit the [course website](https://web.stanford.edu/class/cs148/index.html).\n\nThis course is somewhat less in-depth compared to GAMES101 and uses Python, making it more accessible for students who are not familiar with C++.\n\n## Course Resources\n\n- **Course Website**: [CS148](https://web.stanford.edu/class/cs148/index.html)\n- **Course Videos**: None, the [lectures](https://web.stanford.edu/class/cs148/lectures.html) themselves are sufficient. GAMES101 videos can also be referenced.\n- **Course Textbook**: Fundamentals of Computer Graphics\n- **Course Assignments**: [8 Homework Assignments, 1 Final Project](https://web.stanford.edu/class/cs148/assignments.html)"
  },
  {
    "path": "docs/计算机图形学/CS148.md",
    "content": "# Stanford CS148\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：线性代数，高等数学，Python\n- 编程语言：Python\n- 课程难度：🌟🌟🌟\n- 预计学时：40 小时\n\n官方介绍:\n\n这是一门计算机图形学的入门课程，这门课的一开始使用 Blender 去生成图像，并且理解底层的数学知识，包括三角形、法向量、插值、纹理映射、凹凸贴图等等。之后会介绍光线和颜色以及它们如何影响计算机的显示和打印。同时也会介绍 BRDF 以及一些基本的光照和着色模型。课程的最后，会涉及到光线追踪、反走样、加速结构等内容。\n\n具体课程信息可以查看[课程网站](https://web.stanford.edu/class/cs148/index.html)。\n\n这门课程比起 GAMES101 浅一些，编程语言使用的是 Python，对于不熟悉 C++ 的同学比较友好。\n\n## 课程资源\n\n- 课程网站：[CS148](https://web.stanford.edu/class/cs148/index.html)\n- 课程视频：无，直接看[lecture](https://web.stanford.edu/class/cs148/lectures.html)就可以了，也可以参考 GAMES101 视频\n- 课程教材：Fundamentals of Computer Graphics\n- 课程作业：[8 个 hw, 1 个 final project](https://web.stanford.edu/class/cs148/assignments.html)\n"
  },
  {
    "path": "docs/计算机图形学/GAMES101.en.md",
    "content": "# GAMES101\n\n## Course Introduction\n\n- **University**: University of California, Santa Barbara (UCSB)\n- **Prerequisites**: Linear Algebra, Advanced Mathematics, C++\n- **Programming Language**: C++\n- **Course Difficulty**: 🌟🌟🌟\n- **Estimated Study Time**: 80 hours\n\nOfficial Introduction:\n\n> This course comprehensively and systematically introduces the four major components of modern computer graphics: (1) rasterization imaging, (2) geometric representation, (3) the theory of light propagation, and (4) animation and simulation. Each aspect is explained from basic principles to practical applications, along with the introduction of cutting-edge theoretical research. Through this course, you can learn the mathematics and physics behind computer graphics and enhance your practical programming skills.\n> As an introduction, this course aims to cover as many aspects of graphics as possible, clearly explaining the basic concepts of each part to provide a complete, top-down understanding of computer graphics. A global understanding is crucial; after completing this course, you will realize that graphics is not just OpenGL or ray tracing but a set of methods for creating virtual worlds. The title of this course also contains the word \"modern,\" indicating that the knowledge imparted is contemporary and essential for the modern graphics industry.\n\nGAMES101 is a well-known graphics course in China. Unlike the traditionally math and algorithm-heavy perception of graphics, this course introduces the field of graphics in a very vivid way.\n\nEach project is not code-heavy but is quite interesting. Through these projects, students will implement simple rasterization to render basic models and ray tracing for better rendering quality. Each project also includes optional extensions to enhance the quality and speed of the rendered models.\n\nIf you enjoy gaming, you might be familiar with real-time ray tracing, a technology that the course instructor, Lingqi Yan, has directly contributed to. By following the course videos and completing each project, you'll likely develop a strong interest in graphics and modern rendering techniques, just as I did.\n\n## Course Resources\n\n- **Course Websites**: [GAMES101](http://games-cn.org/intro-graphics/), [GAMES101](https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html)\n- **Course Videos**: [Bilibili](https://www.bilibili.com/video/BV1X7411F744?p=1), [Official Site](http://games-cn.org/graphics-intro-ppt-video/)\n- **Course Textbook**: Fundamentals of Computer Graphics\n- **Course Assignments**: [8 projects](http://games-cn.org/forums/topic/allhw/)\n\n## Resource Summary\n\nAll resources and homework implementations used by @ysj1173886760 during the course are compiled at [ysj1173886760/Learning: graphics/GAMES101 - GitHub](https://github.com/ysj1173886760/Learning/tree/master/graphics/GAMES101)."
  },
  {
    "path": "docs/计算机图形学/GAMES101.md",
    "content": "# GAMES101\n\n## 课程简介\n\n- 所属大学：UCSB\n- 先修要求：线性代数，高等数学，C++\n- 编程语言：C++\n- 课程难度：🌟🌟🌟\n- 预计学时：80 小时\n\n官方介绍:\n\n> 本课程将全面而系统地介绍现代计算机图形学的四大组成部分：（1）光栅化成像，（2）几何表示，（3）光的传播理论，以及（4）动画与模拟。每个方面都会从基础原理出发讲解到实际应用，并介绍前沿的理论研究。通过本课程，你可以学习到计算机图形学背后的数学和物理知识，并锻炼实际的编程能力。\n> 作为入门，本课程会尽可能的覆盖图形学的方方面面，把每一部分的基本概念都尽可能说清楚，让大家对计算机图形学有一个完整的、自上而下的全局把握。全局的理解很重要，学完本课程后，你会了解到图形学不等于 OpenGL，不等于光线追踪，而是一套生成整个虚拟世界的方法。从本课程的标题，大家还可以看到“现代”二字，也就是说，这门课所要给大家介绍的都是现代化的知识，也都是现代图形学工业界需要的图形学基础。\n\nGAMES101 是国内相当有名的图形学公开课。和大家印象中满是数学和算法的图形学不同，这门课以十分生动的方式带我们进入了图形学这个领域的大门。\n\n每个project代码量都不会很多，但是却都十分有趣。在做这些project的过程中，我们会实现简单的光栅化，并渲染一个简易的模型，我们还会实现光线追踪，以追求渲染更好的质量。每个project中还有选做的拓展作业，可以让我们渲染的模型具有更好的质量，更快的渲染速度。\n\n喜欢玩游戏的同学应该对实时光线追踪有一定的了解，这门课的老师闫令琪就对这一技术有直接的推动作用。\n\n跟着课程的视频，做完每一个project，相信你会和我一样对图形学，以及现代的渲染技术产生浓厚的兴趣。\n\n## 课程资源\n\n- 课程网站：[GAMES101](http://games-cn.org/intro-graphics/), [GAMES101](https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html)\n- 课程视频：[bilibili](https://www.bilibili.com/video/BV1X7411F744?p=1), [官网](http://games-cn.org/graphics-intro-ppt-video/)\n- 课程教材：Fundamentals of Computer Graphics\n- 课程作业：[8 个 project](http://games-cn.org/forums/topic/allhw/)\n\n## 资源汇总\n\n@ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在[ysj1173886760/Learning: graphics/GAMES101 - GitHub](https://github.com/ysj1173886760/Learning/tree/master/graphics/GAMES101) 中。\n"
  },
  {
    "path": "docs/计算机图形学/GAMES103.en.md",
    "content": "# GAMES103\n\n## Course Introduction\n\n- **University**: Style3D / Oregon State University (OSU)\n- **Prerequisites**: Linear Algebra, Advanced Mathematics, College Physics, Programming Skills, Basic Graphics Knowledge\n- **Programming Language**: C#\n- **Course Difficulty**: 🌟🌟🌟🌟\n- **Estimated Study Time**: 50 hours\n\nOfficial Introduction:\n\n> This course serves as an introduction to physics-based computer animation techniques, focusing on various fundamental physical animation simulation technologies.\n>\n> The course mainly covers four areas: 1) Rigid body simulation; 2) Particle systems, springs, constraints, and cloth simulation; 3) Elastic body simulation based on the finite element method; 4) Fluid simulation.\n>\n> The course content will not delve into specific physical simulation engines but will discuss the technologies behind various engines and their pros and cons. Since developing and learning physical simulations requires a solid mathematical foundation, the initial stages of the course will also spend some time reviewing necessary mathematical concepts. Upon successful completion of the course, students should have a deep understanding of basic physical simulation techniques and some exposure to advanced simulation technologies.\n\nIn graphics, the field can be roughly divided into rendering, simulation, and geometry. While GAMES101 and GAMES202 mainly focus on rendering, GAMES103 is an excellent resource for learning about physical simulation.\n\n## Course Resources\n\n- **Course Website**: [GAMES103](http://games-cn.org/games103/)\n- **Course Videos**: [Bilibili](https://www.bilibili.com/video/BV12Q4y1S73g)\n- **Reference Materials**: [Course PPT](https://www.aliyundrive.com/s/YGuzfDCzw4n/folder/61824d985307bbf3920044b4afd48abb633441f6)\n- **Course Assignments**: Four assignments, available on the official BBS mini-app or the unofficial Repo: [GAMES103 HW](https://github.com/indevn/GAMES103/tree/main/HW)\n\n## Resource Summary\n\nAll resources and homework requirements used by @indevn during the course are compiled at [GAMES103 Unofficial](https://github.com/indevn/GAMES103). For detailed implementations of the assignments, there are many articles on Zhihu that provide in-depth explanations and can be referenced."
  },
  {
    "path": "docs/计算机图形学/GAMES103.md",
    "content": "# GAMES103\n\n## 课程简介\n\n- 所属大学：Style3D/OSU\n- 先修要求：线性代数，高等数学，大学物理，编程能力，基本图形知识\n- 编程语言：C#\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：50 小时\n\n官方介绍：\n\n> 本课程将作为基于物理的计算机动画技术入门，着重介绍各种基础的物理动画模拟技术。\n>\n> 该课程主要涵盖四个方向，分别为：1）刚体模拟；2）质点弹簧、约束与布料模拟；3）基于有限元的弹性体模拟；4）流体模拟。\n>\n> 本课程内容将不会涉及具体的物理模拟引擎，但会讨论各种引擎背后的技术，以及它们的优缺点等等。由于开发学习物理模拟需要一定的数学基础，课程初始阶段也会花一定的时间复习必备的数学知识。顺利完成课程之后，同学们应该会对基础的物理模拟技术有深入理解，对高级的模拟技术也会有部分接触。\n>\n\n图形学可粗略分为渲染、模拟、几何三个领域。GAMES101 和 GAMES202 主要以渲染为主，而对于物理模拟，GAMES103 则是很棒的学习资源。\n\n## 课程资源\n\n- 课程网站：[GAMES103](http://games-cn.org/games103/)\n- 课程视频：[bilibili](https://www.bilibili.com/video/BV12Q4y1S73g)\n- 参考资料：[课程PPT](https://www.aliyundrive.com/s/YGuzfDCzw4n/folder/61824d985307bbf3920044b4afd48abb633441f6)\n- 课程作业：共四次作业，可见官方BBS小程序或非官方的Repo：[GAMES103 HW](https://github.com/indevn/GAMES103/tree/main/HW)\n\n## 资源汇总\n\n@indevn 在学习这门课中用到的所有资源和作业要求都汇总在 [GAMES103 Unoffical](https://github.com/indevn/GAMES103) 中。对于作业的具体实现，在知乎上有很多相关文章进行了细致讲解可以参考。\n"
  },
  {
    "path": "docs/计算机图形学/GAMES202.en.md",
    "content": "# GAMES202\n\n## Course Introduction\n\n- **University**: University of California, Santa Barbara (UCSB)\n- **Prerequisites**: Linear Algebra, Advanced Mathematics, C++, GAMES101\n- **Programming Language**: C++\n- **Course Difficulty**: 🌟🌟🌟🌟\n- **Estimated Study Time**: 60 hours\n\nOfficial Introduction:\n\n> This course comprehensively introduces the key issues and solutions in modern real-time rendering. Since real-time rendering (>30 FPS) demands high speed, the focus of this course is on how to break the trade-off between speed and quality under strict time constraints, ensuring both high-speed real-time performance and photorealism.\n>\n> The course will be presented in a thematic manner, covering cutting-edge content from both academia and industry, including: (1) real-time soft shadow rendering; (2) ambient lighting; (3) global illumination with or without precomputation; (4) physically-based shading models and methods; (5) real-time ray tracing; (6) anti-aliasing and supersampling; as well as various common acceleration methods.\n>\n> In addition to the latest and most comprehensive content, an important distinction of this course from other real-time rendering tutorials is that it does not teach the use of game engines or emphasize specific shader implementation techniques. Instead, it focuses on the science and knowledge behind real-time rendering. The goal of this course is to provide you with a solid foundation to develop your own real-time rendering engine upon completion.\n\nAs an advanced course following GAMES101, GAMES202 offers a slightly increased level of difficulty, but it's manageable for students who have completed GAMES101. Each project requires a moderate amount of coding but involves significant thought.\n\n## Course Resources\n\n- **Course Website**: [GAMES202](https://sites.cs.ucsb.edu/~lingqi/teaching/games202.html)\n- **Course Videos**: [Bilibili](https://www.bilibili.com/video/BV1YK4y1T7yY)\n- **Course Textbook**: Real-Time Rendering, 4th edition.\n- **Course Assignments**: [5 Projects](http://games-cn.org/forums/topic/games202zuoyehuizong/)"
  },
  {
    "path": "docs/计算机图形学/GAMES202.md",
    "content": "# GAMES202\n\n## 课程简介\n\n- 所属大学：UCSB\n- 先修要求：线性代数，高等数学，C++，GAMES101\n- 编程语言：C++\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：60 小时\n\n官方介绍:\n\n> 本课程将全面地介绍现代实时渲染中的关键问题与解决方法。由于实时渲染 (>30 FPS) 对速度要求极高，因此本课程的关注点将是在苛刻的时间限制下，人们如何打破速度与质量之间的权衡，同时保证实时的高速度与照片级的真实感。\n>\n> 本课程将以专题的形式呈现，课程内容会覆盖学术界与工业界的前沿内容，包括：（1）实时软阴影的渲染；（2）环境光照；（3）基于预计算或无预计算的全局光照；（4）基于物理的着色模型与方法；（5）实时光线追踪；（6）抗锯齿与超采样；以及一些常见的加速方式等等。\n>\n> 除了最新最全的内容之外，本课程与其它任何实时渲染的教程还有一个重要的区别，那就是本课程不会讲授任何与游戏引擎的使用相关的内容，并且不会特别强调具体的着色器实现技术，而主要讲授实时渲染背后的科学与知识。本课程的目标是在你学习完这门课的时候，你将有深厚的功底去开发一个属于你自己的实时渲染引擎。\n\n作为 GAMES101 的进阶课程，难度有一定的提升，但不会很大，相信完成了 GAMES101 的同学都有能力完成这门课程。每个 project 代码量都不会很多，但是都需要一定的思考。\n\n## 课程资源\n\n- 课程网站：[GAMES202](https://sites.cs.ucsb.edu/~lingqi/teaching/games202.html)\n- 课程视频：[bilibili](https://www.bilibili.com/video/BV1YK4y1T7yY)\n- 课程教材：Real-Time Rendering, 4th edition.\n- 课程作业：[5个project](http://games-cn.org/forums/topic/games202zuoyehuizong/)\n"
  },
  {
    "path": "docs/计算机图形学/USTC ComputerGraphics.en.md",
    "content": "# USTC Computer Graphics\r\n\r\n## Descriptions\r\n\r\n- Offered by: USTC\r\n- Prerequisites: Calculus, Linear Algebra, C/C++ Programming, Data Structures\r\n- Programming Languages: C/C++\r\n- Difficulty: 🌟🌟🌟\r\n- Class Hour: 100 hours\r\n\r\nMr. 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.\r\n\r\n## Course Resources\r\n\r\n- Course Website:http://staff.ustc.edu.cn/~lgliu/Courses/ComputerGraphics_2020_spring-summer/default.htm\r\n- Recordings:https://www.bilibili.com/video/BV1iT4y1o7oM/?spm_id_from=333.880.my_history.page.click&vd_source=eea47a16439992e41b232bc5d5684e27\r\n- 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)\r\n- Assignments:http://staff.ustc.edu.cn/~lgliu/Courses/ComputerGraphics_2020_spring-summer/default.htm, 9 homework and 1 project\r\n\r\n"
  },
  {
    "path": "docs/计算机图形学/USTC ComputerGraphics.md",
    "content": "# USTC Computer Graphics\r\n\r\n## 课程简介\r\n\r\n- 所属大学：中国科学技术大学\r\n- 先修要求：微积分，线性代数，C/C++编程，数据结构\r\n- 编程语言：C/C++\r\n- 课程难度：🌟🌟🌟\r\n- 预计学时：100小时\r\n\r\n中科大数学学院的刘利刚老师在20年疫情期间上传的课程，个人感觉跟 Games101 的注重渲染相比在内容上更全面，有着后者所没有的离散几何处理等内容，看起来更加数学化，可以与 Games101 进行互补，课程资料全面公开。\r\n\r\n## 课程资源\r\n\r\n- 课程网站：http://staff.ustc.edu.cn/~lgliu/Courses/ComputerGraphics_2020_spring-summer/default.htm\r\n- 课程视频：https://www.bilibili.com/video/BV1iT4y1o7oM/?spm_id_from=333.880.my_history.page.click&vd_source=eea47a16439992e41b232bc5d5684e27\r\n- 课程教材：本课程不规定使用规定教材，以学术前沿论文为主，以下教材仅仅为参考 E. Angel, Interactive Computer Graphics — A top-down approach using OpenGL™, 6th ed., 2011. （中文翻译版：交互式计算机图形学—基于 OpenGL 的自顶向下方法（第五版），电子工业出版社，2012）\r\n- 课程作业：http://staff.ustc.edu.cn/~lgliu/Courses/ComputerGraphics_2020_spring-summer/default.htm ，九个作业加一个 Project ，具体看官网\r\n\r\n"
  },
  {
    "path": "docs/计算机系统基础/CS110.en.md",
    "content": "# CS110: Principles of Computer Systems\n\n## Descriptions\n\n- Offered by: Stanford\n- Prerequisites: Students should be able to write moderately complex programs, read and understand portions of large code bases, trace memory diagrams, and be fluent with Unix, GDB, Valgrind, and Make.\n- Programming Languages: C/C++\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nThis course builds upon the foundational knowledge gained in CS107 and delves into advanced computer systems and program construction. It focuses on designing large systems, software that spans multiple machines, and parallel computing. The course aims to teach students the principles and practice of engineering of computer software and hardware systems.\n\nThe course covers a broad range of topics including how your programs map onto the components of computer systems, understanding of program behavior and execution, understanding the designs and tradeoffs of large systems, writing software that spans multiple machines, and writing software that runs tasks in parallel on a single machine.\n\nThe teaching style of this course is engaging and practical. The instructors guide the students to understand the numerous technical challenges and design principles in computer systems by going through the course materials and labs. Weekly labs let you add new features to the projects, which focus on enhancing students' practical skills. There are several labs during the whole semester which give you the chance to understand every aspect of the computer systems.\n\nIn addition to the labs, the course also includes assignments that are designed to provide hands-on experience and deepen understanding of the course material. Each assignment has a complete framework for testing.\n\n## Course Resources\n\n- Course Website: [winter20](https://web.stanford.edu/class/archive/cs/cs110/cs110.1204/)\n- Lecture Videos: [spring19](https://www.youtube.com/playlist?list=PLai-xIlqf4JmTNR9aPCwIAOySs1GOm8sQ)\n- Text Book: [Computer Systems: A Programmer’s Perspective](https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/CSAPP_2016.pdf)\n- Assignments: 7 labs (with solution) and 8 assignments, can be found on the course website.\n\n## Personal Resources\n\nAll the resources and assignments used by @xuzheng465 in this course are maintained in [xuzheng465/Stanford_CS110 - GitHub](https://github.com/xuzheng465/Stanford_CS110).\n"
  },
  {
    "path": "docs/计算机系统基础/CS110.md",
    "content": "# CS110: Principles of Computer Systems\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：编程基础、Unix、GDB、Valgrind\n- 编程语言：C/C++\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150小时\n\n这门课程在 [CS107](https://web.stanford.edu/class/archive/cs/cs107/cs107.1246/calendar) 的基础知识上进行拓展，深入研究计算机系统和程序构建。它专注于设计大型系统、跨多台机器的软件以及并行计算。课程的目标是教授学生计算机软件和硬件系统工程的原理和实践。\n\n课程涵盖了广泛的主题，包括你的程序如何映射到计算机系统的组件上，理解程序行为和执行，理解大型系统的设计和权衡，编写跨多台机器的软件，以及编写在单台机器上并行运行任务的软件。\n\n这门课程的教学风格是引人入胜且实用的。教师通过理论知识和丰富的编程实验，引导学生理解计算机系统中众多的技术挑战和设计原则。每周的实验让你为项目增加新功能，这些项目专注于提高学生的实践技能，让你有机会初步了解计算机系统的每一个方面，并且会公布答案，让你及时检查自己对关键知识点的掌握情况。\n\n除了实验外，课程还包括旨在提供大量编程实践经验并加深对课程材料理解的项目作业。每项作业配有完整的测试框架。\n\n## 课程资源\n\n- 课程网站：[winter20](https://web.stanford.edu/class/archive/cs/cs110/cs110.1204/)\n- 课程视频：[spring19](https://www.youtube.com/playlist?list=PLai-xIlqf4JmTNR9aPCwIAOySs1GOm8sQ)\n- 课程教材：[Computer Systems: A Programmer’s Perspective](https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/CSAPP_2016.pdf)\n- 课程作业：7 labs + 8 assignments，参见课程网站。\n\n## 资源汇总\n\n@xuzheng465 在学习这门课中用到的所有资源和作业实现都汇总在 [xuzheng465/Stanford_CS110 - GitHub](https://github.com/xuzheng465/Stanford_CS110) 中。\n"
  },
  {
    "path": "docs/计算机系统基础/CSAPP.en.md",
    "content": "# CMU CS15213: CSAPP\n\n## Descriptions\n\n- Offered by: CMU\n- Prerequisites: CS61A, CS61B\n- Programming Languages: C\n- Difficulty: 🌟🌟🌟🌟🌟\n- Class Hour: 150 hours\n\nThis course is one of CMU's most reputable courses, and is known for its extensive content and difficult projects. The course covers assembly language, computer architecture, operating systems, compilation and linking, parallelism, networking, etc. As an introductory course of computer system, it has both breadth and depth, and does require considerable perseverance and coding skills if you learn it on your own.\n\nThe textbook for this course, known as CSAPP, was written by Professor Bryant, Dean of the School of Computer Science at CMU. This is also the first computer textbook that I read carefully from the start to the end, although it was tough, I gained a lot from it.\n\nPeking University purchased the copyright of the course and opened a similar one, but you can have access to all of the course resources on its official homepage (see the link below for details).\n\nThis course is so famous that you can easily have access to the project solutions on the Internet. But if you really want to practice your coding skills, it is highly recommended to implement the projects on your own.\n\nAfter completing this course, your understanding of computer systems will definitely go up a notch.\n\n## Course Resources\n\n- Course Website: <http://csapp.cs.cmu.edu/>\n- Recordings: <https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22b96d90ae-9871-4fae-91e2-b1627b43e25e%22>\n- Textbook: Computer Systems: A Programmer's Perspective, 3/E\n- Assignments: 11 Projects, [skeleton code all open source](http://csapp.cs.cmu.edu/3e/labs.html).\n\nIf you have trouble with Chapter 7 Linking, I recommend reading the book *Programmer's Self-Cultivation*, subtitled link. load and library. This book can complete our understanding of program linking, and I believe after reading this book you will have a deeper comprehension of program linking, ELF files, and dynamic libraries. It is highly recommended to be read as a supplementary material after reading CSAPP and having a certain understanding of computer systems.\n"
  },
  {
    "path": "docs/计算机系统基础/CSAPP.md",
    "content": "# CMU CS15213: CSAPP\n\n## 课程简介\n\n- 所属大学：CMU\n- 先修要求：CS61A, CS61B\n- 编程语言：C\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：150 小时\n\nCMU 大名鼎鼎的镇系神课，以其内容庞杂，Project 巨难而闻名遐迩。课程内容覆盖了汇编语言、体系结构、操作系统、编译链接、并行、网络等，作为系统入门课，兼具深度和广度，如果自学确实需要相当的毅力和代码功底。\n\n这门课配合的教材由 CMU 计算机系主任 Bryant 教授执笔，也即所谓的 CSAPP。这也是我第一本认认真真一页一页读过去的计算机教材，虽然很难啃，但着实收获良多。\n\n北大购买了这门课的版权并开设了 Introduction to Computer System 这门课，但其实 CSAPP 所有的课程资源和实验代码都能在它的官方主页上访问到（具体参见下方链接）。\n\n这门课由于过于出名，全世界的码农争相学习，导致其 Project 的答案在网上几乎唾手可得。但如果你真的想锻炼自己的代码能力，希望你不要借鉴任何第三方代码。\n\n认真学完这一门课，你对计算机系统的理解绝对会上升一个台阶。\n\n## 课程资源\n\n- 课程网站：<http://csapp.cs.cmu.edu/>\n- 课程视频：<https://www.bilibili.com/video/BV1iW411d7hd>\n- 课程教材：Computer Systems: A Programmer's Perspective, 3/E\n- 课程作业：11 个 Project，[代码框架全部开源](http://csapp.cs.cmu.edu/3e/labs.html)\n\n英语有困难的同学可以参考B站UP主[九曲阑干](https://space.bilibili.com/354767108/)对 CSAPP 的[中文讲解](https://www.bilibili.com/video/BV1cD4y1D7uR)（据说CMU的中国留学生也在CMU的课堂上看这个视频呢）。另外如果大家在看完 CSAPP 后对书中的第七章链接有一定的疑问，推荐阅读《程序员的自我修养》这本书，书的副标题是链接，装载与库。这本书能够帮助我们完善对程序链接的理解，相信你在看完这本书以后可以对程序的链接，ELF 文件，动态库都将有一个更加深入的理解。十分推荐在读完 CSAPP，对计算机系统有一定的了解以后作为补充资料来阅读。\n\n有关 Lab 部分，同学们亦可参考 [Arthals](https://arthals.ink/about-me) 在北大计算机系统导论（ICS）课程中所做的详尽笔记：\n\n- [Data Lab](https://arthals.ink/posts/experience/data-lab)\n- [Bomb Lab](https://arthals.ink/posts/experience/bomb-lab)\n- [Attack Lab](https://arthals.ink/posts/experience/attack-lab)\n- [Arch Lab](https://arthals.ink/posts/experience/arch-lab)\n- [Cache Lab](https://arthals.ink/posts/experience/cache-lab)\n- [Tsh Lab](https://arthals.ink/posts/experience/tsh-lab)\n- [Malloc Lab](https://arthals.ink/posts/experience/malloc-lab)\n- [Proxy Lab](https://arthals.ink/posts/experience/proxy-lab)\n"
  },
  {
    "path": "docs/计算机网络/CS144.en.md",
    "content": "# CS144: Computer Network\r\n\r\n## Introduction\r\n\r\n- Offered by: Stanford\r\n- Prerequisites: Computer System Fundamentals, CS106L\r\n- Programming Language: C++\r\n- Difficulty: 🌟🌟🌟🌟🌟\r\n- Class Hour: 100 hours\r\n\r\nOne of the lecturers of this course is Professor [Nick McKeown](http://yuba.stanford.edu/~nickm/index.html), a giant in the field of Networking. At the end of each chapter of MOOC, he will interview an executive in the industry or an expert in the academia, which can certainly broaden your horizons.\r\n\r\nIn this course's project, you will incrementally build an entire TCP/IP protocol stack using C++.\r\n\r\n- `checkpoint 0` serves as a warmup lab to familiarize you with the development environment. You'll experiment with network commands (e.g., `telnet`, `netcat`), write a basic web crawler webget using Linux Kernel's `tcp_socket` abstraction, and finally implement an (In-Memory) Reliable Byte Stream.\r\n- `checkpoint 1-3` will guide you through implementing a simplified yet core-semantics-preserving, (almost fully) standards-compliant TCP Protocol that can interoperate with industrial-grade TCP implementations.\r\n- In `checkpoint 4`, you'll replace the Linux Kernel's `tcp_socket` used by `webget` in `checkpoint 0` with your own TCP implementation via framework encapsulation (TCPMinnowSocket). You'll also analyze real-world network traffic patterns (i.e., with RTT ≥ ~100ms) and perform visualized data analysis using Python — I highly recommend diving deep into this analysis; it's genuinely fascinating.\r\n- After completing the first half, `checkpoint 5` takes you to the lowest layer of the TCP/IP stack. You'll implement a `NetworkInterface` that bridges IP Datagrams and Ethernet Frames using the ARP protocol.\r\n- `checkpoint 6` builds upon your \"network card\" (NetworkInterface), requiring you to implement an IP Router that forwards received IP Datagrams appropriately.\r\n- Mirroring `checkpoint 4`, `checkpoint 7` uses framework-provided glue code (`endtoend.cc`) to simulate underlying network infrastructure in memory via `network_thread`. This connects all previously implemented components through a relay server (`cs144.keithw.org`), enabling real-time communication between client and server endpoints using your custom TCP/IP stack.\r\n\r\nThis course feels less like a computer networking class and more like the best modern C++ primer for young developers.\r\n\r\nIf you merely \"skim through\" the 8 checkpoints (two of which don't even require coding! 😂😅), you'll miss most of its essence.\r\n\r\nThe true brilliance lies in the framework code. Without meticulously reading every line, many implementation details will remain shrouded in mystery—like magic!\r\n\r\n- How exactly do we combine your implemented `TCPSender` and `TCPReceiver` into a (bi-directionally) reliable byte stream in `checkpoint 4`?\r\n- How does `TCPMinnowSocket` replace the kernel's default TCP implementation?\r\n- Where did the famed three-way handshake go?\r\n- How does multithreading work here?\r\n- Do you truly understand the final `endtoend.cc` provided in `checkpoint 7`?\r\n\r\nI deeply resonate with [Prof. Yan-Yan Jiang](https://github.com/jiangyy)'s mantra: \"**There's no magic in the computer world**.\" All these questions find answers in the framework code — if you study it closely.\r\n\r\nFor networking/system programming beginners, remember we now have LLMs like O1, Claude, and DeepSeek — far more efficient than the old \"RTFM\" approach!\r\n\r\nThere's no magic in the computer world. Go explore it!\r\n\r\n## Resources\r\n\r\n**A minor caveat**: As of January 2025, the course's [GitHub Repository](https://github.com/CS144/minnow) gets cleared completely every academic year. If you haven't forked a copy beforehand, you'll have to follow the current version.\r\n\r\nThe course website also appears to lack official archives—each year's iteration is entirely fresh. Through the Wayback Machine, I've found archived versions of the course site up to 2021. The link for the Winter 2024 version is preserved here:\r\n<https://web.archive.org/web/20241209004804/https://cs144.github.io/>.\r\n\r\n- Course Website: <https://cs144.github.io/>\r\n- Video: <https://www.youtube.com/watch?v=r2WZNaFyrbQ&list=PL6RdenZrxrw9inR-IJv-erlOKRHjymxMN>\r\n- Textbook: None\r\n- Assignments: refer to the course website\r\n\r\n## Reference\r\n\r\nFor relatively recent (post-2024) detailed walkthrough guides for this course, we recommend consulting [@xzhseh](https://github.com/xzhseh)'s comprehensive article (ps. you may need a translator to read it):\r\n[Stanford CS144 (Winter 2024) Computer Networks – Possibly the Best Modern C++ Primer for Young Developers](https://zhuanlan.zhihu.com/p/20551290958).\r\n\r\n- [PKUFlyingPig](https://github.com/PKUFlyingPig/CS144-Computer-Network)\r\n- [Lexssama's Blogs](https://lexssama.github.io/tags/CS144/)\r\n- [huangrt01](https://github.com/huangrt01/CS-Notes/blob/master/Notes/Output/Computer-Networking-Lab-CS144-Stanford.md)\r\n- [kiprey](https://kiprey.github.io/tags/CS144/)\r\n- [康宇PL's Blog](https://www.cnblogs.com/kangyupl/p/stanford_cs144_labs.html)\r\n- [doraemonzzz](http://doraemonzzz.com/tags/CS144/)\r\n- [ViXbob's libsponge](https://vixbob.moe/25.html)\r\n- [吃着土豆坐地铁的博客](https://www.epis2048.net/categories/Code/Stanford-CS144/)\r\n- [Smith](https://www.inlighting.org/archives/2021-cs144-notes/)\r\n- [星遥见](https://www.cnblogs.com/weijunji/tag/CS144/)\r\n- [EIMadrigal](https://www.cnblogs.com/EIMadrigal/p/15500472.html)\r\n- [Joey](http://yuzijun.life/2021-02/CS144)"
  },
  {
    "path": "docs/计算机网络/CS144.md",
    "content": "# CS144: Computer Network\n\n## 课程简介\n\n- 所属大学：Stanford\n- 先修要求：一定的计算机系统基础，CS106L\n- 编程语言：C++\n- 课程难度：🌟🌟🌟🌟🌟\n- 预计学时：100 小时\n\n这门课 (开源版本视频) 的主讲人之一是网络领域的巨擘 [Nick McKeown](http://yuba.stanford.edu/~nickm/index.html) 教授。这位拥有自己创业公司的学界业界双巨佬会在他慕课每一章节的最后采访一位业界的高管或者学界的高人，非常开阔眼界。\n\n在这门课的 Project 中，你将用 C++ 循序渐进地搭建出整个 TCP/IP 协议栈。\n\n- `checkpoint 0` 是让你熟悉一下开发环境的 warmup lab，简单玩一玩一些网络相关的命令 (e.g., `telnet`, `netcat`)，借助 Linux Kernel 提供的 `tcp_socket` 抽象写一个基础的网络爬虫 `webget`，最后实现一个 (In-Memory) Reliable Byte Stream。\n- 接下来你会在 `checkpoint 1-3` 首先实现一个简易但保留了核心语义且 (almost fully) standards-compliant 的 TCP Protocol，可以与其他 (工业级的) TCP 实现相互通信。\n- 在 `checkpoint 4` 中你会通过框架代码的封装 (`TCPMinnowSocket`)，将 `checkpoint 0` 中 `webget` 默认使用 Linux Kernel 的 `tcp_socket` 替换为你自己实现的 TCP Protocol；同时会实际分析真实网络 (i.e., RTT >= ~100ms) 的流量模式，需要自己用 python 等语言进行可视化数据分析 - 我很推荐大家认真的去进行数据分析，真的很有意思。\n- 过了课程的前半部分，我们会在 `checkpoint 5` 来到 TCP/IP 协议栈的最底层，你会亲自实现 `NetworkInterface`，通过 ARP 协议抹平 IP Datagram 和 Ethernet Frame 之间的沟壑。\n- 最后在 `checkpoint 6` 中，你会基于先前实现的“网卡”，也就是 `NetworkInterface`，实现 IP Router，对接收到的每一个 IP Datagram 进行相对应的转发。\n- 与 `checkpoint 4` 类似，`checkpoint 7` 会通过框架代码提供好的胶水 (`endtoend.cc`)，在内存里通过 `network_thread` 模拟底层的网络设施 (Network Infrastructure/Service)，把所有你前面实现过的组件串联起来，通过一个中继服务器 (`cs144.keithw.org`) 实现 Client 和 Server 之间的、每端使用自己实现的 TCP/IP 协议栈的实时通信。\n\n这门课与其说是计算机网络课，我更愿意称其为一门年轻人最好的现代 C++ 入门课。\n\n如果你只是 \"浅尝辄止\" 的写完 8 个 checkpoint (其中有两个 lab 你甚至不需要亲自写代码！😂😅)，那么这门课大部分的精华你就错过了。\n\n我认为这门课最精华的部分就在于提供给我们的框架代码，如果不自己深入一行行的阅读每个文件，你会发现很多细节的问题一直笼罩在迷雾里，就像魔法一样！\n\n- 比如 `checkpoint 4` 中我们到底是如何将自己实现的 `TCPSender` 和 `TCPReceiver` 拼装使用成一个 (bi-directionally) reliable byte stream 的？\n- `TCPMinnowSocket` 到底是如何替换内核里默认的 TCP 实现的？\n- 我们常说的三次握手去哪里了？\n- 多线程的场景怎么办？\n- `checkpoint 7` 提供给你的 `endtoend.cc` 你真的理解了吗？\n\n我很喜欢[蒋炎岩教授](https://github.com/jiangyy)一直强调的，“**计算机的世界里没有魔法**” 这条 quote，上面的这些问题，你仔细读过框架代码后肯定能找到答案。\n\n如果你是计算机网络 (System Programming) 的初学者，别忘了我们还有 O1, Claude, DeepSeek 这些 LLM 的帮助，这比十几年前 RTFM 的效率和效果都好太多了！\n\n计算机的世界里没有魔法，去试试吧！\n\n## 课程资源\n\n比较不幸的是，目前 (2025.1) 这门课的 [GitHub Repository](https://github.com/CS144/minnow) 会随着每一年的进度被**直接清空**，如果你没有先前自己 fork 一份，那就只能跟着现在的进度走了。\n\n课程网站也似乎没有官方的 Archive，每一年都是全新的，我在 Wayback Machine 上找到了课程网站上至 2021 年所有版本的独立备份，24 Winter 的网站链接是：<https://web.archive.org/web/20241209004804/https://cs144.github.io/>。\n\n- 课程网站：<https://cs144.github.io/>\n- 课程视频：<https://www.youtube.com/watch?v=r2WZNaFyrbQ&list=PL6RdenZrxrw9inR-IJv-erlOKRHjymxMN>\n- 课程教材：无\n- 课程作业：<https://cs144.github.io/>，8 个 Project 带你实现整个 TCP/IP 协议栈\n\n## 资源汇总\n\n有关 2024 年以后相对较新的，这门课的详细入门/通关指南，可以参考 [@xzhseh](https://github.com/xzhseh) 的这篇 [Standford CS144 (24 Winter) Computer Network - 可能是年轻人最好的现代 C++ 入门课](https://zhuanlan.zhihu.com/p/20551290958)。\n\n- [PKUFlyingPig](https://github.com/PKUFlyingPig/CS144-Computer-Network)\n- [Lexssama's Blogs](https://lexssama.github.io/tags/CS144/)\n- [huangrt01](https://github.com/huangrt01/CS-Notes/blob/master/Notes/Output/Computer-Networking-Lab-CS144-Stanford.md)\n- [kiprey](https://kiprey.github.io/tags/CS144/)\n- [康宇PL's Blog](https://www.cnblogs.com/kangyupl/p/stanford_cs144_labs.html)\n- [doraemonzzz](http://doraemonzzz.com/tags/CS144/)\n- [ViXbob's libsponge](https://vixbob.moe/25.html)\n- [吃着土豆坐地铁的博客](https://www.epis2048.net/categories/Code/Stanford-CS144/)\n- [Smith](https://www.inlighting.org/archives/2021-cs144-notes/)\n- [星遥见](https://www.cnblogs.com/weijunji/tag/CS144/)\n- [EIMadrigal](https://www.cnblogs.com/EIMadrigal/p/15500472.html)\n- [Joey](http://yuzijun.life/2021-02/CS144)\n"
  },
  {
    "path": "docs/计算机网络/CS168.en.md",
    "content": "# CS 168: Introduction to the Internet: Architecture and Protocols\n\n## Course Overview\n\n* **University**: UC Berkeley  \n* **Prerequisites**: CS 61B; CS 61C recommended; basic experience with Python programming and Unix systems  \n* **Programming Languages**: Python, Unix shell  \n* **Course Difficulty**: 🌟🌟🌟  \n* **Estimated Hours**: Approximately 140 hours (14 weeks × 10 hours/week)\n\nThis course, offered by UC Berkeley, focuses on the design principles and core protocols of the Internet. Topics include network layering, addressing, intra- and inter-domain routing, reliable transport, congestion control, and essential protocols such as TCP, UDP, IP, DNS, and HTTP. It also introduces Ethernet, wireless networks, and related technologies.  \n\nCS 168 combines theory with hands-on experience through three programming projects (Traceroute, Routing, and TCP Transport), allowing students to learn how to build and debug network protocols in a deep and comprehensive way.\n\nThe accompanying [textbook](https://textbook.cs168.io/) is particularly well-written—comprehensive yet concise and engaging. It's highly recommended for thorough reading and can also serve as a handy reference.\n\n## Course Materials\n\n* **Course Website**: [SP2025](https://sp25.cs168.io/)  \n* **Lecture Videos**: See course homepage  \n* **Textbook**: [https://textbook.cs168.io/](https://textbook.cs168.io/)  \n* **Assignments**: Three Python projects, relatively straightforward\n\n## Resource Summary\n\nAll the resources and assignments used by @XXX in this course are maintained in [PKUFlyingPig/UCB-CS168 - GitHub](https://github.com/PKUFlyingPig/UCB-CS168).\n"
  },
  {
    "path": "docs/计算机网络/CS168.md",
    "content": "# CS 168：Introduction to the Internet: Architecture and Protocols\n\n## 课程简介\n\n* **所属大学**：UC Berkeley\n* **先修要求**：CS 61B；推荐 CS 61C；具备基础的 Python 编程和 Unix 系统使用经验\n* **编程语言**：Python，Unix shell\n* **课程难度**：🌟🌟🌟\n* **预计学时**：约 140 小时（14 周 × 10 小时/周）\n\n本课程是加州大学伯克利分校开设的“Internet 架构与协议概论”，侧重于 Internet 的设计原则与核心协议，包括分层结构、寻址机制、域内与域间路由、可靠传输、拥塞控制，以及 TCP、UDP、IP、DNS、HTTP 等核心协议，并介绍以太网、无线等网络技术。CS 168 结合理论与实践，通过三个动手项目（Traceroute、路由、TCP传输）让学生学习构建并调试网络协议，体验深入且全面。\n\n尤其是课程配套编写的[教材](https://textbook.cs168.io/)写得非常好，内容全面的同时简洁生动，推荐细致阅读，也可当作手册查阅。\n\n## 课程资源\n\n* **课程网站**：[SP2025](https://sp25.cs168.io/)\n* **课程视频**：参见课程主页\n* **课程教材**：[https://textbook.cs168.io/](https://textbook.cs168.io/)\n* **课程作业**：共三个 Python Projects, 相对简单\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/UCB-CS168 - GitHub](https://github.com/PKUFlyingPig/UCB-CS168) 中。"
  },
  {
    "path": "docs/计算机网络/topdown.en.md",
    "content": "# Computer Networking: A Top-Down Approach\n\n## Descriptions\n\n- Offered by: UMass\n- Prerequisites: basic knowledge about computer system\n- Programming Languages: None\n- Difficulty: 🌟🌟🌟\n- Class Hour: 40 hours\n\n*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.\n\n## Course Resources\n\n- Course Website: <https://gaia.cs.umass.edu/kurose_ross/index.php>\n- Recordings: <https://gaia.cs.umass.edu/kurose_ross/lectures.php>\n- Textbooks: Computer Networking: A Top-Down Approach\n- Assignments: <https://gaia.cs.umass.edu/kurose_ross/wireshark.php>\n\n## Personal Resources\n\nAll 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).\n"
  },
  {
    "path": "docs/计算机网络/topdown.md",
    "content": "# Computer Networking: A Top-Down Approach\n\n## 课程简介\n\n- 所属大学：马萨诸塞大学\n- 先修要求：有一定的计算机系统基础\n- 编程语言：无\n- 课程难度：🌟🌟🌟\n- 预计学时：40 小时\n\n《自顶向下方法》是计算机网络领域的一本经典教材，两位作者 Jim Kurose 和 Keith Ross 精心制作了教材配套的课程网站，并且公开了自己录制的网课视频，交互式的在线章节测试，以及利用 WireShark 进行抓包分析的 lab。唯一遗憾的是这门课并没有硬核的编程作业，而 Stanford 的 [CS144](./CS144.md) 能很好地弥补这一点。\n\n## 课程资源\n\n- 课程网站：<https://gaia.cs.umass.edu/kurose_ross/index.php>\n- 课程视频：<https://gaia.cs.umass.edu/kurose_ross/lectures.php>\n- 课程教材：Computer Networking: A Top-Down Approach\n- 课程作业：<https://gaia.cs.umass.edu/kurose_ross/wireshark.php>\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/Computer-Network-A-Top-Down-Approach - GitHub](https://github.com/PKUFlyingPig/Computer-Network-A-Top-Down-Approach) 中。\n"
  },
  {
    "path": "docs/计算机网络/topdown_ustc.en.md",
    "content": "# USTC Computer Networking:A Top-Down Approach\n\n## Descriptions\n\n- Offered by: USTC\n- Instructor: Quan Zheng, Jian Yang\n- Prerequisites: operating system (not required)\n- Programming Languages: None\n- Difficulty: 🌟🌟🌟\n- Class Hour: 40 hours\n\nThis 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.\n\n\nThe course covers the **majority** of the textbook and also **includes** exam content, so enjoy it.\n\nThe 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.\n## Resources\n\n- Course Website: <http://staff.ustc.edu.cn/~qzheng/teaching.html>\n- Recordings: <https://www.bilibili.com/video/BV1JV411t7ow/>\n- Slides: <http://staff.ustc.edu.cn/~qzheng/cn.zip>\n- Textbook: _Computer Networking: A Top-Down Approach, 7th Edition_\n"
  },
  {
    "path": "docs/计算机网络/topdown_ustc.md",
    "content": "# USTC Computer Networking:A Top-Down Approach\n\n## 课程简介\n\n- 所属大学：中国科学技术大学\n- 授课教师：郑烇、杨坚\n- 先修要求：操作系统（非必需）\n- 编程语言：无\n- 课程难度：🌟🌟🌟\n- 预计学时：40 小时\n\n这门课应该是中文互联网上比较火的计算机网络课了，教材采用神书计算机网络（自顶向下方法），授课风格更偏向实际而非纯理论（**强烈建议**先阅读教材预习再看课，否则上课时*可能*会有些懵圈）。\n\n课程内容包括**大部分**自顶向下方法里的内容，同时**涵盖**考试内容，可放心观看。\n\n课程视频是郑烇老师本人在哔哩哔哩上上传的，且从2020年至今一直坚持在评论区答疑，属实负责且认真。\n\n## 课程资源\n\n- 课程网站：<http://staff.ustc.edu.cn/~qzheng/teaching.html>\n- 课程视频：<https://www.bilibili.com/video/BV1JV411t7ow/>\n- 课程课件：<http://staff.ustc.edu.cn/~qzheng/cn.zip>\n- 课程教材：计算机网络（自顶向下方法 第7版），机械工业出版社，2016\n"
  },
  {
    "path": "docs/软件工程/17803.en.md",
    "content": "# CMU 17-803: Empirical Methods\n\n## Descriptions\n\n- Offered by: CMU\n- Prerequisites: solid foundations of computer science\n- Programming Languages: Any\n- Difficulty: 🌟🌟🌟\n- Class Hour: 100 hours\n\nThis course focuses on a relatively \"unfamiliar\" area — empirical research in software engineering. It is taught by Bogdan Vasilescu, who has extensive expertise in empirical studies and open-source software research.\n\nThe course is offered by CMU for PhD students pursuing research in this field. It covers a range of qualitative and quantitative research methods, such as interviews, qualitative coding, survey design, and various statistical analysis methods, helping students understand, learn, and engage in empirical research. The course also introduces the extraction and integration of data from software repositories like GitHub and Stack Overflow, applying statistical modeling, social network analysis, and other data analytics techniques.\n\nAlthough the field of computer science traditionally focuses more on engineering technology, empirical research is essential for the design, evaluation, and potential social value of tools and technologies. For example, it involves evaluating new algorithms or new technological frameworks, analyzing relevant data within a field, and understanding challenges that practitioners might face. This course can expand and complement a focus on technical aspects. For those interested in pursuing research involving empirical studies in the field of software engineering, this course could be an excellent introduction.\n\n## Course Resources\n\n- Course Website: [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/)\n- Recordings: [Spring 2024](https://www.youtube.com/playlist?list=PLuPUOEODcOmsiOxD7LK5EcQcj34Y9NwYg), [Fall 2022](https://www.youtube.com/watch?v=IDtePCle3Qc)\n- Textbooks: Reading materials before each lecture.\n- Assignments: Not open-source.\n\n## Personal Resources\n\nAll the resources and assignments in this course are maintained in [bvasiles/empirical-methods - GitHub](https://github.com/bvasiles/empirical-methods).\n"
  },
  {
    "path": "docs/软件工程/17803.md",
    "content": "# CMU 17-803: Empirical Methods\n\n## 课程简介\n\n- 所属大学：CMU\n- 先修要求：面向从事软件工程实证研究的博士生开设，虽然没有硬性先修要求但最好有一定的计算机基础\n- 编程语言：不限\n- 课程难度：🌟🌟🌟\n- 预计学时：100 小时\n\n这门课专注于一个相对“陌生”的领域——包括但不限于软件工程领域的实证研究，由 [Bogdan Vasilescu](https://bvasiles.github.io/) 讲授，他在实证研究和开源软件研究方面非常深入。\n\n这门课是 CMU 为从事该方向研究的博士生开设的，涵盖一系列定性与定量研究方法，如访谈、定性编码、调查设计以及多种数据统计分析方法，帮助学生了解、学习与从事实证研究。课程还会介绍挖掘和整合 GitHub 和 Stack Overflow 等软件存储库中的数据，并运用统计建模、社交网络分析等数据分析技术。\n\n尽管计算机领域在传统上更注重工程技术，但对于工具、技术的设计、评估以及其可能的社会价值来说，实证研究是必需的。例如评估新算法或新技术框架，对某个领域进行相关数据分析，去了解从业者可能面临的挑战。这门课可以扩展和补充专注于技术领域视角。对于想要从事涉及软件工程领域实证研究的科研方向的朋友，这门课可能是一个很好的入门课程。\n\n## 课程资源\n\n- 课程网站：[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/)\n- 课程视频：[Spring 2024](https://www.youtube.com/playlist?list=PLuPUOEODcOmsiOxD7LK5EcQcj34Y9NwYg), [Fall 2022](https://www.youtube.com/watch?v=IDtePCle3Qc)\n- 课程教材：未公开，每节课前会有阅读材料\n- 课程作业：未公开\n\n## 资源汇总\n\n这门课中用到的所有资源都汇总在 [bvasiles/empirical-methods - GitHub](https://github.com/bvasiles/empirical-methods) 中。"
  },
  {
    "path": "docs/软件工程/6031.en.md",
    "content": "# MIT 6.031: Software Construction\n\n## Descriptions\n\n- Offered by: MIT\n- Prerequisites: better if you are already proficient in a programming language\n- Programming Languages: Java\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nThe goal of this course is for you to learn how to write high quality code, and what is meant by high quality is to meet the following three targets:\n\n> Safe from bugs. Correctness (correct behavior right now) and defensiveness (correct behavior in the future) are required in any software we build.\n>\n> 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.\n>\n> Ready for change. Software always changes. Some designs make it easy to make changes; others require throwing away and rewriting a lot of code.\n\nTo achieve this, the instructors write a book explaining many of the core principles of software construction and valuable lessons learned from the past. The book covers many practical topics such as how to write comments and specifications, how to design abstract data structures, and many parallel programming caveats. You will explore all of these ideas in the programming assignments.\n\nIn the 2016 spring, the course open-sourced all of its programming assignments, and the textbook can be found on the latest website (see links below).\n\n## Course Resources\n\n- Course Website: [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/)\n- Recordings: None\n- Assignments: 4 Problem Sets + 1 Project\n\n## Personal Resources\n\nAll the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/ MIT6.031-Software-Engineering - GitHub](https://github.com/PKUFlyingPig/MIT6.031-software-construction).\n\n@pengzhangzhi completed the assignments and took some notes, maintained at [pengzhangzhi/self-taught-CS/Software Construction - Github](https://github.com/pengzhangzhi/self-taught-CS/tree/main/Software%20Construction).\n"
  },
  {
    "path": "docs/软件工程/6031.md",
    "content": "# MIT 6.031: Software Construction\n\n## 课程简介\n\n- 所属大学：MIT\n- 先修要求：掌握至少一门编程语言\n- 编程语言：Java\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 小时\n\n这门课的目标就是让学生学会如何写出高质量的代码，所谓高质量，则是满足下面三个目标（课程设计者原话复制，以防自己翻译曲解本意）：\n\n> Safe from bugs. Correctness (correct behavior right now) and defensiveness (correct behavior in the future) are required in any software we build.\n>\n> 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.\n>\n> Ready for change. Software always changes. Some designs make it easy to make changes; others require throwing away and rewriting a lot of code.\n\n为此，这门课的设计者们精心编写了一本书来阐释诸多软件构建的核心原则与前人总结下来的宝贵经验，内容细节到如何编写注释和函数 Specification，如何设计抽象数据结构以及诸多并行编程的内容，并且会让你在精心设计的 Java 编程项目里体验和练习这些编程模式。\n\n2016年春季学期这门课开源了其所有编程作业的代码框架，而最新的课程教材可以在其最新的教学网站上找到，具体链接参见下方。\n\n## 课程资源\n\n- 课程网站：[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/)\n- 课程视频：无\n- 课程教材：参见课程网站的课程 notes\n- 课程作业：4 个编程作业 + 1 个 Project\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.031-software-construction - GitHub](https://github.com/PKUFlyingPig/MIT6.031-software-construction) 中。\n\n@pengzhangzhi 完成了这门课的作业并记录了笔记, 代码开源在 [pengzhangzhi/self-taught-CS/Software Construction - Github](https://github.com/pengzhangzhi/self-taught-CS/tree/main/Software%20Construction)。\n"
  },
  {
    "path": "docs/软件工程/CS169.en.md",
    "content": "# UCB CS169: software engineering\n\n## Descriptions\n\n- Offered by: UC Berkeley\n- Prerequisites: None\n- Programming Languages: Ruby/JavaScript\n- Difficulty: 🌟🌟🌟🌟\n- Class Hour: 100 hours\n\nThis 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.\n\nThis 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.\n\n## Course Resources\n\n- Course Website: <http://www.saasbook.info/courses>\n- Recordings: refer to the course website.\n- Textbook: [Software as a service](https://github.com/PKUFlyingPig/CS169-Software-Engineering/blob/master/saasbook.pdf)\n- Assignments: refer to the course website.\n\n## Personal Resources\n\nAll 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).\n"
  },
  {
    "path": "docs/软件工程/CS169.md",
    "content": "# UCB CS169: software engineering\n\n## 课程简介\n\n- 所属大学：UC Berkeley\n- 先修要求：无\n- 编程语言：Ruby/JavaScript\n- 课程难度：🌟🌟🌟🌟\n- 预计学时：100 小时\n\n伯克利的软件工程课程，不同于很多传统的软件工程课强调各种类图、文档设计 (plan and document 模式)，这门课专注于最近逐渐流行起来的敏捷开发 (Agile Development)模式，利用云平台提供软件即服务 (software as a service)。为此，课程设计者编写了 [Software as a service][Software_as_a_service] 这本教材，通过 Ruby/Rails 框架来阐释 SaaS 这个概念，并且有丰富的配套编程练习。\n\n[Software_as_a_service]: https://github.com/PKUFlyingPig/CS169-Software-Engineering/blob/master/saasbook.pdf\n\n这门课在 [Edx](https://www.edx.org/) 这个由 MIT 和 Harvard 大学发起的在线教育平台全资料开源，大家可以在 Edx 自行搜索 *Agile SaaS Development* 这门课程进行学习。课程内容基本按照教材的顺序带你一步步以敏捷开发的方式搭建一个软件并免费部署在云平台上。\n\n## 课程资源\n\n- 课程网站：<http://www.saasbook.info/courses>\n- 课程视频：参见 Edx 课程主页。\n- 课程教材：[Software as a service](https://github.com/PKUFlyingPig/CS169-Software-Engineering/blob/master/saasbook.pdf)\n- 课程作业：参见 Edx 课程主页。\n\n## 资源汇总\n\n@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/CS169-Software-Engineering - GitHub](https://github.com/PKUFlyingPig/CS169-Software-Engineering) 中。\n"
  },
  {
    "path": "mkdocs.yml",
    "content": "site_name: CS自学指南\nsite_url: https://csdiy.wiki/\nsite_author: PKUFlyingPig\nsite_description: >-\n  CS自学指南\n\nrepo_name: cs-self-learning\nrepo_url: https://github.com/pkuflyingpig/cs-self-learning/\n\ncopyright: Copyright &copy; 2021-present <a href=\"https://github.com/PKUFlyingPig\" target=\"_blank\" rel=\"noopener noreferrer\">PKUFlyingPig</a>\n\ntheme:\n  name: material\n  language: zh\n  static_templates:\n    - 404.html\n  favicon: images/favicon.ico\n  apple-touch-icon-precomposed: images/mobile_icon.png\n  include_search_page: false\n  search_index_only: true\n\n  features:\n    - header.autohide\n    - navigation.tracking\n    - navigation.top\n    - search.highlight\n    - search.share\n    - search.suggest\n    - content.code.annotate\n\n  palette:\n    - media: \"(prefers-color-scheme: light)\"\n      scheme: default\n      primary: light blue\n      accent: deep purple\n      toggle:\n        icon: material/weather-sunny\n        name: Switch to dark mode\n    - media: \"(prefers-color-scheme: dark)\"\n      scheme: slate\n      primary: cyan\n      accent: deep purple\n      toggle:\n        icon: material/weather-night\n        name: Switch to light mode\n\n  font:\n    text: Roboto Slab\n    code: Roboto Mono\n  icon:\n    repo: fontawesome/brands/github\n\n  custom_dir: overrides\n\nmarkdown_extensions:\n  - attr_list\n  - md_in_html\n  - footnotes\n\nplugins:\n  - i18n:\n      languages:\n        - locale: zh\n          default: true\n          name: 简体中文\n          build: true\n        - locale: en\n          name: English\n          build: true\n          site_name: csdiy.wiki\n          nav_translations:\n            前言: Foreword\n            如何使用这本书: How To Use The Book\n            一个仅供参考的CS学习规划: Guideline\n            必学工具: Productivity Toolkit\n            翻墙: GFW\n            日常学习工作流: Notes Workflow\n            实用工具箱: Useful Tools\n            毕业论文: Thesis Writing\n            信息检索: Information Retrieval\n            好书推荐: Book Recommendation\n            数学基础: Fundamental Mathematics\n            数学进阶: Advanced Mathematics\n            编程入门: Fundamental Programming\n            Python 语言: Python Language\n            Java 语言: Java Language\n            C 语言: C Language\n            C++ 语言: C++ Language\n            Rust 语言: Rust Language\n            函数式语言: Functional Programming\n            电子基础: Fundamental Electronics\n            数据结构与算法: Data Structures and Algorithms\n            软件工程: Software Engineering\n            计算机系统基础: Computer Systems Principles\n            体系结构: Computer Architecture\n            操作系统: Operating Systems\n            并行与分布式系统: Distributed Systems\n            计算机系统安全: Computer Security\n            计算机网络: Computer Networking\n            数据库系统: Database Systems\n            编译原理: Compilers\n            编程语言设计与分析: Programming Language Design and Analysis\n            NJU 软件分析: NJU Software Analysis\n            PKU 软件分析: PKU Software Analysis\n            程序语言设计: Programming Language\n            计算机图形学: Computer Graphics\n            Web开发: Web Development\n            数据科学: Data Science\n            人工智能: Artificial Intelligence\n            机器学习: Machine Learning\n            机器学习系统: Machine Learning Systems\n            智能计算系统: Intelligent Computing Systems\n            深度学习: Deep Learning\n            \"国立台湾大学: 李宏毅机器学习\": NTU Machine Learning\n            深度生成模型: Deep Generative Models\n            学习路线图: Roadmap\n            \"大语言模型\": Large Language Models\n            机器学习进阶: Advanced Machine Learning\n            学习路线图: Roadmap\n            后记: Postscript\n  - search:\n      lang:\n        - zh\n        - en\n  - git-revision-date:\n  - minify:\n      minify_html: true\n  - open-in-new-tab:\n\nextra:\n  social:\n    - icon: fontawesome/brands/github\n      link: https://github.com/pkuflyingpig/cs-self-learning/\n  analytics:\n    provider: google\n    property: G-KJB4RXSKZG\n\nnav:\n  - 前言: \"index.md\"\n  - 如何使用这本书: \"使用指南.md\"\n  - 一个仅供参考的CS学习规划: \"CS学习规划.md\"\n  - 必学工具:\n      - 翻墙: \"必学工具/翻墙.md\"\n      - Vim: \"必学工具/Vim.md\"\n      - Emacs: \"必学工具/Emacs.md\"\n      - Git: \"必学工具/Git.md\"\n      - GitHub: \"必学工具/GitHub.md\"\n      - \"GNU Make\": \"必学工具/GNU_Make.md\"\n      - CMake: \"必学工具/CMake.md\"\n      - LaTeX: \"必学工具/LaTeX.md\"\n      - Docker: \"必学工具/Docker.md\"\n      - Scoop: \"必学工具/Scoop.md\"\n      - 日常学习工作流: \"必学工具/workflow.md\"\n      - 实用工具箱: \"必学工具/tools.md\"\n      - 毕业论文: \"必学工具/thesis.md\"\n      - 信息检索: \"必学工具/信息检索.md\"\n  - 好书推荐: \"好书推荐.md\"\n  - 数学基础:\n      - \"MIT18.01/18.02: Calculus\": \"数学基础/MITmaths.md\"\n      - \"MIT18.06: Linear Algebra\": \"数学基础/MITLA.md\"\n      - \"MIT6.050J: Information theory and Entropy\": \"数学基础/information.md\"\n  - 数学进阶:\n      - \"UCB CS70: discrete Math and probability theory\": \"数学进阶/CS70.md\"\n      - \"UCB CS126: probability theory\": \"数学进阶/CS126.md\"\n      - \"MIT 6.042J: Mathematics for Computer Science\": \"数学进阶/6.042J.md\"\n      - \"MIT18.330: Introduction to numerical analysis\": \"数学进阶/numerical.md\"\n      - \"Standford EE364A: Convex Optimization\": \"数学进阶/convex.md\"\n      - \"The Information Theory, Pattern Recognition, and Neural Networks\": \"数学进阶/The_Information_Theory_Pattern_Recognition_and_Neural_Networks.md\"\n  - 编程入门:\n      - \"MIT-Missing-Semester\": \"编程入门/MIT-Missing-Semester.md\"\n      - \"Sysadmin DeCal\": \"编程入门/DeCal.md\"\n      - Python 语言:\n        - \"UCB CS61A: Structure and Interpretation of Computer Programs\": \"编程入门/Python/CS61A.md\"\n        - \"CS50P: CS50's Introduction to Programming with Python\": \"编程入门/Python/CS50P.md\"\n        - \"MIT6.100L: Introduction to CS and Programming using Python\": \"编程入门/Python/MIT6.100L.md\"\n      - C 语言:\n        - \"Harvard CS50: This is CS50x\": \"编程入门/C/CS50.md\"\n        - \"Duke University: Introductory C Programming Specialization\": \"编程入门/C/Duke-Coursera-Intro-C.md\"\n      - C++ 语言:\n        - \"AmirKabir University of Technology AP1400-2: Advanced Programming\": \"编程入门/cpp/AUT1400.md\"\n        - \"Stanford CS106L: Standard C++ Programming\": \"编程入门/cpp/CS106L.md\"\n        - \"Stanford CS106B/X\": \"编程入门/cpp/CS106B_CS106X.md\"\n      - Java 语言:\n        - \"MIT 6.092: Introduction To Programming In Java\": \"编程入门/Java/MIT 6.092.md\"\n      - Rust 语言:\n        - \"Stanford CS110L: Safety in Systems Programming\": \"编程入门/Rust/CS110L.md\"\n        - \"KAIST CS220: Programming Principles\": \"编程入门/Rust/cs220.md\"\n        - \"KAIST CS431: Concurrent Programming\": \"编程入门/Rust/cs431.md\"\n      - 函数式语言:\n        - \"Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful\": \"编程入门/Functional/CS3110.md\"\n        - \"Haskell MOOC\": \"编程入门/Functional/Haskell-MOOC.md\"\n  - 电子基础:\n      - \"EE16A&B: Designing Information Devices and Systems I&II\": \"电子基础/EE16.md\"\n      - \"UCB EE120 : Signal and Systems\": \"电子基础/signal.md\"\n      - \"MIT 6.007 Signals and Systems\": \"电子基础/Signals_and_Systems_AVO.md\"\n  - 数据结构与算法:\n      - \"UCB CS61B: Data Structures and Algorithms\": \"数据结构与算法/CS61B.md\"\n      - \"Coursera: Algorithms I & II\": \"数据结构与算法/Algo.md\"\n      - \"MIT 6.006: Introduction to Algorithms\": \"数据结构与算法/6.006.md\"\n      - \"MIT 6.046: Design and Analysis of Algorithms\": \"数据结构与算法/6.046.md\"\n      - \"UCB CS170: Efficient Algorithms and Intractable Problems\": \"数据结构与算法/CS170.md\"\n  - 软件工程:\n      - \"MIT 6.031: Software Construction\": \"软件工程/6031.md\"\n      - \"UCB CS169: software engineering\": \"软件工程/CS169.md\"\n      - \"CMU 17-803: Empirical Methods\": \"软件工程/17803.md\"\n  - 计算机系统基础:\n      - \"CMU 15-213: CSAPP\": \"计算机系统基础/CSAPP.md\"\n      - \"Stanford CS110: Principles of Computer Systems\": \"计算机系统基础/CS110.md\"\n  - 体系结构:\n      - \"Coursera: Nand2Tetris\": \"体系结构/N2T.md\"\n      - \"UCB CS61C: Great Ideas in Computer Architecture\": \"体系结构/CS61C.md\"\n      - \"ETHz: Digital Design and Computer Architecture\": \"体系结构/DDCA.md\"\n      - \"ETHz: Computer Architecture\": \"体系结构/CA.md\"\n  - 操作系统:\n      - \"MIT 6.S081: Operating System Engineering\": \"操作系统/MIT6.S081.md\"\n      - \"UCB CS162: Operating Systems and Systems Programming\": \"操作系统/CS162.md\"\n      - \"NJU OS: Operating System Design and Implementation\": \"操作系统/NJUOS.md\"\n      - \"HIT OS: Operating System\": \"操作系统/HITOS.md\"\n  - 并行与分布式系统:\n      - \"CMU 15-418/Stanford CS149: Parallel Computing\": \"并行与分布式系统/CS149.md\"\n      - \"MIT 6.824: Distributed System\": \"并行与分布式系统/MIT6.824.md\"\n  - 计算机系统安全:\n      - \"UCB CS161: Computer Security\": \"系统安全/CS161.md\"\n      - \"MIT 6.1600: Foundations of Computer Security\": \"系统安全/MIT6.1600.md\"\n      - \"MIT 6.858: Computer System Security\": \"系统安全/MIT6.858.md\"\n      - \"ASU CSE365: Introduction to Cybersecurity\": \"系统安全/CSE365.md\"\n      - \"ASU CSE466: Computer Systems Security\": \"系统安全/CSE466.md\"\n      - \"SU SEED Labs\": \"系统安全/SEEDLabs.md\"\n  - 计算机网络:\n      - \"UCB CS168: Introduction to the Internet: Architecture and Protocols\": \"计算机网络/CS168.md\"\n      - \"Stanford CS144: Computer Network\": \"计算机网络/CS144.md\"\n      - \"USTC Computer Networking:A Top-Down Approach\": \"计算机网络/topdown_ustc.md\"\n      - \"Computer Networking: A Top-Down Approach\": \"计算机网络/topdown.md\"\n  - 数据库系统:\n      - \"UCB CS186: Introduction to Database System\": \"数据库系统/CS186.md\"\n      - \"CMU 15-445: Database Systems\": \"数据库系统/15445.md\"\n      - \"Caltech CS122: Database System Implementation\": \"数据库系统/CS122.md\"\n      - \"Stanford CS346: Database System Implementation\": \"数据库系统/CS346.md\"\n      - \"CMU 15-799: Special Topics in Database Systems\": \"数据库系统/15799.md\"\n  - 编译原理:\n      - \"PKU 编译原理实践\": \"编译原理/PKU-Compilers.md\"\n      - \"Stanford CS143: Compilers\": \"编译原理/CS143.md\"\n      - \"NJU 编译原理\": \"编译原理/NJU-Compilers.md\"\n      - \"KAIST CS420: Compiler Design\": \"编译原理/CS420.md\"\n      - \"USTC 编译原理与技术\": \"编译原理/USTC-Compilers.md\"\n      - \"SJTU 编译原理\": \"编译原理/SJTU-Compilers.md\"\n  - 编程语言设计与分析:\n      - \"Stanford CS242: Programming Languages\": \"编程语言设计与分析/CS242.md\"\n      - \"NJU 软件分析\": \"编程语言设计与分析/NJU-SoftwareAnalysis.md\"\n      - \"PKU 软件分析\": \"编程语言设计与分析/PKU-SoftwareAnalysis.md\"\n      - \"Cambridge: Semantics of Programming Languages\": \"编程语言设计与分析/Cambridge-Semantics.md\"\n  - 计算机图形学:\n      - \"GAMES101\": \"计算机图形学/GAMES101.md\"\n      - \"GAMES202\": \"计算机图形学/GAMES202.md\"\n      - \"GAMES103\": \"计算机图形学/GAMES103.md\"\n      - \"Stanford CS148\": \"计算机图形学/CS148.md\"\n      - \"CMU 15-462\": \"计算机图形学/15462.md\"\n      - \"USTC CG\": \"计算机图形学/USTC ComputerGraphics.md\"\n  - Web开发:\n      - \"MIT web development course\": \"Web开发/mitweb.md\"\n      - \"Stanford CS142: Web Applications\": \"Web开发/CS142.md\"\n      - \"University of Helsinki: Full Stack open 2022\": \"Web开发/fullstackopen.md\"\n      - \"CS571 Building UI (React & React Native)\": \"Web开发/CS571.md\"\n  - 数据科学:\n      - \"UCB Data100: Principles and Techniques of Data Science\": \"数据科学/Data100.md\"\n  - 人工智能:\n      - \"Neural Networks: Zero to Hero\": \"人工智能/Neural Networks：Zero to Hero.md\"\n      - \"Harvard CS50's Introduction to AI with Python\": \"人工智能/CS50.md\"\n      - \"UCB CS188: Introduction to Artificial Intelligence\": \"人工智能/CS188.md\"\n  - 机器学习:\n      - \"Coursera: Machine Learning\": \"机器学习/ML.md\"\n      - \"Stanford CS229: Machine Learning\": \"机器学习/CS229.md\"\n      - \"UCB CS189: Introduction to Machine Learning\": \"机器学习/CS189.md\"\n  - 机器学习系统:\n      - \"智能计算系统\": \"机器学习系统/AICS.md\"\n      - \"CMU 10-414/714: Deep Learning Systems\": \"机器学习系统/CMU10-414.md\"\n      - \"MIT6.5940: TinyML and Efficient Deep Learning Computing\": \"机器学习系统/EML.md\"\n      - \"Machine Learning Compilation\": \"机器学习系统/MLC.md\"\n      - \"UCSD CSE234: Data Systems for Machine Learning\": \"机器学习系统/CSE234.md\"\n  - 深度学习:\n      - \"Coursera: Deep Learning\": \"深度学习/CS230.md\"\n      - \"国立台湾大学: 李宏毅机器学习\": \"深度学习/LHY.md\"\n      - \"CMU 11-785: Introduction to Deep Learning\": \"深度学习/CMU11-785.md\"\n      - \"MIT 6.7960: Deep Learning\": \"深度学习/MIT6-7960.md\"\n      - \"NYU DLSP21: NYU Deep Learning Spring 2021\": \"深度学习/NYU-DLSP21.md\"\n      - \"UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision\": \"深度学习/EECS498-007.md\"\n      - \"Stanford CS231n: CNN for Visual Recognition\": \"深度学习/CS231.md\"\n      - \"Stanford CS224n: Natural Language Processing\": \"深度学习/CS224n.md\"\n      - \"Stanford CS224w: Machine Learning with Graphs\": \"深度学习/CS224w.md\"\n      - \"UCB CS285: Deep Reinforcement Learning\": \"深度学习/CS285.md\"\n  - 深度生成模型:\n      - \"学习路线图\": \"深度生成模型/roadmap.md\"\n      - \"MIT 6.S184: Generative AI with Stochastic Differential Equations\": \"深度生成模型/MIT6.S184.md\"\n      - \"大语言模型\":\n        - \"CMU 11-868: Large Language Model System\": \"深度生成模型/大语言模型/CMU11-868.md\"\n        - \"CMU 11-667: Large Language Models: Methods and Applications\": \"深度生成模型/大语言模型/CMU11-667.md\"\n        - \"CMU 11-711: Advanced Natural Language Processing\": \"深度生成模型/大语言模型/CMU11-711.md\"\n  - 机器学习进阶:\n      - \"学习路线图\": \"机器学习进阶/roadmap.md\"\n      - \"CMU 10-708: Probabilistic Graphical Models\": \"机器学习进阶/CMU10-708.md\"\n      - \"Columbia STAT 8201: Deep Generative Models\": \"机器学习进阶/STAT8201.md\"\n      - \"U Toronto STA 4273 Winter 2021: Minimizing Expectations\": \"机器学习进阶/STA4273.md\"\n      - \"Stanford STATS214 / CS229M: Machine Learning Theory\": \"机器学习进阶/CS229M.md\"\n  - 后记: \"后记.md\"\n"
  },
  {
    "path": "overrides/partials/comments.html",
    "content": "<!-- Insert generated snippet here -->\n<script src=\"https://giscus.app/client.js\"\n        data-repo=\"PKUFlyingPig/cs-self-learning\"\n        data-repo-id=\"R_kgDOGP67ng\"\n        data-category=\"Announcements\"\n        data-category-id=\"DIC_kwDOGP67ns4COM9Q\"\n        data-mapping=\"title\"\n        data-reactions-enabled=\"1\"\n        data-emit-metadata=\"0\"\n        data-input-position=\"top\"\n        data-theme=\"light_protanopia\"\n        data-lang=\"zh-CN\"\n        data-loading=\"lazy\"\n        crossorigin=\"anonymous\"\n        async>\n</script>\n\n<!-- Synchronize Giscus theme with palette -->\n<script>\nvar giscus = document.querySelector(\"script[src*=giscus]\")\n\n// Set palette on initial load\nvar palette = __md_get(\"__palette\")\nif (palette && typeof palette.color === \"object\") {\n    var theme = palette.color.scheme === \"slate\"\n    ? \"dark_protanopia\"\n    : \"light_protanopia\"\n\n    // Instruct Giscus to set theme\n    giscus.setAttribute(\"data-theme\", theme) \n}\n\n// Register event handlers after documented loaded\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    var ref = document.querySelector(\"[data-md-component=palette]\")\n    ref.addEventListener(\"change\", function() {\n    var palette = __md_get(\"__palette\")\n    if (palette && typeof palette.color === \"object\") {\n        var theme = palette.color.scheme === \"slate\"\n        ? \"dark_protanopia\"\n        : \"light_protanopia\"\n\n        // Instruct Giscus to change theme\n        var frame = document.querySelector(\".giscus-frame\")\n        frame.contentWindow.postMessage(\n        { giscus: { setConfig: { theme } } },\n        \"https://giscus.app\"\n        )\n    }\n    })\n})\n</script>"
  },
  {
    "path": "requirements.txt",
    "content": "mkdocs-material==9.5.2\nmkdocs-minify-plugin==0.7.1\nmkdocs-git-revision-date-plugin\njinja2==3.1.2\nmkdocs-static-i18n==1.2.0\nmkdocs-open-in-new-tab==1.0.8\n\n"
  },
  {
    "path": "template.en.md",
    "content": "# Course Code: Course Name\n\n## Descriptions\n\n- Offered by:\n- Prerequisites:\n- Programming Languages:\n- Difficulty: 🌟🌟🌟\n- Class Hour:\n\n<!-- \n        Introduce the course in a paragraph or two, including but not limited to:\n        (1) The technical knowledge covered in lectures\n        (2) Its differences and features compared to similar courses\n        (3) Your personal experiences and feelings after studying this course\n        (4) Caveats about studying this course on your own (pitfalls, difficulty warnings, etc.)\n        (5) ... ...\n-->\n\n## Course Resources\n\n- Course Website:\n- Recordings:\n- Textbooks:\n- Assignments:\n\n## Personal Resources\n\nAll the resources and assignments used by @XXX in this course are maintained in [user/repo - GitHub](https://github.com/user/repo).\n"
  },
  {
    "path": "template.md",
    "content": "# 课号：课程名称\n\n## 课程简介\n\n- 所属大学：\n- 先修要求：\n- 编程语言：\n- 课程难度：🌟🌟🌟\n- 预计学时：\n\n<!-- 用一两段话介绍这门课程，内容包括但不限于：\n    （1）课程覆盖的知识点范围\n    （2）与同类课程相比它的优势与特点\n    （3）学习这门课程的体验与感受\n    （4）自学这门课的注意点（踩过的坑、难度预警等等）\n    （5）... ...\n-->\n\n## 课程资源\n\n- 课程网站：\n- 课程视频：\n- 课程教材：\n- 课程作业：\n\n## 资源汇总\n\n@XXX 在学习这门课中用到的所有资源和作业实现都汇总在 [user/repo - GitHub](https://github.com/user/repo) 中。\n\n## 备注\n\n编写文档时尽量遵守 [Markdown Rules][md_rules] 与 [Markdown 简体中文与西文混排要点][cn_en_mixed_typography]，前者可以通过 VS Code 插件 *markdownlint* 提示并处理。\n\n[md_rules]: https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md\n[cn_en_mixed_typography]: https://github.com/selfteaching/markdown-writing-with-mixed-cn-en\n\n正文中请删除该节。\n"
  }
]