Someone solicited some advice from me recently on the topic of how to pivot into a career as a software developer and I wrote up a fairly verbose email response. The main suggestion I gave was to spend time tinkering with an open-source project, in addition to working on your own projects and whatever else you might be doing to learn programming. I thought it’d be worthwhile to rewrite that up here.
First is a caveat: I’ve never pivoted into a software dev career; it’s the career I’ve started with. The best advice will probably come from people who have had personal experience making the pivot. My advice will tend to lean more towards “what will help you prepare to do the work of a software engineer” and less towards “how do you get a first job as a software engineer without a CS degree.” The two questions have some overlap, but how much, I don’t know.
Back to open source. In my experience, the most significant difference between coding on your own and coding in a job is that in the latter, you have to learn a pre-existing codebase. At least in the first few months, it’s normal in my experience to spend the vast majority of your time studying the existing code and learning how it works. After many hours of that, you write 20 lines of code, then repeat.
Tinkering with open-source projects is a great complement to working on your own projects because it gives you experience in working with someone else’s codebase. You don’t even have to submit your changes back to the project; you can just mess around at first. As a start for one of my projects, one time I took an open-source Android music player and modified it so that if you hit the skip button within the first 30 seconds of a song, the next song would be the theme song for Bill Nye the Science Guy.
After doing some of that, if you are able to start writing pull requests that get accepted into open-source projects, that will be even better preparation for a job. Besides learning how an existing codebase works, you’ll get practice taking a feature request/bug report description and translating it into working code, and it’ll force you to be more rigorous—you have to make reasonably sure you’re not introducing any bugs, and you have to write code that’s easy for others to understand and maintain. You’ll also likely have to make changes to your code based on feedback.
You can Google around to find an open-source project you’re interested in. Think about what apps/websites you use yourself, then see if there are any open-source alternatives. e.g. if you write on Substack, you might enjoy hacking on Ghost.
A final note: different projects have different stances/policies/instructions on contributing. You don’t need permission to tinker around with the project on your own, but if you want to try submitting a pull request, look for a link/section on the GitHub page titled “contributing.” For example, the Ghost GitHub page links to this document. In general, just be aware that getting a pull request merged into a project creates work for the maintainer (they have to review your code, they have to fix any bugs that pop up later, etc), so try to minimize that burden.
Some other assorted things I mentioned:
It’s never too early to start looking at job postings and talking to people who work there. Even if you aren’t ready to start applying yet, you can still build relationships and learn more about what it’s like working there, what they look for in new hires, and any other questions you might have.
Don’t get too hung up on which language to learn. Pick one and stick with it for a while. If you’ve found an open-source project you’re interested in, perhaps pick whatever language it’s written in. It’s probably best to pick a fairly mainstream language so that there will be plenty of learning resources.
I don’t know anyone who’s tried Launch School, but based on the website it looks promising to me. In particular, the pricing ($200/month for as long as you need) seems ideal for a company that wants to support mastery-based learning. (In contrast, I used to be excited about Lambda School–now BloomTech–which professed to use mastery-based learning, until my wife tried it in 2019. The quality of education was extremely low.)