Computer Science self-study guide

Note: If you are interested in self-studying Computer Science, I recommend you to try out either Teach Yourself Computer Science (if you want to cover the basics of CS) or the Open Source Society University Curriculum (if you plan to spend a lot of time learning CS).

Interested in becoming a web developer? Check out Free Code Camp

Follow me on Twitter, or follow the blog through RSS (or Instapaper), for more updates on my progress on self-studying Computer Science

 

As we are on our way to 2016, it is a great time to lay some plans for which computer science topics to study in the upcoming year.

This is a self-study guide to the field of Computer Science, designed as an overview of the courses you can take to improve your knowledge, without having to spend thousands of dollars to go to a real university. You can bookmark the site, and use it as your personal curriculum, or use it as inspiration if you are planning on learning just one or two subjects.

It is built chronologically, so if you are just starting out, you should look at the top, and if you have a solid understanding of programming and want to add some extra to your knowledge, you should look at the button.

I myself will be studying some math, algorithms, and Artificial Intelligence, as well as working on the blog, contributing to some open source projects, getting my Android App out of beta, and making a Kerbal Space Program control panel.

This blog post will be updated, with more detail as I try out the courses myself, and find new courses

The beginning

When you start to learn programming, it might all seem overwhelming. You have thousands of websites to choose from. Do you want to start by using visual programming languages like Scratch, or should you learn written languages like Python, C++, C, or Java? Should you take courses teaching you a specific language? Or should you take general Computer Science courses? Let us start by looking at the question of going visual.

To go visual, or not to go visual?

In your search for a place to start, you have probably come across a language called Scratch, which was created by MIT back 2002, as a way to easily learn programming without getting confused by all the syntax in the text based languages. Since then many others have come, and code.org, the side behind the Hour of Code is using Scratch in many of their Crash Courses to programming.

Going visual can be a very good way of getting started programming as you get a much better overview of what you are doing, but it is very much down to personal taste. I have always had a difficult time with visual programming languages. Back when I started, I tried out Scratch, but I found Python just as easy to learn, but giving me many more options.

But you might find it easier to learn a visual language than a written one. Many of my friends have found visual languages more compelling to them. I would recommend to try out something from both worlds, and finding out what works for you. To try out visual programming, I would recommend you to try out some of code.org’s basic Computer Science courses. To try out text programming, I would recommend trying out a few lessons of Udacity’s Intro to Computer Science course (which I will also talk about later)

One thing to remember if you are starting out with visual programming: You will probably not be able to program visually forever, and the courses you will be able to find on text programming is in most cases better. But visual programming can be a very good place to take the first steps is you are feeling overwhelmed by the text languages.

Choosing which courses to start with

Back when I was 11 and started programming, I thought that the thing to do was start out with C++, so I went to the library and I rent the biggest book about C++ I could find and thought that it would be fine…
It was not. Generally speaking, it is not a good idea to rent a book about programming on your library, as they usually are more than 20 years old, and hopelessly outdated. But more importantly, the book I had chosen on the library was filled with programming terms they did not explain, and I did not understand, it was just a book about C++, not a book about how to program, and that is important to remember, even with online courses.

So the thing is that you should not do a course about a language, you should start off with a course about Computer Science in general. You could start off by taking a course, aimed at teaching you a specific language, but taking an introduction to computer science is essential to getting a good start to all of the terms, and theory in the world of programming.

If you have gone visual

If you have chosen to take your first steps in a visual language, I will recommend you to take UC Berkeley’s course: The Beauty and Joy of Computing (CS Principles). The course uses a programming language called Snap, which is based on Scratch.

If you have gone text based

If you have chosen to start out using a text based programming language, you should take Udacity’s Intro to Computer Science. I took a bit of it myself, because of the interesting goal, to build a Search Engine. It is great at explaining the basics of Computer Science, and the goal of building a search engine is a great motivator.

How to move on after the first steps

After learning the basics of Computer Science, you should move on to learning a couple of programming languages.

I would recommend you to start off by learning an object-oriented programming language (like C++, Java, and Python). There are many places you can do that, but the ones I can recommend are:

Other languages to learn

Depending on what you are planning to work with, do some research and figure out which languages you will need to learn, to do what you want to do, but I can give some advice from my own experiences. Many of these languages can be found on websites like Codeacademy, Coursera, Udacity, iTunes U and Treehouse

Web Development

* HTML and CSS
* JavaScript
* Ruby
* PHP
* SQL
* jQuery

Apple Devices

* Swift (Apple’s own programming language)
* Objective-C
* JavaScript

Android

* Java
* XML

As mentioned above, those are just my personal experiences, do your research on what you will need for what you will create.

Other computer science skills to pick up

Learning computer science is much more than just learning a bunch of languages, but the jungle of things to learn can be a bit overwhelming, therefore I have collected some of the things you should consider learning as well.

Testing your code

This one should explain itself, learning to make your code work.

* Udacity – Software Testing Methods
* Udacity – Software Debugging

Math…

There is no way around it, you should learn about some important topics in math.

There are many places to learn math online, these are only a few of them.

* MIT Mathematics for Computer Science
* Coursera – Introduction to Logic
* Coursera – Linear and Discrete Optimization
* Coursera – Probabilistic Graphical Models
* Coursera – Game Theory

Note: You might want to refresh on some high school mathematics, to which I highly recommend KhanAcademy, who provides almost everything you need to know on math from kindergarten to high school, and even some college math

Algorithms and data structures

As more and more data is coming to the world, a good understanding of algorithms and data structures is important to learn about.

* MIT Introduction to Algorithms
* Coursera – Introduction to Algorithms Part 1 & Part 2
* Wikipedia  – List of Algorithms
* Wikipedia – List of Data Structures
* Book: The Algorithm Design Manual

Collaboration

Learning how to work together on programming projects is one of the most important things to learn.

A good thing to start off with is to learn Git, Git is a revision control system, that allows people to work together on a project using the same files, and see revisions that have happened over time. You can learn Git many places including Codeacademy and Treehouse

After learning Git, you should learn using GitHub, which is like a Git cloud service. Begin contributing to other open-source projects and make your own. You will learn to read other people’s code, understand documentation, and be better at debugging.

The rest

These are courses I have found, and am planning to do, but have not tried out in detail yet.

Operating Systems: UC Berkeley Computer Science 162

UX Design: Udacity – UX Design for Mobile Developers

Artificial Intelligence (which is one of my personal favorites):

Programming languages:
* Coursera – Compilers
* Create your own programming language

Cryptography
* Coursera – Cryptography
* Udacity – Applied Cryptography

Parallel programming: Coursera – Heterogeneous Parrallel Programming

That it is for this time, if you found this study guide useful, please share it using the buttons to the left, or by telling your friends, family, and strangers about it.

Have a happy New Year, and watch out for your fingers, they are essential to get use of this study guide!