Programming is addictive. You solve a problem and then run into another one. You have to figure out what is causing it and how it fits in with everything else. Where the next piece of the puzzle fits so you can get one step closer to solving it. The challenges naturally progress in difficulty as you get better and want to do bigger and more complicated things.