The Career Changer’s Guide to Becoming a Software Developer
More people than ever before are entering software development from non-traditional backgrounds. The number of coding bootcamps is increasing, and there’s a broad push from the industry to attract more diverse types of developers. Many companies are no longer solely focused on hiring senior developers, and have realized that it may be smarter to train-up the next generation of senior developers instead.
Software development pays well, the industry is booming, and compared to many other careers, software developers get treated very well. But I think the thing that draws most career-changers to software development is the search for more rewarding work.
If you’re reading this, you’re most likely considering a change from another career. I was in your position less than a year ago, and I know that it’s a scary, but exciting, place to be.
There’s one question you should ask yourself above all others: if you make the switch to software development, will you like it? Because getting to a level of skill where you are hireable will be a lot of work, and you may be leaving behind a promising career in the process. The stakes are high.
If you don’t know whether you’re going to like it, build things with code. Create a Tic Tac Toe game. Start a small online business and do the development yourself. Contribute to open source. Make games. Complete programming challenges. Build a personal website and do all the design and development yourself. If you enjoy any of these things, there’s a good chance you’ll enjoy working as a software developer.
Switching careers can be an epic, challenging journey – but I hope that it will be one of the best things you’ve ever done.
There are a thousand ways to learn to program, and the route you take will depend on how you learn best. You can take online courses, find a teacher or mentor, watch YouTube videos, read books, do a Computer Science degree, watch screencasts, or simply jump onto the command line and start experimenting, hitting up Stack Overflow as you go. Isis Anchalee of #ILookLikeAnEngineer fame recently put together a great summary of ways to learn to code.
I did a combination of all the above things when I was learning to code, but there were a few things that helped me more than any others:
Have something you (passionately) want to make
Whether it’s a blog, a game, a website, a SaaS startup, an online dating website, or an app to manage your family’s finances, having a project you’re motivated to build will push you through the tough times when learning how to program. A real-world use-case for your skills will accelerate your learning.
I spent a few months working as a TA at a coding bootcamp. The students who progressed fastest with their skills were those who had something they desperately wanted to build, because everything they learned, they could apply in their project.
Do a coding bootcamp, if you can, and if you feel it will work for you
When I was first learning to code there weren’t any coding bootcamps where I live in Melbourne, Australia. I took the rather drastic step of moving to Chicago for 3 months to be part of The Starter League. It was the defining choice in my journey to become a software developer.
A good coding bootcamp will give you a focused environment, help when you need it, and support when the journey gets tough. When you’re first learning to code it can be really hard to know what you should focus on. Through experience, coding bootcamps are very good at scoping this down to the essentials you need to build or design web apps.
A good coding bootcamp will also assume no prior programming knowledge, and teach you the skills you need from the ground up, unlike many programming articles and videos, which will be written with professional programmers in mind.
Coding bootcamps can be expensive, and they’re not for everyone, but if you feel like it might be worth the investment, I highly recommend them.
Connect with other people learning to program
Find a mentor who works in the industry
A friendship or mentorship with a working software developer can also be immensely helpful in your journey. They will know what the interview culture is in your local industry, will be able to give you advice when you get stuck, help you focus on the most important skills to learn, and give feedback on your code. If you’re lucky enough to find a software developer generous with their time in this way, make sure to give back somehow, even if it’s just buying lunch when you meet. Once again, meetups are a great way to meet potential mentors. If meetups aren’t for you, or there are none in your local area, you can also find mentors on CodeMentor.
Focus your learning
Be prepared to invest in your career change
You can spend a lot on the transition, Books, courses, classes, and screencast subscriptions can add up to hundreds of dollars a month, and many boot camps are over $10,000. Despite the hype around programmer salaries, you can expect to make between $40k and $60k as a Junior developer, with higher starting salaries possible in startup hubs like San Francisco and New York. At first, it might seem like you’ve invested a lot in this career change without much financial reward. Over the long term, though, this investment should pay off, with developer salaries steadily rising into six figure territory as you gain experience.
Don’t worry if your journey isn’t linear
Learning to program is tough, it takes time, and if you’re juggling a pre-existing career and other commitments, it may be difficult to focus on it for more than a few hours a week. You may have doubts, you may get distracted, and you may stop progressing for days, weeks, or months. In my case, there was an almost two year gap between attending a coding bootcamp and getting a job in software development. It could have happened much sooner, but life, and my own doubts, got in the way. Trust that if software development is truly what you want to do, that you’ll find your way eventually, even if you end up taking the scenic route.
When it comes to your GitHub profile, be selective about what you show
GitHub is an online hosting service for git repositories, best described as version-controlled programming projects. When a repository is public on GitHub, anyone can read through your code. Many hiring managers will check the GitHub profile of applicants to get an idea of how they write code when nobody is watching. When evaluating Junior applicants, the hiring managers may not be looking for amazing code, but instead looking for enthusiasm, multiple projects, trying out new things, and a sense of play. Your GitHub profile is a great way to show this, but keep in mind that hiring managers may only have a few spare minutes to review your profile. For this reason, it’s a good idea to only make substantial or interesting projects public. For projects where you were just messing around or going through a tutorial, it may be worth making them private to give your best stuff the limelight.
It’s hard sometimes
Self-doubt is a common trap for Junior developers, especially those from groups who are underrepresented in the software industry. If something feels hard, it’s not because you’re not cut out for this: it’s because you have more to learn, or perhaps, because the thing you’re working on is actually hard. You may also be concerned when something you find challenging seems easy to someone else, especially when that someone else has a similar level of experience. But stick with that person long enough and you’ll likely encounter something they struggle with that you find really easy. We’re all different, we bring different pre-existing skills to the table, and we all practice differently. Programming is like any skill: you can become good at it if you persist long enough and care about getting better. Avi Flombaum, co-founder of the Flatiron School, says “I absolutely believe that anybody can learn how to program in the same way that we know anyone can learn how to read and write.”
Be aware of your blind spots
How does your code get run?
How does your language’s interpreter or compiler know when it encounters a syntax error?
How does typing a URL into your browser toolbar result in a web page being rendered on your screen?
How does a web server work?
How do you stay logged into websites even after you close and reopen your browser?
How does your app run on a web server?
Your project is hosted on Heroku or AWS, but what do they use under the hood?
When people say an object is ‘in memory’, what does that mean?
How do you SSH onto a server?
How do you set up and use a build pipeline?
How does your operating system run on your computer?
Of course, this list could be much longer. There’s so much to learn that it can feel overwhelming. The good news is that you don’t need to know the answers to all these questions in order to be hired as a Junior software developer, but you should try to learn them as you go further in your career. You can’t get really good at software development unless you have a working understanding of the tools that you work with every day. Increasing your understanding will empower you to make better choices, become better at debugging, and make better design decisions.
When you’re struggling, take time to appreciate the unique skills you have that Computer Science graduates may not have yet
If you’ve attended or scheduled a work meeting, given tricky feedback at work, been through a performance review, or led a team, you already have valuable skills that recent Computer Science graduates may not have. You may be more at ease talking with stakeholders, better at meetings, planning and organization, simply through having more experience. Most importantly, you may have a better sense of perspective. After all, if you’ve previously worked as a nurse in an operating theatre, you might be more likely to stay cool, calm and collected when a bug pops up in production. After all, nobody is going to get (physically) hurt!
Get experience with pairing
Pairing is the practice of having two developers share one computer and work on the code together. One developer will write code while the other watches and does some of the following things: makes suggestions, asks questions, catches errors, and thinks more broadly about how the code being written fits into the larger program. Because both roles are fatiguing, they will usually swap anywhere from every 15 minutes to ever few hours.
Pairing is a common practice in the industry, and even more common in the coding interview process. You don’t need to be an expert at pairing, but pairing for the first time can be a little intimidating, especially when pairing with a much more senior developer. Despite this, pairing can actually be really fun, and is a fantastic way to learn. If you can, get some practice with pairing before you begin doing coding interviews. If you have a mentor, pair with them. Otherwise, you can find opportunities to pair at hackathons and hack nights in your local area.
Set up a mock programming interview
Programming interviews are likely to be quite different to the interviews you took to get a job in your current career. They often involve coding challenges, writing pseudocode at a whiteboard, pair programming, and feedback on your code. Learn as much as possible about coding interviews by researching them online. Then practice them with a friend. Find a whiteboard and solve simple problems by writing your code on the whiteboard. Get your friend to ask you common programming interview questions. It doesn’t matter if your friend is non-technical. The experience will really help when it comes time to do a real coding interview, as they can be a little intimidating at first!
Before test-driven development, practice error-driven development
Errors will be your constant companion when learning to code. You’ll be breaking stuff all the time, and will be met with lots of error messages. As once non-technical people, error messages can be scary. Before learning to code they may have meant that you wrecked your computer installing a game, or bricked a phone while trying to unlock it. An important mindset when doing programming, however, is to see error messages as trying to help. Though they may fill the screen with red (in the case of Ruby on Rails), or print a confusing and lengthy stack trace to the screen, they are here to help.
When many developers encounter an error message we react a little like we’ve been slapped on the hand, quickly navigating away from our browser or shell window and peering at the code we just wrote, trying to figure out what might have made the computer so angry. In most cases, the computer is already telling us via the error message it just printed, but we need to slow down and read it before we can reap the benefits.
Jeff Cohen, an instructor at my coding bootcamp, encouraged us to practice error-driven development. This method goes beyond slowing down to read error messages, and instead, you let a succession of errors guide you forward in your development. Call a method that doesn’t exist, see a ‘no method’ error, then write the code to bring that method into existence. Reference a view that doesn’t exist, see a ‘no view’ error, then create the view. Errors are not to be feared, in fact, they can guide you. Just not in production 😉
Learn about and practice test-driven development (at least a little bit)
Once you’re comfortable with error-driven development, test-driven development is the next step in your learning.
Test-driven development is a sought after skill in the industry, and familiarity with it is a requirement to get hired at some software companies. It’s the practice of writing code to ‘test’ how your program behaves, and to drive out a better design for your program. If you’ve ever added some functionality to a program, only to have it break something else that was previously working, this is one of the things test-driven development (often abbreviated as TDD) can help with!
Few programming resources for beginners focus on TDD, mainly because it can be a difficult concept to teach. When you aren’t sure how to write good tests, writing tests can feel more difficult than writing code. You may encounter a situation where you know exactly how to write the code that will solve a problem, but designing a test around it takes an hour because you’re not sure of the appropriate way to exercise the code with a test. Learning TDD will slow you down at first, but you’ll be repaid with confidence: confidence that your programs work, and confidence that if you break something, you’ll know immediately. Tests are an incredibly useful safety net for Junior developers.
You don’t need to be an expert at testing, but some familiarity with TDD will put you ahead of many other Junior applicants, especially those coming from traditional Computer Science backgrounds where test-driven development is still not always taught. Bonus points if you can eventually articulate the difference between a mock and a stub.
Your Journey Begins
You’re about to embark on a journey that might be one of the hardest, most rewarding things you’ve ever done. Don’t be afraid: be excited! The end goal is a satisfying and rewarding career and the opportunity to make the world better through technology.
No small prize.
Your future is bright. Good luck!