Question: I've been programming C++ for about 5 years now, and I now realize the value of knowing how to think "differently."

This question is for C++ programmers who tried out other programming languages and came across moments like:

* "Whaoo..this is sooo cool! I didnt know I can program like that."
* "Wow, I never thought a design problem could be solved that way!"

So, which language did that to you? I'm looking for maximum effect, so I dont think Java would fit the bill. =p I'm open to any suggestions, though!

Disclaimer: I ask this question primarily because I want to expand my mind. There is no intention to start **any** programming language war here!

Answer: 
I would try both Scheme (or Lisp) and Python, in that order. Scheme will warp your mind in a positive way (it did for me), and then move on to Python, where you'll be (quasi-) able to put together your C++ and new functional knowledge. You'll get a big kick out of both, I promise.
Firstly, good on you for looking to do something different! If you're up to it, this is a great opportunity to try something which works in a completely different way, if only to broaden your understanding of how things work. I'd echo [ManicMailman's comments about Prolog](https://stackoverflow.com/questions/1583142/c-programmer-looking-to-broaden-perspective/1583162#1583162), which is very different indeed from the Pascal/C/Java approach. I would also suggest two other ideas.

Firstly, one of my all-time favourite languages is [PostScript](http://en.wikipedia.org/wiki/PostScript), generally known as a page-description language, but a fully-fledged language in its own right. It work almost entirely on stacks, so calling operators take arguments off the stack and push results back on it. Of course, it also tends to have a high-quality output device associated with it, which can be useful. :-)

Also, if you're ready for something *very* different from what you're used to, you'd do well to consider a functional programming language. I'm not personally very experienced in these, but I understand that [Lisp](http://en.wikipedia.org/wiki/Lisp_%28programming_language%29) and [Haskell](http://en.wikipedia.org/wiki/Haskell_%28programming_language%29) have their admirers.

Lastly, you've assumed that going for a new programming language is the way forward. If you're even moderately academically-minded, you might find that reading up on data and algorithms might seriously improve the way in which you understand and solve computer-based problems. One of the standard texts is Sedgewick's [Algorithms in C](http://www.informit.com/store/product.aspx?isbn=0201314525), although in my opinion Knuth's [The Art of Computer Programming](http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming) is the best in the field.

Good luck! :-)