Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal). I'd b…
But why not Icon? It has plenty of neat features on its own, such as goal-directed execution (which I've never seen in another language). Plus it has several pretty solid (and free) introductory e-books: http://www.cs.arizona.edu/icon/books.htm