"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."