I second the functional language suggestion. For awhile, the only two languages I used regularly were C and (to a lesser extent) Perl, and felt a general sense of dissatisfaction with programming -- it wasn't clear at the time if it was the tools, or just me. I happened to take a pretty hard class on game tree search, and realized I needed to learn a more expressive language fast if I was going to keep up with the assignments. I picked Ocaml, and within a few weeks I was more productive (for the kinds of problems that were assigned as homework in this class) than I would have been in C or Perl. I stuck with it and eventually used Ocaml for some bigger projects that I did on my own. After a few years of Ocaml, I switched to Haskell because I wanted better parallelism support. By then, I'd become sufficiently accustomed to functional idioms that Haskell didn't scare me, and I've been using Haskell ever since. Not at my current job though, unfortunately... that's still C, but I rest easier knowing that there is a more pleasant way to get stuff done and I don't necessarily have to write C the rest of my life.