As a software developer who started out by teaching myself C programming when I was 11 years old, I've seen things change quite fundamentally over the years.
One discussion that comes up time and time again is: what's the difference between a junior software developer and a mid-level software developer. When hiring for roles, you really want to know what the difference is—and for the employees you do hire—ensure they have a clear pathway to progress.
However, it's hard to articulate. At a simplistic level it usually goes along the lines of:
- A junior developer has the basic competence for programming, but needs to be mentored on how to do things. They will require a lot of support from other members of the team.
- A mid-level developer understands how things works and can implement solutions unassisted based on how things have been done before. They require minimal support from the team to help them deliver.
- A senior developer can help make things that haven't been done before. They are pushing the forefront and often support the team in their deliverables.
As a senior software developer myself, it's hard to remember what it's like to be someone starting out. What should a junior developer need support with? How much responsibility can they be given without needing time from the rest of the team to support them?
For a junior developer, they want to progress, but they don't get told exactly how to achieve it. It's overwhelming and it's frustrating for them.
Then I saw this Tweet by Povilas Korop, and he articulated a point of view very well.
Being a junior developer in 2023 is very hard. There's so much to learn. Where do you start? Each topic has an endless depth and feels like you'll be stuck being a junior developer until the end of time.
Reflecting on how I managed to become a senior developer, it comes from 25+ years of learning. When I started, the technology was simpler. There were fewer books to learn from. You couldn't really go down a rabbit hole as there wasn't endless information, variations of technology, and multiple layers of abstraction.
But to start out today, you jump right into the overly complex landscape. Everything is an abstraction of something else. GraphQL is an evolution of REST, which is an abstraction of HTTP sitting on top of TCP/IP.
To be a junior developer, you are looking for clues for what to learn and what to experiment with. It's overwhelming. You want to do everything, because you want to be good at everything—because that's what you see with the mid and senior developers. They seem to 'know' what's what. Just one look at roadmap.sh and you'll realise how deep the network of rabbit holes can go.
And if programming isn't the field you're in, the same applies. Maybe you're a videographer who wants to do sound design, visual effects, storytelling, editing, camera and lighting. Do one thing at a time.
If you're a writer, focus on taking notes, storytelling, character development, prose and such. Don't aim for a masterpiece until you've mastered the pieces.
Today's Ah-Ha moment is that if you're a beginner it can be overwhelming to know how to learn what you need to learn. Break it down into small pieces that you can build upon. Learn and master those skills first. Iterate and get feedback. Take your time. Most importantly, love why you're doing it and enjoy the process.
Want to level up your note-taking and be a deep meaningful thinker? Check out my book Atomic Note-Taking.