IMO games are the key. I know I learned most of what I know because of games.
Either trying to hack online games or dicking around with configs and custom content on PC games, I was learning. Trying to write macros to automate mundane gaming tasks. I was learning.
Also, I know every programmer out there will want to bash my face in for this, but excel is also very good to learn from. And a lot of games stand to gain from doing a bit of heavy analysis, or at least tracking, in excel. You learn how to deal with IF and ELSE statements, arrays, tables, lookup, AND/OR logic, strings concatenation and variables. And the framework for doing so in excel is not nearly as intimidating. Most non-programmers can make handy things in excel, that if you broke all the cell into variables and functions into code, would look a whole like a real program, they just don't know it.
At some point during all of this I got curious about "Real" programming and kept looking at C. And while I never fully learned C to a usable level I learned about pointers and memory allocation/addresses/pointers/cleanup/etc. At some point I wanted to get into linux since it seemed more programming friendly. I choose gentoo by pure coincidence, and from bootstrap+compile kernal I learned even more.
All because of games. But the problem becomes that over time it has become harder and harder to hack games; both web and PC based. So many measures in place to stop people from doing it, and even threats of bans. I feel like this is bad for our future. Like the one thing games stood to give to society is diminished by pettiness.