DEV Community

Rana Emad
Rana Emad

Posted on

How easy do you find resources that can help a developer transition from intermediate to senior level?

I have noticed that there are infinite resources to get you started as a beginner, but rare ones that define advanced topics that can help you level up and reach a senior level.

There is some sort of unwritten agreement that you have to learn advanced topics the hard way through your work experience, but some developers are not lucky enough to be subjected to the right challenges that might help them grow. How do you educate yourself?

Top comments (5)

Collapse
 
gsto profile image
Glenn Stovall

Are there any specific topics you want help with? I might be able to provide some more specific recommendations.

As far as books go, my go to recommendations are The Pragmatic Programmer and Code Complete. Both of these books guided me to many huge level-ups early in my software career.

Collapse
 
ranaemad profile image
Rana Emad

Thank you for sharing those useful resources, Glenn!
No specific topics, I was talking in general, as I've met more than a couple of developers struggling with this and I wanted to know how other people handle it.

Collapse
 
otijhuis profile image
Okke Tijhuis

It's a very interesting question which got me thinking about it for quite a while. I've been doing software development for over 25 years and the following is based on my personal experiences and my own opinions.

Looking at your question it seems you've made the assumption that you have to know about specific advanced topics to be considered a senior.

Advanced topics are usually related to a specific set of problems. There are an infinite number of advanced resources out there but you often need to know what you're looking for before you can find them.

In my experience the best developers are actually the ones who keep things as simple as possible. Knowing when and why to reach for a certain solution is what makes them senior. This requires experience. The fact that they know advanced topics usually means they ran into problems where that knowledge was needed.

Making a lot of mistakes and facing all kinds of problems is important. These can range from tiny to big mistakes and from technical to team or business related issues. Look back all the time to see what you did well and where you could improve. If you can't figure it out yourself, don't be afraid to ask. You'll start to see patterns and figure out why and when something did or didn't work, and also what was important and what wasn't.

Even though you'll gain a lot of technical expertise, the most important skills you'll develop are your soft skills. Communication, analytical thinking, problem solving and so on. And those skills transfer really well. This means that everything you do outside of work which require those soft skills will benefit your work as well.

Of course there are things you can do to help yourself improve more quickly:

  • Always ask why (search for '5 Whys')
  • Make use of books and other resources. Topics I'd recommend: general programming practices like Glenn Stovall mentioned (consider them guidelines though, not absolutes), soft skills, software architecture. Books like '7 languages in 7 weeks' are great as well. Why? They teach you how you can solve problems in different ways. Don't focus on the languages themselves but on why they were designed a certain way and what trade-offs were made. Unless you want to be a specialist in a certain field I find it's much better to know a little about a lot of different topics. My experience is that a lot of developers just accept complex solutions because that's all they are familiar with.
  • Review code of a senior developer who's willing to explain to you why a certain solution was chosen. Don't just read their code and assume it's the best solution, even if it works. Often it isn't. Trade-offs, time restraints, weird business requirements, familiarity with certain solutions...all can play a major part. Being a senior developer, I find this helps me as much as the person who is trying to improve. It makes me really think about if it was the simplest or easiest solution and if I understood the requirements correctly. Maybe the code wasn't readable enough. It also allows me to teach, which in turn improves my own understanding of the topics and skills like communication.
  • Ask a senior developer who has the skills you are interested in to pair with you.
  • Try to get more responsibilities when you feel you're not growing. You can also switch to another team or even to another company. My favorite way of improving? Finding a team or company with people who are more skilled than I am in the areas I want to improve in. It can be scary at first but you make your own luck. Don't blame the situation.
  • Do personal projects. They often teach you more about how to do something because you aren't dealing with business requirements, team dynamics and other restrictions. They are still a great way to learn about new technologies though and improve your problem solving skills. Don't do these kind of projects because you feel obligated to! You should enjoy doing them. I do a lot of stuff at home but that's because I'm basically addicted to learning. For me it's fun.
  • Learn how to manage and influence people. Almost all major problems you come across in projects are people problems, not technical problems. Impossible deadlines, constantly changing requirements, bad communication, team chemistry, the list goes on and on. This is actually the one area I wish I was much better at. If you're good at this you might have a greater impact on a project than a whole team of technical people combined.
  • Embrace the fact there's always something more to learn. When you stop making mistakes and stop failing, you are not pushing yourself hard enough.
  • Admit when you're wrong and don't be afraid to apologize. I heard someone say recently "strong opinions, loosely held". That's me in a nutshell. The more experience you gain the stronger your opinions tend to get. Always stay open minded. Everyone brings their own set of experiences to the table. Healthy discussions are a great way to challenge your own opinions.
  • Have fun.

In the end it's all about knowledge vs wisdom. Even as a junior developer you can gain a massive amount of knowledge (Google). Knowing how to properly use that information requires experience.

I love having juniors on my team though. They often add way more value than they think. They bring their own experiences, energy, and a pair of fresh eyes. And because the whole software landscape changes so quickly, chances are they actually have something to teach the seniors.

Collapse
 
ranaemad profile image
Rana Emad

Wow! Thank you for taking the time to share your point of view.

Collapse
 
otijhuis profile image
Okke Tijhuis

Thank you for asking the question. It was nice to look back on the experiences I've had in my own career. I hope it's helpful and that it at least explains why experience is considered such a crucial part of being a senior developer.