Awesome Courses =============== Introduction ------------ There is a lot of ~~hidden~~ treasure lying within university pages scattered across the internet. This list is an attempt to bring to light those awesome courses which make their high-quality material i.e. assignments, lectures, notes, readings & examinations available online for free. Table of Contents ----------------- - [Systems](#systems) - [Programming Languages / Compilers](#programming-languages--compilers) - [Algorithms](#algorithms) - [CS Theory](#cs-theory) - [Introduction to CS](#introduction-to-cs) - [Misc](#misc) - [Contributing](#contributing) ### Legend - Lecture Videos - Lecture Videos - Lecture Notes - Lecture Notes - Assignments - Assignments / Labs - Readings - Readings Courses ------- ### Systems - [CS 107](http://web.stanford.edu/class/cs107/index.html) **Computer Organization & Systems** *Stanford University* Lecture Videos Assignments - CS107 is the third course in Stanford's introductory programming sequence. The course will work from the C programming language down to the microprocessor to de-mystify the machine. With a complete understanding of how computer systems execute programs and manipulate data, you will become a more effective programmer, especially in dealing with issues of debugging, performance, portability, and robustness. - [Lecture Videos](https://www.youtube.com/playlist?list=PL08D9FA018A965057&spfreload=10) - [Assignments](http://web.stanford.edu/class/cs107/assignments.html) - [CS 140](http://web.stanford.edu/~ouster/cgi-bin/cs140-spring14/lectures.php) **Operating Systems** *Stanford University* Assignments Lecture Notes - This class introduces the basic facilities provided in modern operating systems. The course divides into three major sections. The first part of the course discusses concurrency. The second part of the course addresses the problem of memory management. The third major part of the course concerns file systems. - [Lecture Notes](http://web.stanford.edu/~ouster/cgi-bin/cs140-spring14/lectures.php) - [Assignments](http://web.stanford.edu/~ouster/cgi-bin/cs140-spring14/projects.php) - [CS 162](http://cs162.eecs.berkeley.edu/) **Operating Systems and Systems Programming** *UC Berkeley* Lecture Videos Lecture Notes Assignments Readings - Operating Systems course by the Chair of EECS, UC Berkeley [David Culler](http://www.cs.berkeley.edu/~culler/) - [Youtube Playlist](https://www.youtube.com/playlist?list=PL-XXv-cvA_iAARFmCufZ6XeMPPgAzNSNa) Fall 2014 lectures - [CS 186](https://sites.google.com/site/cs186fall2013/home) **Introduction to Database Systems** *UC Berkeley* Assignments Readings Lecture Notes - In the project assignments in CS186, you will write a basic database management system called SimpleDB. For this project, you will focus on implementing the core modules required to access stored data on disk; in future projects, you will add support for various query processing operators, as well as transactions, locking, and concurrent queries. - [Lecture Notes](https://sites.google.com/site/cs186fall2013/section-notes) - [Projects](https://sites.google.com/site/cs186fall2013/homeworks) - [CS 241](https://courses.engr.illinois.edu/cs241/fa2014/index.html) **Systems Programming (Fall 2014)** *Univ of Illinois, Urbana-Champaign* Lecture Videos Assignments Lecture Notes - System programming refers to writing code that tasks advantage of operating system support for programmers. This course is designed to introduce you to system programming. By the end of this course, you should be proficient at writing programs that take full advantage of operating system support. To be concrete, we need to fix an operating system and we need to choose a programming language for writing programs. We chose the C language running on a Linux/UNIX operating system (which implements the POSIX standard interface between the programmer and the OS). - [Assignments](https://courses.engr.illinois.edu/cs241/fa2014/mp.html) - [Github Page](http://angrave.github.io/sys/#) - [Crowd Sourced Book](https://github.com/angrave/SystemProgramming/wiki) - [CS 425](https://courses.engr.illinois.edu/cs425/fa2014/index.html) **Distributed Systems** *Univ of Illinois, Urbana-Champaign* Lecture Videos Assignments Readings - Brilliant set of lectures and reading material covering fundamental concepts in distributed systems such as Vector clocks, Consensus and Paxos. This is the 2014 version by Prof Indranil Gupta. - [Lectures](http://recordings.engineering.illinois.edu/ess/portal/section/11ae0191-49e2-4c34-95fd-fc65355262d4) - [Assignments](https://courses.engr.illinois.edu/cs425/assignments.html) - [CS 452](http://www.cgl.uwaterloo.ca/~wmcowan/teaching/cs452/s12/) **Real-Time Programming** *University of Waterloo* Assignments Lecture Notes - Write a real-time OS microkernel in C, and application code to operate a model train set in response to real-time sensor information. The communication with the train set runs at 2400 baud so it takes about 61 milliseconds to ask all of the sensors for data about the train's possible location. This makes it particularly challenging because a train can move about 3 centimeters in that time. One of the most challenging and time-consuming courses at the University of Waterloo. - [Assignments](http://www.cgl.uwaterloo.ca/~wmcowan/teaching/cs452/s12/assignments/index.html) - [Lecture notes](http://www.cgl.uwaterloo.ca/~wmcowan/teaching/cs452/s12/notes/index.html) - [CS 4414](http://rust-class.org/index.html) **Operating Systems** *University of Virginia* Lecture Videos Assignments - A course (that) covers topics including: Analysis process communication and synchronization; resource management; virtual memory management algorithms; file systems; and networking and distributed systems. The primary goal of this course is to improve your ability to build scalable, robust and secure computing systems. It focuses on doing that by understanding what underlies the core abstractions of modern computer systems. - [Syllabus](http://rust-class.org/pages/syllabus.html) - [Lectures](http://rust-class.org/pages/classes.html) - [CS 5412](http://www.cs.cornell.edu/Courses/CS5412/2014sp/) **Cloud Computing** *Cornell University* Lecture Notes Readings - Taught by one of the stalwarts of this field, Prof Ken Birman, this course has a fantastic set of slides that one can go through. The Prof's [book](http://www.amazon.com/Guide-Reliable-Distributed-Systems-High-Assurance/dp/1447124154) is also a gem and recommended as a must read in Google's tutorial on [Distributed System Design](http://www.hpcs.cs.tsukuba.ac.jp/~tatebe/lecture/h23/dsys/dsd-tutorial.html) - [Slides](http://www.cs.cornell.edu/Courses/CS5412/2014sp/Syllabus.htm) - [CSCE 3613](http://comp.uark.edu/~wingning/csce3613/csce3613.html) **Operating Systems** *University of Arkansas (Fayetteville)* Assignments Lecture NotesReadings - An introduction to operating systems including topics in system structures, process management, storage management, files, distributed systems, and case studies. - [Syllabus](http://comp.uark.edu/~wingning/csce3613/CSCE3613.pdf) - [Assignments](http://comp.uark.edu/~wingning/csce3613/Homework3613.html) - [Lecture Notes](http://comp.uark.edu/~wingning/csce3613/CourseNote3613.html) - [Readings](http://comp.uark.edu/~wingning/csce3613/Link3613.html) - [CSCI 360](http://compsci.hunter.cuny.edu/~sweiss/course_materials/csci360/csci360_f14.php) **Computer Architecture 3** *CUNY Hunter College* Assignments Lecture Notes - A course that covers cache design, buses, memory hierarchies, processor-peripheral interfaces, and multiprocessors, including GPUs. - [CSCI 493.66](http://compsci.hunter.cuny.edu/~sweiss/course_materials/csci493.66/csci493.66_spr12.php) **UNIX System Programming (formerly UNIX Tools)** *CUNY Hunter College* Assignments Lecture Notes - A course that is mostly about writing programs against the UNIX API, covering all of the basic parts of the kernel interface and libraries, including files, processes, terminal control, signals, and threading. - [CSCI 493.75](http://compsci.hunter.cuny.edu/~sweiss/course_materials/csci493.65/csci493.65_spr14.php) **Parallel Computing** *CUNY Hunter College* Assignments Lecture Notes - The course is an introduction to parallel algorithms and parallel programming in C and C++, using the Message Passing Interface (MPI) and the OpenMP application programming interface. It also includes a brief introduction to parallel architectures and interconnection networks. It is both theoretical and practical, including material on design methodology, performance analysis, and mathematical concepts, as well as details on programming using MPI and OpenMP. - [ECE 459](http://patricklam.ca/p4p/) **Programming for Performance** *University of Waterloo* Lecture Notes Assignments - Learn techniques for profiling, rearchitecting, and implementing software systems that can handle industrial-sized inputs, and to design and build critical software infrastructure. Learn performance optimization through parallelization, multithreading, async I/O, vectorization and GPU programming, and distributed computing. - [Lecture slides](http://patricklam.ca/p4p/notes/) - [PODC](http://dcg.ethz.ch/lectures/podc_allstars/) **Principles of Distributed Computing** *ETH-Zurich* Assignments Readings Lecture Notes - Explore essential algorithmic ideas and lower bound techniques, basically the "pearls" of distributed computing in an easy-to-read set of lecture notes, combined with complete exercises and solutions. - [Book](http://dcg.ethz.ch/lectures/podc_allstars/lecture/podc.pdf) - [Assignments and Solutions](http://dcg.ethz.ch/lectures/podc_allstars/) - [SPAC](http://homes.cs.washington.edu/~djg/teachingMaterials/spac/) **Parallelism and Concurrency** *Univ of Washington* Readings - Technically not a course nevertheless an awesome collection of materials used by Prof Dan Grossman to teach parallelism and concurrency concepts to sophomores at UWash - [6.824](http://css.csail.mit.edu/6.824/2014/index.html) **Distributed Systems** *MIT* Assignments Lecture Notes - MIT's graduate-level DS course with a focus on fault tolerance, replication, and consistency, all taught via awesome lab assignments in Golang! - [Assignments](http://css.csail.mit.edu/6.824/2014/labs/) - Just do `git clone git://g.csail.mit.edu/6.824-golabs-2014 6.824` - [Readings](http://css.csail.mit.edu/6.824/2014/schedule.html) - [6.828](http://pdos.csail.mit.edu/6.828/2014/) **Operating Systems** *MIT* Assignments Lecture Notes - MIT's operating systems course focusing on the fundamentals of OS design including booting, memory management, environments, file systems, multitasking, and more. In a series of lab assignments, you will build JOS, an OS exokernel written in C. - [Assignments](http://pdos.csail.mit.edu/6.828/2014/labguide.html) - [Lectures](http://pdos.csail.mit.edu/6.828/2014/schedule.html) - [15-440](http://www.cs.cmu.edu/~dga/15-440/F12/index.html) **Distributed Systems** *Carnegie-Mellon University* Assignments Lecture Notes - Introduction to distributed systems with a focus on teaching concepts via projects implemented in the Go programming language. - [Assignments](http://www.cs.cmu.edu/~dga/15-440/F12/assignments.html) - [15-749](http://www.andrew.cmu.edu/course/15-749/) **Engineering Distributed Systems** *Carnegie-Mellon University* Readings - A project focused course on Distributed Systems with an awesome list of readings - [Readings](http://www.andrew.cmu.edu/course/15-749/READINGS/) - [18-447](http://www.ece.cmu.edu/~ece447/s14/doku.php?id=start) **Introduction to Computer Architecture** *CMU* Lecture Videos Assignments Readings - Very comprehensive material on Computer Architecture - definitely more than just "introduction". Online material is very user-friendly, even the recitation videos available online. This is the Spring'14 version by Prof. [Onur Mutlu ](http://users.ece.cmu.edu/~omutlu/) - [Lectures and Recitation](http://www.ece.cmu.edu/~ece447/s14/doku.php?id=schedule) - [Homeworks](http://www.ece.cmu.edu/~ece447/s14/doku.php?id=homeworks) 7 HWs with answer set as well - [Readings] (http://www.ece.cmu.edu/~ece447/s14/doku.php?id=readings) ------- ### Programming Languages / Compilers - [CIS 194](http://www.seas.upenn.edu/~cis194/) **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](http://www.seas.upenn.edu/~cis194/spring13/index.html) semester also available, with more exercises - [Assignments & Lectures](http://www.seas.upenn.edu/~cis194/lectures.html) - [Clojure](http://mooc.cs.helsinki.fi/clojure) **Functional Programming with Clojure** *University of Helsinki* Assignments - The course is an introduction to functional programming with a dynamically typed language Clojure. We start with an introduction to Clojure; its syntax and development environment. Clojure has a good selection of data structures and we cover most of them. We also go through the basics of recursion and higher-order functions. The course material is in English. - [Github Page](http://iloveponies.github.io/120-hour-epic-sax-marathon/index.html) - [COS 326](http://www.cs.princeton.edu/~dpw/courses/cos326-12/info.php) **Functional Programming** *Princeton University* Assignments Lecture Notes - Covers functional programming concepts like closures, tail-call recursion & parallelism using the OCaml programming language - [Lectures](http://www.cs.princeton.edu/~dpw/courses/cos326-12/lectures.php) - [Assignments](http://www.cs.princeton.edu/~dpw/courses/cos326-12/assignments.php) - [CS 164](https://sites.google.com/a/bodik.org/cs164/home) **Hack your language!** *UC Berkeley* Lecture Videos Assignments Lecture Notes - Introduction to programming languages by designing and implementing domain-specific languages. - [Lecture Videos](https://www.youtube.com/playlist?list=PL421867F00A53B833) - [Code for Assignments](https://bitbucket.org/cs164_overlord/) - [CS 173](http://cs.brown.edu/courses/cs173/2014/) **Programming Languages** *Brown University* Lecture Videos Assignments - Course by Prof. Krishnamurthi (author of [HtDP](http://htdp.org/2003-09-26/Book/)) and numerous other [awesome](http://cs.brown.edu/courses/cs173/2012/book/) [books](http://papl.cs.brown.edu/2014/index.html) on programming languages. Uses a custom designed [Pyret](http://www.pyret.org/) programming language to teach the concepts. There was an [online class](http://cs.brown.edu/courses/cs173/2012/OnLine/) hosted in 2012, which includes all lecture videos for you to enjoy. - [Videos](http://cs.brown.edu/courses/cs173/2012/Videos/) - [Assignments](http://cs.brown.edu/courses/cs173/2014/assignments.html) - [CS 240h](http://www.scs.stanford.edu/14sp-cs240h/) **Functional Systems in Haskell** *Stanford University* Assignments Lecture Notes - Building software systems in Haskell - [Lecture Slides](http://www.scs.stanford.edu/14sp-cs240h/slides/) - 3 Assignments: [Lab1](http://www.scs.stanford.edu/14sp-cs240h/labs/lab1.html), [Lab2](http://www.scs.stanford.edu/14sp-cs240h/labs/lab2.html), [Lab3](http://www.scs.stanford.edu/14sp-cs240h/labs/lab3.html) - [CS 3110](http://www.cs.cornell.edu/Courses/cs3110/2014fa/course_info.php) **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](http://www.cs.cornell.edu/Courses/cs3110/2014fa/lecture_notes.php) - [Assignments](http://www.cs.cornell.edu/Courses/cs3110/2014fa/) - [CS 421](https://courses.engr.illinois.edu/cs421/fa2014/) **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](https://courses.engr.illinois.edu/cs421/fa2014/lectures/index.html) - [Videos](http://recordings.engineering.illinois.edu/ess/portal/section/631edaeb-2a33-4537-b7c8-0c1cba783a4f) - [Assignments](https://courses.engr.illinois.edu/cs421/fa2014/mps/index.html) - [Exams](https://courses.engr.illinois.edu/cs421/fa2014/exams/index.html) - [CS 4610](http://www.cs.virginia.edu/~weimer/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](http://www.cs.virginia.edu/~weimer/4610/lectures.html) - [Assignments](http://www.cs.virginia.edu/~weimer/4610/pa.html) - [CS 5470](http://matt.might.net/teaching/compilers/spring-2015/) **Compilers** *University of Utah* Assignments Lecture Notes Readings - If you're a fan of Prof Matt's writing on his [fantastic blog](http://matt.might.net/articles/) 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](http://matt.might.net/teaching/compilers/spring-2015/#collaboration) the page has tons of interesting links on programming languages, parsing and compilers. - [Lecture Notes](https://www.dropbox.com/sh/zanwtoflw4pcfu8/5pdT6axS3y) - [Projects](http://matt.might.net/teaching/compilers/spring-2015/#projects) - [CSE 341](http://courses.cs.washington.edu/courses/cse341/14sp/) **Programming Languages** *University of Washington* Assignments Lecture Notes - Covers non-imperative paradigms and languages such as Ruby, Racket, and ML and the fundamentals of programming languages. - [Lectures](https://courses.cs.washington.edu/courses/cse341/14sp/#lecture) - [Assignments and Tests](https://courses.cs.washington.edu/courses/cse341/14sp/#homework) ------- ### Algorithms - [CS 61B](http://www.cs.berkeley.edu/~jrs/61b/) **Data Structures** *Berkeley* Lecture Videos Assignments - In this course, you will study advanced programming techniques including data structures, encapsulation, abstract data types, interfaces, and algorithms for sorting and searching, and you will get a taste of “software engineering”—the design and implementation of large programs. - [Labs](http://www.cs.berkeley.edu/~jrs/61b/lab/index.html) - [Lecture Videos on Youtube](http://www.youtube.com/watch?v=frxF7Vs96YU&list=PLMM0a7ZGnITrgfhOxMNP7bpP4hhhKNY9s) - [CS 473/573](http://web.engr.illinois.edu/~jeffe/teaching/algorithms/) **Fundamental Algorithms** *Univ of Illinois, Urbana-Champaign* Assignments Lecture Notes - Algorithms class covering recursion, randomization, amortization, graph algorithms, network flows and hardness. The lecture notes by Prof. Erikson are comprehensive enough to be a book by themselves. Highly recommended! - [Lecture Notes](http://web.engr.illinois.edu/~jeffe/teaching/algorithms/all-algorithms.pdf) - [Labs and Exams](http://web.engr.illinois.edu/~jeffe/teaching/algorithms/all-hwex.pdf) - [CS 2150](https://github.com/aaronbloomfield/pdr) **Program & Data Representation** *University of Virginia* Assignments Lecture Notes - This data structures course introduces C++, linked-lists, stacks, queues, trees, numerical representation, hash tables, priority queues, heaps, huffman coding, graphs, and x86 assembly. - [Lectures](http://aaronbloomfield.github.io/pdr/slides/) - [Assignments](http://aaronbloomfield.github.io/pdr/labs/) - [CSCI 135](http://compsci.hunter.cuny.edu/~sweiss/courses/csci135.php) **Software Design and Analysis I** Assignments Lecture Notes *CUNY Hunter College* - It is currently an intensive introduction to program development and problem solving. Its emphasis is on the process of designing, implementing, and evaluating small-scale programs. It is not supposed to be a C++ programming course, although much of the course is spent on the details of C++. C++ is an extremely large and complex programming language with many features that interact in unexpected ways. One does not need to know even half of the language to use it well. - [Lectures and Assignments](http://compsci.hunter.cuny.edu/~sweiss/course_materials/csci135/csci135_36_fall12.php) - [CSCI 235](http://compsci.hunter.cuny.edu/~sweiss/courses/csci235.php) **Software Design and Analysis II** Assignments Lecture Notes *CUNY Hunter College* - Introduces algorithms for a few common problems such as sorting. Practically speaking, it furthers the students' programming skills with topics such as recursion, pointers, and exception handling, and provides a chance to improve software engineering skills and to give the students practical experience for more productive programming. - [Lectures and Assignments](http://compsci.hunter.cuny.edu/~sweiss/course_materials/csci235/csci235_f14.php) - [CSCI 335](http://compsci.hunter.cuny.edu/~sweiss/courses/csci335.php) **Software Design and Analysis III** Assignments Lecture Notes *CUNY Hunter College* - This includes the introduction of hashes, heaps, various forms of trees, and graphs. It also revisits recursion and the sorting problem from a higher perspective than was presented in the prequels. On top of this, it is intended to introduce methods of algorithmic analysis. - [Lectures and Assignments](http://compsci.hunter.cuny.edu/~sweiss/course_materials/csci335/csci335_s14.php) - [CSE 373](http://www3.cs.stonybrook.edu/~skiena/373/) **Analysis of Algorithms** *Stony Brook University* Lecture Videos Assignments Lecture Notes Readings - Prof Steven Skiena's no stranger to any student when it comes to algorithms. His seminal [book](http://www.algorist.com/) has been touted by many to be best for [getting that job in Google](http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html). In addition, he's also well-known for tutoring students in competitive [programming competitions](http://www.programming-challenges.com/pg.php?page=index). If you're looking to brush up your knowledge on Algorithms, you can't go wrong with this course. - [Lecture Videos](http://www.cs.sunysb.edu/~algorith/video-lectures/) - [ECS 122A](http://web.cs.ucdavis.edu/~gusfield/cs122f10/) **Algorithm Design and Analysis** *UC Davis* Lecture Videos Assignments Lecture Notes - Taught by [Dan Gusfield](http://web.cs.ucdavis.edu/~gusfield/) in 2010, this course is an undergraduate introduction to algorithm design and analysis. It features traditional topics, such as Big Oh notation, as well as an importance on implementing specific algorithms. Also featured are sorting (in linear time), graph algorithms, depth-first search, string matching, dynamic programming, NP-completeness, approximation, and randomization. - [Syllabus](http://web.cs.ucdavis.edu/~gusfield/cs122f10/syll122.pdf) - [Lecture Videos](http://web.cs.ucdavis.edu/~gusfield/cs122f10/videolist.html) - [Assignments](http://web.cs.ucdavis.edu/~gusfield/cs122f10/) - [ECS 222A](http://web.cs.ucdavis.edu/~gusfield/cs222w11/) **Graduate Level Algorithm Design and Analysis** *UC Davis* Lecture Videos Assignments Lecture Notes - This is the graduate level complement to the ECS 122A undergraduate algorithms course by [Dan Gusfield](http://web.cs.ucdavis.edu/~gusfield/) in 2011. It assumes an undergrad course has already been taken in algorithms, and, while going over some undergraduate algorithms topics, focuses more on increasingly complex and advanced algorithms. - [Lecture Videos](http://web.cs.ucdavis.edu/~gusfield/cs222f07/videolist.html) - [Syllabus](http://web.cs.ucdavis.edu/~gusfield/cs222w11/syll11.pdf) - [Assignments](http://web.cs.ucdavis.edu/~gusfield/cs222w11/) - [6.INT](http://courses.csail.mit.edu/iap/interview/index.php) **Hacking a Google Interview** *MIT* Readings - This course taught in the MIT Independent Activities Period in 2009 goes over common solution to common interview questions for software engineer interviews at highly selective companies like Apple, Google, and Facebook. They cover time complexity, hash tables, binary search trees, and other common algorithm topics you should have already covered in a different course, but goes more in depth on things you wouldn't otherwise learn in class- like bitwise logic and problem solving tricks. - [Handouts](http://courses.csail.mit.edu/iap/interview/materials.php) - [Topics Covered](http://courses.csail.mit.edu/iap/interview/calendar.php) - [6.851](http://courses.csail.mit.edu/6.851/spring14/index.html) **Advanced Data Structures** *MIT* Lecture Videos Assignments Lecture Notes - This is an advanced DS course, you must be done with the [Advanced Algorithms](http://courses.csail.mit.edu/6.854/current/) course before attempting this one. - [Lectures](http://courses.csail.mit.edu/6.851/spring14/lectures/) Contains videos from sp2012 version, but there isn't much difference. - [Assignments](http://courses.csail.mit.edu/6.851/spring14/hmwk.html) contains the calendar as well. - [6.854/18.415J](http://courses.csail.mit.edu/6.854/current/) **Advanced Algorithms** *MIT* Lecture Videos Assignments Lecture Notes - Advanced course in algorithms by Dr. David Karger covering topics such as amortization, randomization, fingerprinting, word-level parallelism, bit scaling, dynamic programming, network flow, linear programming, fixed-parameter algorithms, and approximation algorithms. - **Register** on [NB](http://nb.mit.edu/subscribe?key=D3a8CYpoO2VcR1ZcfaxmR5KbyjCGXd3INNXvL3mxEakYJ7qGJw) to access the [problem set and lectures](http://nb.mit.edu/). - [15-451/651](http://www.cs.cmu.edu/afs/cs/academic/class/15451-f10/www/) **Algorithms** *Carnegie Mellon University* Lecture Notes - The required algorithms class that go in depth into all basic algorithms and the proofs behind them. This is one of the heavier algorithms curriculums on this page. Taught by Avrim Blum and [Manuel Blum](http://en.wikipedia.org/wiki/Manuel_Blum) who has a Turing Award due to his contributions to algorithms. Course link includes a very comprehensive set of reference notes by Avrim Blum. ------- ### CS Theory - [CIS 500](http://www.seas.upenn.edu/~cis500/cis500-f14/index.html) **Software Foundations** *University of Pennsylvania* Assignments Lecture Notes - An introduction to formal verification of software using the Coq proof assistant. Topics include basic concepts of logic, computer-assisted theorem proving, functional programming, operational semantics, Hoare logic, and static type systems. - [Lectures and Assignments](http://www.seas.upenn.edu/~cis500/cis500-f14/index.html#schedule) - [Textbook](http://www.cis.upenn.edu/~bcpierce/sf/current/index.html) - [CS 103](http://web.stanford.edu/class/cs103/) **Mathematical Foundations of Computing** *Stanford University* Assignments Lecture Notes - CS103 is a first course in discrete math, computability theory, and complexity theory. In this course, we'll probe the limits of computer power, explore why some problems are harder to solve than others, and see how to reason with mathematical certainty. - Links to all lectures notes and assignments are directly on the course page - [CS 173](https://courses.engr.illinois.edu/cs173/fa2014/A-lecture/index.html) **Discrete Structures** *Univ of Illinois Urbana-Champaign* Assignments Lecture Notes Readings - This course is an introduction to the theoretical side of computer science. In it, you will learn how to construct proofs, read and write literate formal mathematics, get a quick introduction to key theory topics and become familiar with a range of standard mathematics concepts commonly used in computer science. - [Textbook](http://web.engr.illinois.edu/~mfleck/building-blocks/) Written by the professor. Includes Instructor's Guide. - [Assignments](https://courses.engr.illinois.edu/cs173/fa2014/A-lecture/Homework/index.html) - [Exams](https://courses.engr.illinois.edu/cs173/fa2014/A-lecture/Exams/index.html) - [CS 276](http://www.cs.berkeley.edu/~sanjamg/classes/cs276-fall14/) **Foundations of Cryptography** *UC Berkeley* Lecture Notes - This course discusses the complexity-theory foundations of modern cryptography, and looks at recent results in the field such as Fully Homomorphic Encryption, Indistinguishability Obfuscation, MPC and so on. - [CS 278](http://www.cs.berkeley.edu/~luca/cs278-08/) **Complexity Theory** *UC Berkeley* Lecture Notes - An graduate level course on complexity theory that introduces P vs NP, the power of randomness, average-case complexity, hardness of approximation, and so on. - [CS 374](https://courses.engr.illinois.edu/cs498374/fa2014/) **Algorithms & Models of Computation (Fall 2014)** *University of Illinois Urbana-Champaign* Lecture Videos Assignments Lecture Notes - CS 498 section 374 (unofficially "CS 374") covers fundamental tools and techniques from theoretical computer science, including design and analysis of algorithms, formal languages and automata, computability, and complexity. Specific topics include regular and context-free languages, finite-state automata, recursive algorithms (including divide and conquer, backtracking, dynamic programming, and greedy algorithms), fundamental graph algorithms (including depth- and breadth-first search, topological sorting, minimum spanning trees, and shortest paths), undecidability, and NP-completeness. The course also has a strong focus on clear technical communication. - [Assignments/Exams](https://courses.engr.illinois.edu/cs498374/fa2014/work.html) - [Lecture Notes/Labs](https://courses.engr.illinois.edu/cs498374/fa2014/lectures.html) - [Lecture videos](http://recordings.engineering.illinois.edu/ess/portal/section/115f3def-7371-4e98-b72f-6efe53771b2a) - [CSCE 3193](http://www.csce.uark.edu/~sgauch/3193/S11/index.html) **Programming Paradigms** *University of Arkansas (Fayetteville)* Assignments Lecture Notes - Programming in different paradigms with emphasis on object oriented programming, network programming and functional programming. Survey of programming languages, event driven programming, concurrency, software validation. - [Syllabus](http://www.csce.uark.edu/~sgauch/3193/S11/syllabus.html) - [Notes](http://www.csce.uark.edu/~sgauch/3193/S11/notes/index.html) - [Assignments](http://www.csce.uark.edu/~sgauch/3193/S11/hw/index.html) - [Practice Exams](http://www.csce.uark.edu/~sgauch/3193/S11/exams/index.html) ------- ### Introduction to CS - [CS 10](https://inst.eecs.berkeley.edu/~cs10/fa14/) **The Beauty and Joy of Computing** *UC Berkeley* Lecture Videos Assignments Lecture Notes - CS10 is UCB's introductory computer science class, taught using the beginners' drag-and-drop language. Students learn about history, social implications, great principles, and future of computing. They also learn the joy of programming a computer using a friendly, graphical language, and will complete a substantial team programming project related to their interests. - [Snap*!*](http://snap.berkeley.edu) (based on Scratch by MIT). - [Curriculum](http://bjc.berkeley.edu) - [CS 50](https://cs50.harvard.edu/) **Introduction to Computer Science** *Harvard University* Lecture Videos Assignments Lecture Notes - CS50x is Harvard College's introduction to the intellectual enterprises of computer science and the art of programming for majors and non-majors alike, with or without prior programming experience. An entry-level course taught by David J. Malan. - [Lectures](https://cs50.harvard.edu/lectures) - [CS 101](http://online.stanford.edu/course/computer-science-101-self-paced) **Computer Science 101** *Stanford University* Lecture Videos Assignments Lecture Notes - CS101 teaches the essential ideas of Computer Science for a zero-prior-experience audience. Participants play and experiment with short bits of "computer code" to bring to life to the power and limitations of computers. - Lectures videos will available for free after registration. - [CS 106A](http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111) **Programming Methodology** *Stanford University* Lecture Videos Assignments Lecture Notes - This course is the largest of the introductory programming courses and is one of the largest courses at Stanford. Topics focus on the introduction to the engineering of computer applications emphasizing modern software engineering principles: object-oriented design, decomposition, encapsulation, abstraction, and testing. Programming Methodology teaches the widely-used Java programming language along with good software engineering principles. - [Lecture Videos](http://see.stanford.edu/see/lecturelist.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111) - [Assignments](http://see.stanford.edu/see/materials/icspmcs106a/assignments.aspx) - [All materials in a zip file](http://see.stanford.edu/materials/icspmcs106a/ProgrammingMethodologyAllMaterials.zip) - [CS 106B](http://see.stanford.edu/see/courseinfo.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e) **Programming Abstractions** *Stanford University* Lecture Videos Assignments Lecture Notes - This course is the natural successor to Programming Methodology and covers such advanced programming topics as recursion, algorithmic analysis, and data abstraction using the C++ programming language, which is similar to both C and Java. - [Lectures](http://see.stanford.edu/see/lecturelist.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e) - [Assignments](http://see.stanford.edu/see/materials/icspacs106b/assignments.aspx) - [All materials in a zip file](http://see.stanford.edu/materials/icspacs106b/ProgrammingAbstractionsAllMaterials.zip) - [CS 107](http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d470755ee) **Programming Paradigms** *Stanford University* Lecture Videos Assignments Lecture Notes - Topics: Advanced memory management features of C and C++; the differences between imperative and object-oriented paradigms. The functional paradigm (using LISP) and concurrent programming (using C and C++) - [Lectures](http://see.stanford.edu/see/lecturelist.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d470755ee) - [Assignments](http://see.stanford.edu/see/materials/icsppcs107/assignments.aspx) - [CSCE 2004](http://www.csce.uark.edu/~sgauch/2004/S14/index.html) **Programming Foundations I** *University of Arkansas (Fayetteville)* Assignments Lecture NotesReadings - Introductory course for students majoring in computer science or computer engineering. Software development process: problem specification, program design, implementation, testing and documentation. Programming topics: data representation, conditional and iterative statements, functions, arrays, strings, file I/O, and classes. Using C++ in a UNIX environment. - [Syllabus](http://www.csce.uark.edu/~sgauch/2004/S14/syllabus.html) - [Notes](http://www.csce.uark.edu/~sgauch/2004/S14/notes/index.html) - [Assignments](http://www.csce.uark.edu/~sgauch/2004/S14/hw/index.html) - [Practice Exams](http://www.csce.uark.edu/~sgauch/2004/S14/index.html) - [CSCE 2014](http://www.csce.uark.edu/~jgauch/2014/S14/index.html) **Programming Foundations 2** *University of Arkansas (Fayetteville)* Assignments Lecture NotesReadings - This course continues developing problem solving techniques by focusing on fundamental data structures and associated algorithms. Topics include: abstract data types, introduction to object-oriented programming, linked lists, stacks, queues, hash tables, binary trees, graphs, recursion, and searching and sorting algorithms. Using C++ in a UNIX environment. - [Syllabus](http://www.csce.uark.edu/~jgauch/2014/S14/handouts/syllabus.html) - [Assignments](http://www.csce.uark.edu/~jgauch/2014/S14/index.html) - [Practice Exams](http://www.csce.uark.edu/~jgauch/2014/S14/index.html) - [6.001](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/index.htm) **Structure and Interpretation of Computer Programs** *MIT* Lecture Videos Assignments Lecture Notes - Teaches big-picture computing concepts using the Scheme programming language. Students will implement programs in a variety of different programming paradigms (functional, object-oriented, logical). Heavy emphasis on function composition, code-as-data, control abstraction with continuations, and syntactic abstraction through macros. An excellent course if you are looking to build a mental framework on which to hang your programming knowledge. - [Lectures](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures) - [Textbook](http://mitpress.mit.edu/sicp/full-text/book/book.html) ([epub](https://github.com/sarabander/sicp), [pdf](https://github.com/sarabander/sicp-pdf)) - [IDE](http://www.neilvandyke.org/racket-sicp/) ------- ### Misc - [CIS 581](https://alliance.seas.upenn.edu/~cis581/wiki/index.php?title=CIS_581:_Computer_Vision_%26_Computational_Photography) **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](https://alliance.seas.upenn.edu/~cis581/wiki/index.php?title=Schedule) - [Assignments](https://alliance.seas.upenn.edu/~cis581/wiki/index.php?title=Projects) - [CIS 4930 / CIS 5930](http://www.cs.fsu.edu/~redwood/OffensiveComputerSecurity/) **Offensive Computer Security** *Florida State University* Lecture Videos Assignments Lecture Notes - Course taught by [W. Owen Redwood](http://ww2.cs.fsu.edu/~redwood/) and [Xiuwen Liu](http://www.cs.fsu.edu/~liux/). It covers a wide range of computer security topics, starting from Secure C Coding and Reverse Engineering to Penetration Testing, Exploitation and Web Application Hacking, both from the defensive and the offensive point of view. - [Lectures and Videos](http://www.cs.fsu.edu/~redwood/OffensiveComputerSecurity/lectures.html) - [Assignments](http://www.cs.fsu.edu/~redwood/OffensiveComputerSecurity/assignments.html) - [COMS 4771](http://www.cs.columbia.edu/~jebara/4771/index.html) **Machine Learning** *Columbia University* Assignments Lecture Notes - Course taught by [Tony Jebara](http://www.cs.columbia.edu/~jebara/resume.html) introduces topics in Machine Learning for both generative and discriminative estimation. Material will include least squares methods, Gaussian distributions, linear classification, linear regression, maximum likelihood, exponential family distributions, Bayesian networks, Bayesian inference, mixture models, the EM algorithm, graphical models, hidden Markov models, support vector machines, and kernel methods. - [Lectures and Assignments](http://www.cs.columbia.edu/~jebara/4771/handouts.html) - [CS 75](http://ocw.tufts.edu/Course/75) **Introduction to Game Development** *Tufts University* Assignments Lecture Notes - The course taught by [Ming Y. Chow](http://mchow01.github.io) teaches game development initially in PyGame through Python, before moving on to addressing all facets of game development. Topics addressed include game physics, sprites, animation, game development methodology, sound, testing, MMORPGs and online games, and addressing mobile development in Android, HTML5, and iOS. Most to all of the development is focused on PyGame for learning principles - [Text Lectures](http://ocw.tufts.edu/Course/75/Learningunits) - [Assignments](http://ocw.tufts.edu/Course/75/Assignments) - [Labs](http://ocw.tufts.edu/Course/75/Labs) - [CS 100](https://github.com/mikeizbicki/ucr-cs100) **Open Source Software Construction** *UC Riverside* Assignments Lecture Notes - This is a course on how to be a hacker. Your first four homework assignments walk you through the process of building your own unix shell. You'll be developing it as an open source project, and you will collaborate with each other at various points. - [Github Page](https://github.com/mikeizbicki/ucr-cs100) - [Assignments](https://github.com/mikeizbicki/ucr-cs100/tree/2015winter/assignments) - [CS 223A](http://see.stanford.edu/see/courseinfo.aspx?coll=86cc8662-f6e4-43c3-a1be-b30d1d179743) **Introduction to Robotics** *Stanford University* Lecture Videos Assignments Lecture Notes - The purpose of this course is to introduce you to basics of modeling, design, planning, and control of robot systems. In essence, the material treated in this course is a brief survey of relevant results from geometry, kinematics, statics, dynamics, and control. - [Lectures](http://see.stanford.edu/see/lecturelist.aspx?coll=86cc8662-f6e4-43c3-a1be-b30d1d179743) - [Assignments](http://see.stanford.edu/see/materials/aiircs223a/assignments.aspx) - [CS 378](https://github.com/ut-cs378-vision-2014fall/course-info) **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](https://github.com/ut-cs378-vision-2014fall/course-info/tree/master/meeting-notes) - [CS 411](http://video.bilkent.edu.tr/course_videos.php?courseid=10) **Software Architecture Design** *Bilkent University* Lecture Videos - This course teaches the basic concepts, methods and techniques for designing software architectures. The topics include: rationale for software architecture design, modeling software architecture design, architectural styles/patterns, architectural requirements analysis, comparison and evaluation of architecture design methods, synthesis-based software architecture design, software product-line architectures, domain modeling, domain engineering and application engineering, software architecture implementation, evaluating software architecture designs. - [CS 5150](http://www.cs.cornell.edu/courses/CS5150/2014fa/overview.html) **Software Engineering** *Cornell University* Assignments Lecture Notes Readings - Introduction to the practical problems of specifying, designing, building, testing, and delivering reliable software systems - [Lectures](http://www.cs.cornell.edu/courses/CS5150/2014fa/materials.html) - [CSE 154](http://courses.cs.washington.edu/courses/cse154/14au/) **Web Programming** *University of Washington* Assignments Lecture Notes - This course is an introduction to programming for the World Wide Web. Covers use of HTML, CSS, PHP, JavaScript, AJAX, and SQL. - [Lectures](http://courses.cs.washington.edu/courses/cse154/14au/lectures.shtml#today) - [Assignments](http://courses.cs.washington.edu/courses/cse154/14au/homework.shtml) - [EECS 588](https://www.eecs.umich.edu/courses/eecs588/) **Computer & Network Security** *University of Michigan* Lecture Notes Readings - Taught by [J. Alex Halderman](https://jhalderm.com/) who has analyzed the security of Electronic Voting Machines in the [US](https://jhalderm.com/pub/papers/dcvoting-fc12.pdf) and [over](https://jhalderm.com/pub/papers/ivoting-ccs14.pdf) [seas](https://jhalderm.com/pub/papers/evm-ccs10.pdf). - This intensive research seminar covers foundational work and current topics in computer systems security. - [Readings](https://www.eecs.umich.edu/courses/eecs588/readings.html) - [ESM 296-4F](http://ucsb-bren.github.io/esm296-4f/) **GIS & Spatial Analysis** *UC Santa Barbara* Assignments Lecture Notes - Taught by [James Frew](http://www.bren.ucsb.edu/people/Faculty/james_frew.htm), [Ben Best](http://mgel.env.duke.edu/people/ben-best/), and [Lisa Wedding](http://www.centerforoceansolutions.org/team/lisa-wedding) - Focuses on specific computational languages (e.g., Python, R, shell) and tools (e.g., GDAL/OGR, InVEST, MGET, ModelBuilder) applied to the spatial analysis of environmental problems - [GitHub ](http://ucsb-bren.github.io/esm296-4f/) (includes lecture materials and labs) - [ICS 314](http://philipmjohnson.github.io/ics314f13/) **Software Engineering** *University of Hawaii* Assignments Lecture Notes Readings - Taught by [Philip Johnson](http://philipmjohnson.org/) - Introduction to software engineering using the ["Athletic Software Engineering" pedagogy](http://philipmjohnson.org/2013/12/16/athletic-software-engineering-education-initial-results/) - [Readings](http://philipmjohnson.github.io/ics314f13/readings/) - [Experiences](http://philipmjohnson.github.io/ics314f13/experiences/) - [Assessments](http://philipmjohnson.github.io/ics314f13/assessments/) - [IGME 582](http://hfoss-fossrit.rhcloud.com) **Humanitarian Free & Open Source Software Development** *Rochester Institute of Technology* Assignments Lecture Notes - This course provides students with exposure to the design, creation and production of Open Source Software projects. Students will be introduced to the historic intersections of technology and intellectual property rights and will become familiar with Open Source development processes, tools and practices. - [I485 / H400](http://www.informatics.indiana.edu/rocha/i-bic/) **Biologically Inspired Computation** *Indiana University* Assignments Lecture Notes - Course taught by [Luis Rocha](http://www.informatics.indiana.edu/rocha/lr_form.html) about the multi-disciplinary field algorithms inspired by naturally occurring phenomenon. This course provides introduces the following areas: L-systems, Cellular Automata, Emergence, Genetic Algorithms, Swarm Intelligence and Artificial Immune Systems. It's aim is to cover the fundamentals and enable readers to build up a proficiency in applying various algorithms to real-world problems. - [Lectures](http://www.informatics.indiana.edu/rocha/i-bic/#materials) - [Assignments](http://www.informatics.indiana.edu/rocha/i-bic/#labs) - [11-785](http://deeplearning.cs.cmu.edu/) **Deep Learning** *Carnegie Mellon University* Assignments Readings - The course presents the subject through a series of seminars and labs, which will explore it from its early beginnings, and work themselves to some of the state of the art. The seminars will cover the basics of deep learning and the underlying theory, as well as the breadth of application areas to which it has been applied, as well as the latest issues on learning from very large amounts of data. We will concentrate largely, although not entirely, on the connectionist architectures that are most commonly associated with it. *Lectures* and *Reading Notes* are available on the page. - [15-781](http://www.cs.cmu.edu/~tom/10701_sp11/) **Machine Learning** *Carnegie Mellon University* Assignments Lecture Notes Readings - Taught by one of the leading experts on Machine Learning - **Tom Mitchell** - [Lectures](http://www.cs.cmu.edu/~tom/10701_sp11/lectures.shtml) - [Project Ideas and Datasets](http://www.cs.cmu.edu/~tom/10701_sp11/proj.shtml) - [Open Sourced Elective: Database and Rails](http://www.schneems.com/ut-rails/) **Intro to Ruby on Rails** *University of Texas* Lecture VideosAssignments Lecture Notes - An introductory course in Ruby on Rails open sourced by University of Texas' CS Adjunct Professor, Richard Schneeman. - [Lectures](http://www.schneems.com/ut-rails/) - [Assignments](http://www.schneems.com/ut-rails/) - [Videos](https://www.youtube.com/playlist?list=PL7A85FD7803A8CB1F) ----- ### Contributing Have a few courses in mind that you think are awesome and would fit in this list? Feel free to send a [pull request](https://github.com/prakhar1989/awesome-courses/pulls). However, do note that I'm not keen on adding popular courses (such as MOOCs / MIT OCW) as there are services like [ClassCentral](https://www.class-central.com/) doing a great job of aggregation. This list is ideally for courses which are relatively unknown and make their material (assignments, lectures, exams etc.) available online for free. **When adding new courses to the various categories, please ensure that alphabetization (ex. CSCE 48 should be listed after CS 240) is maintained. This makes it easier for viewers to find what they are looking for.**