Guide: CS Bachelor through Open Courses

A few weeks ago I came across a list of courses that should give you a similar level of knowledge to someone who got a bachelor degree in CS. As someone who is not just interested in web development, but rather CS in general and as fan of open course ware I find this is an interesting resource worth looking into.
Maybe some of you are already studying CS and have trouble understanding a topic. Maybe the same course taught by a different person can help you.
But even if you aren’t interested in all of these topics, there might be a few subjects that can boost your understanding of programming.

All the credits go to agupieware. Make sure to check out that site as it has a lot of other interesting content.

Here is the list:

Introductory Courses

Intro to Computer Science:
Introduction to Computer Science and Programming - MIT
Intensive Introduction to Computer Science - Harvard (CS50)
Programming Methology - Stanford
Programming Abstractions (Second Course in Unit) - Stanford

Mathematics:
Mathematics for Computer Science - MIT
Discrete Mathematics - ArsDigita

Programming:
Programming I - University of Toronto
Programming II - University of Toronto

Theory of Computation:
Introduction to the Theory of Computation - Stonehill

Data Structures and Algorithms:
Introduction to Data Structures and Algorithms - UNSW
Introduction to Algorithms - MIT

Core Courses

Theory:
Theory of Computation - UC Davis

Algorithms and Data Structures:
Efficient Algorithms and Intractable Problems - UC Berkeley
Data Structures - UC Berkeley

Mathematics:
Discrete Math and Probability Theory - UC Berkeley

Operating Systems:
Operating Systems and System Programming - Berkeley
Introduction to Linux - edX

Computer Programming:
Programming Paradigms - Stanford
Object Oriented Programming - MIT
Object Oriented Programming in C++ - ITU

Software Engineering:
Software Engineering - UC Berkeley

Computer Architecture:
Computer Architecture - Carnegie Mellon
Computer Architecture - Princeton

Data Management:
Introduction to modern Database Systems

Networking and Data Communications:
Fundamentals of Computer Networking - Manhattan College
Introduction to Data Communications - Thammasat University

Cryptography and Security:
Introduction to Cryptography - Ruhr University
Introduction to IT Security - Thammasat University

Artificial Intelligence:
Introduction to Artificial Intelligence - UC Berkeley

Intermediate and Advanced Courses

Algorithms and Data Structures:
Advanced Data Structures - MIT
Analytic Combinatorics - Princeton

Systems:
Computer System Engineering

Programming:
Design in Computing - UNSW
Principles of Programming Languages - IIT
C++ for C Programmers - UC Santa Cruz

Software Engineering:
Software Engineering for Scientific Computing - UC Berkeley
Fundamentals of Project Planning and Management - University of Virginia

Mobile App Development:
Building Mobile Applications - Harvard
iPhone Application Development - ITU
Android Application Development - ITU

Web Development:
Building Dynamic Websites - Harvard

Databases and Data Management:
Database Management Systems - Ars Digita
Advanced Databases - Saylor

Security:
Security and Cryptography - Thammasat University

Cryptography:
Cryptography I - Stanford
Cryptography II -Stanford
Bilinear Pairings in Cryptography - BIU

Artificial Intelligence and Machine Learning:
Artificial Intelligence - HRW
Artificial Intelligence - UC Berkeley
Machine Learning - Stanford

Digital Media:
Digital Image Processing - Purdue
Computer Graphics - Berkeley
Computer Graphics - ITU

Networking and Communications:
Internet Technologies and Applications - Thammasat University

Statistics and Probability:
Satistics and Probability - Harvard
Probabilistic Systems Analysis and Applied Probability - MIT
Statistical Inference - John Hopkins
Data Analysis and Statistical Inference - Duke

Note:

  • For better understanding do assignments if there are any!
  • Don’t stop coding! Theory is nice and all, but don’t forget to something practical. You may use a resource of you choice and maybe think about a “final project” that you can do.
  • Act like you are an actual college student. Take notes!
  • This list is not a replacement for a real college degree program. However the aim is to provide you a similar amount of knowledge
  • As some courses cover the same topic you don’t have to do everyone of these.
  • If there aren’t assignments, use the Feynman technique: Explain it to someone (or yourself) in simple words. Then explain it, as if your would explain it to a kindergardener.
  • Some links of the original lists are not included as they don’t exist anymore.

This list is actually an extension to a shorter list that aGupieware published before. If the list above seems a bit overwhelming to you, you can find the core version of it here.

Leave any suggestions for improvements or additions in the comments!

Updates:
08.04.2017 - As suggested by @astv99 astv99 I included the course “Fundamentals of Project Planning and Management” which also covers software engineering methodologies like agile, scrum and kanban.

11 Likes

What an extensive list! I’m interested to know how far into the whole material you are if you are using this same list?

I already did the CS50 Course of Harvard and the MIT “Introduction to Computer Science” course before and started MIT’s “Mathematics for CS” and “Introduction to AI”. Besides that I also read YDKJS and do FCC assignments.
So I haven’t really got that far, but maybe someone else has and can give a review about it.
It is actually designed to be extensive to cover as much subjects as possible and to provide a veriety of choice between the courses.
But agupieware actually made a much shorter list before the one I posted here.
As I said in the post, this collection of links aims to give a similar level of knowledge as a bachelor degree does (not sure if it really does).

That’s not a bad list of topics and is actually pretty comprehensive, but I see 4 notable topics that it’s missing coverage on that a good CS curriculum would cover:

  • Programming language theory: granted there is a course provided there (Principles of Programming Languages - IIT), but its syllabus makes it look more like an advanced course than a more-accessible intermediate-level one. A proper intermediate-level course on programming language theory would cover abstract syntax trees, grammars (and what context-free means), and lexers & parsers, among other things. That sort of course is missing from the list.

  • Relational Database Theory: the database-related courses listed do seem to go over some of the theory that goes with databases, but a cursory look at their syllabi shows that they don’t go into a whole lot of depth, and there’s quite a bit of math that goes with the subject as well.

  • Design Patterns: sort of an essential topic to cover that goes hand-in-hand with any programming language, and there aren’t any courses listed for it.

  • Software Engineering Methodologies: Agile, Scrum, Kanban, etc. Stuff that modern programmers should know, in order to know how to work as part of a modern software team.

And of course, the list of courses doesn’t have anything that’s comparable to the 4th-year team-based “final project”. Keeping with the online theme though, I guess it wouldn’t be hard to find a few other people to partner with and collaborate through GitHub to build your own project. :wink:

Also, while discrete math is certainly the bare minimum in terms of math for computer science, most colleges & universities will require their CS students to take up to calculus 3 plus a course in statistics and/or probability (usually one course will combine the two), as well as a course in linear algebra. (Linear algebra is helpful particularly for working with 3D graphics, for anyone who’d like to get into working with either OpenGL or DirectX.)

Lastly, there’s another thing missing from the list of topics that any CS curriculum at a college or university would cover: electives in humanities, social sciences, and natural sciences (chemistry, physics, or biology) to round you out as a person and not just as a computer nerd. :stuck_out_tongue: Because no one in the real world will want 110% computer nerds, and you should be aware of the outside world beyond just computing, whether it’s art, philosophy, history, economics, etc.

Very good points you are having there, mate.

You are right about the missing points. A few of them were actually covered in the original list, but unfortunately the links are dead. I will still try to find courses that cover the topics and update the list the next day.

I also agree that these courses miss practical assignments and especially a “final project”. I mentioned in the original post that someone should try to compensate for that and still practice coding. Maybe I should specify that and go a bit more into detail.

And lastly you are right, this “program” does not substitute a real college degree nor the experience you get there in any way.
The target audience of this list are people who do not want or can’t take a college programm, but are still interested in computer science or want to get more theoretical knowledge.
Even though this list won’t be capable of replacing a(n) (online) college degree it should still come as close as possible in my opinion :slight_smile:

So thanks for your answer! This helps me a lot to improve the list

Edit:
I added a course in Software Engineering called “Fundamentals of Project Planning and Management” which covers software engineering methodologies. Like I said, I don’t have a CS degree nor am I the creator of this list, so I would be glad if you could take a quick look at the syllabus and let me know what you think :slight_smile:

I recently came across https://teachyourselfcs.com and started going through the SICP book. It has a similar topical structure to the list that you’ve described. I think I’ll use TYCS first as an outline and then maybe cherrypick from this list to go deeper in a topic.

1 Like

for creating your own path of CS Bachelor level you can use Coursebuffet

The syllabus for that course doesn’t mention the word “agile” once, so I’d be inclined to think that course isn’t the right one for the subject. Sorry I don’t know of any MOOCs myself on the subject, but it’s certainly one of the most important ones that deserves one.

Wow! Thank you soooo much for these resources, they will be extremely helpful :smile:

If you go to https://modernstates.org/, you will be able to take those humanities course, for free, and get college credit when you take the CLEP exams. You will be able to shave off one year of college for this.
Just make sure the university you are thinking of going to will accept some of these CLEPS.
(As of now, the site will pay for your CLEP exam for a limited time.) :hot_pepper:

1 Like

oh man, thank you very much.
I’m starting in the world of programming but with computer science content. I live in Brazil and knowing how big and extensive this area is makes me excited!