About once a year or so, I find myself spending some time immersing myself in the world of Lisp (and Scheme). Lisp is sort of a proto programming language. Lisp fans make a strong argument that it's on a different level entirely than all other languages. I pretty much buy into that argument, but I've never quite been able to get it to click for me to the point where I would feel comfortable writing a real, production application in Lisp. I always start out with the intention of writing something useful and large enough to get myself over that hump but I always either get distracted with other stuff or hit some wall (usually involving just not being able to get some library I want to use installed on whatever Lisp interpreter I've chosen).
Nevertheless, my little excursions into the land of parenthesis have always been worthwhile. It always seems that I pick up some new or deeper understanding of some aspect of programming. When I first went through the exercises in SICP it was a revelation for me. Suddenly all kinds of things like recursion, first-class functions, data driven programming, and constraint systems made much more sense. Later attempts taught me the power of code as data, having full, unrestrained access to the abstract syntax tree of your running program and the power of a true macro system (I still don't feel comfortable with Lisp's macro syntax but I've at least decided that it's worth learning at some point). Scheme was also my first real exposure to a proper, interactive REPL environment and that style of development impressed me enough that when python came along, I was probably more willing to give it a look because it had a nice interactive interpreter. Common Lisp and SLIME are still the gold standard in that department though.
Lisp certainly isn't the only language that I've learned valuable lessons from though.
Still, Lisp remains the wellspring of mindbending "AHA!" moments for me. My most recent delving into Lisp was with Peter Siebel's book "Practical Common Lisp". On that last pass through, generic functions finally clicked for me and I was able to seem them as the conceptual underpinnings of object oriented programming. Suddenly, things like aspect oriented programming and python's decorators were just trivial applications of this one root idea.
Now, I see that Guido's thinking about adding generic functions to python 3000. Clearly, I think this is a good idea and I'm really curious to see how the syntax comes out. PJE's implementation in PEAK is interesting, but having it in the syntax of the language should allow it to be even smoother.