Hacker News new | past | comments | ask | show | jobs | submit login
List of University Courses for Learning Computer Science (github.com/prakhar1989)
300 points by hising on Jan 9, 2015 | hide | past | favorite | 47 comments

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

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

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.

How about presenting all these in a web interface? Would make it easier to search and spot interesting courses. Could start an actual platform for this purpose.

Ctrl + F?

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/# 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

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

> 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!

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.

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.

There's a free edX class called LAFF that is about to start that people really like. Also Google "Gilbert Strang Linear Algebra" to see full recorded videos of a highly-regarded teacher and course. And while you're doing those, Khan Academy has some very nice videos on pretty much all basic elements of LA that you can use to review / preview / un-confuse.

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... I think there's also a non-mooc version at 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. :)

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.

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.

For anyone looking for courses using OCaml, there's a list at http://ocaml.org/learn/teaching-ocaml.html -- Prev HN discussion at: 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)

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?

Here's something to get you started: Lectures: https://www.youtube.com/watch?v=QMV45tHCYNI&list=PLD4CAE0D1D...

Course website: 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.

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.

I believe the course materials on Udacity are free. They're a very good place to start.

I did https://www.udacity.com/course/cs101 Intro to Compsci and cs253 Web Dev. cs253 in particular is good, taught by Steve Huffman who built Reddit. They are fairly easy and probably at a simpler level than MIT/Stanford type stuff. Huffman's is more of a practical guide to building scalable sites rather then academic stuff.

I strongly recommend CS253. The course has just the right level of depth. Unless it's changed, it uses Google App Engine, but don't worry about that because it teaches you all the concepts about web development that you need to know to move on. This course was one of the biggest things that led to me becoming a professional developer (the other was http://www.ccs.neu.edu/home/matthias/HtDP2e/ although I didn't finish it completely)

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

2. https://github.com/esbullington/canonicalcards

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...)

* 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...)

* Distributed Systems (I read Tanenbaum's book)

* Computability

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

To help me structure the courses I teach better, which turns out to address some of your issues, I built the Morea Framework:


Here's the Morea-based site for the software engineering class I'm teaching starting on Monday:


One could imagine a wrapper around a set of courses structured using Morea that would get close to what you desire.


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

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

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.


This is an awesome link!

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

I can recommend the Stanford "Introduction to Databases" course https://www.coursera.org/course/db

I took it when it was first offered online in 2011, and really liked it. My review of it is here: http://henrikwarne.com/2011/12/18/introduction-to-databases-...

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


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

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

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

I second Henrik's recommendation. Apart from the one he listed, there is no other database course available online that I'm aware of.

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

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.


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.

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

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.

All thanks to the contributors!

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


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

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

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.

It probably varies from course to course and I've only done Udacity stuff. There you get lectures and can do online exercises for free. If you pay $199 you get "Projects with reviews by a Coach - Stuck? Get 1:1 help from Coaches - Verified Certificate"

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact