I was reading The Pragmatic Programmer last night and it recommends learning a whole host of languages as you go through your career - even if you'll never use them. I'd always thought this would be a good idea, but the book has given me enough impetus to think about it seriously.
It also mentions (words to the effect of) "learn object oriented design and you'll code pure C programs differently".
I could go and (re)learn Java, but it seems perhaps an easy option given it's a language that follows a lot of the same principles as C#. I will probably still (re)learn Java at some point, but I'm quite interested first of all in what languages would be sufficiently different in their pattern of thinking that I would learn a different perspective - or just a whole different way of thinking about how to code a program.
Functional programming perhaps? Any suggestions are welcome, but please try and provide a short reasoning as to why they might be interesting and "new" from a C# user's perspective.