My first programming experience was Object LOGO as a kid, which I learned from a book with my brother. All my memories of it are rather fuzzy, but I expect it laid some sort of foundation.
In high school I started learning C++ on my own in an independent study programming thing (from Stroustrup's book! I'm amazed I didn't give up on programming, heh). Once a week a professional java programmer would come in to help me out; his C++ wasn't great, but it was easily enough to help me.
Once I ran into pointers I got fed up with C++ and switched to Java, then took a summer class at a local community college. I did the independent study thing for another two school years, tutoring some friends who got interested in it as well.
Somewhere along the way (Summer after junior year of HS I think?) my brother picked up ObjC+Cocoa from somewhere and started doing nifty things in it. I grabbed Hillegass's book and learned it out of self defense

First I wrote a front-end to 'locate' as a learning project (took an afternoon, even for a noob like me). Then I tried to write a side scrolling game, but that quickly got out of hand; they're rather complex.
My first "real project" was Orbital (
http://home.comcast.net/~catfish_man/), which took me most of my senior year of HS.
I went off to college as a CS major to be, but found most of the material rather trivial (wasn't a particularly good school). However, when I went on the #adium irc channel to ask a question I ran across a guy working on a chess plugin for it. I played chess competitively for a while, so I decided to test it and see if I could improve it. Sam (the original author and I) worked on the games plugin for quite a while, and had it working well, but he burned out on programming and I got distracted by working on Adium itself.
I dropped out of college during my freshman year, and spent most of my time working on Adium. I started a (very small) freelance mac tech support company to keep my parents satisfied that I was doing something, but regarded it basically as a minor distraction.
I attempted to go back to school a few times, taking part-time classes at Portland State, but for various reasons (ADD among them) I didn't get much out of it. I did like my data structures class though; that was good (in particular the textbook was used was good: the C++ edition of
http://en.wikipedia.org/wiki/Walls_and_Mirrors). Near the end of the third class I took there, I got in contact with the CTO of Jive Software when he dropped by #adium to ask about our involvement in Google Summer of Code. I noted that I was in Portland (Jive is based there), and he asked if I wanted to drop by to discuss the open source instant messaging landscape and such.
That led into an internship at Jive from December '06 to January '08, at which point they hired me as an engineer. By August '08 the parts of the software I worked on had been effectively canceled, and I was laid off. I went back to working on Adium
By that point though, I had tons of friends in the business, and a pretty great resume (other than the education section!), so I wasn't particularly concerned. Took me quite a while to find a new job, but that was mostly due to not looking very hard.