Here's a slightly wacky idea for learning a new programming language (or two). This only works if you're fairly experienced programmer already.
Start with a good, fairly advanced programming book such as Peter Norvig's "Paradigms of Artificial Intelligence Programming". This book has all its examples written in Common Lisp. Then translate the examples into another language. In my case, Haskell. I don't really know Common Lisp all that well but that's fine.
I feel I need to do it this way because aside from the new concepts (such as monads or macros) learning a new programming language is mostly about loading the details of the syntax and libraries into my brain.
I know that the classic way is to just start programming in the new language, and pick up the pieces along the way. But I don't like doing that. I want to have a better handle on the new language so that my first real programs aren't excessively lame. But maybe that's just me.