Advice to young people wanting to break into the software industry
About me: I wrote my first code in 1984, and have been in software professionally since 2001 - see gavindavieslimited.com for my professional portfolio. I am writing this piece with a friend’s son in mind, but it may be more generally useful.
The bad news
First, the bad news. The economy is tough and the software industry is no exception. AI has meant that each individual engineer can be substantially more productive, and some roles have been automated away entirely. No-one is likely to hand anything to you, few companies can justify taking a punt on an unproven commodity.
With that said, it is still possible to enter the industry. Public sector apprenticeships are an excellent way in for many young wannabe engineers - HMRC, where I’ve been contracting recently, have a world-class program and really do invest in their apprentices, who work alongside veterans like myself as well as receiving coaching, mentoring, training and continuous evaluation.
But how to be appealing to such programs? How to even find them? And how do you keep plugging away when your CV seems to boomerang back into your face a dozen times a day?
Ships gotta move
My advice can be summarised thus: you can only steer a moving ship.
By this I mean, if I am choosing between 10 unproven young would-be engineers, I am going to favour the ones who seem proactive and are not “just coders”. I also don’t just want a socially backward code monkey who only speaks to their Funkopops and never documents anything properly!
How are truly excellent engineers different?
There’s an unspoken truth - a lot of us engineers are a bit autistic. We think that code is all that matters - a working system satisfies our brains. However, to be really excellent, one has to work with others. That sounds obvious but no matter how good a coder you are or how deeply you understand Kubernetes or how shrill your opinionation thereupon, if you can’t contribute to a meeting, write clearly, be reliable, help others, conduct yourself professionally etc etc ad infinitum, you will not get far. If the industry were poker, then technical skills are “table stakes”, you have to have some, but your ability to read people and relate to them is what sets you apart.
Presenting yourself as proactive
Young engineer, with this in mind, your goal is to be self-motivated to become a solid professional in ALL facets - not just coding/devops/sysadmin, but in writing, reading, communicating, organising, encouraging, critiquing, learning and more. Don’t panic - what counts is DIRECTION, not PERFECTION. All I would need to see if reviewing you as a candidate is that you are making progress over time - that automatically tells me you’re not a time waster.
Let’s take this abstract notion and concretise it:
- Read widely. Books are not a dead form. It will improve your writing as well. Read the classics - Kent Beck, Andy Hunt, and the moderns like Charity Majors
- Do personal projects. I wrote a chatroom and a touchscreen story player app for my kids recently. I’ve written games with them, a drum machine, built digital instruments including a drum machine based on Arduino, all sorts, and blogged about it (see below!)
- Write. A lot. Keep a technical blog. This helps you communicate clearly (which is ESSENTIAL to collaboration). Writing is a forcing function for clear thought, it is a superpower. A technical blog will show prospective employers what you’re learning. It doesn’t really matter specifically what that is - a Raspberry Pi based weather station, charting metrics on your cat, a JavaScript game - doesn’t matter, just write! Everything you do as an IT professional has SOME form of documentation, be it a Jira ticket, a Wiki page, or a README
- Have a public GitHub account and open source the projects you’re blogging about. Invite people to collaborate. Might seem scary to invite criticism, but believe me it helps you grow.
- Attend technical meetups. Go on meetup.com and search - you’ll find meetups like Unified Diff (one that I helped found) and various more specific meetups. Doesn’t matter what it is - JavaScript, UX, Ruby, whatever - just attend, meet people, hear their stories, eat the free pizza, ask if they’ve got openings, don’t get drunk and make a scene though
- Get involved with an open source project. Don’t do what some are encouraged to do and submit trivial PRs fixing typos for GitHub clout though - that’s annoying to maintainers! - find actual issues and see if you can fix them. if you can’t fix them, maybe supply a test case?
- Learn essential technology. This is a bit nebulous depending on the field you want to go into, but I’d say Git is an essential, along with basic Linux. Python is useful almost anywhere you got these days. Docker isn’t going anywhere.
- Get on some Slack or IRC channels. There’s a Cardiff Dev slack channel that might still exist, recruiters are always posting on there.
- Organise something - anything. It might go badly wrong, who cares. Just get a few mates over for a hack night and see if you can create a simple app.
- Go on those sites like Khan Academy and whatever else (I forget the others right now), get some certification. There’s loads of software certification you can get, which can open doors for you
- Maybe go even further and get AWS certification or something, that would probably be at least a 6 month project but an AWS certified engineer can usually get a job (if that’s what interests you, just an example)
Hopefully these suggestions are getting your cogs whirring of precisely how much you can do to (a) improve as a professional and (b) demonstrate to people who have 5 minutes to check you out that you’re not a timewaster. How many times have I heard “I really want to get into IT” and I respond “OK what are you working on?” and I get a blank stare back and I assume that the person probably isn’t someone I’d hire on the spot!
Making up for weaknesses
Maybe you’re like me and are smart but socially you can struggle. This can be improved! Volunteering at a food bank forced me to improve how I related to people.
Be open about areas you want to improve in. Example: I’m writing a bit of Scala but it’s not my strongest language, so I sense-check a lot of it with my colleague Muhammed, who has more experience in that area, and so I learn. He comes to me with questions about other areas. It’s a cool scene.
When you’re young, no-one’s expecting you to be a world-beating engineer. They just want you not to act like you know everything, and not to act like anyone’s handing you anything just for existing.
Getting experience
Part of a church? Youth club? Football team? Get involved with their website. Write a tool to automated their social media. Blog about it.
Once you’ve got some confidence, offer to build a website for a small business.
In conclusion
Be the moving ship. Don’t sit there and wait. Make it happen, captain!