I always feel pretentious answering stuff like this. I'll give it a shot anyways.
|become more familiar with different programming languages|
Too many people learn Java then C++ then C#; all of these languages are very roughly the same.
These languages mostly encourage the same kind of procedural and vaguely object-oriented thinking.
This is no good. You will find the most significant and immediate benefit from correctly learning tools which encourage entirely different approaches to problems. To this end, you should strongly prefer to learn the most varied languages you can.
When asked for suggestions, I usually respond with these 5 or so items. I intend that specific languages should be taken categorically, not as specific recommendations.
- C++ or any applications language;
- Common Lisp or Scheme or any DSL-focused macro language;
- Haskell or ML or any pure-functional language with a focus on type theory;
- Python or Perl or any scripting language;
- Some assembler dialect
Other interesting languages include Forth, which is different enough to learn (it's a fascinating stack-based language), and APL, which is a ("matrix-based" language). I know Forth, but I can't find a free APL implementation to play with. This is a shame, because this advice in fact is credited to Kenneth Iverson, who created it.
You can read the paper: