Hi 👋, this is a repo for cs-courses.
A collection of exercises in many courses that I have learned. Every course is organized as a git submodule. You may click on the links below, which will bring you to the real repo.
Warning
This repo is only for self-learning purposes; please DON'T PLAGIARIZE MY WORK and CHEAT IN THE CLASS.
Notations for available resources:
- 🎥 represents the lecture videos.
- 🏷 represents the PPT/Notes/Reading.
- ⌨️ represents the assignments/Homework/Projects.
- ⚙️ represents the autograde for assignments/homework/projects.
Tip
By clicking the hyperlinks, you can jump into another repo that contains my solutions.
Mastering CS tools—especially command-line tools—is an effective way to boost your productivity.
Classes teach you all about advanced topics within CS, from operating systems to machine learning, but there’s one critical subject that’s rarely covered and is instead left to students to figure out on their own: proficiency with their tools.
Topics: command-line; text editor; version control systems
Before the era of AI coding, programming itself was the most important skill for software engineers. I used to recommend that every engineer learn at least one imperative programming language and one functional programming language.
As coding agents become increasingly capable, however, my recommendation has changed. Rather than focusing on learning more programming languages, I think it's more valuable to develop a solid understanding of software architecture, design patterns, and other higher-level software engineering concepts. These abstractions allow you to better guide and constrain coding agents, leading to higher-quality implementations.
This course demonstrates that modern AI tooling will not only enhance developer productivity but also democratize software engineering for a broader audience. We'll show that software development has evolved from 0-1 code creation to an iterative workflow of plan, generate with AI, modify, and repeat. Students will master both the theory behind traditional software engineering challenges and the cutting-edge AI-powered tools solving them today.
Topics: agentic development; software development; ai tooling
An introduction to programming and computer science focused on abstraction techniques as a means to manage program complexity. The course exposes students to programming paradigms, including functional, object-oriented, and declarative approaches. It includes an introduction to the asymptotic analysis of algorithms. There are several significant programming projects.
Topics: procedural abstraction; control abstraction using recursion; higher-order functions; generators; streams; data abstraction; language abstraction
This course is an introduction to the basic concepts of programming languages, with a strong emphasis on functional programming. The course uses the languages ML, Racket, and Ruby as vehicles for teaching the concepts, but the real intent is to teach enough about how any language “fits together” to make you more effective programming in any language -- and in learning new ones. It will give you a framework for understanding how to use language constructs effectively and how to design correct and elegant programs. By using different languages, you will learn to think more deeply than in terms of the particular syntax of one language. The emphasis on functional programming is essential for learning how to write robust, reusable, composable, and elegant programs. Indeed, many of the most important ideas in modern languages have their roots in functional programming.
Topics: SML; Racket; Ruby; functional programming; higher-order functions; pattern-matching; delayed evaluation; macros; object-oriented programming; generics; subtype; bounded polymorphism
This is an online course on functional programming that uses the Haskell programming language, which is aimed at beginners who wish to learn functional programming, but also at people who have experience with functional programming and want to learn Haskell in particular. The course assumes no previous knowledge, but knowing at least one programming language beforehand will make the course easier.
Topics: Haskell; functional programming; lazy evaluation; functor; applicative; monad; monoid
This class is focused on safety and robustness in systems programming: Where do things often go wrong in computer systems? How can we avoid common pitfalls? We will use the Rust programming language as a vehicle to teach mental models and paradigms that have been shown to be helpful in preventing errors, and we will look at how these features have made their way back into C++.
Topics: error handling; memory safety; basic and intermediate rust programming; smart pointers; information security; scalability and availability.
In this course, we will cover what makes Rust so unique and apply it to practical systems programming problems.
Topics: traits and generics; memory safety; move semantics; borrowing; lifetimes; rich macro system; closures; concurrency.
Understanding classical algorithms is certainly helpful for technical interviews. However, many advanced and highly specialized algorithms are unlikely to be used in your day-to-day work.
This is an introductory course covering elementary data structures (dynamic arrays, heaps, balanced binary search trees, hash tables) and algorithmic approaches to solve classical problems (sorting, graph searching, dynamic programming). Introduction to mathematical modeling of computational problems, as well as common algorithms, algorithmic paradigms, and data structures used to solve these problems. Emphasizes the relationship between algorithms and programming, and introduces basic performance measures and analysis techniques for these problems.
Topics: sorting; binary tree; binary heaps; bread-first search; depth-first search; single source shortest path; all pairs shortest path; dynamic programming
Regardless of your profession, I recommend learning some data analysis. It's useful not only at work, but also in everyday life.
This intermediate-level class bridges between Data 8 and upper-division computer science and statistics courses as well as methods courses in other fields. In this class, we explore key areas of data science, including question formulation.
Topics: data collection and cleaning; visualization; statistical inference; predictive modeling; and decision making
Course Link & Solutions. The assignments are not the latest version.
This beginner-friendly program will teach you the fundamentals of machine learning and how to use these techniques to build real-world AI applications. By the end of this Specialization, you will have mastered key concepts and gained the practical know-how to quickly and powerfully apply machine learning to challenging real-world problems.
Topics: supervised learning; unsupervised learning; reinforcement leanring; linear regression; linear classification; back-propagation; decision trees
Complex data can be represented as a graph of relationships between objects. Such networks are a fundamental tool for modeling social, technological, and biological systems. This course focuses on the computational, algorithmic, and modeling challenges specific to the analysis of massive graphs. By means of studying the underlying graph structure and its features, students are introduced to machine learning techniques and data mining tools apt to reveal insights on a variety of networks.
Topics: representation learning and Graph Neural Networks; algorithms for the World Wide Web; reasoning over Knowledge Graphs; influence maximization; disease outbreak detection; social network analysis.
The goal of this course is to provide students with an understanding and overview of the “full stack” of deep learning systems, ranging from the high-level modeling design of modern deep learning systems, to the basic implementation of automatic differentiation tools, to the underlying device-level implementation of efficient algorithms. Throughout the course, students will design and build from scratch a complete deep learning library, capable of efficient GPU-based operations, automatic differentiation of all implemented functions, and the necessary modules to support parameterized layers, loss functions, data loaders, and optimizers.
Topics: automatic differentiation; CNN implementation; RNN/LSTM implementation; various modules/operators implementation
mindmap
CS
Tools
MS)Missing-semester(
Basic Programming
General
CS61A)"`CS61A`"(
CS146S)"`CS146S`"(
Rust
CS100L)"`CS100L`"(
CIS198)"`CIS198`"(
Haskell
Hmooc)"`Haskell-mooc`"(
Programming Languages
pl)"`Programming Languages (Coursera)`"(
Data Structure and Algorithms
6.006)"`MIT 6.006`"(
Data Science
Data100)"`Data100`"(
ML&DL
ng)"`Machine Learning (Coursera)`"(
CS224W)"`CS224W`"(
MLsys
10414)"`10-414/714`"(