Challenge Accepted: Learn a bunch of new programming languages

I'm giving myself a challenge

Over the next year (and hopefully in less time than that) I'm going to teach myself at least 4 new programming languages. "That shouldn't be too hard", I say to myself confidently. After all, I already know the basics of programming, and generally feel like I have a good handle on it. I guess the question that most people ask themselves right about now is why. Why would I want to learn this many new languages? Do I have something big that I'm working in that requires this new knowledge? No, not really. Of course, I have ideas for some small side projects tucked away that I could make in these new languages. But there's certainly no requirement. If I wanted I could probably create all of them in C, Objective-C or Java, my best languages (or yes maybe scheme if I could remember how to do complicated things in it). Am I preparing for a job or to search for a new job? Nope. I've just started a job and I'm happy where I am. I actually just learned two new languages on the job, so that was cool. "Alright then, tell me the reason."

Because I think it's important to never stop learning. I've always been a curious person, or at least I'd like to think so. I was the type of kid that took all his toys apart to see what was going on inside them. And being so curious, I can't help but wonder what other programming languages and other technologies are like. It's a bit of a circular dependency. I'm curious because I think it's important to always learn new things, and I always want to learn new things because I'm curious. But I digress.

On of my main goals when picking languages to learn has to do with the web. I've never built anything for the web other than some static HTML pages. The way the world is going, at some point I'm going to have to learn how to write web apps, it's just a fact of life. I also haven't spent much time doing functional programming. When I learned Scheme and FP in college I really disliked it. I was an object oriented programmer through and through when I first started, but now I'm starting to see merit in other approaches. And finally, my favorite part of learning a new language is learning about the design patterns that go along or play nicely with that language. I didn't know anything about MVC before I taught myself Objective-C, but I consider myself a better programmer for having learned it. There are lots of interesting patterns out there, and I'm excited to dig into them as I learn these new languages.

In no particular order, here are the languages I think I'd like to to learn.

  • Ruby: this ties in a lot with the web requirement, but is also a great scripting language that I tend to see all over the place now.
  • JavaScript: if you want to develop for the web you're going to need to know JS, so I'd better pick this up.
  • PHP: I would consider PHP one of the lingua francas of the web. It's been around forever and it's likely to stick around too
  • Haskell: I hesitate putting this on here because it's so far out of left field from what I normally do. Haskell probably will give me the most things to learn though, so I think it's a good choice.
  • Any and a bunch of the frameworks built on top of JavaScript: there are a lot of great frameworks out there like Angular and Ember that can do some interesting things on top of JS. And of course there's jQuery
  • Hack: after learning PHP I think it would be interesting to learn about Facebook's new language as well. If it takes away some of the messiness of PHP I bet it would be useful
  • Go: with the promise of "C done right" who could stay away? I'm not a great C programmer, but I might be a good one. If Go really takes off it would be an awesome thing to know.
  • Rust: I'm not sure what rust is really for, but it sounds cool