I've got a degree in Computer Science, yet I still consider myself self-taught. In fact, my Computer Science program never taught any languages--they simply had assignments that required development in various languages (C, C++, Scheme, Matlab, Pascal, Fortran, YACC, and 680x0 assembly were all languages used by assignments during my degree, yet none were taught).
Meanwhile, in addition to the aforementioned languages, I've coded professionally (as in I've delivered code and gotten paid for it) in Ruby, Perl, Rexx, Bash/Bourne shell scripting, Python, PowerShell, VBA, QBasic, C#, XQuery, Fortran 66, Fortran 77, Fortran 9x, SQL (various forms), Javascript, ECMAScript, CoffeeScript, Cobol, FoxPro, SPARC assembly, x86 assembly, Java, LISP, Sed/Awk, ColdFusion, Curl, Objective C, and PHP. I've also tinkered around with (as in I have not gotten paid for it) Scratch, Boo, Groovy, F#, Haskell, J#, and Scala. I'm not sure if these are exhaustive lists.
If you aren't an autodidact, either you won't last long as a software developer (i.e. you'll get promoted to management) or you will get stuck working on legacy code. If you want to remain employed as a software developer, you need to keep learning, to keep that fire burning that got you started with programming.
Now, for the answers to your explicit questions.
1) I learned to code by teaching myself on an Apple ][ (predating the ][+ and ][e) with Basic. I then read cover-to-cover a Pascal book for several years before I had a Pascal compiler. I credit this (reading the Pascal book) with my ability to read textbooks and learn from them, even if I don't apply the ideas right away. Very often, there was no FM to read, so much of my learning is through experimentation. A combination of tinkering (i.e. applying the ideas), book learning, and a high tolerance for frustration...
2) I started learning in 1979. I was not yet a teenager. Our school bought an Apple ][, and nobody knew how to use it. They turned over 2 of the "bright" kids to it, and I ended up teaching programming to the person that would become the computer programming teacher.
3) I started working professionally as a programmer while in high school. I ended up consulting in university--it ended up paying my way through school.