Computer Science self-study guide
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:
- Google’s Python class
- MIT Intro to Programming in Java
- Codeacademy (Python and Java)
- Treehouse (C#, Java, and Python)
- Coursera and Udacity (Python)
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):
- Stanford University – Introduction to Robotics
- Stanford University – Natural Language Processing
- Stanford University – Machine Learning
* 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. Subscribe to the email list to the right to get updates on my own projects and new blog posts.
Have a happy New Year, and watch out for your fingers, they are essential to get use of this study guide!
Post a Comment