Whether you're new to software engineering, or you've been doing it for years, we can all strive to be better. Here are some things (that I still do) which helped me to get to where I am now.
I've heard so many junior engineers shy away from code reviews because they “don't know enough”. You're actually the perfect person to review my code. Good code is simple code. Good code doesn't need you to have been programming for years before you can understand it. If you don't understand my code, I need to know!
Code review is the perfect opportunity to learn from other engineers. You can ask questions around the code; “Why did you do it that way?”, “how does this work?” etc. Most engineers will enjoy explaining it to you.
Challenge yourself to make at least one comment on every single code review you look at. If you understand everything and think that it's great, let that be your comment! We all need more positive feedback on code reviews (even senior engineers feel impostor syndrome). I started doing this four or five years ago and it helped me to grow massively.
Take your time going through the code. Make sure you're engaging with it and you understand how it fits together. Think about how you might have gone about it instead and then think about the pros and cons to each approach. This could be a really great conversation between you and the author of the work which could benefit both of you. I know I've had occasions where my junior engineers provided a better solution than what I had.
I wrote an article on mentorship in a general context, but my experience is in mentoring software engineers.
A mentor should have a regular catch up with you where you can talk about:
They don't have to be an expert in any of this stuff. One of the people I'm currently mentoring is about to do a course in machine learning. I know the very basics, so I've asked if he would spend some time during our catch up to teach me some of what he's been learning.
They should be your advocate though. They should look to help you take the next step to where you want to be. All they need to do is point you in the right direction and keep you accountable. I find taking some notes that are shared between the two of you helps as a reminder of what you spoke about.
Find someone who you respect and have a good relationship with and ask if they'd be willing to mentor you. It's such a privilege to be asked, so I'm sure it would mean a lot to them.
Another great way to grow is to mentor someone else, and like I said, it doesn't take an expert to do it.
You can't learn the guitar by reading about it. Stop reading and start doing. Think of a fun problem to solve and try to solve it. Or use one of the many websites out there which give you random problems (codewars is one I've used a lot).
Your mentor might be able to give you some ideas and encourage you to keep going with it.
If you don't get much opportunity to write code at work then maybe you need to change jobs. There are loads of companies who would love to take someone eager to learn and teach and shape them. This is one thing I love to do, so get in touch if you're thinking of moving.
If you don't want to take the plunge, try to make some changes in your workplace so that you can write more code. To your employer you are an investment. If you're not writing code and getting better, it's like your money sitting in a bank account with a horrible interest rate.
The industry is expanding so quickly that it's impossible for you to be up to speed with everything that is happening. Pick one or two things and “git gud”. Get to the point where you feel comfortable with it and if someone asked you to do something with it, your initial reaction would no longer be terror.
A friend described his approach to learning as “just in time”. If you're good at one language/framework/whatever, you can pick up another one if and when you need it.
If you're just starting out, I'd personally recommend learning JavaScript. You'll use it at most web development roles, and you can use it for both front end and back end.
This is something I do with anyone I mentor. We set a baseline for how the mentee feels they are in different areas of being a software engineer. It doesn't need to be an exhaustive list, but be honest with yourself. If you're doing it with a mentor, ask them to give their views as well (most of the time they'll probably agree with you, but sometimes they may highlight strengths you didn't realise you had).
Pick a few of your lower scores and decide what the next step should be to improve them, then do it!
Do this on a regular cadence and you'll soon see yourself improve.
Hopefully your employer has some sort of skills matrix that they can provide you, but I'm going to write down mine in a follow up post to this, so keep an eye out for that.
The best way to learn something is to teach it to someone else. You might think you know something, but once you start trying to explain it to someone else you realise where the gaps lie in your understanding.
If teaching someone isn't a practical option, write a blog post about it. I've written a couple on creating a run time micro frontend integration which has really helped solidify my understanding of webpack. I've just started to learn golang, so there'll be a blog post coming out soon about that too.
Don't be afraid to get things wrong, the worst thing that will happen is that you realise there's something you don't know. Which is actually the whole point of doing it.
Self taught software developer with 11 years experience excelling at JavaScript/Typescript, React, Node and AWS.
I love learning and teaching and have mentored several junior developers over my career. I find teaching is one of the best ways to solidify your own learning, so in the past few years I've been maintaining a technical blog where I write about some things that I've been learning.
I'm passionate about building a teams culture and processes to make it efficient and satisfying to work in. In many roles I have improved the quality and reliability of the code base by introducing or improving the continuous integration pipeline to include quality gates.