Online Learning: An Intensive Bachelor's Level Computer Science Program Curriculum, Part II (Updated - Dec 2020)

Last month, we published a piece providing a basic template for a bachelor’s level computer science curriculum composed entirely from college or university courses that are freely available online. To date, this has been the most popular post on the blog, and we received a ton of great feedback, both positive and negative, in the comments and from around the web.

The original post was based on a learning plan that I had worked out for myself after I jumped into the study of programming and computer science just over a year ago on something of a whim. As I’ve mentioned before, I do not have any formal background in computer science beyond the handful of courses from this list that I have worked through myself. However, I do have years of experience in teaching and in curriculum design for natural and foreign language acquisition at the college level, and consulted the computer science curricula from a number of universities around the country when putting the plan together.

The idea was not to provide a substitute for an actual college or university education (that would typically also require a large amount of alcohol at the very least, which, unfortunately, is not freely available online), but rather to aggregate resources that have been made freely available online from disparate institutions and organize them into the sort of logical structure one would likely find in a general bachelor’s level computer science program.

On the basis of the feedback from that post, we’ve put together a new list of course offerings that covers a lot more ground. In the process, I’ve also loosened up a number of implicit strictures on resources for inclusion in the present listing. For example, some of these courses require registration at a particular website and/or may not yet be available in full (ex. Coursera), a couple others are actually compiled from other resources freely available online (ex. Saylor). But all of them are still free.

Whereas the first post was intended to provide a general overview of the field along with a generic curriculum and necessary resources suitable for an absolute beginner (containing 27 courses altogether), the present listing is much more extensive and intensive in scope representing 72 courses from 30 different institutions. While we have added a number of new introductory level courses, there is a lot more that may be of interest to intermediate level folks and perhaps even some who are highly advanced and are considering a refresher course or two.

The course listing is broken down into three major divisions: Introductory Courses, Core Courses and Intermediate/Advanced Courses.  Individual courses are then listed by category within each division. 

Last but not least, thanks to everyone who provided feedback and offered suggestions on how to improve the original listing. Special thanks to Pablo Torre who provided a ton of links in the comments to the first post, many of which are included here. 


Introductory Courses 

Intro to Computer Science:
Mathematics:
Programming:
Theory of Computation:
Data Structures and Algorithms:

Core Courses 

Theory:
Algorithms and Data Structures:
Mathematics:
Operating Systems:
Computer Programming:
Software Engineering:
Computer Architecture:
Data Management:
Networking and Data Communications:
Cryptography and Security:
Artificial Intelligence:

Intermediate and Advanced Courses

Algorithms and Data Structures:
Systems:
Programming:
Software Engineering:
Mobile App Development:
Web Development:
Databases and Data Management:
Security:
Cryptography:
Artificial Intelligence and Machine Learning:
Natural Language Processing:
Digital Media:
Networking and Communications:
Statistics and Probability:
Leave any suggestions for improvements or additions in the comments!

100 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. Thank you so much! That's SUPER! ... you must have exerted tremendous efforts on compiling all these courses in one place :) ... Can't thank you enough :)

    However, I have a question, is it possible that these courses help me cover one of the job requirements "a degree in computer science"?

    Actually I'm a medical student but interested in the IT field, but neither I have the time nor the money to have a degree in computer science.

    Thank you again :)

    ReplyDelete
    Replies
    1. There are many people in the CS field without formal degrees. Will you be having a degree in medicine? If so, that and the required skills should be more than enough

      Delete
    2. Have you done the moocs? I'm in the same position as you were when you made this comment. I'm a last year med student with interest in CS (I think due to government regulations this will bring way more innovations, than biology), but with no money or time to get a degree in CS.

      Delete
  3. Hi Omar, thanks for your comment. As for your question, I would have to say, I'm not sure. If the job requirement is "having a degree of a specific level in a specific field from a specific institution", then the answer would probably have to be no. If, on the other hand, the job requirement is "having the knowledge and skill set common to this particular discipline", then the answer could very well be yes. Many job listings that I've seen, for example, say, "degree in discipline or equivalent experience".

    In my opinion, there are a fair number of people who can excel in school, get a degree and still not have much of a clue about their field. On the other hand, there are also many people who are completely self-taught who are leaders in their fields. It is a very difficult question to answer in the abstract. Personally, I've had a great time working through a number of these courses, and have been able to use the knowledge I've gained in my everyday life for work and just for fun.

    ReplyDelete
  4. Well done, u have done so well in compiling all this. Thank you very much

    ReplyDelete
  5. If we are to seek a B.S. equivalent using this as a guide, could you suggest a course guide for the topics like you did in the original post? e.g. ("choose 2 courses") Or do you recommend we just go through each course?

    ReplyDelete
  6. Hi Charles. Since there are so many courses here, and since many of them are quite advanced, I was no longer confident that I would be able to make those kinds of decisions regarding how to pick and choose for an individualized curriculum. I think if anyone just did most of the intro and core courses and maybe one or two of the intermediate/advanced, they wold be pretty close to covering a the cs curriculum from a general program (at least from among the ones I've looked at). You might want to take a look at NYU's curriculum guide, it's one of the clearest out there, and breaks things up into helpful logical chunks and study tracks: http://engineering.nyu.edu/academics/programs/computer-science-bs/curriculum

    ReplyDelete
    Replies
    1. Is tat Intermediate/Advanced Course is equivalent to d major in computer science(curriculam)?

      Delete
  7. This comment has been removed by the author.

    ReplyDelete
  8. I have a question, what maths do I need if I want to take this courses? I come from a very poor base at math and after reading the courses descriptions, I'm not sure its start assuming previous knowledge or you can jump in without knowing anything.

    If it does assume knowledge, is there any place or recommended courses I can take to improve my math knowledge?

    ReplyDelete
    Replies
    1. The Introduction to Computer Science courses on this list are not really math-intensive. Actually, in the first lecture of the Stanford Programming Abstractions course (listed in the Introductory section), the professor addresses your question explicitly, and argues that you should be able to jump right into the course without any advanced mathematics. Worst case scenario for the intro courses is that you might have to look some things up here and there, but even just basic wikipedia-based refreshers should bring you up to speed if necessary.

      Delete
  9. There are about five other algorithm courses on Coursera by Tim Roughgarden and Robert Sedgewick that should definitely be on this list.

    ReplyDelete
  10. This is Great !
    I think may be we need a wiki for this !
    there are lots of people plan for online study and they don't know where to start and what to read.
    I think curriculum like this is essential

    ReplyDelete
    Replies
    1. Thanks! A wiki would be pretty cool. There have to be some out there already. Here's one on reddit: http://www.reddit.com/r/programming/wiki/faq

      Delete
  11. This comment has been removed by a blog administrator.

    ReplyDelete
  12. Excellent Post. I think this should be added on github in the awesome-awesomeness list...

    ReplyDelete
    Replies
    1. Thanks Jomit, I was not aware of the awesome-awesomeness list. Great resource.

      Delete
  13. Hi thanks for the great list!. I would like to make one correction though.

    Its IIT Kanpur, not ITT Kanpur.

    ReplyDelete
    Replies
    1. Hello, thanks! Will update the post with the correction.

      Delete
  14. This is really great, thank you so much for this.

    ReplyDelete
  15. In the first post there were choices between courses of the same nature. Is there a reason for not including that info in this post?

    Thanks a lot by the way, I've been looking for something like this for weeks.

    ReplyDelete
  16. this is amazing! thank you so much! :)

    ReplyDelete
  17. i am currently pursuing bachelor in engineering in electronics & communication but have interest in software field.After learning many courses from the above mentioned,is applying for software company help me like in google,facebook etc

    ReplyDelete
    Replies
    1. It depends on what job you want. I work for Google and have absolutely no computer science education.

      Delete
  18. Khan Academy has also just put up a great course on Algorithms go go with their already great courses on Cryptography and Information theory.

    ReplyDelete
  19. A couple of questions... is this for the person to get their feet wet and decide whether to persue a career in computers? If I follow through with these courses, will I then need to go to university? Will this set of links give me the skills I need to get started?

    ReplyDelete
    Replies
    1. Hey Jason, that's a hard question to answer. There is much more on this list than would be required for any specific college level computer science curriculum. If you want to jump in and see if you like it, you might try just working through one of the introductory courses and see if you are interested enough to keep going after that.

      Delete
  20. This comment has been removed by the author.

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. Hi Jose, that is quite ambitious! I've completed about 5 courses in just over a year and a half, plus countless one-off tutorials. You might also want to check out a previous post we had on how to create a simple learning time-table for absolute beginners: http://blog.agupieware.com/2013/12/online-learning-teach-yourself-python.html

      Delete
  21. I love the article, but part of me wonders how well this might compare to a programming instruction book. My background is in engineering but I've always found programming fascinating. However, when learning, I always felt like I needed my hand held, so I wonder if a programming python, etc, for dummies book would work better for me. Alternatively, I am aware of a paid learning sites that asks for a monthly fee, but they sequentially guide you through web development and some programming. I suppose I just feel overwhelmed even starting back up with the free college courses. There's a LOT of lectures, notes, and quizzes to go through, so I'm wondering if there's a faster way since I do have a basic background in programming.

    ReplyDelete
    Replies
    1. There are a ton of great, free, intro Python tutorials out there. See:
      http://blog.agupieware.com/2014/01/50-python-resources-for-beginner-and.html

      You might also be interested in checking out a previous post of ours that lays out a learning time table for an intro programming course from MIT that uses Python as its language of choice:
      http://blog.agupieware.com/2013/12/online-learning-teach-yourself-python.html

      Delete
  22. Hello Admin!
    Thanks for this great list.
    Well the link to Theory of Computation: IIT Kanpur is broken.
    Youtube videos are not available.
    I believe this link will work fine: http://nptel.ac.in/courses/106104028/

    ReplyDelete
  23. Question for you Madmin. First off thanks for your hard work on compiling all these courses. I have a bachelors in a unrelated field to computer science and recently have become very interested in computer programming. In your opinion, would completing your curriculum suffice on a resume when applying for IT jobs, or would one have to go back to college for a "formal" bachelors in CS to get hired?

    ReplyDelete
    Replies
    1. hmmm, that's hard for me to say. But from job listings I've looked at, you will often find employers who are looking for people with a bachelor's in computer science or equivalent experience. In my own experience, after working through only about 2 of the courses on this list I was already able to do things that made me much more competitive in my own field (which is not directly tech or computer science related).

      Delete
  24. Hey Madmin,
    Thanks for all the work you did compiling these.
    I was just wondering, after completing these courses will I actually have a bachelor's level knowledge of computer science? I'm only 13, and I'm a fanatic programmer.

    ReplyDelete
    Replies
    1. Hey anon, good on you! I would argue that, since pretty much all of these courses are bachelors' level courses from accredited universities and colleges, you would be pretty darn close. I'm tempted to argue that someone studying on their own might end up with more knowledge/experience than someone who studied it formally in school just because they had to major in something to get a degree.

      However, the thing you can't get from doing these courses online is the face-to-face academic community (including professors, fellow students, teachers' assistants, advisers and so on) you would have on an actual campus. That kind of interaction provides vital feedback in the learning process.

      But, at the same time, this can also be compensated for somewhat by participating in local meetups, talks, lectures and so on, participating in forums where such people congregate online, contributing to open source projects and other things of that nature.

      Delete
  25. Thanks for this; this is really goo.

    ReplyDelete
  26. I've always wanted to get into software development and your compilation just gave me the means & motivation to do it. So thank you!

    Quick question though, I can see that for some categories there seem to be similar courses (ex. Intro to Computer Science has 3 seemingly similar courses but from different institutions). Should I do all of them or just pick one?

    ReplyDelete
    Replies
    1. I'd say watch the first lecture of each of them, and then decide from there which one you want to do. The first lecture in a given course almost always provides a really good overview. You might find you like one professor more than another, or have more interest in one of the languages they use in one rather than than another, or more interest in topics they'll focus on in one rather than another. Conceptually, the intro courses cover much the same material: the basics! Personally, I did the MIT intro course first because I was interested in Python. It was fun and I learned a ton.

      Delete
  27. Thank you so very much for compiling this wonderful list!

    I have only one question really. Would it be okay to go through every course you have provided from top to bottom? By this I mean to ask would it be a good idea to go through MIT, then Harvard, then Stanford, back to MIT, etc? I feel that learning from multiple universities (also experiencing multiple languages) would give me a wide array to work with. Would it be better to try to stick to one source per category/topic or just go through all of them? I thank you in advance for your answer; I simply feel as though I might head the wrong way with going through all of the courses, but it could also be beneficial. Please respond whenever you can! Thanks!

    ReplyDelete
    Replies
    1. I'd say take it one at a time. There is A LOT OF MATERIAL! It would take years to go through all these courses. My own recommendation is to watch the first lecture from each of the intro courses you are thinking about, and then decide which one appeals to you the most, and then do it. After that, you'll have a better idea what you'd like to do next. I started with the MIT Intro course, then did a data structures course, then algorithms, web dev, and programming paradigms, as well as a networking and crypto course.

      Delete
  28. Hello,
    I want to know for the Intro course of MIT, how many lectures are there?

    ReplyDelete
    Replies
    1. You are in luck, as we have previously published a post detailing a time table for the completion of that precise course:
      http://blog.agupieware.com/2013/12/online-learning-teach-yourself-python.html

      Delete
  29. Fantastic post my friend. I am quite ecstatic to have found this extremely valuable Info.

    ReplyDelete
  30. Great post. Is there a similar curriculum available for learning computer engineering? Thanks.

    ReplyDelete
  31. Now a days online learning has been very popular to the people because it's very much easy to learn anything on any topic. So I think day by day it will increase a lot and more people will come to learn more online courses for sure. Thanks a lot!

    ReplyDelete
  32. This is awesome! Thank you!

    ReplyDelete
  33. This is awesome! Thank you so much!

    ReplyDelete
  34. I already have a Post Graduate Diploma in Computer Science, I wish to know if there are certifying bodies willing to access my knowledge in computer science, and thereafter give me a Bachelors degree.

    ReplyDelete
  35. 9999999999999999999999999999999999999*999999999999999999999999999999999999=thanks

    ReplyDelete
  36. Cant thank you enough

    ReplyDelete
  37. Thanks for keeping track! Would there be an update on this list? :)

    ReplyDelete
  38. This is a really awesome post! Georgia Tech also offers many of its graduate level comp sci courses for free on Udacity: https://www.udacity.com/courses/georgia-tech-masters-in-cs
    Udacity also has a ton of free courses, some of which are are university level computer science courses that could be added to this list, and some of which are courses for specific practical skills/technologies for career advancement.

    ReplyDelete
  39. Hello Madmin,

    Can we please add "pick two of three:" or "pick two of two:" etc in course schedule and also mention what is optional?

    Thanks
    Sal

    ReplyDelete
  40. Hello Madmin,
    I wanted to know if we are supposed to take the original course first and then do this or do this course instead of the previous one.

    ReplyDelete
    Replies
    1. That is really up to you. There is overlap between both. This one contains more courses at an intermediate and an advanced level.

      Delete
  41. Are there curriculums like this for every subject?

    ReplyDelete
    Replies
    1. I wish! That is actually something I've been considering though, putting together a similar list for a different subject.

      Delete
  42. This list is pretty good but I think that level 0 needs to be addressed if you are learning yourself.

    I have tried without too much success to set up an IDE like Eclipse. Python is very difficult (for me at least) to get working. I'm a windows person, Unix doesn't have a lot of apps I need everyday.

    I tried to work with Eclipse for Python and it came back with a lot of Java stuff like ant build or other things.

    Git, some other things, would be nice to know about to start programming. I actually am finding Python not that easy to use since you don't get pyc files to actually run. The easiest one I found is Spyder which seems to be the easiest and most integrated for a starter.

    There are a lot of different IDEs but without an easy one for a lot of common languages it is a little hard to actually do anything productive.

    ReplyDelete
    Replies
    1. IDLE doesn't make it to learn what is on the curriculum.

      Delete
    2. Yes, I actually just saw a conference talk by an educator who brought up the issue that just getting a development environment up and running, and developing good work-flow habits, can be a significant hurdle for people. For some info on that, you might find some good tips in our list of Python resources for beginner and intermediate programmers:

      http://blog.agupieware.com/2014/01/50-python-resources-for-beginner-and.html

      In terms of IDEs, Jetbrains' PyCharm Community Edition is my favorite to work with. It is free, has tons of functionality, and has good supporting documentation for when you get stuck on something. I've worked with it a fair amount on a Windows machine, and it is fairly painless to set up and begin working with. Definitely worth checking out, imo:
      https://www.jetbrains.com/pycharm/download/

      Delete
    3. After another month or two I really have not made progress. Python's libraries seem vastly superior to any other language right now but the fact that Python is interpreted and you must have the interpreter running is a very big negative along with the need for an IDE for practical purposes. PyPy seems to have been discontinued.

      What I feel the need for is a self contained shell or VM to develop and run programs in that won't harm my computer as I learn. I don't get that from Unix. Maybe I am being unrealistic but this is the same issue I have had before. I took a C++ course at a community college years ago. The IDE was fine and it resulted in program I could run on any windows computer with compiled object code.

      To run a Python program you need the interpreter and a program which is a serious drawback.

      Delete
    4. What are you doing that you fear your Python programs might harm your computer? Do you mean doing weird things with the os or sys modules? Or do you mean your Python system files themselves? If the latter, you might consider checking out virtualenv to create project-specific Python interpreters. If the former, you could set up a Linux VM inside something like VirtualBox to completely separate it from your system, and run code you think might be harmful there. We have a post on how to set up a virtual machine inside VirtualBox here: http://blog.agupieware.com/2014/10/hack-lab-part-1-installing-kali-linux.html

      Delete
    5. Well I am not trying to do weird things but I'd like to be able to do things with files and directories I forget what the package is called shutil? Linux is not what I am interested in at all, it has a learning curve I don't want to get into while I try to learn Python. Yes life would be a lot easier if I already knew what I wanted to learn and didn't have to do it. I'm using all Windows PCs.

      If I ever do finish the course then Operating Systems is probably the next thing I'd like to try.

      Delete
    6. Ah, yes, it would indeed be possible to inadvertently/mistakenly remove the wrong directory tree with shutil if you weren't being careful. If you have a disc or copy of the Windows OS you could install that on a virtual machine and go to town.

      But if you don't want to bother with virtualization, another potential solution for you might be to create a separate user account on your current Windows machine, and restrict that user's privileges so that it can't do things like delete important directories from your main/admin account, and then only play around with those python modules under that user.

      If you're interested in operating systems and doing things with files and directories, you should definitely check out the os module, tons of interesting and helpful stuff in there.

      Delete
  43. excellent thanks a lot .........

    ReplyDelete
  44. Hi Madmin,

    I completed MIT 6.00sc and am not sure what to try next. Your original post on this suggested taking 2 intro classes but this updated post doesn't. Do you still recommend that? If not, what is a good followup class to take? I tried to start MIT 6.006 Alogrithms but I looked at the first problem set and realized I was probably in over my head. Thanks!

    ReplyDelete
    Replies
    1. haha, I know exactly what you are talking about! The same thing happened to me with the algorithms course, I returned to it about a year later, and still haven't completed it!

      I found the "Introduction to Data Structures and Algorithms: UNSW" much more easy to digest. And here are two other algorithms courses that I found easier to jump into (the first one is much more theoretically oriented, while the second is a bit more practical, and I think both are from UC Davis):

      https://www.youtube.com/watch?v=kqt-mfcm-FM&list=PL6EF0274BD849A7D5

      https://www.youtube.com/watch?v=gwlevtaC-u0&list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm

      As an alternative to algorithms, you might also check out the Stanford "Programming Paradigms" class, I learned a lot from that one.

      Hope that helps! Let us know how it goes!

      Delete
  45. we are doing cources from many univercities will the programing languages,etc collide or not
    and we have to do all the cources and how much time will it take.
    why we didn't add harvard cs50

    ReplyDelete
  46. we can also add mitx 6.00.2x
    i have question what can i do if i donot know the calculus,probablity,or othe mathematics used in computer science
    plz reply

    ReplyDelete
  47. Hi. Thanks for this - this is such a great resource. Any update on your progress so far (issues, tips, advice)?

    I would also recommend this site https://metacademy.org/roadmaps/rgrosse/learn_on_your_own

    and this one for metacognition ('learning how to learn'): https://www.class-central.com/report/coursera-learning-how-to-learn/

    Also, for a great intro to low-level hardware, systems and low-level languages, many people recommend the well known "Nand2Tetris" Course (available here http://nand2tetris.org and on Coursera).

    ReplyDelete
  48. Hi! I'm from Brazil and I want to thank you VERY MUCH for this. That's EXACTLY what I need! Thank you very much!!! Hope the best for you!

    ReplyDelete
  49. are we suppossed to do every class from every category or pick one class in each category?

    ReplyDelete
    Replies
    1. There is no set path. Pick and choose what interests you most, starting from the beginning.

      Delete
  50. Hey Madmin,
    I want to start of saying that I really respect what you have done heere. Thanks a lot for it.

    I wanted to ask, say I loved a course(eg CS50 - The introductory course at Harvard) so should I find similar courses on Harvard or rather just stick to the ones listed here?

    ReplyDelete
    Replies
    1. I would recommend picking out a few different courses that interest you, then watching the introductory lecture for each one. The intro lectures provide good overviews of the course materials, and topics. Then after watching the intro lectures, dive in to the one you found most interesting. The listings are really only a guide, aimed at demonstrating the wealth of options available to you online.

      Delete
  51. Hey Madmin,
    I am a nursing student. However, I love gadgets and anything that has to do with Computers.

    i would love to try your "course syllabus" but i have concerns because i dont know where to begin. i have no background in any CS related course. no solid maths background either.

    i want some advice from you on which courses should i start with? should i start with maths? on intro.to CS?

    Please help!

    ReplyDelete
  52. Hey Madmin,
    I am a nursing student. However, I love gadgets and anything that has to do with Computers.

    i would love to try your "course syllabus" but i have concerns because i dont know where to begin. i have no background in any CS related course. no solid maths background either.

    i want some advice from you on which courses should i start with? should i start with maths? on intro.to CS?

    Please help!

    ReplyDelete
    Replies
    1. I would recommend starting with the MIT intro to computer science course. It is not math intensive (a lot of people think you have to know a lot of intensive math to do basic programming, but that is just not true). I started with the MIT programming course, coming from a language pedagogy background, and it was great! We have a couple other posts with tips on working through that course in particular as well. See:

      http://blog.agupieware.com/2013/12/online-learning-teach-yourself-python.html
      http://blog.agupieware.com/2014/01/benchmarks-teach-yourself-python-in.html
      http://blog.agupieware.com/2014/01/50-python-resources-for-beginner-and.html

      Delete
  53. Great job, but I have a question: in the first post you told us how many of each to pick and do, so how many do I choose now?

    ReplyDelete
  54. Hello Sir , i really appreciate the hard work and efforts that you have put in to combine this intensive list. I would like to request that if possible please compile a similar list of particular institutions like MIT or Stanford or Harvard that covers their entire curriculum in linear order.
    Thank You

    ReplyDelete
  55. Excellent post!

    I have a question though, are all the courses in order ? (Should I start watching the courses as listed) since I would like to know if some introductory courses need prerequisites which are also in the introductory courses section... ( if that makes sense ! :) )

    ReplyDelete
  56. Can not thank you enough! best wishes!

    ReplyDelete
  57. Nice Post.Thanks for sharing this information.

    ReplyDelete
  58. I really liked your post.Thanks Again

    ReplyDelete
  59. Hi, when was this post last updated? Looking forward to your reply in 2019 haha, cheers.

    ReplyDelete
  60. Introduction to Computer Science and Programming Methodology: Stanford course does not work

    ReplyDelete
    Replies
    1. We've updated all the links. Let us know if we missed any.

      Delete
  61. We agree! That's why we removed all the spam comments (a ton of work). We hope this will make for a better experience.

    ReplyDelete
  62. thanks for your effort and sharing this wonderful post.

    ReplyDelete