I learned most of my hard-core programming through demos ( http://en.wikipedia.org/wiki/Demo_(computer_programming) ), which I did in Pascal first, and then added x86 Assembly.
Demo programming not only made programming accessible and fun, it also was the first time that I actually got interested in Calculus outside of school (matrix math for 3D animations, etc)