I’ve recently decided to try to learn myself a few new languages, concepts, paradigms, etc. My reasoning behind this is as follows. The more paradigms, concepts, etc. you’re familiar with, the better solutions you’ll be able to produce.
And, since simple reasonable projects are usually rather hard to think of, I’ve decided to start writing short simple projects, or solutions to common problems, that’s suitable to what I’m trying to learn.
Examples of this would be, DSLs in Ruby, sort or search algorithm in Scala, error handling in Erlang, or working with a graph database, such as Neo4j. And, the focus would be on the concept or algorithm, the idiomatic way of working with the language, or just to simply refine my knowledge of the domain at hand.
Also, introducing new a perspective or way of thinking, e.g. functional vs. object-oriented programming, is always good. And, it’ll keep things fun and interesting.