A while ago I have found an interview with Herb Sutter ( this one on channel 9 ) where he was talking about the upcoming C++ standard (C++0x or C++11). There was one sentence in that Interview, that didn't seem that much important, but I have found it very true and it constantly comes back in my mind: It's important to get exposed to other languages. (at 18:00 in the video)

And it really is important: If you keep sticking your head deeper and deeper into one single language, you tend to forget why you do things the way you do. But at the moment you switch languages, you have to start thinking again. What's the right way to express what you want to do? Doing that, makes you a better programmer (of course you should always do that in your native language, as well).

I just noticed this when I had to do some Java again. Java removes some features from C++, that allow you to do stupid stuff and adds some features that encourage you to do good stuff. You can learn from Java that maybe you shouldn't do everything you can do. Or take Python: Pythons standard libraries is once of the best I have seen. Everything is where you intuitively expect it to be. Also, in Python there are simple free functions that are not part of any class (but part of a package/module/namespace) and that happens to provide much of the simplicity of pythons standard library. You can learn from Python how good libraries should look like and that not everything is a class.

So, next time you have an itch and need to create something, choose a new language. Even if it slows you down, take the time and your motivation to try out ... maybe ... Ruby, Go, Scala, C++0x or even Haskel. It will make you a better programmer.