I love learning new languages, but with limited time I want to optimize the bang I get for my buck.
So; which languages do you recommend learning to get yourself exposed to a new way of thinking about programming?
My own thoughts are
- C, because it gives you a good understanding of low-level stuff.
- Assembler, because it gives you good understanding of really low-level stuff
- Haskell, to learn about pure(!) functional programming and lazyness (and to spoil yourself with type inference)
- Smalltalk. I assume that it will teach you a new way to think about OO.
- Lisp/scheme, because Eric Raymond and Paul Graham said so ;-) I assume this is for the macros---surely it's not just for the functional programming?
I think python and /bin/sh are great languages, and they are worth studying if you want to look at examples of languages that are very convenient. But, I find, they don't make you think in new ways. They're not radically different enough (to fit the bill of this question, at least).
If you answer, be sure to tell us all why you think the language(s) you list will help the student think in new ways :-)