"I have become an increasing fan of "screencasts" -- tutorials that combine someone's voice with a snapshot of their computer screen. Watching a good screencast gives you the feeling that you are looking over the shoulder of a master programmer. The best screencasts are structured around a small project, and incrementally improve the project such that you can see how it grows. Screencasts often walk you through the author's (scripted) bugs and mistakes, allowing you to identify some of the most common errors, as well as see how to recover from them."