Below I’ve collected some links to advanced computer science courses on-line. I’m concentrating on courses with good lecture notes, rather than video lectures, and I’m applying a rather arbitrary filter for quality (otherwise this becomes a directory with less semantic utility).

This is the good stuff! But only a subset of it – any recommendations for good courses are gratefully received. I’m mainly interested in systems, data-structures and mathematics, so reserve the right to choose topics at will.

Courses are organised by broad topic.

## Systems

Graduate level operating systems courses don’t typically have notes – they all come with long reading lists taken from SOSP and other places. In this way, systems research is a bit more like a humanities subject: it’s vital to read the primary sources.

- Cornell CS 614 – Advanced Course in Computer Systems – Ken Birman teaches this course. The readings cover more distributed systems research than is typical (which I am in favour of!). In fact, there’s barely anything on traditional internal OS topics like filesystems or memory management. There’s some worthwhile commentary at the bottom of the page.
- Princeton COS 518 – Advanced Operating Systems – short and snappy reading list of two papers per topic, covering some interesting stuff like buffering inside the operating system, and L4.
- Stanford CS240 – Advanced Topics in Operating Systems – an interesting and concise set of readings. A presentation on Firefox internals is a course-specific highlight.
- Harvard CS264 – Peer-to-Peer Systems – No notes but a useful collection of papers surveying from CAN and Chord to Skype.
- CSE 552 – Distributed Systems – University of Washington graduate distributed systems course. Thoughtfully selected readings.
- CMU 15-712 – Advanced and Distributed Operating Systems
- UIUC CS 525 – Advanced Distributed Systems – long list of readings, drawn mostly from the last ten years or so, focusing on applications.

## Databases

- Brown CSCI 2270 – Advanced Topics in Database Management – no notes but a good set of readings. Does a good job of categorising the last ~15 years of distributed and parallel database research which has moved away from shared-something RDBMSs.

## Distributed Algorithms

- MIT 6.852 – Distributed Algorithms – Goodish lecture slides, detailed but manageable set of readings and some homework problems. Lectured by Professor Lynch at MIT, who literally wrote the book on the subject.
- Distributed Algorithms Lecture Notes – Very readable set of lecture notes on distributed algorithms, for a course given in 1993 at the Technion in Israel (I think).
- MIT 6.885 – Distributed Algorithms for Mobile Wireless Ad-Hoc Networks – One of the only courses on this particular niche subject. Taught simultaneously by Jennifer Welch and Nancy Lynch. Notes are very good, reading lists is very comprehensive and there are also some good handouts!

## Data Structures and Algorithms

- MIT 6.854J (OCW) – Advanced Algorithms – A good first course after familiarity with Cormen et. al. is achieved. Topics include competitive queues, splay trees, six lectures on flow algorithms, linear programming and computational geometry. Lecturer’s own notes are sparse, but the scribed notes are very useful.
- MIT 6.851 – Advanced Data Structures – supercedes the below course I think, both taught by the legendary Erik Demaine. Worth keeping the below one around as well, since the notes are slightly different as are the topics covered.
- MIT 6.897 – Advanced Data Structures – good coverage of advanced topics including dynamic graphs, succinct data structures and data structures for integers. Scribe notes are excellent, lecturer’s own hand-written notes less so.
- Chicago CS369E – Expanders in Computer Science – graduate level course on expander graphs and their applications to computer science. Notes are excellent.
- Harvard CS225 – Pseudorandomness – good scribe notes, covers randomized algorithms, quite a lot on expander graphs etc.
- Yale 500A – Spectral Graph Theory and its Applications – slightly rambling but clear and interesting lecturer written notes.
- UIUC CS573: Algorithmic Game Theory – good scribe notes and a pointer to a massive online text book.
- Cornell CS683 – Advanced Algorithms – detailed web page, notes and readings. Focus is on approximation algorithms, linear programming and randomisation.
- Wisconsin CS787 – Advanced Algorithms – decent notes and readings. Linear programming, network flows, approximation and randomisation, plus some interesting stuff on online algorithms.
- UIUC CS 373 – Combinatorial Algorithms – a senior undergraduate course in mainly advanced topics from CLRS with outstanding notes.

## Discrete Mathematics and Probability

- MIT 6.042J (OCW) – Elementary discrete maths, including graph theory and some combinatorics. Lecture slides are available, and good, but the real meat is in the readings.

I’d suggest adding a couple textbooks.

Real Analysis and Abstract Algebra textbooks at http://www.mth.pdx.edu/~erdman/.

Both textbooks were written by John Erdman under a creative commons non-commercial license. They were recommended to me by a math professor and both books are really high quality.

The Berkeley CS262a is a grad-level intro systems/db course taught by Eric Brewer and Joe Hellerstein. The paper selections are pretty good.

http://www.cs.berkeley.edu/~brewer/cs262/

Consider checking this course out: http://www.cs.ucla.edu/~kohler/class/10f-aos/

One of the best courses I’ve ever taken. Provides a thorough introduction to operating systems and eliminates any osdev apprehension you might have had before.

Hey, you can also include these awesome lectures (have seen the ones in Theoretical Comp. Sci. and Algorithms and they are super) by Prof. Shai Simonson: http://www.aduni.org/

Thank you for compiling this list, which will provide me with many hours of material, I hope 🙂

I have one remark, though: the last link to the discrete maths lecture seems dead. Any chance you could repair it?

I had taken Jon Kleinberg’s CS 6850 – Structure of Information Networks.

Really brilliant course and very pertinent to today’s connected world.

You might like to consider adding this (student run!) course form the University of Cambridge: http://www.srcf.ucam.org/algorithms/

CSE 494/598 Information Retrieval, Mining and Integration on the Internet

2010 course from Arizona State with slides, readings and lecture audio.

http://rakaposhi.eas.asu.edu/cse494/

NLG course for ph.d students http://wiki.duboue.net/index.php/2011_FaMAF_Intro_to_NLG This course covers three topics that are usually taught in separate courses: the automatic construction of text starting from structured data, the automatic construction of summaries (not the full summarization system, just the text construction bit), and the text creation in the target language during machine translation.

Do you have any links to course on methods on how to design/architect real systems and how that influences the implementation? Saying you are going to use OO or functional is pointless: What are the classes? Their names? Their relations? We were never taught how to actually design software. (You can not just slap together algorithms.)

There is an even more up-to-date version of 6.851, the Advanced Data Structures course at MIT (also taught by Erik Demaine, but in 2010). This supercedes both the 2007 and 2004 versions.

URL: http://courses.csail.mit.edu/6.851/spring10/

Wisc has sorts of grad level courses on areas your mentioned above.

Systems:

CS 736 Adv OS, CS739 Distributed Systems

Prof. Mike Swift has precious notes:

http://pages.cs.wisc.edu/~swift/teaching.html

DB:

Prof. AnHai Doan says,

CS 564 (Database Management Systems: Design And Implementation) is “everything you should know so that you can get an industrial job working with relational databases”

CS 764 (Topics In Database Management Systems) is “all the gory details you may (or may not) want to know about relational data management systems”

http://pages.cs.wisc.edu/~cs764-1/

CS 784 (Data Models And Languages) is “all the stuff beyond relational data (e.g., Web, text, data mining, data integration, data extraction) that you should know to broaden your data management knowledge or to work in the field as an advanced developer/researcher”.

http://pages.cs.wisc.edu/~anhai/courses/784-spring13/

You also may be interested in OS qual reading list (http://research.cs.wisc.edu/areas/os/Qual/readinglist-print.html) at Wisc.