Try to gain experience in as many programming paradigms that you can.
In my opinion you should at least understand the following paradigms:
- Imperative paradigm, most common languages
- Logic paradigm, such as prolog/datalog
- Functional paradigm, think haskell/f#/clojure
- Object-oriented paradigm, think c++/c#/java etc
- Metaprogramming, think c++ templates, c macros etc
If you have dabbled in all those paradigms I think you have the best toolkit for solving problems in your mind - and for making the computer solve it for you.