Learning a language after CFML

I have been using CFML professionally for three or so years now and I can honestly say I’m pretty comfortable and probably pretty skilled when using it. I’m not saying that I have nothing else to learn, but just that I at least know what I’m doing. Other languages I’ve used with include Java, Ruby, C, and C#.

But of the above languages, CFML is really the only one that I know extremely well. Java, C, and C# I “learned” in college and Ruby (or maybe more just Rails) is something I taught myself for my final capstone project in school. CFML is the only one I’ve used professionally. So suffice to say I’m no software development guru. Because of this I’ve decided that I wanted to take a stab at actually learning a new language. I want to learn a language in the effort to broaden my knowledge, make myself a better programmer, and become a more marketable programmer.

CFML is something of an odd language (keep in my that it is a language that I love). Its syntax is a bit odd in that it is tag based, has some odd datatypes (is a list a string or a datatype?), and is really just different from any other language that I’ve seen. Because of that it seems prudent for me to learn a new language. Learning any additional programming languages is good, but I want to learn something that will really stretch me and force me to think differently that I do with CFML.

There are a few options that I thought of.

  1. Java - While it is very different and very popular, Java’s syntax is just too verbose for me. Plus, I’ve already used some Java while I was in college so I feel I have at least of little understanding of it. I’m really looking for something knew though.
  2. Ruby - While it is different from CFML, there are really a lot of similarities in my mind since it is also a dynamically typed language. In my opinion, learning the syntax would be the hardest part…something I REALLY struggled with while experimenting with it in college.
  3. Groovy - Groovy seems really intriguing. I like the syntax and that it is dynamically typed. It seems to have a lot of cool features and seems to fit perfectly in the web realm. But, I still want something to push me a little harder I think. This might be a language to learn though.
  4. Scala - A very interesting language. An object oriented functional language. It reminds me somewhat of Javascript in its functional aspects. It is statically typed but using something called “type inferencing” allows you to leave off a lot of the type annotations that you’d have to include in Java. It almost seems like a hybrid dynamically typed / statically type language.

Overall, Scala seems like a language that would teach me a lot. I’ve not really done much with statically typed languages and it definitely would be difficult to get used to. And it seems to have so many more types than CFML. Array, List, Int, String, Map, Set, HashMap, etc. Then there is the whole subject a mutability. Some types are mutable, some are immutable. There is really a lot different with it.

Regardless though of how well I learn it, I think it will be a great experience and can only make me a better programmer. I think the most difficult part in this will be figuring out how to go about learning the new language. Since the language would have to be learned in my spare time outside of work, the trick will be coming up with fun/interesting projects to use the language in.

Any ideas? What are some ways you go about learning new languages?