In a past post I shared how I decided to start learning how to code, motivated by the advice of friends working in the field. Once that was settled, the next step was to do some research as of the means to start learning. Pretty soon I found out about MOOCs and other great resources like The Odin Project. However, I was looking for something “more structured”. I wanted, as much as it was available and possible for me, to get the equivalent of a computer science degree without having to go to university. That’s how I tumbled upon self-learning computer science curricula.
University level education, all available online?
Is it possible to learn from books and (mostly) free online resources, just by yourself, the same things you would by getting a degree at some of the best universities? I believe you can get pretty close to it (and I’m referring to computer science degrees).
Now, I can’t make that assertion from my own experience nor anyone that I know of personally. So it’s only a belief, like I said, but I’d like to add some basis to it.
First, I did earn a degree in environmental engineering and it did occur to me that if it wasn’t for some projects, almost all of the things I had learned about could be found in books. Oftentimes, the content of books was even better structured and easier to follow than the one given during courses (but on the other hand I also had some great professors that made the material a lot easier to understand and far more complete than any single book).
Second, I have had a bit of experience studying by myself. I mean that sometimes, instead of going to classes, I would just study on my own from books or whatever resource I could get. To be fair though, I don’t believe that I could have done it for all of my classes, at least it would have taken me longer than just attending to the classes. I also wouldn’t have known where to get the resources from nor how to select the material to study.
The difficulties of self-learning
I don’t want to demean university education by saying that you can get the same just by studying from books and other resources. Even if this was true, it’s not an easy task. I can think of two main difficulties.
Discipline and consistency
As much as I hated the stress of exams and, what seemed, unreasonable project deadlines, I don’t see myself learning as much as I did while I was at the university without those constraints. We can criticize academic education and I’m sure it can be improved in many ways, but it also has its great achievements.
Being, we could say, forced to attend to classes, study and practice through projects. With a group of people with similar objectives. With the guidance of a professor both knowledgeable and experienced in the subject. And at your disposal, books, academic papers, hardware and the university’s resources. Yes, it can be hateful. But it’s also a great, great environment to learn.
University can be quite demanding and it requires discipline. But doing it by yourself, without the structure provided by an university for learning, is harder; requiring even more discipline and commitment.
A curriculum
I said before that after finishing my studies at the university, I felt that most of it could be found in books. OK. But that’s like saying you know the way out of a maze… after having been guided out of it. If I had wanted to study on my own, without going to university, I really wouldn’t have known which books to choose. Not even which subjects. And even having a list of books, which parts of them would I need to study?
Those were some of the difficulties I faced having decided to learn coding. The first one, discipline, was a personal matter. For the second one, a curriculum, I found some great resources online.
Online computer science curriculum
Fortunately, some amazing groups of people (even individuals) have created lists of learning resources for those who would like to learn computer science without having to go to university. Here is the list of the best I’ve found.
Teach yourself computer science
This is one of my favorite resources because of its conciseness. It divides the body of knowledge in a few key areas and proposes both a book and an online course for all of them. An order to tackle on the subjects is even proposed.
This was the first content of this type that I personally found. I found it so well done and it suited so well my goals that I felt a lot of gratitude. As far as I know, it’s the work of a couple of great CS teachers (Oz Nova and Myles Byrne). Many thanks to them.
Open Source Society University
https://github.com/ossu/computer-science
I also like this one a lot because of the completeness of its structure. I also appreciate a lot what I feel is the philosophy behind this project, which is derived from the world of open source.
They propose projects to complete to get the practical part of what would be a CS degree. And you can even submit them for evaluation! (I don’t know how that works though). Lots of kudos for all of the people behind this great project.
A Self-Learning, Modern Computer Science Curriculum
https://functionalcs.github.io/curriculum/
This is the most mathematically oriented curriculum. It proposes many “purely mathematics” subjects. For those who want to get a sharp mathematical edge.
Obtaining a Thorough CS Background Online
https://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/
This one is a bit dated but the structure of the courses is still completely valid. It also offers an estimated time duration fort the different resources. It’s a good reference to compare and complement the other ones.
What every computer science major should know
http://matt.might.net/articles/what-cs-majors-should-know/
This one is a great outline of a CS degree. You will not find many online resources proposed but there are recommended readings for the different subjects, which are described in detail. It’s backed by the knowledge and experience of a CS professor – its author, Matt Might. I highly recommend checking out his site.
How to Learn Computer Science? (from Zero to Hero)
https://www.afternerd.com/blog/learn-computer-science/
Although less expansive than the other ones, you can find many good insights in this post. It proposes different phases towards becoming a software engineer and proposes both books and online resources for different knowledge areas. Besides this post, I highly recommend checking out Karim Elghamrawy’s blog.
Computer Science and Programming – Version 4.0
https://github.com/P1xt/p1xt-guides
The last resource that I have for sharing. It offers still another variation of many different resource divided into courses, reading materials and practice materials. Besides that, you will also find “specializations” to focus in some areas (just like you would do in university).
As far as I know, it’s the work of a single person (P1xt) who compiled it just out of her own good will. Many thanks indeed!
Those are the best online CS curriculums that I’ve found. You will find many, many great resources listed in them. Then it’s just a matter of choosing what’s best suited for you. On later posts I will share my own experience with some of this resources.
Enjoy learning!
PS: To see some comments on the subject, you can see this post on reddit.
Thanks for your sharing. Good article for non CS background developer.