Seven Languages in Seven Weeks
More like Seven Languages in Seven Months! :D I started out on this course with the best of intentions but after about 3 weeks, things began to slow down. Nevertheless, I've been determined to finish it, or at least put as much effort in as I could. Pleased to say I've reached the end. In a nutshell, I'd recommend this course to any budding programmer or seasoned veteran. It's not without it's faults but it's a great intro.
I've been thinking that the C/C++ style of programming is great for many things, but not all. I think, given the way things are going, languages like Ruby and Python are solving real problems now, but there is a great area of, what I consider at least, hard-core computer science problems that are best suited to more functional languages. It's a real gap in my knowledge because I find such things really hard. However, that means it's an area I need to dive right into.
Seven Languages in Seven Weeks is a book by Bruce Tate and it covers the following languages: Ruby, IO, Prolog, Clojure, Scala, Erlang and Haskell. There are a good few hipster languages in there for sure! :) But if you drink some serious tea and not the cool-aid you'll find some things you really like.
I started off with a group of 3 others and that really helped keep things going. I do recommend doing this with other people if you can. It really helps with figuring out the problems and discussing the various approaches. For the last 4 languages though, I worked on my own, largely because time pressures meant most of the group had to stop.
Ruby I've found to be no real advantage over Python. I think Python has more merit and Ruby is only really popular due to its Rails connection. But the holy wars are raging over this topic, so suffice it to say that if you know Python I wouldn't bother with Ruby (though I wouldn't necessarily say vice-versa as Python has its fangs into many different side-lines).
Io is really cute and has some nice features to do with concurrency, I thought. Is it actually really useful in the real world? Probably not. It feels like a toy which is a shame because it has good documentation and is nice and simple. Not much more to say about it really. Do have a look.
Prolog gives me the fear and always did. I remember trying to learn this language at university and found it really hard, but I can really see the wisdom in it. You can solve so many problems very elegantly but like all functional languages, it suffers from making the simple, everyday stuff really hard. Just try reading from a file and you'll see what I mean! I wish I was much better at it, but my neurons will need some more plasticity I think, before I can manage to un-learn what I've learned.
Scala has an odd syntax and an awful lot of little rules here and there and some odd constructions but I think if you are tied to the Java Virtual machine, it could be better than standard Java for a variety of tasks I think. Initially I was quite drawn to it, but then I have no need to use Java libs or the JVM so it's ultimately not what I'd choose.
Erlang on the other-hand, shows some really promise! It's battle tested, has some cool functional aspects whilst not being that hard to learn. It is designed with crashing in mind and recovers quite well from having bits of it stopped and started. Its compiled which is nice and has some great concurrency features. Of all the languages, I liked this one the most I think and I have a project in mind.
Clojure is basically Lisp on the JVM which sounds like the worst of two worlds. It really isn't though which was a massive surprise. Its actually better than both and as much as I'd like to hate it, it's not that bad at all. I think there are some people out there who use it with OpenGL and other graphics which I can kind-of see. Yet again, I have no need of the JVM but it's not a bad language at all. I was surprised!
Haskell! Ah yes, the hipster language of choice ;) That said, I can remember very smart students at Leeds University being really into Haskell and I just wasn't. I find this language really hard, in the same way I struggle with Prolog. However, it feels like I can get a little more traction with this language, unlike Prolog. I'd like to find a good project for this - perhaps generative opengl or live coding? I think Haskell is the language to use for pure functional programming and I'd like to take it further.
The last four languages, I think I took more time over them but actually ended up finishing fewer of the questions as they really began to tax me and there were many other pressures. The thing to bear in mind is this course is basically an intro to all these languages and you can decide which ones to take further. For me it's basically Erlang and Haskell. I have ideas for both and there are some great books out there as well.
I'd like to put in a mention for Go as well. I've been learning Go at the same time and I've already used it in one professional project. I like it a lot and so do other people. These are my top three languages to learn for the coming year.