I learn new programming languages and tools when I need to, because I have a real project for a customer. Sometimes I get to choose the language and development tools, but usually I have to work with a legacy system.<p>I find that studying books and going through tutorials to learn programming languages usually doesn't stick. I don't really learn a language until I use it to write real code. Most programming languages have a lot in common with each other, and I can learn the parts I need incrementally as I need them. Learning by doing will stick with me a lot better than learning with contrived examples and toy projects.