At a recent meetup event I was conversing with a small group of attendees, one of whom was an aspiring self-taught mobile developer. He was passionate and enthusiastic, but there was some doubt in his mind. He’d been following our conversation which to that point had been filled with tech-related jargon, and admitted that he was struggling to keep up. He feared that his lack of experience, or of a CS degree, meant that he was at a major disadvantage when it came to finding his first tech job.
Having been in the exact same position a year ago, the conversation led me to a realisation that none of these ‘disadvantages’ ended up being detrimental to my career prospects. To the contrary, I believe there are several advantages to being a self-taught developer.
An agile tech team is rarely made up purely of developers. Not only must you know how to code, but you will often need to explain complex technical problems to product managers, BAs and, depending on the size of your company, sales, marketing and even clients and customers. Within a development environment it’s easy to spend 99% of your time communicating with other developers who already have a deep understanding of your challenges. There aren’t many opportunities to gain experience in adapting your language to fit the vocabulary of your non-dev peers.
If you’re self taught, it’s likely that you’ve spent time in another industry. And whether that was serving customers in a retail outlet or presenting statistics to a room of people, you’ve already gained a huge amount of invaluable experience in being able to empathise and communicate with people from a variety of backgrounds, making it easier to keep the whole team aware of what you’re doing and why, and be able to ask questions so that you can fully understand the requirements of the business.
Author Malcolm Gladwell popularised the theory that it takes 10,000 hours of practice and hard work to become an expert in anything. It’s a shaky and strongly challenged theory, but the mantra ‘practice makes perfect’ has been applied to many subjects. If you apply this to teaching yourself how to code, you would expect that the time you’re putting into learning means that you’re becoming a better coder over time. What might be less obvious is that you’re also teaching yourself how to learn. You’re not following a text book cover to cover, or struggling to meet a submission deadline. You’re developing your own learning rhythm, figuring out how to grasp difficult concepts quickly, learning how to find answers to questions without the benefit of a tutor or mentor. You’re making mistakes, lots of them, and instead of having them pointed out to you, you’re experiencing their consequences and learning how to adapt to those failures.
Once you get your first tech job, you’ll be thrown head-first into things you aren’t prepared for. But the time you’ve invested in learning how to learn means that you’ll adapt quickly and be up on your feet in no time at all.
I’ve spent a lot of time working with computer science graduates, either during their ‘year in industry’ or as part of a graduate employment programme. What continues to surprise me is that almost none of their university courses seem to teach the fundamental vocational skills that almost every developer needs when working within a company. They learn complex algorithms and concepts such as turing completeness, but they’re not strongly encouraged to learn things like version control, unit testing, DevOps, or how to write clean, maintainable code.
The self-taught approach leaves you without a nice juicy qualification with which to pad out your CV, so the alternative approach is to build a portfolio of published work, either having released apps to production or published your code on GitHub (ideally both). If you’ve published your own apps then you’ve had to learn the entire process, from File -> New all the way to deployment. And to maintain a portfolio on GitHub requires at least a basic level of knowledge around version control. You come up against a lot of the challenges that companies face when trying to bring a product to market, so once you’re in a job, you’ll hit the ground running on lots of these things.
The most likely reason for wanting to pursue a career in software development is because you have a real passion for coding. Teaching yourself to code is not easy, and you’ll only stick with it if you enjoy it deeply. If you get to the stage where you want to turn your hobby into your career, then getting that first job is made all the sweeter; You’ve sacrificed so much of your free time to become an awesome coder and now here you are, getting paid for doing something you love. It’s an incredible feeling, and it inspires you to do awesome work. It makes you extremely valuable to employers.
Have I missed anything out? Share your own experiences, I’d love to hear them!