the tl:dr version:
> Did you learn to program in school or teach yourself?
Self taught

> Did you do unpaid work to establish yourself?
Kind of. I did a small website for a guy, but nothing I did really paved the way for me to get a job, exposure wise. That's probably more a mistake of mine than a data point. I should have taken advantage of that more.

> Roughly how long did it take you from day 1 of learning to day 1 of being paid?
Four years

> What was your first gig?
Full stack .net (mostly C#) SQL Servers/Dapper/Entity Framework/MVC/Nancy/Ember/Web Apps

The Novel:
I was going to do these individually but it turned into a bio.

Mostly taught myself. I took a class on BASIC in high school (in 1997 or so), and a course on HTML in college (around 2001), but I pretty much dropped programming until way later.

I have a friend who came out of college as a journalism major and he worked doing journalism somewhere for awhile. He got sick of it, taught himself to program, and got a job programming. I don't know details about hit specific circumstance, but that's what motivated me to learn it myself.

I'm thirty one. I started learning to about five years ago. My first language was Java, which I hated, but it's what my friend used so I figured I'd start there. I pretty quickly jumped to messing around with python tutorials and only really got interested when I started doing ActionScript 3. I never did anything professionally with it, but it was really fun and satisfying. I knew a guy who runs his own web dev business, and at the time they were mostly in AS3. He said he could get me some work, but it never panned out. Realistically, I think I just didn't have the chops at the time, or he didn't really trust them. I don't really blame him for that. They also did a lot of rails work, so at that point I started learning ruby and rails.

Probably a year or two in, I started listening to software engineering radio religiously. There were other podcasts, but I think that's the one that really made it easier to keep going and get broad exposure to a lot of different concepts in a digestible format. It was really nice because I could listen to it while I was stocking the cooler at 7-11, or driving a moving truck across the states. I also worked for a liquidation warehouse for a bit. I ended up making a few rails apps for small inventory management tasks, but right as we were going to start using them, we all got laid off.

I ended up at a call center as an agent, after that, then moved to a team lead spot, then worked into the training department. I kept making little javascript tools for people along the way. Cheezy little widgets, but they helped folks. I also cleaned up a lot of spreadsheets, modularized them, wrote macros to do certains tasks, and otherwise pitched in here and there. It was small stuff, but at that point I'd been coding for four years, and inhaling book after book. At that point I knew javascript and ruby really well. I was also using clojure to do fun projects. All the excel work eventually got me moved over to be a data analyst with the Quality Assurance department.

I spent a lot of time reading books on best practice for enterprise dev and dev in general (code complete 2, the pragmatic programmer, clean code, Patterns of Enterprise Application Architecture, sicp, etc). My fairly diverse range of languages, the scope of stuff I'd picked up from and built on from SE radio, the books I'd read, and my side projects gave me a lot to talk about if someone else knew how to program. Since I was salaried at that point, and a data analyst, I was in contact with our BI group, and talked to the manager a lot about coding. They were mostly using C# and .NET, so I started learning .net, C#, and F# in my free time, which lead to more conversations. Eventually they had an opening and the manager encouraged me to apply. I applied, they offered me the job, and I've been a full time .net dev for about a year now.

My biggest hurdle was being confident that I could do it. I always loved computers, but I'd never done any real programming until I was in my mid 20's. If you stay around places like HN, or read coding lore, you get the impression that everyone good started when they were five. I'm not saying that vindictively; it's just the impression I got. Things also don't seem to come as naturally. That said, I remember the first time I thought I "got" functions, and it was so amazing to me. It didn't click right away, but when it did, it was really cool feeling. Then later on I started taking on more functional languages and learned that while I "got" them, I didn't really get them. And now that feels absolutely natural.

I don't feel at a disadvantage at all, because I know that I have the skills to keep learning and adapting, and I also have the desire. It's really cool.

That's an incredibly long post, but I didn't want to leave anything out in case it'd be helpful. If you have any questions, feel free to ask.