The first programs I wrote were complex BASH scripts that solved specific problems I needed solving. I had a friend that was there to help me a long the way. But the main reasons I continued learning were because I had the immediate benefit of having my problems solved and also because I had tangible evidence of my progress. The rest snowballed from there.
I understand where Joel is coming from with his advice, but I don't think I agree with it. I had read quite a few programming books in the past (C & Java), muddled through the exercises, and thought I understood the concepts, but until I dived into solving real problems, I didn't "get it".