To many people, it seems a weird contradiction. Companies are desperate to find more software developers, yet every quarter there are hundreds of people graduating from coding schools, colleges, and universities who complain about how hard it is to find a job. How can these two facts be true?
Let’s start with the salary. The idea of $80,000 – $160,000 salary is tempting to a lot of people. That money can change someone’s life. But the reason the salaries are so high is that the skills required for the job are tough to build.
Here’s an example that I call the “developer test”: Imagine you’re sitting at your desk trying to solve a software bug. Pressure is on; your manager is asking for reports every hour; customers can’t use the product. It takes you three grueling days of carefully walking through code, looking at change lists and logs. You test theory after theory, and they keep failing. Something you think is true is not.
At the end of three days, you discover a single wrong character in the code that accounts for everything that was happening. With one keystroke, you fix the bug. In the dozens of cases similar to this that I’ve heard about from colleagues and personally experienced, I’ve noticed a trend. Some people are so excited that they can’t talk about anything else. They’re jazzed up and full of energy the next day: the world makes sense again, and they’ve learned a lot. People who have this reaction are in the right kind of job; it’s likely a good fit for them.
Some people live in fear of the situation that I’ve described. They hate it. They cannot stand combing through code to discover which of their assumptions was false. In my experience, these people are likely to look for a tangential job as a program manager or data analyst, or just leave tech.
This is one of the main reasons that it’s hard to go from freshly graduated developer to professional. The amount of time, energy, and emotion it takes to train someone who doesn’t love the work is far greater. For me, it is much more demoralizing than kind of three-day bug I described above.
This might seem obvious, but if you want to break into software development, it will be difficult if you don’t actually love to program. Between drafts of this post, I’m working on a little side project to convert APIs between the four languages that I normally code in. Coding for fun is a strong indicator that you love what you’re doing. Software companies see a person who loves to code as someone worth investing in.
A second consideration needs to be factored in too. Programming courses are primarily focused on programming. In these classes you might learn variables, functions, loops, classes, and so on. However, there’s a big piece missing from most software curricula that you’re expected to have as a professional developer. When I evaluate a junior developer, I want them to understand Git, Docker, and SQL. Comfort with a terminal and a basic understanding of cloud systems are important for a junior backend developer. Any of these things can be taught, but people who’ve already worked with them are more interesting to hiring managers.
I’ve hired several junior developers, including some who’ve come from non-traditional backgrounds. Here are some of things that I commonly find for strong candidates for those positions:
- They know how to learn. No matter what job you take as a software developer, you’ll constantly be learning new technologies and tools. Strong candidates demonstrate that they can learn on their own. Writing blog posts or making github projects are good ways to show off.
- They write code for a purpose. Their side projects have some value to them. For instance, my wife is one of five adult siblings, who all have spouses and children, and they’re spread across four different US states. Every year we use a Secret Santa tool I wrote so that we don’t have to ship out dozens of Christmas presents each. Every year I refine the tool a little to work better and make it easier.
- Their projects work with 3rd party APIs. Writing your own tools against APIs for gitlab, social media, travel sites, stock sites, and so on is a great way to learn more about networking and how APIs work.
- They learn about the layers around their focus area. Learning AWS/Azure/Google Cloud is helpful for anyone. Front end and mobile devs will want to understand networking and backend enough to talk about it. Backend devs need to understand databases and hosting.
Breaking into software development is hard. Lots of people want to do it. To be successful, you need to show that being a software developer means more to you than just earning a paycheck. If hiring managers can see your curiosity and love of hard problems, they’re more likely to see you as worth investing time and effort in. Good luck.