From a75cdb6625d1dee7cc49fefe2ba55fb82ec0ef97 Mon Sep 17 00:00:00 2001 From: <> Date: Wed, 18 Jan 2023 03:32:02 +0000 Subject: [PATCH] Deployed a89fc150 with MkDocs version: 1.4.2 --- en/Web开发/mitweb/index.html | 2 +- en/体系结构/CS61C/index.html | 2 +- en/体系结构/CSAPP/index.html | 2 +- en/体系结构/DDCA/index.html | 2 +- en/并行与分布式系统/CS149/index.html | 2 +- en/并行与分布式系统/MIT6.824/index.html | 2 +- en/必学工具/Vim/index.html | 2 +- en/操作系统/CS162/index.html | 2 +- en/数据库系统/15445/index.html | 2 +- en/机器学习/CS229/index.html | 2 +- en/系统安全/MIT6.858/index.html | 2 +- en/编程入门/CS110L/index.html | 2 +- en/软件工程/6031/index.html | 2 +- en/软件工程/CS169/index.html | 2 +- search/search_index.json | 2 +- sitemap.xml.gz | Bin 2309 -> 2309 bytes 16 files changed, 15 insertions(+), 15 deletions(-) diff --git a/en/Web开发/mitweb/index.html b/en/Web开发/mitweb/index.html index e797db68..62a3502a 100644 --- a/en/Web开发/mitweb/index.html +++ b/en/Web开发/mitweb/index.html @@ -1,4 +1,4 @@ - MIT web development course - CSDIY.wiki
Skip to content

MIT Web Development Crash Course

Descriptions

  • Offered by: MIT
  • Prerequisites: better if you are already proficient in a programming language
  • Programming Languages: JavaScript/HTML/CSS/NoSQL
  • Difficulty: 🌟🌟🌟
  • Class Hour: Varying according to the learner

Independent Activities Period (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.

Within a month, you will master the core content of designing, building, beautifying, and publishing a website from scratch, basically covering full-stack web development. If you don't need to learn web development systematically, but just want to add it to your toolkit out of interest, then this class will be perfect for you.

Resources


Last update: October 25, 2022

MIT Web Development Crash Course

Descriptions

  • Offered by: MIT
  • Prerequisites: better if you are already proficient in a programming language
  • Programming Languages: JavaScript/HTML/CSS/NoSQL
  • Difficulty: 🌟🌟🌟
  • Class Hour: Varying according to the learner

Independent Activities Period (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.

Within a month, you will master the core content of designing, building, beautifying, and publishing a website from scratch, basically covering full-stack web development. If you don't need to learn web development systematically, but just want to add it to your toolkit out of interest, then this class will be perfect for you.

Resources


Last update: January 18, 2023

CS61C: Great Ideas in Computer Architecture

Descriptions

  • Offered by: UC Berkeley
  • Prerequisites: CS61A, CS61B
  • Programming Languages: C
  • Difficulty: 🌟🌟🌟🌟
  • Class Hour: 100 hours

This is the last course in Berkeley's CS61 series, which dives into the internal of computer architecture and will make you understand how the C language is translated into RISC-V assembly language and executed on the CPU. Unlike Nand2Tetris, this course is much more difficult and more in-depth, covering pipelining, cache, virtual memory, and concurrency-related content.

The projects are very innovative and interesting. Project1 is a warmup assignment in C. In 2020Fall, you will implement the famous Game of Life. Project2 requires you to write a fully-connected neural network in RISC-V assembly to classify handwritten digits in MNIST dataset, which is a great exercise to write assembly code. In Project3, you will use Logisim, a digital circuit simulation software, to build a two-stage pipeline CPU from scratch and run RISC-V assembly code on it. In Project4 you will implement a toy version of Numpy, using OpenMP, SIMD, and other techniques to speed up matrix operations.

In a word, this is the best computer architecture course I have ever taken.

Course Resources

  • Course Website: https://cs61c.org/su20/
  • Recordings: Youtube
  • Textbook: None
  • Assignments: 11 Labs, 4 Projects, the course website has specific requirements

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS61C-summer20 - GitHub


Last update: October 16, 2022

CS61C: Great Ideas in Computer Architecture

Descriptions

  • Offered by: UC Berkeley
  • Prerequisites: CS61A, CS61B
  • Programming Languages: C
  • Difficulty: 🌟🌟🌟🌟
  • Class Hour: 100 hours

This is the last course in Berkeley's CS61 series, which dives into the internal of computer architecture and will make you understand how the C language is translated into RISC-V assembly language and executed on the CPU. Unlike Nand2Tetris, this course is much more difficult and more in-depth, covering pipelining, cache, virtual memory, and concurrency-related content.

The projects are very innovative and interesting. Project1 is a warmup assignment in C. In 2020Fall, you will implement the famous Game of Life. Project2 requires you to write a fully-connected neural network in RISC-V assembly to classify handwritten digits in MNIST dataset, which is a great exercise to write assembly code. In Project3, you will use Logisim, a digital circuit simulation software, to build a two-stage pipeline CPU from scratch and run RISC-V assembly code on it. In Project4 you will implement a toy version of Numpy, using OpenMP, SIMD, and other techniques to speed up matrix operations.

In a word, this is the best computer architecture course I have ever taken.

Course Resources

  • Course Website: https://cs61c.org/su20/
  • Recordings: Youtube
  • Textbook: None
  • Assignments: 11 Labs, 4 Projects, the course website has specific requirements.

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS61C-summer20 - GitHub.


Last update: January 18, 2023

CMU CS15213: CSAPP

Descriptions

  • Offered by: CMU
  • Prerequisites: CS61A, CS61B
  • Programming Languages: C
  • Difficulty: 🌟🌟🌟🌟🌟
  • Class Hour: 150 hours

This 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.

The 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.

Peking 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).

This 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.

After completing this course, your understanding of computer systems will definitely go up a notch.

Course Resources

If 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.


Last update: October 16, 2022

CMU CS15213: CSAPP

Descriptions

  • Offered by: CMU
  • Prerequisites: CS61A, CS61B
  • Programming Languages: C
  • Difficulty: 🌟🌟🌟🌟🌟
  • Class Hour: 150 hours

This 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.

The 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.

Peking 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).

This 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.

After completing this course, your understanding of computer systems will definitely go up a notch.

Course Resources

If 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.


Last update: January 18, 2023

Digital Design and Computer Architecture

Descriptions

  • Offered by: ETH Zurich
  • Prerequisites: CS50 or same level course; Better have a basic knowledge of C
  • Programming Languages: C, Verilog, MIPS, LC3
  • Difficulty: 🌟🌟🌟
  • Class Hour: 100 hours

In this course, Onur Mutlu, a great expert in the field of Computer Architecture, will teach you about digital circuits and computer architecture. The course is entirely from the perspective of a computer designer, starting with transistors and logic gates and extending to microarchitecture, caches, and virtual memory. It also covers many of the latest research advances in the field of computer architecture. After learning, you will master digital circuits, hardware description language Verilog, MIPS instruction set, CPU design and performance analysis, pipelining, cache, virtual memory, and so on.

There are 9 labs in the course. You will use the Basys 3 FPGA board and Vivado 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.

Course Resources


Last update: October 10, 2022

Digital Design and Computer Architecture

Descriptions

  • Offered by: ETH Zurich
  • Prerequisites: CS50 or same level course; Better have a basic knowledge of C
  • Programming Languages: C, Verilog, MIPS, LC3
  • Difficulty: 🌟🌟🌟
  • Class Hour: 100 hours

In this course, Onur Mutlu, a great expert in the field of Computer Architecture, will teach you about digital circuits and computer architecture. The course is entirely from the perspective of a computer designer, starting with transistors and logic gates and extending to microarchitecture, caches, and virtual memory. It also covers many of the latest research advances in the field of computer architecture. After learning, you will master digital circuits, hardware description language Verilog, MIPS instruction set, CPU design and performance analysis, pipelining, cache, virtual memory, and so on.

There are 9 labs in the course. You will use the Basys 3 FPGA board and Vivado 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.

Course Resources


Last update: January 18, 2023

CMU 15-418/Stanford CS149: Parallel Computing

Descriptions

  • Offered by: CMU and Stanford
  • Prerequisites: Computer Architecture, C++
  • Programming Languages: C++
  • Difficulty: 🌟🌟🌟🌟🌟
  • Class Hour: 150 hours

The professor Kayvon Fatahalian used to teach course 15-418 at CMU. After he became an assistant professor at Stanford, he offered a similar course, CS149 at Stanford. In general, the 15-418 version is more comprehensive and has lecture recordings, but CS149's programming assignments are more fashionable. Personally, I watched the recordings of 15-418 but completed the assignments of CS149.

The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems, as well as to teach how to utilize hardwares and software programming frameworks (such as CUDA, MPI, OpenMP, etc.) for writing high-performance parallel programs. Due to the complexity of parallel computing architecture, this course involves a lot of advanced computer architecture and network communication content, the knowledge is quite low-level and hardcore. Meanwhile, the five assignments develop your understanding and application of upper-level abstraction through software, specifically by analyzing bottlenecks in parallel programs, writing multi-threaded synchronization code, learning CUDA programming, OpenMP programming, and the popular Spark framework, etc. It really combines theory and practice perfectly.

Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS149-parallel-computing - GitHub


Last update: October 21, 2022

CMU 15-418/Stanford CS149: Parallel Computing

Descriptions

  • Offered by: CMU and Stanford
  • Prerequisites: Computer Architecture, C++
  • Programming Languages: C++
  • Difficulty: 🌟🌟🌟🌟🌟
  • Class Hour: 150 hours

The professor Kayvon Fatahalian used to teach course 15-418 at CMU. After he became an assistant professor at Stanford, he offered a similar course, CS149 at Stanford. In general, the 15-418 version is more comprehensive and has lecture recordings, but CS149's programming assignments are more fashionable. Personally, I watched the recordings of 15-418 but completed the assignments of CS149.

The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems, as well as to teach how to utilize hardwares and software programming frameworks (such as CUDA, MPI, OpenMP, etc.) for writing high-performance parallel programs. Due to the complexity of parallel computing architecture, this course involves a lot of advanced computer architecture and network communication content, the knowledge is quite low-level and hardcore. Meanwhile, the five assignments develop your understanding and application of upper-level abstraction through software, specifically by analyzing bottlenecks in parallel programs, writing multi-threaded synchronization code, learning CUDA programming, OpenMP programming, and the popular Spark framework, etc. It really combines theory and practice perfectly.

Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS149-parallel-computing - GitHub.


Last update: January 18, 2023

MIT6.824: Distributed System

Descriptions

  • Offered by: MIT
  • Prerequisites: Computer Architecture, Parallel Computing
  • Programming Languages: Go
  • Difficulty: 🌟🌟🌟🌟🌟🌟
  • Class Hour: 200 hours

This course, the same as MIT 6.S081, comes from the renowned MIT PDOS Lab. The instructor, Professor Robert Morris, was once a famous hacker who created 'Morris', the first worm virus in the world.

Each lecture will discuss a classic paper in the field of distributed systems, teaching you the important principles and key techniques of distributed systems design and implementation. The Project is known for its difficulty. In four programming assignments, you will implement a KV-store framework step by step based on the Raft consensus algorithm, allowing you to experience the randomness and complexity to implement and debug a distributed system.

This course is so famous that you can easily have access to the project solutions on the Internet. It is highly recommended to implement the projects on your own.

Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/MIT6.824 - GitHub

@OneSizeFitsQuorum has written a Lab Documentation 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 ~ ~


Last update: October 22, 2022

MIT6.824: Distributed System

Descriptions

  • Offered by: MIT
  • Prerequisites: Computer Architecture, Parallel Computing
  • Programming Languages: Go
  • Difficulty: 🌟🌟🌟🌟🌟🌟
  • Class Hour: 200 hours

This course, the same as MIT 6.S081, comes from the renowned MIT PDOS Lab. The instructor, Professor Robert Morris, was once a famous hacker who created 'Morris', the first worm virus in the world.

Each lecture will discuss a classic paper in the field of distributed systems, teaching you the important principles and key techniques of distributed systems design and implementation. The Project is known for its difficulty. In four programming assignments, you will implement a KV-store framework step by step based on the Raft consensus algorithm, allowing you to experience the randomness and complexity to implement and debug a distributed system.

This course is so famous that you can easily have access to the project solutions on the Internet. It is highly recommended to implement the projects on your own.

Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/MIT6.824 - GitHub.

@OneSizeFitsQuorum has written a Lab Documentation 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 ~ ~


Last update: January 18, 2023

Vim

Why Vim

In my opinion, the Vim editor has the following benefits:

  • 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.
  • Convenient file switching and panel controls allow you to edit multiple files simultaneously or even different locations of the same file.
  • Vim's macros can batch repeat operations (e.g. add tabs to multi-lines, etc.)
  • 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).
  • A rich ecology of plugins gives you the world's most fancy command-line editor.

How to learn Vim

Unfortunately 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.

There 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:

  • Read This tutorial first to understand the basic Vim concepts and usage.
  • Use Vim's own vimtutor to practice. After installing Vim, type vimtutor directly into the command line to enter the practice program.
  • Then you can force yourself to use Vim for development, and you can install Vim plugins in your favorite IDE.
  • 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.
  • If you want to know more about how to customize Vim to suit your needs, Learn Vim Script the Hard Way is a perfect start point.

Remapping Keys

Ctrl and Esc keys are probably two of the most used keys in Vim. However, these two keys are pretty far away from home row. In order to make it easier to reach these keys, you can remap CapsLock to Esc or Ctrl.

On Windows, Powertoys or AutoHotkey can be used to achieve this goal.
On macOS, you can remap keys in system settings, see this page.

A 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.

On Windows, this AutoHotKey gist does just this.
On macOS, this karabiner rule does the magic.

  • Neil, Drew. Practical Vim: Edit Text at the Speed of Thought. N.p., Pragmatic Bookshelf, 2015.
  • Neil, Drew. Modern Vim: Craft Your Development Environment with Vim 8 and Neovim. United States, Pragmatic Bookshelf.

Last update: December 5, 2022

Vim

Why Vim

In my opinion, the Vim editor has the following benefits:

  • 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.
  • Convenient file switching and panel controls allow you to edit multiple files simultaneously or even different locations of the same file.
  • Vim's macros can batch repeat operations (e.g. add tabs to multi-lines, etc.)
  • 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).
  • A rich ecology of plugins gives you the world's most fancy command-line editor.

How to learn Vim

Unfortunately 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.

There 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:

  • Read This tutorial first to understand the basic Vim concepts and usage.
  • Use Vim's own vimtutor to practice. After installing Vim, type vimtutor directly into the command line to enter the practice program.
  • Then you can force yourself to use Vim for development, and you can install Vim plugins in your favorite IDE.
  • 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.
  • If you want to know more about how to customize Vim to suit your needs, Learn Vim Script the Hard Way is a perfect start point.

Remapping Keys

Ctrl and Esc keys are probably two of the most used keys in Vim. However, these two keys are pretty far away from home row. In order to make it easier to reach these keys, you can remap CapsLock to Esc or Ctrl.

On Windows, Powertoys or AutoHotkey can be used to achieve this goal.
On macOS, you can remap keys in system settings, see this page. Karabiner-Elements also works.

A 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.

On Windows, this AutoHotKey gist does just this.
On macOS, this karabiner rule does the magic.

  • Neil, Drew. Practical Vim: Edit Text at the Speed of Thought. N.p., Pragmatic Bookshelf, 2015.
  • Neil, Drew. Modern Vim: Craft Your Development Environment with Vim 8 and Neovim. United States, Pragmatic Bookshelf.

Last update: January 18, 2023

CS162: Operating System

Descriptions

  • Offered by: UC Berkeley
  • Prerequisites: CS61A, CS61B, CS61C
  • Programming Languages: C, x86 Assembly
  • Difficulty: 🌟🌟🌟🌟🌟🌟
  • Class Hour: 200 hours+

The course impressed me in two aspects:

Firstly, the textbook: Operating Systems: Principles and Practice (2nd Edition) is written in an insightful but easy-to-understand way, well compensated for the lack of theoretical knowledge in MIT6.S081, I highly recommend you to read this book.

Secondly, 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 to explain the design principles of Pintos.

Unlike 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. The four projects let you add scheduler (Project1), system calls (Project2), virtual memory (Project3), and the file system (Project4) 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 from Stanford students, the latter two projects take over 40 hours per person even in teams of 3-4 people.

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 to write a comprehensive lab documentation 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

Personal Resources

Since the Operating System Course at PKU uses the project, my implementation is not open source to prevent plagiarism.


Last update: October 14, 2022

CS162: Operating System

Descriptions

  • Offered by: UC Berkeley
  • Prerequisites: CS61A, CS61B, CS61C
  • Programming Languages: C, x86 Assembly
  • Difficulty: 🌟🌟🌟🌟🌟🌟
  • Class Hour: 200 hours+

The course impressed me in two aspects:

Firstly, the textbook: Operating Systems: Principles and Practice (2nd Edition) is written in an insightful but easy-to-understand way, well compensated for the lack of theoretical knowledge in MIT6.S081, I highly recommend you to read this book.

Secondly, 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 to explain the design principles of Pintos.

Unlike 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. The four projects let you add scheduler (Project1), system calls (Project2), virtual memory (Project3), and the file system (Project4) 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 from Stanford students, the latter two projects take over 40 hours per person even in teams of 3-4 people.

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 to write a comprehensive lab documentation 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

Personal Resources

Since the Operating System Course at PKU uses the project, my implementation is not open source to prevent plagiarism.


Last update: January 18, 2023

CMU 15-445: Database Systems

Descriptions

  • Offered by: CMU
  • Prerequisites: C++, Data Structures and Algorithms
  • Programming Languages: C++
  • Difficulty: 🌟🌟🌟🌟
  • Class Hour: 100 hours

This is an introductory course on databases at CMU taught by Andy Pavlo, a great expert in the field of databases. It teaches the basic topics of database systems from the bottom up, covering storage management, indexing, query processing, concurrency control, transactions, and so on.

The course project Bustub is an educational database system developed at CMU by the course instructors. During the semester, you will modify this database to implement the functions mentioned above. Moreover, as a well-written project in C++, Bustub obeys many modern development best practices, such as code specification, unit testing, cmake module build, etc. So it can be an excellent open source project to study.

Resources

  • Course Website: Fall2019, Fall2020, Fall2021
  • Assignments: refer to the course website
  • Textbook: Database System Concepts
  • Assignments: 4 Projects

In Fall 2019, the second Project is to implement a hash table, and the fourth Project is to implement Logging, Recovery, and Checkpoints in your database system.

In Fall 2020, the second Project is to implement B+Tree dynamic index structure, and the fourth Project is to implement concurrency control.

In Fall 2021, the first Project is to implement a buffer pool, the second Project is to implement a hash table, and the fourth Project is to implement concurrency control.

If you have more time you can try them all, and when you do not understand the textbook very well, trying to implement the real system will deepen your understanding.

Personal Resources

All the resources and assignments used by @ysj1173886760 in this course are maintained in ysj1173886760/Learning:db - GitHub

Due 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 wrote a shell script to help you evaluate your solution automatically.

After the course, it is recommended to read the paper Architecture Of a Database System. This paper provides an overview of the overall architecture of database systems so that you can have a more comprehensive view of the database.

Advanced courses

CMU15-721 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 is currently following up on this course and will create a pull request here after completing it to provide advanced guidance.


Last update: October 31, 2022

CMU 15-445: Database Systems

Descriptions

  • Offered by: CMU
  • Prerequisites: C++, Data Structures and Algorithms
  • Programming Languages: C++
  • Difficulty: 🌟🌟🌟🌟
  • Class Hour: 100 hours

This is an introductory course on databases at CMU taught by Andy Pavlo, a great expert in the field of databases. It teaches the basic topics of database systems from the bottom up, covering storage management, indexing, query processing, concurrency control, transactions, and so on.

The course project Bustub is an educational database system developed at CMU by the course instructors. During the semester, you will modify this database to implement the functions mentioned above. Moreover, as a well-written project in C++, Bustub obeys many modern development best practices, such as code specification, unit testing, cmake module build, etc. So it can be an excellent open source project to study.

Resources

  • Course Website: Fall2019, Fall2020, Fall2021
  • Recording: refer to the course website.
  • Textbook: Database System Concepts
  • Assignments: 4 Projects

In Fall 2019, the second Project is to implement a hash table, and the fourth Project is to implement Logging, Recovery, and Checkpoints in your database system.

In Fall 2020, the second Project is to implement B+Tree dynamic index structure, and the fourth Project is to implement concurrency control.

In Fall 2021, the first Project is to implement a buffer pool, the second Project is to implement a hash table, and the fourth Project is to implement concurrency control.

If you have more time you can try them all, and when you do not understand the textbook very well, trying to implement the real system will deepen your understanding.

Personal Resources

All the resources and assignments used by @ysj1173886760 in this course are maintained in ysj1173886760/Learning:db - GitHub.

Due 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 wrote a shell script to help you evaluate your solution automatically.

After the course, it is recommended to read the paper Architecture Of a Database System. This paper provides an overview of the overall architecture of database systems so that you can have a more comprehensive view of the database.

Advanced courses

CMU15-721 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 is currently following up on this course and will create a pull request here after completing it to provide advanced guidance.


Last update: January 18, 2023

CS229: Machine Learning

课程简介

  • 所属大学:Stanford
  • 先修要求:高数,概率论,Python,需要较深厚的数学功底
  • 编程语言:无
  • 课程难度:🌟🌟🌟🌟
  • 预计学时:100 小时

同样是吴恩达讲授,但是这是一门研究生课程,所以更偏重数学理论,不满足于调包而想深入理解算法本质,或者有志于从事机器学习理论研究的同学可以学习这门课程。课程网站上提供了所有的课程 notes,写得非常专业且理论,需要一定的数学功底。

课程资源

资源汇总

@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/CS229 - GitHub 中。


Last update: September 6, 2022

CS229: Machine Learning

Descriptions

  • Offered by: Stanford
  • Prerequisite requirements: Advanced Mathematics, Probability Theory, Python, Solid mathematics skills
  • Programming Languages: None
  • Difficulty:🌟🌟🌟🌟
  • Class Hour: 100 hours

This is another ML course offered by Andrew Ng. Since it is graduate-level, it focuses more on the mathematical theory behind machine learning. If you are not satisfied with using off-the-shelf tools but want to understand the essence of the algorithm, or aspire to engage in theoretical research on machine learning, you can take this course. All the lecture notes are provided on the course website, written in a professional and theoretical way, requiring a solid mathematical background.

Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS229 - GitHub.


Last update: January 18, 2023

MIT 6.858: Computer System Security

Descriptions

  • Offered by: MIT
  • Prerequisites: Computer Architecture, basic knowledge about programming and computer system
  • Programming Languages: C, Python
  • Difficulty:🌟🌟🌟🌟🌟
  • Class Hour: 150 hours

This 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.

Assignments include labs that involve implementing and compromising a secure web server and web application, and a group final project:

  • Lab 1: you will explore the zoobar web application, and use buffer overflow attacks to break its security properties.
  • 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.
  • 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.
  • Lab 4: you will improve the zoobar application against browser attacks.

I 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.

In the Final Project, you will build a remote file system, SecFS, that provides both confidentiality and integrity in the face of a completely untrusted server. Reference Papers: SUNDR

Resources


Last update: October 16, 2022

MIT 6.858: Computer System Security

Descriptions

  • Offered by: MIT
  • Prerequisites: Computer Architecture, basic knowledge about programming and computer system
  • Programming Languages: C, Python
  • Difficulty:🌟🌟🌟🌟🌟
  • Class Hour: 150 hours

This 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.

Assignments include labs that involve implementing and compromising a secure web server and web application, and a group final project:

  • Lab 1: you will explore the zoobar web application, and use buffer overflow attacks to break its security properties.
  • 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.
  • 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.
  • Lab 4: you will improve the zoobar application against browser attacks.

I 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.

In the Final Project, you will build a remote file system, SecFS, that provides both confidentiality and integrity in the face of a completely untrusted server. Reference Papers: SUNDR

Resources


Last update: January 18, 2023

CS110L: Safety in Systems Programming

Descriptions

  • Offered by: Stanford
  • Prerequisites: basic knowledge about programming and computer system
  • Programming Languages: Rust
  • Difficulty: 🌟🌟🌟
  • Class Hour: 30 hours

In this course, you will learn a fantastic language, Rust.

If 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.).

The 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.

Personally, 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 for more details.

Course Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS110L - GitHub

Due to the rapid evolution of Rust, the libraries used in the 2020 version of the course project are obsolete, so @fung-hwang tried to adapt these libraries (in November 2022). His adaptation advice and completed assignments are maintained in fung-hwang/CS110L-2020spr - GitHub. 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.


Last update: December 4, 2022

CS110L: Safety in Systems Programming

Descriptions

  • Offered by: Stanford
  • Prerequisites: basic knowledge about programming and computer system
  • Programming Languages: Rust
  • Difficulty: 🌟🌟🌟
  • Class Hour: 30 hours

In this course, you will learn a fantastic language, Rust.

If 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.).

The 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.

Personally, 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 for more details.

Course Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS110L - GitHub.

Due to the rapid evolution of Rust, the libraries used in the 2020 version of the course project are obsolete, so @fung-hwang tried to adapt these libraries (in November 2022). His adaptation advice and completed assignments are maintained in fung-hwang/CS110L-2020spr - GitHub. 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.


Last update: January 18, 2023

MIT 6.031: Software Construction

Descriptions

  • Offered by: MIT
  • Prerequisites: better if you are already proficient in a programming language
  • Programming Languages: Java
  • Difficulty: 🌟🌟🌟🌟
  • Class Hour: 100 hours

The 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:

Safe from bugs. Correctness (correct behavior right now) and defensiveness (correct behavior in the future) are required in any software we build.

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.

Ready for change. Software always changes. Some designs make it easy to make changes; others require throwing away and rewriting a lot of code.

To 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.

In 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).

Course Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/ MIT6.031-Software-Engineering - GitHub

@pengzhangzhi completed the assignments and took some notes, maintained at pengzhangzhi/self-taught-CS/Software Construction - Github


Last update: October 16, 2022

MIT 6.031: Software Construction

Descriptions

  • Offered by: MIT
  • Prerequisites: better if you are already proficient in a programming language
  • Programming Languages: Java
  • Difficulty: 🌟🌟🌟🌟
  • Class Hour: 100 hours

The 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:

Safe from bugs. Correctness (correct behavior right now) and defensiveness (correct behavior in the future) are required in any software we build.

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.

Ready for change. Software always changes. Some designs make it easy to make changes; others require throwing away and rewriting a lot of code.

To 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.

In 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).

Course Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/ MIT6.031-Software-Engineering - GitHub.

@pengzhangzhi completed the assignments and took some notes, maintained at pengzhangzhi/self-taught-CS/Software Construction - Github.


Last update: January 18, 2023

UCB CS169: software engineering

Descriptions

  • Offered by: UC Berkeley
  • Prerequisites: None
  • Programming Languages: Ruby/JavaScript
  • Difficulty: 🌟🌟🌟🌟
  • Class Hour: 100 hours

This is Berkeley's software engineering course. Unlike many traditional software engineering courses that emphasize UML diagrams, plans, and documents, this course adopts agile development methodologies and uses the cloud platform to provide software as a service. The instructors wrote a textbook Software as a service to explain the concept of SaaS and agile development. Also, there are plenty of programming assignments using Ruby + Rails framework.

This course is available on Edx, 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.

Course Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS169-Software-Engineering - GitHub


Last update: October 8, 2022

UCB CS169: software engineering

Descriptions

  • Offered by: UC Berkeley
  • Prerequisites: None
  • Programming Languages: Ruby/JavaScript
  • Difficulty: 🌟🌟🌟🌟
  • Class Hour: 100 hours

This is Berkeley's software engineering course. Unlike many traditional software engineering courses that emphasize UML diagrams, plans, and documents, this course adopts agile development methodologies and uses the cloud platform to provide software as a service. The instructors wrote a textbook Software as a service to explain the concept of SaaS and agile development. Also, there are plenty of programming assignments using Ruby + Rails framework.

This course is available on Edx, 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.

Course Resources

Personal Resources

All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS169-Software-Engineering - GitHub.


Last update: January 18, 2023