# Courses

Many universities make their course materials available online. I prefer actual university courses to resources such as Coursera.

## Courses I studied in my spare time

* [MIT 6.824: Distributed Systems](https://wiki.ainzzorl.lol/tech/algorithms/distributed-hash-table-dht)
* [MIT 6.854/18.415: Advanced Algorithms + Stanford CS168: The Modern Algorithmic Toolbox](https://wiki.ainzzorl.lol/courses/mit-6.854-18.415-advanced-algorithms-+-stanford-cs168-the-modern-algorithmic-toolbox)
* [Stanford CS234: Reinforcement Learning](http://web.stanford.edu/class/cs234/)
* [Stanford CS243: Program Analysis and Optimization](https://suif.stanford.edu/~courses/cs243/)
* [Stanford CS246: Mining Massive Data Sets](http://web.stanford.edu/class/cs246/)
  * [My homework solutions.](https://github.com/ainzzorl/stanford-246-mining-massive-datasets)

## Courses I consider doing

* <https://news.ycombinator.com/item?id=27388391>

## How to choose a course

It goes without saying that the topic and the syllabus must be interesting and useful (whatever it means) to you. Beside that, an important factor is availability of study materials:

* Lecture notes.
* Textbooks.
* lecture videos.
* Homeworks.
  * When it comes to CS-related courses, I greatly prefer exercises that involve coding something.
* Solutions to homeworks.

If I don't know what I want to study, I skim the lists:

* [Stanford CS](https://cs.stanford.edu/academics/courses)
* [MIT CS](https://courses.csail.mit.edu/)
* Harvard: TODO

## How I study

After watching/listening/reading a lecture, I try to briefly explain the gist in my own words. If I can't, it means I didn't understand it. I also try to summarize the biggest takeways from it.

Homeworks are extremely important. I neglected them when I was a student, but now when I study something in my spare time I take homeworks very seriously.
