When I changed careers, I was afraid that I'd struggle to compete with others in my field who had a formal programming education. Teaching myself a new field wasn't part of "the plan." I didn't know what would happen.
Now, nearly 5 years later, I'm more confident in my ability to teach myself whatever I'll need to know. I've learned that there's no magic in having a degree. There's just learning, and there's a lot of ways to learn.
Learning as you go requires different strategies than the ones I used in college. My lifestyle is different than the one I had in school. I have new constraints (like work and family responsibilities) and new advantages (like more money). Looking back, these are the 5 strategies that have helped me the most over the years:
1. Get paid to learn
This is a numbers game. Working full time, you spend 40+ hours a week doing something in exchange for money. That time adds up; after awhile, you're going to get pretty good at that "something."
If you aren't getting paid to program, even if you spend 20 hours a week learning programming outside of work, you'll still be getting good at being a cab driver (or dental hygienist, etc), twice as fast as you're getting good at programming.
Instead, find someone who will pay you to learn. It will probably require some compromises (low pay, uninspiring work, moving to another city, etc) but it will pay off.
2. Learn by doing
There are tons of good books and resources out there for learning web programming. I used to listen to web podcasts every day as I walked around BYU campus, and it was great for learning terminology and understanding the relative importance of topics. But at some point I realized that I needed to close the books, turn off the podcasts, and write code.
Experience is the best teacher, so don't settle for a second-rate education. (FYI, I've written more on this topic here)
3. Win either way
Whenever I'm deciding to take on a side-project, I ask myself: what will happen if this project goes poorly?
Case in point: when I decided to work on Bitbooks, I determined that if it was a bust then I would still walk away from it with experience in ruby, docker, web-services, 12 factor apps, and authentication systems. In addition I'd work to release some open-sourced components that could be helpful to others.
By the time I shut it down, those new skills qualified me to take a new position, and those open-sourced components represented 4 out of my top 5 Github repos. There's no way I'd consider that a failure.
In a world where outcomes aren't guaranteed, your best bet is to focus on activities where you'll walk away a winner, no matter the outcome.
4. Invest in yourself
My wife and I budget our spending, and we try to keep our expenses low. But we have one budget category with no limits at all. It's called "personal investment"
- Financial investments are when you spend money and get more money in return.
- Personal investments are when you spend money and you get knowledge, skills, and connections in return.
Examples of these expenses might include an online course, a code-school subscription, a non-fiction book, a conference ticket, or software that empowers you to create things.
These kinds of investments make you into a smarter, more useful human, and provide compounding benefits over time, giving you more more autonomy, more opportunities, and more earning potential. (FYI, I've written more on this topic here)
5. Set goals
I didn't want to mention this one because it's boring but it's made such an impact (when I've done it properly) that I couldn't leave it out.
Set goals. There are lots of approaches. Find one that works for you.
And now, for the big secret: these strategies always apply. It doesn't matter what field you're in, or whether you already have a formal education in that field. Teaching yourself is a way of life, not a last resort for career changers.