Things I've learnt as a self taught software developer
I’ve now been a ‘self taught’ developer with 6 years professional experience. The process of reviewing graduate applications for my company has got me thinking about things that I’ve learnt coming into the industry and as I’ve gained more experience. I’ve got some groupings here that go beyond the non obvious stuff (know how to code)
Be someone people want to work with
As a case study to illustrate this I’d like to talk about 2 people I’ve worked with previously. One was probably the best developer I’ve ever worked with, one was bang average. One rose through the ranks with amazing speed, one was borderline pushed out of their job. The difference? One of them was someone people liked working with.
To illustrate the point I had to visit Amsterdam to work for a period of time very early both in my career and in a new job, and I knew absolutely no-one there. Despite working in a totally different team Mr Soft Skills introduced himself and made sure to introduce me to the rest of the team (which my boss hadn’t bothered to do) took me to lunch and made sure I was settling in OK. It was genuinely such a small thing but the fact I still remember it so long after shows the impact these gestures can have. If everyone you work with has positive interactions like this with you it makes such a huge difference. This is something I personally sometimes struggle with - I’m quite proud and can sometimes get annoyed if condescended to or if dragged into something that’s not my responsibility.
Learn the theory
This is true if you haven’t done a CompSci or Software Engineering degree and is potentially true even if you have. While you’re starting a first job or as a junior it can be overwhelming so don’t always feel you have to work constantly. No-one ever expects you to immediately start producing like a senior developer but if you want to progress you will need to catch-up on things many of your colleagues will have learnt at university.
There’s some great resources out there, especially TeachYourselfCS and many free Youtube lecture series. In terms of importance my recommendations for areas of focus would be (from a BE developer perspective)
- Learn another programming language in a different paradigm - e.g. if you know Python learn (some) Functional Programming, if you’ve only used Javascript learn some Java. This will stop you getting stuck in one way of thinking and broaden how you think about code in general.
- Databases - understand things like transaction isolation levels, broadly how query optimisation works and concurrency models. Schema design is very often the most critical part of application design, yet it is often overlooked by self taught developers.
- Algorithms and Data Structures. Initially this may seem like overkill but the wrong data structure choice can absolutely scupper an application.
- Networking - doesn’t have to be super in depth but knowing the basics of DNS/HTTP will serve you well in our distributed computing world.
Don’t be picky for your first job
If you don’t have a CS degree or any proven experience getting a first job is rough, especially at the time of writing. My only experience of programming before I got a job was writing Data Science-esque code at university in Python. My first job was writing a Spring Java monolith for a small Insurance company in my hometown where I lived with my Mum.
Was it glamorous or prestigious? No. Did I like Java? Eh. Did I enjoy it? Sometimes. Was it good for my career? To an almost absurd degree yes.
When you start working you’ll learn far more than by teaching yourself, generally if you’re enthusiastic your fellow engineers will be more than happy to talk to you about anything and everything. I learnt so much about low level programming, how to help out with sales calls, how to work with product managers, the list goes on. This is almost impossible to self learn. I actually feel bad for ‘kids these days’ that are going to miss out on working in person and learning this stuff through osmosis but do what you can.
Make mistakes and learn from them
The most successful developers I’ve worked with have invariably been ones who have put themselves forward for new projects and suggested their own. At some point you need to make bold decisions yourself and suffer the consequences. I’ve been responsible for some disasters in my time, but really - looking back on them - they were fairly minor incidents that everyone else forgot about in a day or two.
I’ll tell you what though - experiments that pay off can be some of the most rewarding things you can do. They’re really a win-win: either your company gets a cool new feature or you learn for the rest of your career why something is a bad idea! (This depends on working somewhere that sees problems as a learning experience and not a stick to beat someone with)
You are not your code
Negative feedback on code submissions can be upsetting but never take it personally. Fundamentally you are making a product for a company - it’s never ‘yours’. There’s nothing more frustrating than a Junior Developer defending crazy design decisions because they can’t bear to be ‘wrong’. Of course some PR reviewers can be nasty. I hope you don’t experience this.
Generally, especially early in your career if you disagree with a comment ask the reviewer to explain it in person. 9/10 you’ll learn something new, the other 1/10 will be developers unaware there’s a new and maybe better way to do something - this is your time to shine! See a PR review as a learning experience and bear in mind that you too will think the code you’re writing now is terrible in a few years time.