I must have started around when I was 5, when my parents borrowed a Commodore 64 from our library (yes, they were very progressive and lent out computers in those days). They also had some programming books for kids in the library. But then they bought a Schneider Amstrad CPC6128, and it came with some games and a word processor. After getting board with the games, I read the manual that came with it. Those days, computer manuals were quite extensive. This one described every part of the excellent BASIC interpreter that came with the CPC6128. So then I started programming myself. At 11 or 12 years I wrote a multiplayer game for it with background music, in plain BASIC. Later my parents got an 8086, and I got an Atari ST. I learned various forms BASIC (GWBASIC, QBASIC, Omikron BASIC, GfA BASIC), as well as Intel 8086 and Motorola 68000 assembler. When I started studying, I got an PC with an AMD k6, with Windows for about a year, then I installed Linux (from the excellent Infomagic CDs) and happily used that ever after. I got a copy of K&R second edition, and started programming in C and later in C++, although I also learned some Perl, Tcl, Python, Delphi and Java along the way. Virtually everything programming related I taught myself.
Although I did attend mandatory programming classes at the university, I can only say that they teach you the bare minimum. But if you have a strong interest in it, and some good resources, you pick up programming much faster by doing it yourself. You become a really good programmer once you write a program that other people start using, and that has to install itself properly, do error handling correctly, and so on. Last but not least, keep improving yourself, look at what other people are doing, participate in the programming community.
A final note: I've seen people from all kinds of life discover programming. Some stumble over it accidentily ("oh wow, look at all those things I can do with Excel macros!"), some have a hobby that inspires them to code. If they are truly motivated they can use very difficult programming languages. But it also greatly helps if the barrier to entry is very low: having the tools preinstalled or very easily obtained, have good documentation, an accessible community. I particularly like the Arduino; even though you are programming C++ on an embedded system, the tools are just one "apt-get install arduino" away, the documentation keeps things very simple, and you can just do a few clicks and load an example program in the editor and get going.