Kata
I had a neat idea today for a way to teach the mechanics of programming. It's in the spirit of Zed Shaw's "learn the hard way" philosophy which says, in short, an often neglected part of teaching programming is teaching the mechanics of writing code, rather than just the theory of programming. In practice, that tends to look like a lot of typing.
So I think it'd be great to make something that focuses on a common mechanical technique – say, abstracting two identical statements into a function, or wrapping something in a loop, or renaming a variable – and could generate an infinite number of variations of those problems, and check the solutions for correctness. A standard session with this tool would look like running through fifty demo exercises in quick succession.
Although this might seem like it would only be useful for new programmers, I think there would be some benefit even for experienced programmers. Much the same as even advanced musicians still play scales, being able to do the basic mechanical techniques more quickly and mindlessly could help save a lot of time and energy in total.