The old chestnut, but valid:  Learn, and get comfortable in, a functional language.  The typical case being Lisp (often in conjunction with a readthrough of SICP), but if you have the stomach for it, Haskell (or languages of its lineage- ML, perhaps OCaml or Scala) offers the same functional &quot;enlightenment&quot;, and the mysteries of strong type systems besides.