Some time ago, (when I quit the university) a friend of mine recommend me Udacity. For the ones who don't know what Udacity is: Udacity it's a MOOC (Massive Open Online Course). And it's awesome. They have a lot of different courses and different levels. Just for mention some of the courses:

  • Level 1: Introduction to Computer Science, Introduction to Statistics, Introduction to Programming in Java...
  • Level 2: Algorithms, Web development, HTML5 Game Development, Software Testing, Introduction to Artificial Intelligence, Theoretical Computer Science...
  • Level 3: Design of Computer Programs, Applied Cryptography, Functional Hardware Validation...

I've done one course, the HTML5 Game Development and it was AMAZING! I've learned a lot. Now I'm half the way in the course of Programming Languages, and it is getting cooler and cooler.

I have some advice for you though if you are planning to do some of the courses.

[Advice]

First of all: the rating of the courses is there for SOMETHING! I mean, I've been programming in JavaScript for about two years and sometimes the HTML5 Game Development (rated at intermediate difficulty) course was really hard. Not because they are using difficult programming patterns, but because they make extensive use of big data structures, linked with another even bigger auto-generated data structures, and mashing everything together sometimes (~~most of the times~~) is confusing and hard to have keep in mind. And it would be nearly impossible to understand if you don't have a more-than-basic knowledge about how JavaScript works, and you have some real experience. The other "downside" of the course was the debugging. They give you a nice web-based framework for answering the quizzes, and they have a lot of exercises prepared for you. But sometimes is confusing  on how to debug, or having indecipherable error messages. I recommend you to make extensive use of Development Tools in Chrome or use Firebug is you are using Firefox. Make extensive use of "console.log('foo');" in you code!

Again, about the difficulty of the course: you must be prepared to face problems you don't know how to solve, or that will take you a lot of time to solve. You have help in the forums, use them. Sometimes the questions they are making to you are NOT CLEAR. That's a problem and you will have to guess. Sometimes you don't really know why your code still breaks: Push harder. Spend more hours. At the end of the day, if you put apart all the frustration, it really worth it and you will learn tons of new things.

In the course of Programming Languages are teaching in how to create you own Language (how cool is that?! :D). It's awesome. The videos and quizzes are really easy to understand, but then the exercises are really really hard. For example in this course they make intensive use of recursivity. And the hard one! Returning different data types, using list for appending the results, etc... You must know how recursivity works before taking the course. Well, or... if you are very brave, you can maybe learn it during the course but again: it can be very hard. Take the first courses, and then try to do a higher level course.

Not all the courses are the same. I've just done one and a half course, but they are REALLY different in all the possible ways: the number of videos, the difficulty of the quizzes, the way you test your code, the difficulty of the exercises, everything. It's not better, is not worse, its just different. With that said, if you take a course and you give up, please, try to find another course you could like and give it a try. It will be completely different and maybe you like it more than the first one.

[Practice]

After taking the course you have a BASIC understanding about the subject. I mean, you have learned A LOT. At the end of the HTML5 Game Development course I would be able to do a game. And it is important to do so. Because you have everything fresh in you mind and you need to practice all this new knowledge.  Try to copy another game, try to create you own game, or whatever but: do it!

[Delirium]

About the previous experience you need before taking any course I don't know what to say. I haven't taken any of the basic (level 1) courses but I'm sure it is a good way to start.

But this time I want to emphasize the importance of have "played" with other projects, tried to solve problems, etc. In my case, I now realize the importance of having solved some problems in Project Euler  (for the ones who don't know, please check the page).  Solving mathematical challenges like the ones on Project Euler can seem a little bit "unuseful" in the real life. But this has been one of the things I've really now I appreciate to have done. The experience I already have give me  the confidence for being able to take the Udacity courses and keep pushing when it seems impossible to solve the problem. I'm really glad about that and it gives you double satisfaction when you finally solve the problem.

With all of this the message I want to transmit is that: do things you like, related on the field you like. Even if they seem to be useless. If you are having fun, do it. And maybe, after some time, you will say: gosh! I'm using the knowledge and the skills I learned a few years ago doing Foo Bar!!

Anyway, This post it getting too long. Again: I fully recommend you to take as many Udacity Courses as you want, because it is fun, you'll learn a lot of new stuff, and it is something it can help you in the future.

Take care, Jan.