
List of University Courses for Learning Computer Science - hising
https://github.com/prakhar1989/awesome-courses
======
krat0sprakhar
Hi All, I'm the author of this list. My main motivation with this was to list
down a few university courses that make their material available online for
free. In contrast to MOOCs, I've found these university courses to be quite
valuable especially if you're looking to dive deeper (lecture notes &
readings) and/or like working at your own pace. Most of these courses have
really interesting assignments which you can work on when you are between
side-projects.

Thanks to the contributors, the list has become quite huge and I'm open to any
ideas that might help users navigate this better. There was a
recommendation[0] made to add emojis and I'm looking for feedback on how it
could be done better. If any of you have suggestions, I'm all ears! Thanks!

[0] - [https://github.com/prakhar1989/awesome-
courses/issues/29](https://github.com/prakhar1989/awesome-courses/issues/29)

~~~
louhike
Is it opened to non-american courses? It would be nice.

~~~
krat0sprakhar
If you're referring to non-american universities, the list does contain a
couple of courses offered by European universities. However, the list does not
contain any non-English courses but if you do know of any, do send in a PR and
I'll gladly add it to the list.

------
angrave
The link to the systems course @ UIUC and probably other UIUC courses is not
useful because the UIUC has just changed all of the the web pages in
preparation for next semester.

If you're interested in C, thread synchronization, pipes and other system
level programming concepts, then you might find the following freely-available
and re-usable resources we created for UIUC's CS241 useful:

[http://angrave.github.io/sys/#](http://angrave.github.io/sys/#) Includes: 1\.
7 minute intro videos on C and POSIX calls 2\. linux-in-the-browser
programming+shell playground that runs in your laptop's browser

My course staff will be releasing a new version of this VM in the next
semester with additional features and bug fixes (including embedded man-page
and autocomplete)

We also built a crowd-sourced book that mirrors most of the lecture content
[https://github.com/angrave/SystemProgramming/wiki](https://github.com/angrave/SystemProgramming/wiki)

Together, these items comprise a significant amount of the systems course
CS241.

~~~
krat0sprakhar
> The link to the systems course @ UIUC and probably other UIUC courses is not
> useful because the UIUC has just changed all of the the web pages in
> preparation for next semester.

So that's why the existing links were showing a blank page. I think it makes
sense to link to the 2014 course page for now and later update it to 2015 when
the material is up.

> Together, these items comprise a significant amount of the systems course
> CS241.

I'll update the README with the above links. Thanks a lot Prof Angrave for
make this available for free!

------
phkahler
I find the number of places not requiring Linear Algebra in CS curriculum
disturbing. Graphics, PageRank, Super Computing, and other areas are all very
heavy on the matrix math. I know there's only so many course you can fit in 4
years, but this still seems like an oversight to me.

Numerical integration methods (for ODE solvers) and constraint solvers should
probably be covered better too, these are the basis for all engineering and
scientific simulations.

~~~
BFay
Do you have any recommendations for a good linear algebra course/book? I've
studied some DSP coming from a pretty limited math background (High School + 2
years college calculus) Linear algebra is one of many topics that's kept me
from digging into advanced material.

~~~
muraiki
Learn linear algebra while writing a linear algebra library using the latest
techniques (starts at the end of this month):
[https://www.edx.org/course/linear-algebra-foundations-
fronti...](https://www.edx.org/course/linear-algebra-foundations-frontiers-
utaustinx-ut-5-02x) I think there's also a non-mooc version at
[http://www.ulaff.net/](http://www.ulaff.net/)

Unfortunately, I had to give up on the course last year because my math
background is even more limited than yours (you'll need to know how to
construct proofs). So time for me to learn calc, I guess. :)

~~~
rifung
I don't believe Calculus is a prerequisite to Linear Algebra. Constructing
proofs is something that's used in all branches of math as far as I know. If
proofs are the only thing stopping you then I'd recommend just trying your
hand at a few to get the hang of them. I can't imagine they'd be taught in a
Calculus course either.

~~~
muraiki
Oh, I realize Calculus isn't a necessary prereq to linear algebra. But my
impression is that people normally learn proofs alongside Calc than learn
proofs alongside Linear Algebra. To be honest, I was writing more out of a
desire to be humorous than accurate; sorry!

Anyways, I've picked up "The Haskell Road to Logic, Maths, and Programming,"
so hopefully I can learn proofs alongside programming and logic, which is
probably the best route for me at this time.

------
amirmc
For anyone looking for courses using OCaml, there's a list at
[http://ocaml.org/learn/teaching-ocaml.html](http://ocaml.org/learn/teaching-
ocaml.html) \-- Prev HN discussion at:
[https://news.ycombinator.com/item?id=8603202](https://news.ycombinator.com/item?id=8603202)

To be honest, I'm somewhat confused by the purpose of general lists like
these. When they're small and focused, I can see them being useful (as the OP
mentions here) but eventually they tend towards being a directory. At that
stage I'd just use Google (edit: though it'd be hugely ironic if a Google
search led me to an 'awesome-style' list - hasn't happened yet)

------
SippinLean
I'm a self-taught front-end developer (more of a hack) that doesn't have a CS
degree, and I want to go back and learn the fundamentals. Anyone been through
a similar thing that can recommend a good free online CS program?

~~~
conjecTech
Here's something to get you started: Lectures:
[https://www.youtube.com/watch?v=QMV45tHCYNI&list=PLD4CAE0D1D...](https://www.youtube.com/watch?v=QMV45tHCYNI&list=PLD4CAE0D1D2EEF760)

Course website:
[http://www.cs.berkeley.edu/~jrs/61b/](http://www.cs.berkeley.edu/~jrs/61b/)

This isn't proctored and you wont have a proper instructor if that's what
you're looking for, but I've found these lectures to be exceptionally good.
They go throuh some basics on OOP, classes, data structures and basic
algorithms. I found it very easy to follow through these lectures and complete
some of the assignments. I went through these while I was a student at Georgia
Tech when I was transitioning from Electrical and Industrial Engineering to
CS, and I learned the material well enough to exempt their intro to OOP class
and be bored to tears for the first 80% of the data structures class. I think
it would be a great starter before you jump into anything else.

~~~
gtremper
I took this exact class in person while I was at Berkeley. I also highly
recommend. Shewchuk was one of the best lecturers I had.

------
eric_bullington
It's amazing the amount of high-quality material there is out there. However,
as a programmer who is currently going back and attempting to master the
fundamentals of an undergraduate CS curriculum through self study, what is
lacking is:

1\. A comprehensive list of the _topics_ covered in the fundamental CS classes
(that is, the topics covered in data structures, algorithms, etc. as well as
the required math), ideally with links to related online material. Actually,
ACM's Joint Task Force on Computing Curricula publishes a report that is an
excellent resource (starting on page 59)[1] for this kind of thing. This
resource just need to be distilled down into a list of general topics, each
with an associated list of the best online education materials for that
particular topic.

2\. A nice flashcard program to accompany each topic, ideally with SRS, that
could help students learn the terms and other concrete facts related to those
topics.

3\. A way to systematically evaluate and analyze a learner's mastery of these
topics. That is, tests. I'm sure there's a lot of great test material out
there that could be auto-graded, but it's scattered about.

4\. Oh yeah, and a pony.

Does anyone know of a resource like this? I've actually thought about building
it, and have started on very minor parts of this vision [2]. But it's a big
task, and I'm not sure if there's any demand for this kind of thing.

1\. [http://www.acm.org/education/CS2013-final-
report.pdf](http://www.acm.org/education/CS2013-final-report.pdf)

2\.
[https://github.com/esbullington/canonicalcards](https://github.com/esbullington/canonicalcards)

~~~
bcbrown
One approach to getting a list of topics is to look at the degree requirements
for a couple of universities. I'm wrapping up a similar project, and here's
what I included, along with some resources I used:

* Algorithms (CLRS, Skiena)

* Databases (db-class.org, any text by C.J. Date)

* Probability, Statistics, and Combinatorics

* Programming Languages (I liked Grossman's course on Coursera)

* Linear Algebra ([http://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebr...](http://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/Syllabus/))

* Natural Language Processing (Coursera has several courses)

* Machine Learning/Information Retrieval/Data Mining (I used a couple books, Mining Massive Datasets and Data-Intensive Text Processing with MapReduce being the two I'd recommend)

* Networking (Coursera has a good course)

* Operating Systems ([https://www.youtube.com/watch?v=XgQo4JkN4Bw&list=PL62A66DDD3...](https://www.youtube.com/watch?v=XgQo4JkN4Bw&list=PL62A66DDD3B3CC0B7))

* Distributed Systems (I read Tanenbaum's book)

* Computability

~~~
eric_bullington
I appreciate the idea, and that's a good list of broad topics (I'm currently
working off a similar one[1]).

But I'm actually talking about sub-topics _within_ each of those broad topics.
If you take a look at page 59 of the ACM pdf I linked to, you'll see the level
of detail I'm hoping for. As just one example among many, see the algorithmic
section, core tier 1 of 2 (followed by the corresponding learning objectives):

• Simple numerical algorithms, such as computing the average of a list of
numbers, finding the min, max, and mode in a list, approximating the square
root of a number, or finding the greatest common divisor

• Sequential and binary search algorithms

• Worst case quadratic sorting algorithms (selection, insertion)

• Worst or average case O(N log N) sorting algorithms (quicksort, heapsort,
mergesort)

• Hash tables, including strategies for avoiding and resolving collisions

• Binary search trees o Common operations on binary search trees such as
select min, max, insert, delete, iterate over tree

• Graphs and graph algorithms o Representations of graphs (e.g., adjacency
list, adjacency matrix) o Depth- and breadth-first traversals

Learning Outcomes: [Core-Tier1]

1\. Implement basic numerical algorithms. [Usage]

2\. Implement simple search algorithms and explain the differences in their
time complexities. [Assessment]

3\. Be able to implement common quadratic and O(N log N) sorting algorithms.
[Usage]

4\. Describe the implementation of hash tables, including collision avoidance
and resolution. [Familiarity]

5\. Discuss the runtime and memory efficiency of principal algorithms for
sorting, searching, and hashing. [Familiarity]

6\. Discuss factors other than computational efficiency that influence the
choice of algorithms, such as programming time, maintainability, and the use
of application-specific patterns in the input data. [Familiarity]

7\. Explain how tree balance affects the efficiency of various binary search
tree operations. [Familiarity]

8\. Solve problems using fundamental graph algorithms, including depth-first
and breadth-first search. [Usage]

[1] And yes, I started Grossman's course on PL. It is excellent, and really
regret having to drop it, but I was totally overloaded with work at the time

------
norswap
I wish people would stop using the word "awesome" as punctuation.

Otherwise it's a nice list, kudos for the effort.

~~~
krat0sprakhar
Haha! The "awesome" here is tongue-in-cheek and is in reference to the rising
fashion of curated lists being prefixed with "awesome" on Github.

[https://github.com/search?utf8=%E2%9C%93&q=awesome](https://github.com/search?utf8=%E2%9C%93&q=awesome)

~~~
x1a0
This is an awesome link!

------
mathias_awkward
Could be good to have classes about (relational/noSQL) databases too I think
:)

~~~
Ar-Curunir
UC Berkeley has CS 186, but it approaches databases from a theoretical
perspective rather than about how to use them.

[https://sites.google.com/site/cs186fall2013/](https://sites.google.com/site/cs186fall2013/)

~~~
krat0sprakhar
Wow! This is a gold mine. Lecture notes, project code (SimpleDB) and
assignments are all available. I'll add this to the list! Thanks :)

~~~
joshAg
Pretty much any UC Berkeley course is like this; check out the archives for
the intro CS class, cs61a:
[http://inst.eecs.berkeley.edu/~cs61a/archives.html](http://inst.eecs.berkeley.edu/~cs61a/archives.html)

Here's a listing of all the different classes and their archives:
[http://inst.eecs.berkeley.edu/classes-
eecs.html](http://inst.eecs.berkeley.edu/classes-eecs.html)

------
tericho
Wow, so TIL MIT has a course dedicated to mastering Google, Facebook & Apple
interview questions. Thanks for the list.

------
dguido
If you're interested in security, you may want to look at the CTF Field Guide
which is based on an older course at NYU-Poly, CS6573: Penetration Testing and
Vulnerability Analysis.

[https://trailofbits.github.io/ctf/](https://trailofbits.github.io/ctf/)

------
fnayr
I'd be very interested in a list of PAID courses you can get a grade from. It
would be helpful to demonstrate my ability to get a masters in cs.

I have a bachelors in math. I've taken a data structures and algo course at a
local university. I'm currently taking software engineering grad class on
udacity through Georgia Tech.

Any other paid online cs courses from universities? Some of the other Georgie
Tech classes require too much since they're grad classes. I'm looking for BS
level paid online classes.

~~~
trentmb
UIUC offers a MCS online: [https://cs.illinois.edu/current-students/graduate-
students/p...](https://cs.illinois.edu/current-students/graduate-
students/professional-masters-mcs)

~~~
packetslave
and UIS (also in the U of Illinois system) offers a BSCS online:
[http://csc.uis.edu/information/onugadmissions.html](http://csc.uis.edu/information/onugadmissions.html)

------
baldajan
Interesting how it lists Real-Time programming from uWaterloo. It's likely the
toughest class taught at the university, requiring at least 40h of work a
week.

~~~
krat0sprakhar
All thanks to the contributors!

------
ashhimself
So much knowledge.. so little time in the day.

------
bruceb
[http://coursebuffet.com/sub/computer-
science](http://coursebuffet.com/sub/computer-science)

Gives basic idea of computer science courses and level they might be at a US
university

------
krat0sprakhar
Previous discussion -
[https://news.ycombinator.com/item?id=8806910](https://news.ycombinator.com/item?id=8806910)

------
frumpy
Genuine question, How does one make use of these courses if living outside US.
Just the available online material?

~~~
Ar-Curunir
Sometimes you can find accompanying audio or video recordings from that
semester or from a different sem (UC Berkeley does this), and personally
following along with a lecture sequence makes studying advanced topics much
easier.

I think this is just a list of resources that make self-studying easier by
providing different resources for each topic.

