Allen Downey has created a good traditional book for how to learn to program. What are the good non-traditional ways?