For me, math, science, and reading were all good motivators. We talked about formulas, equations, and algorithms all the time in class. Since class was really boring, I'd spend my time programming our TI-8x's. F=ma, E=1/2mv^2=mgh, etc all go into the calculator. Reading at home played into that really well. For example, in Sagan's Contact they talk about a message being embedded somewhere in Pi with the hint that such a message could only have been created by an architect of existence. One day in geometry we learn how to calculate Pi, and guess what I'm programming in my calculator. Later I read stuff like cryptonomicon and between silk and cyanide and spent countless classroom hours trying to find new ways to factor numbers.
Looking back, I was always interested in tinkering with large public data sets. I built several iterations of a fantasy baseball league site and multiple stock analysis tools. I also played with decision tree algorithms and imdb's public data and messed around a lot with trying to analyze my pokerstars hand history. Today, we are drowning in new and interesting and often totally unexploited data sets. The right 20 lines of perl could change the course of human history. The challenge is not to find those 20 lines, but to look for them.
Some kinds of games encourage programmatic thinking. You get a lot of exposure to arbitrary sets of rules and how to manipulate stuff in well defined environments, to build and test plans, etc. Civilization and StarCraft are all kind of production/workflow optimization problems. At some point though, there's a difference. Programming is more an act of creation. What's possible is undefined and what happens is defined by you. I think to make the leap from gamer to hobby programmer, you need a spark of something, the kind of attitude that believes 20 lines of perl can change the world.
I think a classic mistake in programming education is to teach using "good teaching languages". Working in a write only language like perl allows you to produce immediate results at a time when you're not ready to accept the full abstraction of good programming practices. It also primes you to accept the principles of a good programming language at a later date. A year breaking bad habits is a good trade for 5 years of programming experience.