I've recently been recommending Zed Shaw's Learn X the Hard Way books for learning a variety of computer languages. I find these books, and the educational theory behind them, kind of fascinating. Shaw himself encourages other people to fork his project for new languages, and provides some advice on its structure:
The way to think of the book's structure is the first half gets them strong, the second half gets them skills. In the first half they're just doing push-ups and sit-ups and getting used to your language's basic syntax and symbols. In the second half they use this strength and grounding in the basics to start learning more advanced techniques and concepts, then apply them to real problems.This is not a way that I particularly like to think about learning--my least favorite part of high school was doing drills in class. But in retrospect, what I hated was drilling things I already understood. I despised sentence diagramming because I already understood grammar--I didn't need to draw arrows above the subject-verb-object relationship. When it comes to new problems, I actually spend a lot of time on simple, repetitive practice, what Shaw calls "getting strong." The same seems to be true of most of my students, and that realization has dramatically changed the way I teach this quarter.
When I started learning bass, someone recommended a really good book on bass technique--not a book of songs, or a book on music theory, but just step-by-step foundation on how to hold the instrument and pull the strings without causing long-term physical harm. I spent hours just running through the most basic exercises: plucking strings with two fingers, then playing across strings, then muting unplayed strings. It was tedious, but whenever I play a looping arrangement (where unmuted strings would create "drone notes") and sing simultaneously, I'm glad I spent the time.
Likewise, I was reminded of this the other night at dance practice while talking to one of the other poppers about traveling. When I first started, I remember asking the teachers in class how they were able to combine movement across the floor with their isolations and waves--when I tried, it was too hard to keep both motions in my head, and one of them would collapse into awkward spasming. I wanted a "secret"--some kind of special technique that would let me skip the hard work. But that shortcut didn't exist: gradually I learned to travel while dancing only by working hard on each component individually and repetitively.
I'm proud this quarter that the examples, in-class exercies, and homework I've assigned for Intro to JavaScript have all been "real" work--my students have learned how to make basic slideshows, to filter and display data from CQ and the World Bank, and even how to imitate Paint.exe using canvas. I hope that they'll be able to leave the class and talk about what they've done in interviews, or use them as jumping-off places for other projects. But more importantly, I'm spending each class with students typing along with me, giving them feedback and drilling the basic skills of reading and writing code. They're learning the hard way, and so far, it seems to be working.