I’ve found I almost always retain what I’m learning far better if I have to figure something out as fast as I can because the project’s deadline is a few days away. You can do all the tutorials you want, but you’ll never have something etched into your brain as deeply as when you spend 3 hours trying to figure out why something isn’t working. I don’t know how many tutorials didn’t work for me and after about a half an hour to an hour of trying to figure out why, I’d get frustrated and give up. But when its client work, then you have to figure out what’s wrong, whether you’ve just made a simple mistake or the entire approach you took was wrong. And trust me, when you figure it out, chances are pretty good you have a thorough understanding of what you did and how you did it and next time, it’ll take you thirty seconds to write the same code.
Do tutorials, read books and experiment. But you won’t learn faster than when you have to learn something. There’s something about when you’re searching the web, trying to figure out why your code isn’t doing what you want it to do and then suddenly you come across a little bit of information that makes everything click in your head. I learned some much about making a custom WordPress theme the first time I built one for a client, especially when they asked for some custom functionality. Not only did I learn a ton about WordPress, but I also learned a bit about PHP. Now, a custom WordPress theme takes me no time at all and I actually have few problems writing sites that use PHP.
Everyone learns differently but I’m sure that one of the best ways for almost everyone is to be tossed into the deep end. Give yourself a challenge that you can’t walk away from if it gets too hard and you’ll always be stronger for it in the end.