Compare commits

...

16 Commits

Author SHA1 Message Date
wuqi ce70bc5460
Merge 564aee5ecb into 5dc50940c6 2024-05-07 15:03:12 +08:00
Yuichi 5dc50940c6
[UPDATE] Add the 2024 edition lab of AICS (#600)
* 为智能计算系统课程添加2024年新版实验描述及相关资源

* [UPDATE] Add the 2024 edition lab of AICS

* [UPDATE] Update the links
2024-05-07 13:18:35 +08:00
Yinmin Zhong a9b0308e29
[UPDATE] Update video links with Chinese translation (#597)
* update index

* update new links
2024-04-14 17:33:21 +08:00
Yinmin Zhong bbf17e3f21
[COURSE] Add CMU17-803 Empirical Methods (#596) 2024-04-14 15:57:28 +08:00
Yinmin Zhong 2f81e8ceaa
[COURSE] Add CS110 System Principles course (#595)
* reorganize intro to system courses

* nits
2024-04-14 15:18:18 +08:00
Yinmin Zhong 7a320f474a
[COURSE] Add PKU compiler practice course (#594)
* add PKU compiler practice course

* nits
2024-04-14 14:35:08 +08:00
Yinmin Zhong 4979ddabbe
[UPDATE] Reorganize the intro to programming section (#593)
* reorganize intro to programming

* nits

* nits
2024-04-14 00:55:13 +08:00
Yinmin Zhong b1f5acaa25
[COURSE] Add MIT6.1600 (#592) 2024-04-13 23:43:57 +08:00
浮心物语 25956200b5
[FIX] Fix a typo in workflow.md (#586) 2024-04-07 13:22:02 +08:00
Arthals 81e939f5f5
[UPDATE] Add lab notes for CSAPP (#585) 2024-04-06 22:49:09 +08:00
TekkenSteve efb461bbc3
[COURSE] Add NJU Compiler Course (#579) 2024-03-31 16:26:19 +08:00
wuqi 564aee5ecb Update 信息检索.md
chatGPT补充
2023-05-06 14:08:50 +08:00
wuqi 9133db39b7 Update 信息检索.md
添加ChatGPT
2023-05-06 12:10:37 +08:00
wuqi 63daea1b9e
Merge branch 'PKUFlyingPig:master' into master 2023-05-05 08:43:49 +08:00
wuqi 4ee347eeb6 Update 信息检索.md
更新格式和部分文字
2022-12-23 09:35:26 +08:00
wuqi 1abdb29e69 添加信息检索
添加信息检索
2022-12-06 09:57:57 +08:00
59 changed files with 501 additions and 102 deletions

View File

@ -141,28 +141,28 @@ As a computer science student, I often hear arguments about the uselessness of m
> Languages are tools, and you choose the right tool for the right job. Since there's no universally perfect tool, there's no universally perfect language.
#### Shell
#### General
- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)
- [Harvard CS50: This is CS50x](编程入门/C/CS50.md)
#### Python
- [CS50P: CS50's Introduction to Programming with Python](编程入门/CS50P.md)
- [Harvard CS50: This is CS50x](编程入门/CS50.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/CS61A.md)
- [CS50P: CS50's Introduction to Programming with Python](编程入门/Python/CS50P.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/Python/CS61A.md)
#### C++
- [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/CS106L.md)
- [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/cpp/CS106L.md)
#### Rust
- [Stanford CS110L: Safety in Systems Programming](编程入门/CS110L.md)
- [Stanford CS110L: Safety in Systems Programming](编程入门/Rust/CS110L.md)
#### OCaml
- [Cornell CS3110 textbook: Functional Programming in OCaml](https://cs3110.github.io/textbook/cover.html)
- [Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful](编程入门/Functional/CS3110.md)
### Electronics Fundamentals
@ -184,7 +184,7 @@ Signals and Systems is a course I find very worthwhile. Initially, I studied it
Algorithms are the core of computer science and the foundation for almost all professional courses. How to abstract real-world problems into algorithmic problems mathematically and solve them under time and memory constraints using appropriate data structures is the eternal theme of algorithm courses. If you are fed up with your teacher's rote teaching, I highly recommend UC Berkeley's [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) and Princeton's [Coursera: Algorithms I & II](数据结构与算法/Algo.md). Both courses are taught in a deep yet simple manner and have rich and interesting programming experiments to integrate theory with knowledge.
Both of these courses are based on Java. If you prefer C/C++, you can refer to Stanford's data structure and basic algorithm course [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md). For those who prefer Python, you can learn MIT's introductory algorithm course [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md).
Both of these courses are based on Java. If you prefer C/C++, you can refer to Stanford's data structure and basic algorithm course [Stanford CS106B/X: Programming Abstractions](编程入门/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).
For those interested in more advanced algorithms and NP problems, consider UC Berkeley's course on algorithm design and analysis [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md) or MIT's advanced algorithms course [MIT 6.046: Design and Analysis of Algorithms](数据结构与算法/6.046.md).
@ -216,7 +216,7 @@ Computer systems are a vast and profound topic. Before delving into a specific a
[MIT6.033: System Engineering](http://web.mit.edu/6.033/www/) is MIT's introductory course to systems, covering topics like operating systems, networks, distributed systems, and system security. In addition to the theory, this course also teaches some writing and expression skills, helping you learn how to design, introduce, and analyze your own systems. The accompanying textbook *Principles of Computer System Design: An Introduction* is also very well written and recommended for reading.
[CMU 15-213: Introduction to Computer System](体系结构/CSAPP.md) is CMUs introductory systems course, covering architecture, operating systems, linking, parallelism, networks, etc., with both breadth and depth. The accompanying textbook *Computer Systems: A Programmer's Perspective* is also of very high quality and strongly recommended for reading.
[CMU 15-213: Introduction to Computer System](计算机系统基础/CSAPP.md) is CMUs introductory systems course, covering architecture, operating systems, linking, parallelism, networks, etc., with both breadth and depth. The accompanying textbook *Computer Systems: A Programmer's Perspective* is also of very high quality and strongly recommended for reading.
### Operating Systems

View File

@ -141,28 +141,28 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
> 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.
#### Shell
#### General
- [MIT-Missing-Semester](编程入门/MIT-Missing-Semester.md)
- [Harvard CS50: This is CS50x](编程入门/C/CS50.md)
#### Python
- [CS50P: CS50's Introduction to Programming with Python](编程入门/CS50P.md)
- [Harvard CS50: This is CS50x](编程入门/CS50.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/CS61A.md)
- [CS50P: CS50's Introduction to Programming with Python](编程入门/Python/CS50P.md)
- [UCB CS61A: Structure and Interpretation of Computer Programs](编程入门/Python/CS61A.md)
#### C++
- [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/CS106L.md)
- [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)
- [Stanford CS106L: Standard C++ Programming](编程入门/cpp/CS106L.md)
#### Rust
- [Stanford CS110L: Safety in Systems Programming](编程入门/CS110L.md)
- [Stanford CS110L: Safety in Systems Programming](编程入门/Rust/CS110L.md)
#### OCaml
- [Cornell CS3110 textbook: Functional Programming in OCaml](https://cs3110.github.io/textbook/cover.html)
- [Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful](编程入门/Functional/CS3110.md)
### 电子基础
@ -184,7 +184,7 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
算法是计算机科学的核心,也是几乎一切专业课程的基础。如何将实际问题通过数学抽象转化为算法问题,并选用合适的数据结构在时间和内存大小的限制下将其解决是算法课的永恒主题。如果你受够了老师的照本宣科,那么我强烈推荐伯克利的 [UCB CS61B: Data Structures and Algorithms](数据结构与算法/CS61B.md) 和普林斯顿的 [Coursera: Algorithms I & II](数据结构与算法/Algo.md),这两门课的都讲得深入浅出并且会有丰富且有趣的编程实验将理论与知识结合起来。
以上两门课程都是基于 Java 语言,如果你想学习 C/C++ 描述的版本,可以参考斯坦福的数据结构与基础算法课程 [Stanford CS106B/X: Programming Abstractions](编程入门/CS106B_CS106X.md)。偏好 Python 的同学可以学习 MIT 的算法入门课 [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md)
以上两门课程都是基于 Java 语言,如果你想学习 C/C++ 描述的版本,可以参考斯坦福的数据结构与基础算法课程 [Stanford CS106B/X: Programming Abstractions](编程入门/cpp/CS106B_CS106X.md)。偏好 Python 的同学可以学习 MIT 的算法入门课 [MIT 6.006: Introduction to Algorithms](数据结构与算法/6.006.md)
对一些更高级的算法以及 NP 问题感兴趣的同学可以学习伯克利的算法设计与分析课程 [UCB CS170: Efficient Algorithms and Intractable Problems](数据结构与算法/CS170.md) 或者 MIT 的高阶算法 [MIT 6.046: Design and Analysis of Algorithms](数据结构与算法/6.046.md)。
@ -214,7 +214,7 @@ IDE (Integrated Development Environment):集成开发环境,说白了就是
[MIT6.033: System Engineering](http://web.mit.edu/6.033/www/) 是 MIT 的系统入门课,主题涉及了操作系统、网络、分布式和系统安全,除了知识点的传授外,这门课还会讲授一些写作和表达上的技巧,让你学会如何设计并向别人介绍和分析自己的系统。这本书配套的教材 *Principles of Computer System Design: An Introduction* 也写得非常好,推荐大家阅读。
[CMU 15-213: Introduction to Computer System](体系结构/CSAPP.md) 是 CMU 的系统入门课,内容覆盖了体系结构、操作系统、链接、并行、网络等等,兼具广度和深度,配套的教材 *Computer Systems: A Programmer's Perspective* 也是质量极高,强烈建议阅读。
[CMU 15-213: Introduction to Computer System](计算机系统基础/CSAPP.md) 是 CMU 的系统入门课,内容覆盖了体系结构、操作系统、链接、并行、网络等等,兼具广度和深度,配套的教材 *Computer Systems: A Programmer's Perspective* 也是质量极高,强烈建议阅读。
### 操作系统

View File

@ -10,10 +10,11 @@ It is also a gift to the young students at Peking University. It would be a grea
The 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).
- 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.
- 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.
- Productivity Toolkit: IDE, VPN, StackOverflow, Git, Github, Vim, Latex, GNU Make and so on.
- Environment configuration: PC/Server development environment setup, DevOps tutorials and so on.
- Book recommendations: Those who have read the CSAPP must have realized the importance of good books. I will list links to books and resources in different areas of Computer Science that I find rewarding to read.
- **List of high quality CS courses**: I will summarize all the high quality foreign CS courses I have taken into different categories and give relevant self-learning advice. Most of them will have a separate repository containing relevant resources as well as my homework/project implementations.
- **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.
## **The place where dreams start —— CS61A**

View File

@ -12,10 +12,11 @@
本书目前包括了以下部分(如果你有其他好的建议,或者想加入贡献者的行列,欢迎邮件 [zhongyinmin@pku.edu.cn](mailto:zhongyinmin@pku.edu.cn) 或者在 issue 里提问)
- 必学工具IDE, 翻墙, StackOverflow, Git, GitHub, Vim, LaTeX, GNU Make, 实用工具 ...
- 环境配置PC端以及服务器端开发环境配置、各类运维相关教材及资料 ...
- 经典书籍推荐:看过 CSAPP 这本书的同学一定感叹好书的重要,我将列举推荐自己看过的计算机领域的必看好书与资源链接。
- **国外高质量 CS 课程汇总**:我将把我上过的所有高质量的国外 CS 课程分门别类进行汇总,并给出相关的自学建议,大部分课程都会有一个独立的仓库维护相关的资源以及我的作业实现。
- 本书使用指南:由于书内涵盖资源众多,我根据不同人群的空闲时间和学习目标制定了对应的使用指南。
- 一份供参考的 CS 学习规划:我根据自己的自学经历制定的全面的、系统化的 CS 自学规划。
- 必学工具:一些 CSer 效率工具介绍,例如 IDE, 翻墙, StackOverflow, Git, GitHub, Vim, LaTeX, GNU Make, Docker, 工作流 等等。
- 经典书籍推荐:你是否苦于教材的晦涩难懂不知所云?别从自己身上找原因了,可能只是教材写得太烂。看过 CSAPP 这本书的同学一定会感叹好书的重要,我将列举推荐各个计算机领域的必看好书与资源链接。
- **国内外高质量 CS 课程汇总**:我将把我上过的以及开源社区贡献的**高质量**的国内外 CS 课程分门别类进行汇总,介绍其课程内容特点并给出相应的自学建议,大部分课程都会有一个独立的仓库维护相关的资源以及作业实现供大家学习参考。
## 梦开始的地方 —— CS61A
@ -27,13 +28,13 @@
为避免有崇洋媚外之嫌,我单纯从一个学生的视角来讲讲自学 CS61A 的体验:
- 独立搭建的课程网站: 一个网站将所有课程资源整合一体,条理分明的课程 schedule、所有 slides, hw, discussion 的文件链接、详细明确的课程给分说明、历年的考试题与答案。这样一个网站抛开美观程度不谈,既方便学生,也让资源公正透明。
- 独立搭建的课程网站: 一个网站将所有课程资源整合一体,条理分明的课程 schedule、所有 slides, homework, discussion 的文件链接、详细明确的课程给分说明、历年的考试题与答案。这样一个网站抛开美观程度不谈,既方便学生,也让资源公正透明。
- 课程教授亲自编写的教材CS61A 这门课的开课老师将MIT的经典教材 *Structure and Interpretation of Computer Programs* (SICP) 用Python这门语言进行改编原教材基于 Scheme 语言),保证了课堂内容与教材内容的一致性,同时补充了更多细节,可以说诚意满满。而且全书开源,可以直接线上阅读。
- 课程教授亲自编写的教材CS61A 这门课的开课老师将 MIT 的经典教材 *Structure and Interpretation of Computer Programs* (SICP) 用Python这门语言进行改编原教材基于 Scheme 语言),保证了课堂内容与教材内容的一致性,同时补充了更多细节,可以说诚意满满。而且[全书开源](https://www.composingprograms.com/),可以直接线上阅读。
- 丰富到让人眼花缭乱的课程作业14 个 lab 巩固随堂知识点10 个 homework还有 4 个代码量均上千行的 project。与大家熟悉的 OJ 和 Word 文档式的作业不同,所有作业均有完善的代码框架,保姆级的作业说明。每个 Project 都有详尽的 handout 文档、全自动的评分脚本。CS61A 甚至专门开发了一个[自动化的作业提交评分系统](https://okpy.org/)(据说还发了论文)。当然,有人会说“一个 project 几千行代码大部分都是助教帮你写好的,你还能学到啥?”。此言差矣,作为一个刚刚接触计算机,连安装 Python 都磕磕绊绊的小白来说,这样完善的代码框架既可以让你专注于巩固课堂上学习到的核心知识点,又能有“我才学了一个月就能做一个小游戏了!”的成就感,还能有机会阅读学习别人高质量的代码,从而为自己所用。我觉得在低年级,这种代码框架可以说百利而无一害。唯一的害也许是苦了老师和助教,因为开发这样的作业可想而知需要相当的时间投入。
- 丰富到让人眼花缭乱的课程作业14 个 lab 巩固随堂知识点10 个 homework还有 4 个代码量均上千行的 project。与大家熟悉的 OJ 和 Word 文档式的作业不同,所有作业均有完善的代码框架,保姆级的作业说明。每个 Project 都有详尽的 handout 文档、全自动的评分脚本。CS61A 甚至专门开发了一个[自动化的作业提交评分系统](https://okpy.org/)(据说还发了论文)。当然,有人会说“一个 project 几千行代码大部分都是助教帮你写好的,你还能学到啥?”。此言差矣,作为一个刚刚接触计算机,连安装 Python 都磕磕绊绊的小白来说,这样完善的代码框架既可以让你专注于巩固课堂上学习到的核心知识点,又能有“我才学了一个月就能做一个小游戏了!”的成就感,还能有机会阅读学习别人高质量的代码,从而为自己所用。我觉得在低年级,这种代码框架可以说百利而无一害。是苦了老师和助教,因为开发这样的作业可想而知需要相当的时间投入和多年的迭代积累
- 每周 Discussion 讨论课,助教会讲解知识难点和考试例题:类似于北京大学 ICS 的小班研讨,但习题全部用 LaTeX 撰写,相当规范且会明确给出 solution
- 每周 Discussion 讨论课:助教会讲解知识难点和考试例题,习题全部用 LaTeX 撰写,相当规范并且会给出详细的解答,让学生及时查漏补缺巩固知识点
这样的课程,你完全不需要任何计算机的基础,你只需要努力、认真、花时间就够了。此前那种有劲没处使的感觉,那种付出再多时间却得不到回报的感觉,从此烟消云散。这太适合我了,我从此爱上了自学。
@ -43,13 +44,13 @@
## 为什么写这本书
在我2020年秋季学期担任《深入理解计算机系统》CSAPP这门课的助教时我已经自学一年多了。这一年多来我无比享受这种自学模式为了分享这种快乐我为自己的小班同学做过一个 [CS自学资料整理仓库](https://github.com/PKUFlyingPig/Self-learning-Computer-Science)。当时纯粹是心血来潮,因为我也不敢公然鼓励大家翘课自学。
在我2020年秋季学期担任《深入理解计算机系统》CSAPP这门课的助教时我已经自学一年多了。这一年多来我无比享受这种自学模式为了分享这种快乐我为自己的研讨班学生做过一个 [CS自学资料整理仓库](https://github.com/PKUFlyingPig/Self-learning-Computer-Science)。当时纯粹是心血来潮,因为我也不敢公然鼓励大家翘课自学。
但随着又一年时间的维护,这个仓库的内容已经相当丰富,基本覆盖了计科、智能系、软工系的绝大多数课程,我也为每个课程都建了各自的 GitHub 仓库,汇总我用到的自学资料以及作业实现。
直到大四开始凑学分毕业的时候,我打开自己的培养方案,我发现它已经是我这个自学仓库的子集了,而这距离我开始自学也才两年半而已。于是,一个大胆的想法在我脑海中浮现:也许,我可以打造一个自学式的培养方案,把我这三年自学经历中遇到的坑、走过的路记录下来,以期能为后来的学弟学妹们贡献自己的一份微薄之力。
如果大家可以在三年不到的时间里就能建立起整座CS的基础大厦能有相对扎实的数学功底和代码能力经历过数十个千行代码量的 Project 的洗礼,掌握至少 C/C++/Java/JS/Python/Go/Rust 等主流语言对算法、电路、体系、网络、操统、编译、人工智能、机器学习、计算机视觉、自然语言处理、强化学习、密码学、信息论、博弈论、数值分析、统计学、分布式、数据库、图形学、Web开发、云服务、超算等等方面均有涉猎。我想你将有足够的底气和自信选择自己感兴趣的方向无论是就业还是科研你都将有相当的竞争力。
如果大家可以在三年不到的时间里就能建立起整座 CS 的基础大厦,能有相对扎实的数学功底和代码能力,经历过数十个千行代码量的 Project 的洗礼,掌握至少 C/C++/Java/JS/Python/Go/Rust 等主流语言对算法、电路、体系、网络、操统、编译、人工智能、机器学习、计算机视觉、自然语言处理、强化学习、密码学、信息论、博弈论、数值分析、统计学、分布式、数据库、图形学、Web开发、云服务、超算等等方面均有涉猎。我想你将有足够的底气和自信选择自己感兴趣的方向无论是就业还是科研你都将有相当的竞争力。
因为我坚信,既然你能坚持听我 BB 到这里,你一定不缺学好 CS 的能力,你只是没有一个好的老师,给你讲一门好的课程。而我,将力图根据我三年的体验,为你挑选这样的课程。
@ -59,7 +60,7 @@
自学的另一大好处就是博采众长。计算机系的几大核心课程:体系、网络、操统、编译,每一门我基本都上过不同大学的课程,不同的教材、不同的知识点侧重、不同的 project 将会极大丰富你的视野,也会让你理解错误的一些内容得到及时纠正。
自学的第三个好处是时间自由,具体原因省略
自学的第三个好处是时间自由。大学的课余时间本就相对自由,再加上不用去上课的话更是可以放飞自我地安排自学时间和进度。我大二的时候赶上疫情在家窝了大半年,返校之后也基本没有线下去过教室上课,对绩点也毫无影响
## 自学的坏处
@ -67,9 +68,9 @@
第一就是交流沟通的不便。我其实是一个很热衷于提问的人,对于所有没有弄明白的点,我都喜欢穷追到底。但当你面对着屏幕听到老师讲了一个你没明白的知识点的时候,你无法顺着网线到另一端向老师问个明白。我努力通过独立思考和善用 Google 来缓解这一点,但是,如果能有几个志同道合的伙伴结伴自学,那将是极好的。关于交流群的建立,大家可以参考仓库 `README` 中的教程。
第二就是这些自学的课程基本都是英文的。从视频到slides到作业全是英文所以有一定的门槛。不过我觉得这个挑战如果你克服了的话对你是极为有利的。因为在当下,虽然我很不情愿,但也不得不承认,在计算机领域,很多优质的文档、论坛、网站都是全英文的。养成英文阅读的习惯,在赤旗插遍世界之前,还是有一定好处的(狗头保命)。
第二就是这些自学的课程基本都是英文的。从视频到课件再到作业全是英文,所以有一定的门槛。我尽量在汇总课程视频资源的时候寻找带中文字幕的搬运视频,但大多数课程还是只有机翻或者生肉,而课件和作业肯定都是英文的。不过我觉得这是个值得努力克服的挑战,因为在当下,虽然我很不情愿,但也不得不承认,在计算机领域,很多优质的文档、论坛、网站都是英文居多。养成英文阅读的习惯,在赤旗插遍世界之前,还是有一定好处的(狗头保命)。
第三,也是我觉得最困难的一点,就是自律。因为没有 DDL 有时候真的是一件可怕的事情特别是随着学习的深入,国外的很多课程是相当虐的。你得有足够的驱动力强迫自己静下心来,阅读几十页的 Project Handout理解上千行的代码框架忍受数个小时的 debug 时光。而这一切,没有学分,没有绩点,没有老师,没有同学,只有一个信念 —— 你在变强。
第三,也是我觉得最困难的一点,就是自律。因为没有 DDL 有时候真的是一件可怕的事情特别是随着学习的深入,国外的很多课程是相当虐的。你得有足够的驱动力强迫自己静下心来,阅读几十页的 Project Handout理解上千行的代码框架忍受数个小时的 debug 时光。而这一切,没有学分,没有绩点,没有老师,没有同学,只有一个信念 —— 你在变强。
## 这本书适合谁
@ -79,7 +80,7 @@
## 特别鸣谢
在这里我怀着崇敬之心真诚地感谢所有将课程资源无偿开源的各位教授们。这些课程倾注了他们数十年教学生涯的积淀和心血他们却选择无私地让所有人享受到如此高质量的CS教育。没有他们我的大学生活不会这样充实而快乐。很多教授在我给他们发了感谢邮件之后甚至会回复上百字的长文真的让我无比感动。他们也时刻激励着我做一件事就得用心做好无论是科研,还是为人。
在这里,我怀着崇敬之心真诚地感谢所有将课程资源无偿开源的各位教授们。这些课程倾注了他们数十年教学生涯的积淀和心血,他们却选择无私地让所有人享受到如此高质量的 CS 教育。没有他们,我的大学生活不会这样充实而快乐。很多教授在我给他们发了感谢邮件之后,甚至会回复上百字的长文,真的让我无比感动。他们也时刻激励着我,做一件事,就得用心做好,无论是学习、科研、还是为人。
## 你也想加入到贡献者的行列
@ -87,7 +88,7 @@
## 关于交流群的建立
方法参见仓库的 `README.md`
本书支持页面评论功能因此如果你想自学某课程可以自己建立群聊后QQ 微信皆可)在对应的课程页面下方发表评论,注明你的学习目标以及加入交流群的途径。此外,过去已有不少朋友在 issue 里建立了类似群聊,可以自行选择直接加入
## 请作者喝杯下午茶

View File

@ -14,7 +14,7 @@ After procedural programming, the second semester of the freshman year usually i
Second, try to learn some productivity-enhancing tools and skills, such as Git, Shell, Vim. I strongly recommend the [MIT missing semester](编程入门/MIT-Missing-Semester.md) course. Initially, you may feel awkward, but force yourself to use them, and your development efficiency will skyrocket. Additionally, many applications can greatly increase your productivity. A rule of thumb is: any action that requires your hands to leave the keyboard should be eliminated. For example, switching applications, opening files, browsing the web - there are plugins for these (like [Alfred](https://www.alfredapp.com/) for Mac). If you find an daily operation that takes more than 1 second, try to reduce it to 0.1 seconds. After all, you'll be dealing with computers for decades, so forming a smooth workflow can greatly enhance efficiency. Lastly, learn to touch type! If you still need to look at the keyboard while typing, find a tutorial online and learn to type without looking. This will significantly increase your development efficiency.
Third, balance coursework and self-learning. We feel angry about the institution but must also follow the rules, as GPA is still important for postgraduate recommendations. Therefore, in the first year, I suggest focusing on the curriculum, complemented by high-quality extracurricular resources. For example, for calculus and linear algebra, refer to [MIT 18.01/18.02](./数学基础/MITmaths.md) and [MIT 18.06](./数学基础/MITLA.md). During holidays, learn Python through [UCB CS61A](./编程入门/CS61A.md). Also, focus on good programming habits and practical skills mentioned above. From my experience, mathematics courses matter a lot for your GPA in the first year, and the content of math exams varies greatly between different schools and teachers. Self-learning might help you understand the essence of mathematics, but it may not guarantee good grades. Therefore, its better to specifically practice past exams.
Third, balance coursework and self-learning. We feel angry about the institution but must also follow the rules, as GPA is still important for postgraduate recommendations. Therefore, in the first year, I suggest focusing on the curriculum, complemented by high-quality extracurricular resources. For example, for calculus and linear algebra, refer to [MIT 18.01/18.02](./数学基础/MITmaths.md) and [MIT 18.06](./数学基础/MITLA.md). During holidays, learn Python through [UCB CS61A](./编程入门/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, its better to specifically practice past exams.
In your sophomore year, as computer science courses become the majority, you can fully immerse yourself in self-learning. Refer to [A Reference Guide for CS Learning](./CS学习规划.md), a guide I created based on three years of self-learning, introducing each course and its importance. For every course in your curriculum, this guide should have a corresponding one, and I believe they are of higher quality. If there are course projects, try to adapt labs or projects from these self-learning courses. For example, I took an operating systems course and found the teacher was still using experiments long abandoned by UC Berkeley, so I emailed the teacher to switch to the [MIT 6.S081](./操作系统/MIT6.S081.md) xv6 Project I was studying. This allowed me to self-learn while inadvertently promoting curriculum reform. In short, be flexible. Your goal is to master knowledge in the most convenient and efficient way. Anything that contradicts this goal can be “fudged” as necessary. With this attitude, after my junior year, I barely attended offline classes (I spent most of my sophomore year at home due to the pandemic), and it had no impact on my GPA.
@ -30,7 +30,7 @@ If you have graduated and started postgraduate studies, or have begun working, o
| Data Structures and Algorithms | [Coursera: Algorithms I & II](数据结构与算法/Algo.md) |
| Software Engineering | [MIT 6.031: Software Construction](软件工程/6031.md) |
| Full-Stack Development | [MIT Web Development Course](Web开发/mitweb.md) |
| Introduction to Computer Systems | [CMU CS15213: CSAPP](Web开发/mitweb.md) |
| Introduction to Computer Systems | [CMU CS15213: CSAPP](计算机系统基础/CSAPP.md) |
| Introductory System Architecture | [Coursera: Nand2Tetris](体系结构/N2T.md) |
| Advanced System Architecture | [CS61C: Great Ideas in Computer Architecture](体系结构/CS61C.md) |
| Principles of Databases | [CMU 15-445: Introduction to Database Systems](数据库系统/15445.md) |

View File

@ -14,7 +14,7 @@
其二就是尝试学习一些能提高生产力的工具和技能,例如 Git、Shell、Vim。这里强烈推荐学习 [MIT missing semester](./编程入门/MIT-Missing-Semester.md) 这门课,也许一开始接触这些工具用起来会很不习惯,但强迫自己用,熟练之后开发效率会直线提高。此外,还有很多应用也能极大提高的你生产力。一条定律是:一切需要让手离开键盘的操作,都应该想办法去除。例如切换应用、打开文件、浏览网页这些都有相关插件可以实现快捷操作(例如 Mac 上的 [Alfred](https://www.alfredapp.com/)。如果你发现某个操作每天都会用到并且用时超过1秒那就应该想办法把它缩减到0.1秒。毕竟以后数十年你都要和电脑打交道,形成一套顺滑的工作流是事半功倍的。最后,学会盲打!如果你还需要看着键盘打字,那么赶紧上网找个教程学会盲打,这将极大提高你的开发效率。
其三就是平衡好课内和自学。我们质疑现状,但也得遵守规则,毕竟绩点在保研中还是相当重要的。因此在大一,我还是建议大家尽量按照自己的课表学习,但辅以一些优质的课外资源。例如微积分线代可以参考 [MIT 18.01/18.02](./数学基础/MITmaths.md) 和 [MIT 18.06](./数学基础/MITLA.md) 的课程 Notes。假期可以通过 [UCB CS61A](./编程入门/CS61A.md) 来学习 Python。同时做到上面第一、第二点说的注重好的编程习惯和实践能力的培养。就个人经验大一的数学课学分占比相当大而且数学考试的内容方差是很大的不同学校不同老师风格迥异自学也许能让你领悟数学的本质但未必能给你一个好成绩。因此考前最好有针对性地刷往年题充分应试。
其三就是平衡好课内和自学。我们质疑现状,但也得遵守规则,毕竟绩点在保研中还是相当重要的。因此在大一,我还是建议大家尽量按照自己的课表学习,但辅以一些优质的课外资源。例如微积分线代可以参考 [MIT 18.01/18.02](./数学基础/MITmaths.md) 和 [MIT 18.06](./数学基础/MITLA.md) 的课程 Notes。假期可以通过 [UCB CS61A](./编程入门/Python/CS61A.md) 来学习 Python。同时做到上面第一、第二点说的注重好的编程习惯和实践能力的培养。就个人经验大一的数学课学分占比相当大而且数学考试的内容方差是很大的不同学校不同老师风格迥异自学也许能让你领悟数学的本质但未必能给你一个好成绩。因此考前最好有针对性地刷往年题充分应试。
在升入大二之后,计算机方向的专业课将居多,此时大家可以彻底放飞自我,进入自学的殿堂了。具体可以参考 [一份仅供参考的CS学习规划](./CS学习规划.md),这是我根据自己三年自学经历总结提炼出来的全套指南,每门课的特点以及为什么要上这门课我都做了简单的介绍。对于你课表上的每个课程,这份规划里应该都会有相应的国外课程,而且在质量上我相信基本是全方位的碾压。由于计算机方向的专业知识基本是一样的,而且高质量的课程会让你从原理上理解知识点,对于国内大多照本宣科式的教学来说基本是降维打击。一般来说只要考前将老师“辛苦”念了一学期的 PPT 拿来突击复习两天,取得一个不错的卷面分数并不困难。如果有课程大作业,则可以尽量将国外课程的 Lab 或者 Project 修改一番以应付课内的需要。我当时上操作系统课,发现老师还用着早已被国外学校淘汰的课程实验,便邮件老师换成了自己正在学习的 [MIT 6.S081](./操作系统/MIT6.S081.md) 的 xv6 Project方便自学的同时还无意间推动了课程改革。总之灵活变通是第一要义你的目标是用最方便、效率最高的方式掌握知识所有与你这一目标违背的所谓规定都可以想方设法地去“糊弄”。凭着这份糊弄劲儿我大三之后基本没有去过线下课堂大二疫情在家呆了大半年对绩点也完全没有影响。
@ -30,7 +30,7 @@
|数据结构与算法 |[Coursera: Algorithms I & II](数据结构与算法/Algo.md)|
|软件工程 |[MIT 6.031: Software Construction](软件工程/6031.md)|
|全栈开发 |[MIT web development course](Web开发/mitweb.md)|
|计算机系统导论 |[CMU CS15213: CSAPP](./体系结构/CSAPP.md)|
|计算机系统导论 |[CMU CS15213: CSAPP](计算机系统基础/CSAPP.md)|
|体系结构入门 |[Coursera: Nand2Tetris](./体系结构/N2T.md) |
|体系结构进阶 |[CS61C: Great Ideas in Computer Architecture](./体系结构/CS61C.md)|
|数据库原理 |[CMU 15-445: Introduction to Database System](数据库系统/15445.md)|

View File

@ -26,7 +26,7 @@
* Obsidian 基于本地,打开速度快,且可存放很多电子书。我的笔记本是 32g 内存的华硕天选一代,拿来跑 Obsidian 可以快到飞起
* Obsidian 基于 Markdown。这也是一个优势如果笔记软件写的笔记格式是自家的编码格式那么不方便其他第三方拓展也不方便将笔记用其他软件打开比如 qq 音乐下载歌曲有自己的格式,其他播放器播放不了,这挺恶心人的
* Obsidian 有丰富的插件生态,并且这个生态既大又活跃,即插件数量多,且热门插件的 star 多,开发者会反馈用户 issue版本会持续迭代。借助这些插件可以使 Osidian 达到 `all in one` 的效果,即各类知识来源可以统一整合于一处
* Obsidian 有丰富的插件生态,并且这个生态既大又活跃,即插件数量多,且热门插件的 star 多,开发者会反馈用户 issue版本会持续迭代。借助这些插件可以使 Obsidian 达到 `all in one` 的效果,即各类知识来源可以统一整合于一处
## 信息的来源
@ -117,4 +117,4 @@ Obsidian 的插件使其可以支持 pdf 格式,而其本身又支持 Markdown
btw此篇文章是讲解工作流的演化思路如果对此工作流的实现细节感兴趣建议阅读完本文后再按顺序阅读以下文章
1. [3000 + 小时积累的学习工作流](https://sspai.com/post/75969)
2. [Obsidian 的高级玩法 | 打造能跳转到任何格式文件的笔记](https://juejin.cn/post/7145351315705577485)
2. [Obsidian 的高级玩法 | 打造能跳转到任何格式文件的笔记](https://juejin.cn/post/7145351315705577485)

View File

@ -117,6 +117,35 @@
* [Searchcode](https://searchcode.com) 搜索开源代码,速度比较快
* [一行代码](https://www.alinecode.com) 国产的,有些国产工具很好用
## ChatGPT
本部分不会涉及具体如何去注册或者如何访问,只说一下如何运用,和其优劣。
现在 ChatGPT 和 New Bing 比较火,我都用了下,包括 ChartGpt3.5 和 ChatGpt4 ,仅说一下我自己的使用经验。
ChartGpt3.5 和 ChatGpt4 对于解决具体问题其实帮助没有总结或整理效果好,也就是它大部分时候无法真的像 stackoverflow 中的问答一样解决你的问题。但是如果你需要学习一些新内容或者需要整理一些文档,它是一个很方便的工具。
查询时可以进行连续对话给它更多信息和错误反馈更新答案但是除非你输入整理过的笔记或者知识否则它瞎编的概率超过8成。
举一个例子,我需要使用 GDAL 库将shp数据转换为 gpkg 数据,实际阅读文档后,会了解到,应该使用 `GDALVectorTranslate` 接口,但是 ChatGPT 会虚构 `GDALDriver``CopyLayer` 接口让你使用,反馈没有这个接口后,它会逐条拷贝数据(其中的代码能编译过但是效果是错的),这在实际使用中其实比较危险,因为没有编译错误但是实际是无效代码。我测试过,具体的 C/C++ 库使用,包括 GDAL OSG eigen 等库,它的回答都很有逻辑,但是基本无法编译过,即使通过连续对话纠正了所有编译错误代码也是无效的。
但是当你询问,处理地理数据有哪些开源库,或者解决一些具体问题所需要空间分析方法,这类比较概括的问题中,它能正确回答的概率就会大大提升,它基本可以正确回答比较抽象和概括类的问题。
所以如果你需要解决具体的问题,请参考本文的第一句话,认真研读文档,如果你需要学习新内容或者碰到一些无从下手的新知识,可以使用 ChatGPT 来整理和开阔思路AI是工具并不是万能的。
### 使用技巧
* 尽量具体的描述需要处理的问题ChatGPT 自动会提炼关键字,所以可以参照前面基础搜索技巧,但是不需要自己分词和提炼关键字,只需要尽可能的描述清晰你的问题。
* ChatGPT 可能一次没有生成完,你可以直接输入继续让它继续生成
* 如果你觉得回答有什么遗漏或者回答中有什么问题,可以连续对话,让它修改答案,它可以有逻辑的补充
* 它可以提炼和整理一些文本内容,方便做笔记,也可以让它整理格式(输出 MarkDown 等格式),方便复制粘贴
* 针对部分具体的问题, ChatGPT 可能无法给出正确答案,但是思路基本是对的,你可以参照它的思路去读文档然后找到正确的方式处理
* ChatGPT 有可能陷入死循环它只是AI只负责给出逻辑通顺的答案而不保证答案正确性
记住,没有什么万能的工具,如果 ChatGPT 回答错误,请查看文档,灵活使用搜索引擎,查找专业论坛或者问答网站,自己做笔记,解决问题。
[^ 1]: [搜索引擎工作原理简介 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/301641935)

View File

@ -18,7 +18,7 @@ Unlike the small but comprehensive design philosophy in MIT's xv6 labs, *Pintos*
Although 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. For me, it is an invaluable experience to design, implement, and debug a large system independently.
*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://alfredthiel.gitbook.io/pintosbook/) 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.
*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.
## Course Resources

View File

@ -20,7 +20,7 @@
虽然难度很大,但 Stanford, Berkeley, JHU 等多所美国顶尖名校的操统课程均采用了 Pintos。如果你真的对操作系统很感兴趣Pintos 会极大地提高你编写和 debug 底层系统代码的能力。在本科阶段,能自己设计、实现并 debug 一个大型系统,是一段非常珍贵的经历。
北大 2022 年春季学期的操作系统实验班也将会首次引入 Pintos 作为课程 Project。我和该课程的[另一位助教](https://github.com/AlfredThiel)整理并完善了 Pintos 的[实验文档](https://alfredthiel.gitbook.io/pintosbook/),并利用 Docker 配置了跨平台的实验环境,想自学的同学可以按文档自行学习。在毕业前的最后一个学期,希望能用这样的尝试,让更多人爱上系统领域,为国内的系统研究添砖加瓦。
北大 2022 年春季学期的操作系统实验班也将会首次引入 Pintos 作为课程 Project。我和该课程的[另一位助教](https://github.com/AlfredThiel)整理并完善了 Pintos 的[实验文档](https://pkuflyingpig.gitbook.io/pintos),并利用 Docker 配置了跨平台的实验环境,想自学的同学可以按文档自行学习。在毕业前的最后一个学期,希望能用这样的尝试,让更多人爱上系统领域,为国内的系统研究添砖加瓦。
## 课程资源

View File

@ -16,7 +16,9 @@ In addition to the course materials, the famous Youtuber **3Blue1Brown**'s video
## Resources
- Course Website: <https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/syllabus/>
- Course Website: [fall2011](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/syllabus/)
- Recordings: refer to the course website
- Textbook: Introduction to Linear Algebra, Gilbert Strang
- Assignments: refer to the course website
On May 15th, 2023, revered mathematics professor Gilbert Strang capped his 61-year career as a faculty member at MIT by delivering his [final 18.06 Linear Algebra lecture](https://ocw.mit.edu/courses/18-06sc-linear-algebra-fall-2011/pages/final-1806-lecture-2023/) before retiring at the age of 88. In addition to a brief review for the course final exam, the overflowing audience (both in person and on the live YouTube stream) heard recollections, appreciations, and congratulations from Prof. Strangs colleagues and former students. A rousing standing ovation concluded this historic event.

View File

@ -10,13 +10,15 @@
数学大牛 Gilbert Strang 老先生年逾古稀仍坚持授课,其经典教材 [Introduction to Linear Algebra](https://math.mit.edu/~gs/linearalgebra/) 已被清华采用为官方教材。我当时看完盗版 PDF 之后深感愧疚,含泪花了两百多买了一本英文正版收藏。下面附上此书封面,如果你能完全理解封面图的数学含义,那你对线性代数的理解一定会达到新的高度。
![image](https://math.mit.edu/~gs/linearalgebra/ila5/linearalgebra5_Front.jpg)
<img src="https://math.mit.edu/~gs/linearalgebra/ila5/linearalgebra5_Front.jpg" width = "300" height = "300" align=center />
配合油管数学网红 **3Blue1Brown** 的[线性代数的本质](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)系列视频食用更佳。
## 课程资源
- 课程网站:<https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/syllabus/>
- 课程网站:[fall2011](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/syllabus/)
- 课程视频:参见课程网站
- 课程教材Introduction to Linear Algebra. Gilbert Strang
- 课程作业:参见课程网站
2023年5月15日Gilbert Strang 上完了他在 18.06 的[最后一课](https://ocw.mit.edu/courses/18-06sc-linear-algebra-fall-2011/pages/final-1806-lecture-2023/)以88岁高龄结束了在其 MIT 61年的教学及科研生涯。但他的线性代数课已经并且还将继续影响一代代青年学子让我们向老先生致以最崇高的敬意。

View File

@ -12,6 +12,6 @@ This is MIT's introductory information theory course for freshmen, Professor Pen
## Course Resources
- Course Website: <https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/index.htm>
- Textbook: <https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/syllabus/MIT6_050JS08_textbook.pdf>
- Course Website: [spring2008](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/index.htm)
- Textbook: [Information and Entropy](https://ocw.mit.edu/courses/6-050j-information-and-entropy-spring-2008/resources/mit6_050js08_textbook/)
- Assignments: see the course website for details, including written assignments and Matlab programming assignments.

View File

@ -14,6 +14,6 @@ MIT 面向大一新生的信息论入门课程Penfield 教授专门为这门
## 课程资源
- 课程网站:<https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/index.htm>
- 课程教材:<https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/syllabus/MIT6_050JS08_textbook.pdf>
- 课程网站:[spring2008](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-050j-information-and-entropy-spring-2008/index.htm)
- 课程教材:[Information and Entropy](https://ocw.mit.edu/courses/6-050j-information-and-entropy-spring-2008/resources/mit6_050js08_textbook/)
- 课程作业:详见课程网站,包含书面作业与 Matlab 编程作业。

View File

@ -12,6 +12,6 @@ This is MITs discrete mathematics and probability course taught by the notabl
## Course Resources
- Course Website: <https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/>
- Recordings: <https://www.youtube.com/playlist?list=PLB7540DEDD482705B>
- Assignments: <https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/assignments/>
- 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/)
- Recordings: Refer to the course website
- Assignments: Refer to the course website

View File

@ -12,6 +12,6 @@ MIT 的离散数学以及概率综合课程,导师是大名鼎鼎的 **Tom Lei
## 课程资源
- 课程网站:<https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/>
- 课程视频:<https://www.bilibili.com/video/BV1L741147VX>
- 课程作业:<https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/assignments/>
- 课程网站:[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/)
- 课程视频:[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)
- 课程作业:参考课程网站

View File

@ -8,7 +8,7 @@
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时100h+
MIT-EECS 系的瑰宝。授课老师之一是算法届的奇才 Erik Demaine. 相比较于斯坦福的 [CS106B/X](../编程入门/CS106B_CS106X.md)(基于 C++ 的数据结构与算法课程),该课程更侧重于算法方面的详细讲解。课程也覆盖了一些经典的数据结构,如 AVL 树等。个人感觉在讲解方面比 CS106B 更加详细,也弥补了 CS106B 在算法方面讲解的不足。适合在 CS106B 入门之后巩固算法知识。
MIT-EECS 系的瑰宝。授课老师之一是算法届的奇才 Erik Demaine. 相比较于斯坦福的 [CS106B/X](../编程入门/cpp/CS106B_CS106X.md)(基于 C++ 的数据结构与算法课程),该课程更侧重于算法方面的详细讲解。课程也覆盖了一些经典的数据结构,如 AVL 树等。个人感觉在讲解方面比 CS106B 更加详细,也弥补了 CS106B 在算法方面讲解的不足。适合在 CS106B 入门之后巩固算法知识。
不过该课程也是出了名的难,大家需要做好一定的心理准备。

View File

@ -20,7 +20,7 @@ In addition, there are 3 projects that give you the opportunity to be exposed to
## Resources
## Course Resources
- Course Website: <https://sp18.datastructur.es/>
- Course Website: [spring2024](https://sp24.datastructur.es/), [fall2023](https://fa23.datastructur.es/), [spring2023](https://sp23.datastructur.es/), [spring2018](https://sp18.datastructur.es/)
- Recordings: refer to the course website
- Textbook: None
- 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.

View File

@ -20,8 +20,8 @@
## 课程资源
- 课程网站:<https://sp18.datastructur.es/>
- 课程视频:<https://sp18.datastructur.es/>,每节课的链接详见课程网站
- 课程网站:[spring2024](https://sp24.datastructur.es/), [fall2023](https://fa23.datastructur.es/), [spring2023](https://sp23.datastructur.es/), [spring2018](https://sp18.datastructur.es/)
- 课程视频:原版视频参见课程网站B站有中文翻译搬运。
- 课程教材:无
- 课程作业每年略有不同18 年春季学期有 14 个 Lab10 个 Homework以及 3 个 Project具体要求详见课程网站。

View File

@ -23,10 +23,19 @@ Inspired by the course, I developed a [simple deep learning framework](https://g
- Course Website[Official Website](https://novel.ict.ac.cn/aics/)
- Course Videos[bilibili](https://space.bilibili.com/494117284)
- Course Textbook"Intelligent Computing Systems" by Chen Yunji
- Course Assignments6 experiments (including writing a convolutional operator, adding operators to TensorFlow, writing operators in BCL and integrating them into TensorFlow, etc.) (specific content can be found on the official website)
- Experiment Manual[Experiment 2.0 Guide Manual](https://forum.cambricon.com/index.php?m=content&c=index&a=show&catid=155&id=708)
- Study Notes<https://sanzo.top/categories/AI-Computing-Systems/>, notes summarized based on the experiment manual
## Resource Compilation
## Personal Resources
All resources and homework implementations used by @ysj1173886760 in this course are consolidated in [ysj1173886760/Learning: ai-system - GitHub](https://github.com/ysj1173886760/Learning/tree/master/ai-system)
### New Edition Experiments for 2024
- 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.
- 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:
- 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.
- 2024 New labs, manuals, and answers created by @Yuichi: https://github.com/Yuichi1001/2024-AICS-EXP
### Old Edition Experiments
- 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)
- 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)
- Learning notes: https://sanzo.top/categories/AI-Computing-Systems/, notes summarized from the lab manuals (link is no longer active)
- @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).

View File

@ -25,10 +25,21 @@
- 课程网站:[官网](https://novel.ict.ac.cn/aics/)
- 课程视频:[bilibili](https://space.bilibili.com/494117284)
- 课程教材:智能计算系统(陈云霁)
- 课程作业6 个实验(包括编写卷积算子,为 TensorFlow 添加算子,用 BCL 编写算子并集成到 TensorFlow 中等)(具体内容在官网可以找到)
- 实验手册:[实验 2.0 指导手册](https://forum.cambricon.com/index.php?m=content&c=index&a=show&catid=155&id=708)
- 学习笔记:<https://sanzo.top/categories/AI-Computing-Systems/>,参考实验手册总结的笔记
## 资源汇总
@ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在 [ysj1173886760/Learning: ai-system - GitHub](https://github.com/ysj1173886760/Learning/tree/master/ai-system) 中。
### 2024年新版实验
- 2024 年的智能计算系统实验内容对知识体系、实验题目及实验手册进行了大范围的调整,调整内容包括全面使用 PyTorch ,不再使用 TensorFlow 以及添加大模型相关实验等。
- 由于新版实验题目及实验手册未在寒武纪论坛进行更新,因此提供以下存储仓库,用于存储新版智能计算系统的实验题目、实验手册以及个人的实验答案
- 新版实验的资源跟随国科大 2024 年春季学期的课程进度进行更新,预计 2024 年 6 月更新完毕
- @Yuichi 编写的 2024 新版实验题目、手册及答案https://github.com/Yuichi1001/2024-AICS-EXP
### 旧版实验
- 旧版课程作业6 个实验(包括编写卷积算子,为 TensorFlow 添加算子,用 BCL 编写算子并集成到 TensorFlow 中等)(具体内容在官网可以找到)
- 旧版实验手册:[实验 2.0 指导手册](https://forum.cambricon.com/index.php?m=content&c=index&a=show&catid=155&id=708)
- 学习笔记:<https://sanzo.top/categories/AI-Computing-Systems/>,参考实验手册总结的笔记(已失效)
- @ysj1173886760 在学习这门课中用到的所有资源和作业实现都汇总在 [ysj1173886760/Learning: ai-system - GitHub](https://github.com/ysj1173886760/Learning/tree/master/ai-system) 中。

View File

@ -0,0 +1,24 @@
# MIT6.1600: Foundations of Computer Security
## Descriptions
- Offered by: MIT
- Prerequisites: discrete mathematics, basic programming, basic knowledge of computer systems
- Programming Languages: Python3
- Difficulty: 🌟🌟🌟
- Class Hour: 50 hours
MIT6.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.
After 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.
## Course Resources
- Course Website: [fall23](https://61600.csail.mit.edu/2023/), [fall22](https://61600.csail.mit.edu/2022/)
- Recordings: Refer to the course website.
- Textbooks: There is no required textbook, but the lecture notes are good reading materials.
- Assignments: 6 labs in total.
## Personal Resources
All the resources and assignments used by @PKUFlyingPig in this course are maintained in [PKUFlyingPig/MIT6.1600 - GitHub](https://github.com/PKUFlyingPig/MIT6.1600).

View File

@ -0,0 +1,22 @@
# MIT6.1600: Foundations of Computer Security
## 课程简介
- 所属大学MIT
- 先修要求:离散数学,编程基础,计算机系统基础
- 编程语言Python3
- 课程难度:🌟🌟🌟
- 预计学时50小时
MIT 的计算机系统安全本科生课程,共分为 authentication, transport security, platform security, software security, 和 human/end-user security 五个模块。课程组织还是相当清晰的authentication 关注于认证安全即如何证明计算机世界的“你”确实是“你”。接着讲解大家了解较多的通信安全例如数据传输的加密解密密钥的交换等。但传输是一方面代码最终需要在终端上执行这就涉及到运行代码的平台本身甚至软件代码本身的安全性。最后课程还会讲一些关于隐私安全的内容上升到社会学的范畴去讨论群体信息安全。学完该课程你将会掌握计算机安全的很多重要基本概念例如公钥私钥加密算法、哈希算法、电子签名、密钥交换算法等等。除了稍显复杂枯燥的数学和定理证明外课程中还会结合具体知识点讲解很多现实发生的安全漏洞让你对这些安全概念有更感性的认识。此外还有6个课程实验让你通过编程实现很多漏洞的利用在实际中加深对知识的理解个人感觉还是很有意思的。
## 课程资源
- 课程网站:[fall23](https://61600.csail.mit.edu/2023/), [fall22](https://61600.csail.mit.edu/2022/)
- 课程视频:参见课程网站
- 课程教材:没有指定教材,每节课有 notes
- 课程作业一共6个实验难度适中
## 资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 [PKUFlyingPig/MIT6.1600 - GitHub](https://github.com/PKUFlyingPig/MIT6.1600) 中。

View File

@ -12,11 +12,13 @@
## 课程资源
- 课程网站:[2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/)
- 课程视频:[2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/)
- 课程网站:[2024](https://cs50.harvard.edu/x/2024/), [2023](https://cs50.harvard.edu/x/2023/), [2022](https://cs50.harvard.edu/x/2022/)
- 课程视频:原版参考课程网站,也可以在 B 站找到[中文字幕版](https://www.bilibili.com/video/BV1HW4y1A7Yi/?spm_id_from=333.999.0.0&vd_source=a4d76d1247665a7e7bec15d15fd12349)。
- 课程教材:无
- 课程作业:[2022](https://cs50.harvard.edu/x/2022/), [2023](https://cs50.harvard.edu/x/2023/)
- 课程作业:参考课程网站。
## 资源汇总
@mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 [mancuoj/CS50x - GitHub](https://github.com/mancuoj/CS50x) 中。
@mancuoj 在学习这门课中用到的所有资源和作业实现都汇总在 [mancuoj/CS50x - GitHub](https://github.com/mancuoj/CS50x) 中。
@figuretu 将有价值的提问讨论以及相关学习资源整理在共享文档 [CS50 - 资源总目录](https://uufyjevghz.feishu.cn/docx/DP78d2U5TosTOTx9QCbcjp8GnBh) 中。

View File

@ -2,11 +2,11 @@
## Course Introduction
- Affiliated University: UCB
- Offered by: UCB
- Prerequisites: None
- Programming Language: Shell
- Course Difficulty: 🌟🌟🌟
- Estimated Study Time: 20 hours
- Difficulty: 🌟🌟🌟
- Class Hour: 20 hours
This 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.
@ -17,6 +17,6 @@ To compensate for the inability to use remote servers and to familiarize with th
## Course Resources
- Course Website: [Official Site](https://decal.ocf.berkeley.edu/)
- Course Videos: Available on the official course website, [Bilibili](https://www.bilibili.com/video/BV1rs4y1T7zJ/?share_source=copy_web) has an incomplete transfer that only includes the first part.
- 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.
- Course Textbook: No specified textbook, but each week's labs contain enough reading material for in-depth study.
- Course Assignments: Available on the official course website.

View File

@ -17,7 +17,7 @@
## 课程资源
- 课程网站:[官网](https://decal.ocf.berkeley.edu/)
- 课程视频:见课程官网,[B站](https://space.bilibili.com/483435468/video) __
- 课程视频:原版视频见课程官网,[B站](https://space.bilibili.com/483435468/video)也有搬运。
- 课程教材:无指定教材,但每一周的 labs 之中都有足够的阅读材料供你深入细节。
- 课程作业:见课程官网

View File

@ -10,8 +10,8 @@
Just as the course name indicated, this course will teach the missing things in the university courses. It will cover shell programming, git, vim editor, tmux, ssh, sed, awk and even how to beautify your terminal. Trust me, this will be your first step to become a hacker!
## Resources
## Course Resources
- Homepage: <https://missing.csail.mit.edu/>
- Records: <https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J>
- Assignments: Some exercises after each lecture.
- Course Website: <https://missing.csail.mit.edu/>
- Recordings: <https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J>
- Assignments: Some exercises after each lecture, refer to the course website.

View File

@ -24,8 +24,8 @@ Note: If you have no prior programming experience at all, getting started with C
## Course Resources
- Course Website: <https://inst.eecs.berkeley.edu/~cs61a/su20/>
- Recordings: refer to the course website
- Course Website: [spring2024](https://inst.eecs.berkeley.edu/~cs61a/sp24), [fall2023](https://inst.eecs.berkeley.edu/~cs61a/fa23/), [spring2023](https://inst.eecs.berkeley.edu/~cs61a/sp23), [fall2022](https://inst.eecs.berkeley.edu/~cs61a/fall22)
- Recordings:
- Textbook: <https://www.composingprograms.com/>
- Assignments: refer to the course website

View File

@ -24,11 +24,11 @@ CS61B 和 CS61C 在本书中均有收录。
## 课程资源
- 课程网站<https://inst.eecs.berkeley.edu/~cs61a/su20/>
- 课程视频: 参见课程网站链接
- 课程教材<https://www.composingprograms.com/>
- 课程网站: [spring2024](https://inst.eecs.berkeley.edu/~cs61a/sp24), [fall2023](https://inst.eecs.berkeley.edu/~cs61a/fa23/), [spring2023](https://inst.eecs.berkeley.edu/~cs61a/sp23), [fall2022](https://inst.eecs.berkeley.edu/~cs61a/fall22)
- 课程视频: [spring2023](https://www.bilibili.com/video/BV1s3411G7yM/?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349), [fall2022](https://www.bilibili.com/video/BV1GK411Q7qp/?spm_id_from=333.337.search-card.all.click&vd_source=a4d76d1247665a7e7bec15d15fd12349)
- 课程教材: <https://www.composingprograms.com/>
- 课程教材中文翻译:<https://composingprograms.netlify.app/>
- 课程作业课程网站会有每个作业对应的文档链接以及代码框架的下载链接。
- 课程作业: 课程网站会有每个作业对应的文档链接以及代码框架的下载链接。
## 资源汇总

View File

@ -15,3 +15,7 @@ Stanford 的进阶编程课CS106X 在难度和深度上会比 CS106B 有所
- 课程网站:[CS106B](https://web.stanford.edu/class/cs106b/), [CS106X](https://web.stanford.edu/class/cs106x/)
- 课程教材:<https://web.stanford.edu/class/cs106x/res/reader/CS106BX-Reader.pdf>
- 课程视频:<https://www.bilibili.com/video/BV1G7411k7jG>
## 资源汇总
@akun0311 在学习这门课中用到的所有资源和作业实现都汇总在 [akun0311/CS106B-X-CS106L - GitHub](https://github.com/akun0311/CS106B-X-CS106L-) 中。

View File

@ -0,0 +1,33 @@
# NJU Compilers
## Descriptions
- Offered by: Nanjing University
- Prerequisite: Discrete Mathematics
- Programming Languages: Java
- Difficulty: 🌟🌟🌟
- Learning Hours: 80
The 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.
ANTLR 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.
The 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.
The 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.
The practical aspect is the highlight of this course, guiding students step by step to implement their own compiler from simple to complex.
The 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.
The 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.
The 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.
## Course Resources
- Course Website: <http://docs.compilers.cpl.icu/>
- Recordings: <https://space.bilibili.com/479141149/channel/collectiondetail?sid=2312309>
- Textbook: Compilers: Principles, Techniques and Tools (Dragon Book)
- Assignments: 10 written assignments + 8~10 programming labs

View File

@ -0,0 +1,39 @@
# NJU 编译原理
## 课程简介
- 所属大学:南京大学
- 先修要求:离散数学
- 编程语言Java
- 课程难度:🌟🌟🌟
- 预计学时80 小时
南京大学的编译原理课程,设计者选用了当下热门的 ANTLR ANother Tool for Language Recognition v4 编程语言解析生成工具辅助教学,能让使用者专心词法或者语法分析的设计,而让 ANTLR 4 来生成重复的模板代码。IDE 也有其插件,装上后,可以实现即时的可视化语法树,方便学生理解。
ANTLR 4 是 LL 解析器生成器,比起 LR 和 LALR 解析器生成器,它可处理语法的范围相对狭窄。但另一方面其生成的解析器有易于理解和使用的优势。此外,因为其支持“无限长的 token 超前扫描”,所以可处理语法范围狭窄的问题也得到了很好的改善。
老师通过适当的图解和生活例子,幽默风趣地讲述编译原理,让人听来不算乏闷。尤其是今年这版,采取先实际使用 ANTLR 4 完成一些小例子,再补足理论知识的方式。让人能带着问题去找到适配的理论,更让人印象深刻。通过理论知识的学习,逐渐揭开 C 语言的“神秘面纱”。
理论部分基本按照龙书节奏叙述。包括词法分析、语法分析、语义分析、运行时环境、寄存器分配、代码优化与生成等内容。
实践则是本课程的亮点,一步步的,由简单到复杂地实现一个属于自己的编译器。
教授本课的老师极为慷慨,校外学生同样能享受到 Online Judge 以及参与课程讨论,老师还极为细心地整理历年来的学习资料,在课程网站里十分容易找到。
老师还把教学班的 [Zulip](https://2024-compilers-at-software-nju.zulipchat.com/join/wxwq3fib56ltlff2mk6qyrz5/) 地址公开(若有变更,在课程网站也能找到),这意味着你有任何问题,都能在上面提问,同时你也能看到跟你一起学习的南大学生的问题,这些问题都会得到助教和老师的回答,所以我并不用再赘述踩了哪些坑或者经验,因为你能在一个平台上,和一帮正在学习相同内容的人,一起交流问题。
最大感受是,心里不再对实现一个编译器有畏难情绪,也不再无从下手,学完课程,会有一套初步的行之有效的思路,让我们面对挑战。
## 课程资源
- 课程网站:<http://docs.compilers.cpl.icu/>
- 课程视频:<https://space.bilibili.com/479141149/channel/collectiondetail?sid=2312309>
- 课程教材:龙书等
- 课程作业10 个书面作业 + 8 ~ 10 个编程作业带你实现一个编译器

View File

@ -0,0 +1,42 @@
# PKU Compiler Principles Practice
## Descriptions
- Offered by: Peking University
- Prerequisites: Basics of Computer Systems, Data Structures and Algorithms, Programming Fundamentals
- Programming Languages: Choose one from C/C++/Rust
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 60 hours
The 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.
The following content is excerpted from @MaxXing's [Blog](https://blog.maxxsoft.net/index.php/archives/145/) which introduces this course in more details:
---
You 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:
- The tutorials are not aimed at people with "zero compiler foundation," and can be difficult to understand.
- They teach how to make a compiler but not why to do it that way, leaving you still in a fog after reading.
- Complicated environment setup is required before starting coding, discouraging beginners at the start.
- 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.
- 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."
- The compiler implemented can only compile simple programs, such as sorting algorithms, which seem very boring. Who sorts just for fun?
- Tutorials and their resources are not in Chinese, or they require payment and are not open source.
During 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:
- 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.
- 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.
- 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.
- Providing a Docker-based environment for one-click setup. The environment also includes automatic testing scripts for one-click testing of your compiler.
- 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.
- 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.
- The tutorial and its accompanying tools, experimental environments, etc., are all open source and completely free!
- 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?
My wish is that everyone feels the joy of writing compilers.
---
Finally, my highest regards to @MaxXing. — from PKUFlyingPig

View File

@ -0,0 +1,42 @@
# PKU 编译原理实践
## 课程简介
- 所属大学:北京大学
- 先修要求:计算机系统基础、数据结构与算法、编程基础
- 编程语言C/C++/Rust 任选其一
- 课程难度:🌟🌟🌟🌟
- 预计学时60 小时
北京大学的编译原理实践课程旨在实现一个从精简版的 C 语言 —— SysY 编译到 RISC-V 汇编的编译器。和其他提供了框架代码的课程不同,该课程给予了你极大的自由度,测试程序只会对你输出的汇编代码的正确性进行测试,而不会对你编译器的具体设计甚至使用的编程语言做任何限制。你需要从一个空文件夹开始一步步构建出独属于你自己的编译器。但平地起高楼即使对于北大的同学也是相当有难度的,因此课程助教 [@MaxXing](https://github.com/MaxXSoft) 在2022年对课程实验进行重大升级为课程专门设计了一种中间表示 Koopa IR (intermediate representation)。Koopa IR 在设计上更为合理,在形式上类似于 LLVM IR但简化了相当多的内容只专注于实践需要的部分。与此同时还为 Koopa IR 设计了配套的运行时库,你可以借助这套运行时库轻松地解析/生成/修改/输出 Koopa IR完全不需要对其他无用的细节做过多考虑。另外还有一份保姆级的文档将构建编译器这样一个大工程循序渐进地拆分成了9个小步骤让任何愿意花时间的同学都可以更容易地实现自己的编译器。
以下内容摘自 @MaxXing 在其 [Blog](https://blog.maxxsoft.net/index.php/archives/145/) 中对该课程实验的介绍:
---
你可能已经见过无数个教你写编译器的教程了,但它们也许或多或少存在各种问题,导致你看了它们之后,依然觉得无从下手:
- 教程并非面向“零编译器基础”的人群,理解起来比较费劲。
- 只教了怎么做一个编译器,但没教为什么这么做,读完之后还是觉得一头雾水。
- 开始编码之前,需要复杂的环境配置,开局劝退。
- 上来先做和“编译一个程序”这件事八竿子打不着的东西,跟着教程学一个月才能看到自己的编译器编出一个能跑的程序,反馈周期过长。
- 最终写出来的只是个解释器,或者不能编译到真实的 ISA例如输出了某种字节码或者高度依赖其他框架例如 LLVM让人体会不到那种“我真的写出个编译器”的成就感以及“所有事情都由自己实现”的酣畅感。
- 实现的编译器只能编译一些过于简单的程序,比如排序算法等等,看起来非常无聊。谁会没事干排序玩啊?
- 教程及其配套资源非中文,或需要付费,且不开源。
研究生期间,我一直在担任本科编译原理课程的助教。为了让本科生更好地理解编译器工作的原理,在参考多个其他教程之后,我设计了一套全新的,教你从零开始写个编译器的教程:
- 你可以使用 C/C++/Rust 开发你的编译器,教程只要求你具备使用这些语言编程的能力,不要求任何编译原理的基础和相关实践经验。
- 教程除了告诉你要如何写一个编译器,还会告诉你为什么这么做,以及除此之外还能怎么做。
- 教程采用增量式、迭代式的思路,引导你从一个只能处理 main 函数的编译器开始,逐步扩展实现一个能处理包括控制流、函数调用、数组在内的,类 C 语言的编译器。编译器可以输出 RISC-V 汇编。
- 提供基于 Docker 的实验环境,一键配置。环境中还附带自动测试脚本,一键测试你写的编译器。
- 教程介绍了相关工具,可以为你代劳一些枯燥的苦力活,比如生成 lexer/parser解析和生成 IR 等等。剩下的事情,如构建 AST、语义分析、生成 IR 以及生成目标代码,完全由你自己编程实现。
- 你最终实现的编译器足以编译很多复杂的程序,例如 Mandelbrot 集绘制程序,或者 Lisp 解释器(这个解释器甚至可以解释另一个 Lisp 解释器)。我们会提供这些程序,让你用你写的编译器体验到最真实的快乐。
- 教程及其配套工具、实验环境等,全部开源,完全免费!
- 你可以从 GitHub Pages 上访问到这个教程:[北京大学编译实践课程在线文档](https://pku-minic.github.io/online-doc/#/)。如果你之前从来没有尝试过自己写一个编译器,不如现在就来试一下吧!
我的愿望是,让每个人都感受到写编译器的快乐。
---
最后,向 @MaxXing 致以我崇高的敬意。—— from PKUFlyingPig

View File

@ -0,0 +1,28 @@
# CS110: Principles of Computer Systems
## Descriptions
- Offered by: Stanford
- 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.
- Programming Languages: C/C++
- Difficulty: 🌟🌟🌟🌟🌟
- Class Hour: 150 hours
This 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.
The 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.
The 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.
In 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.
## Course Resources
- Course Website: [winter20](https://web.stanford.edu/class/archive/cs/cs110/cs110.1204/)
- Lecture Videos: [spring19](https://www.youtube.com/playlist?list=PLai-xIlqf4JmTNR9aPCwIAOySs1GOm8sQ)
- Text Book: [Computer Systems: A Programmers Perspective](https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/CSAPP_2016.pdf)
- Assignments: 7 labs (with solution) and 8 assignments, can be found on the course website.
## Personal Resources
All the resources and assignments used by @xuzheng465 in this course are maintained in [xuzheng465/Stanford_CS110 - GitHub](https://github.com/xuzheng465/Stanford_CS110).

View File

@ -0,0 +1,28 @@
# CS110: Principles of Computer Systems
## 课程简介
- 所属大学Stanford
- 先修要求编程基础、Unix、GDB、Valgrind
- 编程语言C/C++
- 课程难度:🌟🌟🌟🌟🌟
- 预计学时150小时
这门课程在 [CS107](https://web.stanford.edu/class/archive/cs/cs107/cs107.1246/calendar) 的基础知识上进行拓展,深入研究计算机系统和程序构建。它专注于设计大型系统、跨多台机器的软件以及并行计算。课程的目标是教授学生计算机软件和硬件系统工程的原理和实践。
课程涵盖了广泛的主题,包括你的程序如何映射到计算机系统的组件上,理解程序行为和执行,理解大型系统的设计和权衡,编写跨多台机器的软件,以及编写在单台机器上并行运行任务的软件。
这门课程的教学风格是引人入胜且实用的。教师通过理论知识和丰富的编程实验,引导学生理解计算机系统中众多的技术挑战和设计原则。每周的实验让你为项目增加新功能,这些项目专注于提高学生的实践技能,让你有机会初步了解计算机系统的每一个方面,并且会公布答案,让你及时检查自己对关键知识点的掌握情况。
除了实验外,课程还包括旨在提供大量编程实践经验并加深对课程材料理解的项目作业。每项作业配有完整的测试框架。
## 课程资源
- 课程网站:[winter20](https://web.stanford.edu/class/archive/cs/cs110/cs110.1204/)
- 课程视频:[spring19](https://www.youtube.com/playlist?list=PLai-xIlqf4JmTNR9aPCwIAOySs1GOm8sQ)
- 课程教材:[Computer Systems: A Programmers Perspective](https://www.cs.sfu.ca/~ashriram/Courses/CS295/assets/books/CSAPP_2016.pdf)
- 课程作业7 labs + 8 assignments参见课程网站。
## 资源汇总
@xuzheng465 在学习这门课中用到的所有资源和作业实现都汇总在 [xuzheng465/Stanford_CS110 - GitHub](https://github.com/xuzheng465/Stanford_CS110) 中。

View File

@ -26,3 +26,14 @@ CMU 大名鼎鼎的镇系神课以其内容庞杂Project 巨难而闻名
- 课程作业11 个 Project[代码框架全部开源](http://csapp.cs.cmu.edu/3e/labs.html)
英语有困难的同学可以参考B站UP主[九曲阑干](https://space.bilibili.com/354767108/)对 CSAPP 的[中文讲解](https://www.bilibili.com/video/BV1cD4y1D7uR)据说CMU的中国留学生也在CMU的课堂上看这个视频呢。另外如果大家在看完 CSAPP 后对书中的第七章链接有一定的疑问推荐阅读《程序员的自我修养》这本书书的副标题是链接装载与库。这本书能够帮助我们完善对程序链接的理解相信你在看完这本书以后可以对程序的链接ELF 文件,动态库都将有一个更加深入的理解。十分推荐在读完 CSAPP对计算机系统有一定的了解以后作为补充资料来阅读。
有关 Lab 部分,同学们亦可参考 [Arthals](https://arthals.ink/about-me) 在北大计算机系统导论ICS课程中所做的详尽笔记
- [Data Lab](https://arthals.ink/posts/experience/data-lab)
- [Bomb Lab](https://arthals.ink/posts/experience/bomb-lab)
- [Attack Lab](https://arthals.ink/posts/experience/attack-lab)
- [Arch Lab](https://arthals.ink/posts/experience/arch-lab)
- [Cache Lab](https://arthals.ink/posts/experience/cache-lab)
- [Tsh Lab](https://arthals.ink/posts/experience/tsh-lab)
- [Malloc Lab](https://arthals.ink/posts/experience/malloc-lab)
- [Proxy Lab](https://arthals.ink/posts/experience/proxy-lab)

View File

@ -0,0 +1,26 @@
# CMU 17-803: Empirical Methods
## Descriptions
- Offered by: CMU
- Prerequisites: solid foundations of computer science
- Programming Languages: Any
- Difficulty: 🌟🌟🌟
- Class Hour: 100 hours
This 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.
The 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.
Although 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.
## Course Resources
- 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/)
- Recordings: [Spring 2024](https://www.youtube.com/playlist?list=PLuPUOEODcOmsiOxD7LK5EcQcj34Y9NwYg), [Fall 2022](https://www.youtube.com/watch?v=IDtePCle3Qc)
- Textbooks: Reading materials before each lecture.
- Assignments: Not open-source.
## Personal Resources
All the resources and assignments in this course are maintained in [bvasiles/empirical-methods - GitHub](https://github.com/bvasiles/empirical-methods).

View File

@ -0,0 +1,26 @@
# CMU 17-803: Empirical Methods
## 课程简介
- 所属大学CMU
- 先修要求:面向从事软件工程实证研究的博士生开设,虽然没有硬性先修要求但最好有一定的计算机基础
- 编程语言:不限
- 课程难度:🌟🌟🌟
- 预计学时100 小时
这门课专注于一个相对“陌生”的领域——包括但不限于软件工程领域的实证研究,由 [Bogdan Vasilescu](https://bvasiles.github.io/) 讲授,他在实证研究和开源软件研究方面非常深入。
这门课是 CMU 为从事该方向研究的博士生开设的,涵盖一系列定性与定量研究方法,如访谈、定性编码、调查设计以及多种数据统计分析方法,帮助学生了解、学习与从事实证研究。课程还会介绍挖掘和整合 GitHub 和 Stack Overflow 等软件存储库中的数据,并运用统计建模、社交网络分析等数据分析技术。
尽管计算机领域在传统上更注重工程技术,但对于工具、技术的设计、评估以及其可能的社会价值来说,实证研究是必需的。例如评估新算法或新技术框架,对某个领域进行相关数据分析,去了解从业者可能面临的挑战。这门课可以扩展和补充专注于技术领域视角。对于想要从事涉及软件工程领域实证研究的科研方向的朋友,这门课可能是一个很好的入门课程。
## 课程资源
- 课程网站:[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/)
- 课程视频:[Spring 2024](https://www.youtube.com/playlist?list=PLuPUOEODcOmsiOxD7LK5EcQcj34Y9NwYg), [Fall 2022](https://www.youtube.com/watch?v=IDtePCle3Qc)
- 课程教材:未公开,每节课前会有阅读材料
- 课程作业:未公开
## 资源汇总
这门课中用到的所有资源都汇总在 [bvasiles/empirical-methods - GitHub](https://github.com/bvasiles/empirical-methods) 中。

View File

@ -82,9 +82,15 @@ plugins:
数学基础: Fundamental Mathematics
数学进阶: Advanced Mathematics
编程入门: Fundamental Programming
Python 语言: Python Language
C 语言: C Language
C++ 语言: C++ Language
Rust 语言: Rust Language
函数式语言: Functional Programming
电子基础: Fundamental Electronics
数据结构与算法: Data Structures and Algorithms
软件工程: Software Engineering
计算机系统基础: Computer Systems Principles
体系结构: Computer Architecture
操作系统: Operating Systems
并行与分布式系统: Distributed Systems
@ -158,17 +164,22 @@ nav:
- 编程入门:
- "MIT-Missing-Semester": "编程入门/MIT-Missing-Semester.md"
- "Sysadmin DeCal": "编程入门/DeCal.md"
- "Harvard CS50: This is CS50x": "编程入门/CS50.md"
- "CS50P: CS50's Introduction to Programming with Python": "编程入门/CS50P.md"
- "UCB CS61A: Structure and Interpretation of Computer Programs": "编程入门/CS61A.md"
- "Duke University: Introductory C Programming Specialization": "编程入门/Duke-Coursera-Intro-C.md"
- "Stanford CS106B/X": "编程入门/CS106B_CS106X.md"
- "Stanford CS106L: Standard C++ Programming": "编程入门/CS106L.md"
- "Stanford CS110L: Safety in Systems Programming": "编程入门/CS110L.md"
- "AmirKabir University of Technology AP1400-2: Advanced Programming": "编程入门/AUT1400.md"
- "Haskell MOOC": "编程入门/Haskell-MOOC.md"
- "Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful": "编程入门/CS3110.md"
- "KAIST CS431: Concurrent Programming": "编程入门/cs431.md"
- Python 语言:
- "UCB CS61A: Structure and Interpretation of Computer Programs": "编程入门/Python/CS61A.md"
- "CS50P: CS50's Introduction to Programming with Python": "编程入门/Python/CS50P.md"
- C 语言:
- "Harvard CS50: This is CS50x": "编程入门/C/CS50.md"
- "Duke University: Introductory C Programming Specialization": "编程入门/C/Duke-Coursera-Intro-C.md"
- C++ 语言:
- "AmirKabir University of Technology AP1400-2: Advanced Programming": "编程入门/cpp/AUT1400.md"
- "Stanford CS106L: Standard C++ Programming": "编程入门/cpp/CS106L.md"
- "Stanford CS106B/X": "编程入门/cpp/CS106B_CS106X.md"
- Rust 语言:
- "Stanford CS110L: Safety in Systems Programming": "编程入门/Rust/CS110L.md"
- "KAIST CS431: Concurrent Programming": "编程入门/Rust/cs431.md"
- 函数式语言:
- "Cornell CS3110: OCaml Programming Correct + Efficient + Beautiful": "编程入门/Functional/CS3110.md"
- "Haskell MOOC": "编程入门/Functional/Haskell-MOOC.md"
- 电子基础:
- "EE16A&B: Designing Information Devices and Systems I&II": "电子基础/EE16.md"
- "UCB EE120 : Signal and Systems": "电子基础/signal.md"
@ -182,10 +193,13 @@ nav:
- 软件工程:
- "MIT 6.031: Software Construction": "软件工程/6031.md"
- "UCB CS169: software engineering": "软件工程/CS169.md"
- "CMU 17-803: Empirical Methods": "软件工程/17803.md"
- 计算机系统基础:
- "CMU 15-213: CSAPP": "计算机系统基础/CSAPP.md"
- "Stanford CS110: Principles of Computer Systems": "计算机系统基础/CS110.md"
- 体系结构:
- "Coursera: Nand2Tetris": "体系结构/N2T.md"
- "UCB CS61C: Great Ideas in Computer Architecture": "体系结构/CS61C.md"
- "CMU 15-213: CSAPP": "体系结构/CSAPP.md"
- "ETHz: Digital Design and Computer Architecture": "体系结构/DDCA.md"
- "ETHz: Computer Architecture": "体系结构/CA.md"
- 操作系统:
@ -198,6 +212,7 @@ nav:
- "MIT 6.824: Distributed System": "并行与分布式系统/MIT6.824.md"
- 计算机系统安全:
- "UCB CS161: Computer Security": "系统安全/CS161.md"
- "MIT 6.1600: Foundations of Computer Security": "系统安全/MIT6.1600.md"
- "MIT 6.858: Computer System Security": "系统安全/MIT6.858.md"
- "ASU CSE365: Introduction to Cybersecurity": "系统安全/CSE365.md"
- "ASU CSE466: Computer Systems Security": "系统安全/CSE466.md"
@ -213,7 +228,9 @@ nav:
- "Stanford CS346: Database System Implementation": "数据库系统/CS346.md"
- "CMU 15-799: Special Topics in Database Systems": "数据库系统/15799.md"
- 编译原理:
- "PKU 编译原理实践": "编译原理/PKU-Compilers.md"
- "Stanford CS143: Compilers": "编译原理/CS143.md"
- "NJU 编译原理": "编译原理/NJU-Compilers.md"
- 编程语言设计与分析:
- "Stanford CS242: Programming Languages": "编程语言设计与分析/CS242.md"
- "NJU 软件分析": "编程语言设计与分析/NJU-SoftwareAnalysis.md"