Awesome CS Courses Awesome

Introduction

There are a lot of hidden treasures lying within university pages scattered across the internet. This list is an attempt to bring to light those awesome CS courses which make their high-quality materials, i.e. assignments, lectures, notes, readings and examinations, available online for free.

Table of Contents

Legend

Courses

Systems

### Programming Languages / Compilers
- CS 75 Principles of Compiler Design Swathmore College Lecture Videos Assignments Lecture Notes - Modelled after the influential paper on incremental approach to compiler design, this course teaches how to build a compiler in OCaml - Course on Github - Notes - CS 91 Introduction to Programming Languages Swathmore College Lecture Notes Assignments - Uses the Pyret programming language & PAPL book to understand the fundamentals of programming languages. - Labs - CIS 194 Introduction to Haskell Penn Engineering Assignments Lecture Notes - Explore the joys of functional programming, using Haskell as a vehicle. The aim of the course will be to allow you to use Haskell to easily and conveniently write practical programs. - Previous semester also available, with more exercises - CIS 198 Rust Programming UPenn Lecture Notes Assignments - This course covers what makes Rust so unique and applies it to practical systems programming problems. Topics covered include traits and generics; memory safety (move semantics, borrowing, and lifetimes); Rust’s rich macro system; closures; and concurrency. - Assignments - CMSC 430 Introduction to Compilers Univ of Maryland Assignments Lecture Notes - The goal of CMSC 430 is to arm students with the ability to design, implement, and extend a programming language. Throughout the course, students will design and implement several related languages, and will explore parsing, syntax querying, dataflow analysis, compilation to bytecode, type systems, and language interoperation. - Lecture Notes - Assignments - Corsopl Principles of Programming Languages Politecnico di Milano Lecture Notes - Lecture Notes Readings - Readings - This course gives an overview of Scheme, Haskell and Erlang while analyzing the languages’ similarities and differences. As a result, many important/prevalent concepts and how they manifest differently in different programming languages are explained. Among these are (purely) functional programming, object orientation, type inference and evaluation order. - Thorough introduction to functional programming with no preknowledge in any functional language required. - COS 326 Functional Programming Princeton University Assignments Lecture Notes - Covers functional programming concepts like closures, tail-call recursion & parallelism using the OCaml programming language - Lectures - Assignments - CS 143 Compiler construction Stanford University Lecture Notes Assignments - CS143 is a Stanford’s course in the practical and theoretical aspects of compiler construction. - Home - Syllabus - Lectures - Assignments - CS143 - 2011 - CS 164 Hack your language! UC Berkeley Lecture Videos Assignments Lecture Notes - Introduction to programming languages by designing and implementing domain-specific languages. - Lecture Videos - Code for Assignments - CS 173 Programming Languages Brown University Lecture Videos Assignments - Course by Prof. Krishnamurthi (author of HtDP) and numerous other awesome books on programming languages. Uses a custom designed Pyret programming language to teach the concepts. There was an online class hosted in 2012, which includes all lecture videos for you to enjoy. - Videos - Assignments - CS 223 Purely Functional Data Structures In Elm University of Chicago Assignments Lecture Notes - This course teaches functional reactive programming and purely functional data structures based on Chris Okazaki’s book and using the Elm programming language. - Lectures - Assignments - CS 240h Functional Systems in Haskell Stanford University Assignments Lecture Notes - Building software systems in Haskell - Lecture Slides - 3 Assignments: Lab1, Lab2, Lab3 - CS 421 Programming Languages and Compilers Univ of Illinois, Urbana-Champaign Lecture Videos Assignments Lecture Notes Course that uses OCaml to teach functional programming and programming language design. - Lectures - Videos - Assignments - Exams - CS 3110 Data Structures and Functional Programming Cornell University Assignments Lecture Notes - Another course that uses OCaml to teach alternative programming paradigms, especially functional and concurrent programming. - Lecture Slides - Assignments - CS 4120 Introduction to Compilers Cornell University Assignments Lecture Notes Readings - An introduction to the specification and implementation of modern compilers. Topics covered include lexical scanning, parsing, type checking, code generation and translation, an introduction to optimization, and compile-time and run-time support for modern programming languages. As part of the course, students build a working compiler for an object-oriented language. - Syllabus - Lectures - Assignments - CS 4400 Programming Languages Northeastern University Assignments Lecture Notes Readings - This is a course on the study, design, and implementation of programming languages. - The course works at two simultaneous levels: first, we will use a programming language that can demonstrate a wide variety of programming paradigms. Second, using this language, we will learn about the mechanics behind programming languages by implementing our own language(s). The two level approach usually means that we will often see how to use a certain feature, and continue by implementing it. - Syllabus - Lecture Notes/Resources - CS 4610 Programming Languages and Compilers University of Virginia Assignments Lecture Notes - Course that uses OCaml to teach functional programming and programming language design. Each assignment is a part of an interpreter and compiler for an object-oriented language similar to Java, and you are required to use a different language for each assignment (i.e., choose 4 from Python, JS, OCaml, Haskell, Ruby). - Lecture Notes - Assignments - CS 5114 Network Programming Languages Cornell University Lecture Notes Readings - This course provides an introduction to the languages used to program computer networks. It will examine recent proposals based on logic, functional, and distributed languages, as well as tools for establishing correctness using automatic solvers, model checkers, and proof assistants. - Syllabus - Lectures - CS 5142 Scripting Languages Cornell University Lecture Notes Assignments - Perl, PHP, JavaScript, VisualBasic – they are often-requested skills for employment, but most of us do not have the time to find out what they are all about. In this course, you learn how to use scripting languages for rapid prototyping, web programming, data processing, and application extension. Besides covering traditional programming languages concepts as they apply to scripting (e.g., dynamic typing and scoping), this course looks at new concepts rarely found in traditional languages (e.g., string interpolation, hashes, and polylingual code). Through a series of small projects, you use different languages to achieve programming tasks that highlight the strengths and weaknesses of scripting. As a side effect, you practice teaching yourself new languages. - Syllabus - Lectures - Assignments - CS 5470 Compilers University of Utah Assignments Lecture Notes Readings - If you’re a fan of Prof Matt’s writing on his fantastic blog you ought to give this a shot. The course covers the design and implementation of compilers, and it explores related topics such as interpreters, virtual machines and runtime systems. Aside from the Prof’s witty take on cheating the page has tons of interesting links on programming languages, parsing and compilers. - Lecture Notes - Projects - CS 6118 Types and Semantics Cornell University Lecture Notes Readings - Types and Semantics is about designing and understand programming languages, whether they be domain specific or general purpose. The goal of this class is to provide a variety of tools for designing custom (programming) languages for whatever task is at hand. Part of that will be a variety of insights on how languages work along with experiences from working with academics and industry on creating new languages such as Ceylon and Kotlin. The class focuses on types and semantics and the interplay between them. This means category theory and constructive type theory (e.g. Coq and richer variations) are ancillary topics of the class. The class also covers unconventional semantic domains such as classical linear type theory in order to both break students from conventional thinking and to provide powerful targets capable of formalizing thinks like networking protocols, resource-sensitive computation, and concurrency constructs. The class project is to design and formalize a (programming) language for a purpose of the student’s choosing, and assignments are designed to ensure students have had a chance to practice applying the techniques learned in class before culminating these skills in the class project. - Syllabus - Lectures - CSC 253 CPython internals: A ten-hour codewalk through the Python interpreter source code University of Rochester Lecture Videos Readings - Nine lectures walking through the internals of CPython, the canonical Python interpreter implemented in C. They were from the Dynamic Languages and Software Development course taught in Fall 2014 at the University of Rochester. - CSE 341 Programming Languages University of Washington Lecture Videos Assignments Lecture Notes - Covers non-imperative paradigms and languages such as Ruby, Racket, and ML and the fundamentals of programming languages. - Lectures and Videos - Assignments and Tests - CSE P 501 Compiler Construction University of Washington Lecture Videos Assignments - Teaches understanding of how a modern compiler is structured and the major algorithms that are used to translate code from high-level to machine language. The best way to do this is to actually build a working compiler, so there will be a significant project to implement one that translates programs written in a core subset of Java into executable x86 assembly language. The compilers themselves will use scanner and parser generator tools and the default implementation language is Java. - Lectures - Assignments, Tests, and Solutions - DMFP Discrete Mathematics and Functional Programming Wheaton College Lecture Videos Assignments - A course that teaches discrete maths concepts with functional programming - Lecture Videos - Assignments - PCPP Practical Concurrent and Parallel Programming IT University of Copenhagen Lecture Notes Assignments Readings - In this MSc course you learn how to write correct and efficient concurrent and parallel software, primarily using Java, on standard shared-memory multicore hardware. - The course covers basic mechanisms such as threads, locks and shared memory as well as more advanced mechanisms such as parallel streams for bulk data, transactional memory, message passing, and lock-free data structures with compare-and-swap. - It covers concepts such as atomicity, safety, liveness and deadlock. - It covers how to measure and understand performance and scalability of parallel programs. - It covers tools and methods to find bugs in concurrent programs. - 6.945 Adventures in Advanced Symbolic Programming MIT Lecture Notes Assignments Readings - Taught by Gerald Sussman of SICP fame, this class deals with concepts and techniques for the design an implementation of large software systems that can be adapted to uses not anticipated by the designer. Applications include compilers, computer-algebra systems, deductive systems, and some artificial intelligence applications. - Assignments: Extensive programming assignments, using MIT/GNU Scheme. Students should have significant programming experience in Scheme, Common Lisp, Haskell, CAML or other “functional” language. - Readings - CS 696 Functional Design and Programming San Diego State University Lecture Notes Assignments Readings - Covers functional programming basis using Clojure. - Topics include testing, functional programming, immutable collections and concurrency. - Also includes assignments covering Clojurescript, Reagent etc. - L28 Advanced Functional Programming University of Cambridge Lecture Notes Assignments Readings - This module aims to teach students how to use the features of modern typed functional programming languages (e.g. OCaml, Haskell) to design and implement libraries and DSLs. It aims to demonstrate how such techniques can improve both correctness and efficiency. Students wishing to take the module should have some experience of a typed functional programming language and an understanding of type inference. - This particular session was taught by a prominent OCaml programmer, open Source contributor & author of real world OCaml - Dr Anil Madhavapeddy.

Algorithms


CS Theory


Introduction to CS


Machine Learning


Security

### Artificial Intelligence
### Computer Graphics - CAP 5415 Computer Vision University of Central Florida Lecture Videos Lecture Notes Assignments - An introductory level course covering the basic topics of computer vision, and introducing some fundamental approaches for computer vision research. - Lectures and Videos - Assignments - CIS 581 Computer Vision and Computational Photography University of Pennsylvania Assignments Lecture Notes - An introductory course in computer vision and computational photography focusing on four topics: image features, image morphing, shape matching, and image search. - Lectures - Assignments - CMU 462 Computer Graphics Carnegie Mellon University Lecture Notes Assignments Readings - This course provides a comprehensive introduction to computer graphics. Focuses on fundamental concepts and techniques, and their cross-cutting relationship to multiple problem domains in graphics (rendering, animation, geometry, imaging). Topics include: sampling, aliasing, interpolation, rasterization, geometric transformations, parameterization, visibility, compositing, filtering, convolution, curves & surfaces, geometric data structures, subdivision, meshing, spatial hierarchies, ray tracing, radiometry, reflectance, light fields, geometric optics, Monte Carlo rendering, importance sampling, camera models, high-performance ray tracing, differential equations, time integration, numerical differentiation, physically-based animation, optimization, numerical linear algebra, inverse kinematics, Fourier methods, data fitting, example-based synthesis. - Lectures and Readings - Assignments and Quizes - CS 378 3D Reconstruction with Computer Vision UTexas Assignments Lecture Notes - In this lab-based class, we’ll dive into practical applications of 3D reconstruction, combining hardware and software to build our own 3D environments from scratch. We’ll use open-source frameworks like OpenCV to do the heavy lifting, with the focus on understanding and applying state-of-the art approaches to geometric computer vision - Lectures - CS 4620 Introduction to Computer Graphics Cornell University Assignments Lecture Notes Readings - The study of creating, manipulating, and using visual images in the computer. - Assignments - Exams - CS 4670 Introduction to Computer Vision Cornell University Assignments Lecture Notes Readings - This course will provide an introduction to computer vision, with topics including image formation, feature detection, motion estimation, image mosaics, 3D shape reconstruction, and object and face detection and recognition. Applications of these techniques include building 3D maps, creating virtual characters, organizing photo and video databases, human computer interaction, video surveillance, automatic vehicle navigation, and mobile computer vision. This is a project-based course, in which you will implement several computer vision algorithms throughout the semester. - Assignments - Lectures - CS 6670 Computer Vision Cornell University Assignments Lecture Notes - Introduction to computer vision. Topics include edge detection, image segmentation, stereopsis, motion and optical flow, image mosaics, 3D shape reconstruction, and object recognition. Students are required to implement several of the algorithms covered in the course and complete a final project. - Syllabus - Lectures - Assignments - CSCI 1230 Introduction to Computer Graphics Brown University Assignments Lecture Notes - This course offers an in-depth exploration of fundamental concepts in 2D and 3D computer graphics. It introduces 2D raster graphics techniques, including scan conversion, simple image processing, interaction techniques and user interface design. The bulk of the course is devoted to 3D modeling, geometric transformations, and 3D viewing and rendering. - Lectures - Labs - Demos - CSCI-GA.2270-001 Graduate Computer Graphics New York University Assignments Lecture Notes Readings - Step-by-step study computer graphics, with reading and homework at each lecture (Fall2015) - Lectures

Misc


Statistics

courses.md Github