It's safe to say senior software developers are not supernatural elves with four arms, each with 8 fingers. (... or are they?!). Neither are they born with bash commands. I guess what I am trying to say is that all software developers start off with that cute looking "hello world" program. With time, given the right help, their curiosity and the burning love to be better, software developers are able to whisper to machines better than skynet.
Over the years, I have been lucky enough to work with a couple of junior developers at different skill levels. It's a privilege I must say. One that definitely comes with a beautiful set of responsibilities. The first thing I usually do is to make it fun for myself, that makes it easy to pass on the fun to the junior developers. Followed by creating this learning environment where it's not about a single individual who knows everything, but rather contributions as a team. Usually, this makes it easy to ask questions, learn from one another then become really good in this field.
The first thing I usually do is to make it fun for myself, that makes it easy to pass on the fun to the junior developers.
Without further ado, let's jump right in. These are some of the most important things that I think leads/senior developers should try to pass on to the junior early enough. The goal is to have junior developers that love what they do, feel challenged yet at the same time confident enough to contribute in any way they can. This list is not in any particular order. (Look at it as a random array of strings)
Here are a few things junior software developers need to know:
- That it's crucial to finish one thing at a time. However small it can be for as long as it adds value. The skill here is to know how to break tasks into smaller sub-tasks that you can easily close off. Resolving tasks is a great motivator.
- Know when to stop, get off your desk if you need to and ask for help. It's okay to ask for help. A lot of times one just needs a second pair of eyes. Most people learn faster this way. This also means you won't get stuck on one small thing for hours.
- When you do not have work, do not wait for someone to reach out first. Make it your job to reach out to the lead developer or project manager or anyone supervising. Also, don't wait to first run out of work completely. Plan in advance. Let the respective people know earlier. A good team plans in advance. This will also improve your self-management skills.
- When a lead /senior developer asks you to do research, come up with a plan, then run it by them before implementation, please do so. This is not an exercise of power. Planning before implementation is crucial. The senior developer can easily help you eliminates loopholes. Push you to think bigger.
- Find ways to beat time. The time factor is quite important even at the junior level.
- During reviews with a senior developer, make it a habit to write down any changes. This helps to capture all the feedback.
- During implementation, pay attention to the requirements of the task. I know, it's very easy to meander. Priority should be the needs the task assigned to you. That said, it's okay to be creative. But if you ever get suggestions, additions (or subtractions) during implementation, please note them down. Later discuss them during reviews. DO NOT just go ahead and implement them.
- Senior software developers are not gods, (... don't say it to their face though!) so feel free to challenge them with questions and suggestions. Do not make it a winning spree though. You might get burnt!
- Be very descriptive when discussing a feature/task. Sentences like "the other project in the first solution that library with a red logo", "the other database thingy" Knowing what these "thingys" are actually called is great for learning. Outright communication is key.
- Add simple, straightforward and meaningful commit messages during versioning. Having 20 commits with the same commit message eg "Cleaned up code" is not ideal. It can be a nightmare during merging, pull requests or even reverting code. Other team members will not like you for it.
- Comment your code with natural language. Remember, these comments are made for other humans. That is if you are human yourself! I know it can be tempting to try and complicate the meaning to look badass. But in the end, it will only cause frustrations when other team members don't understand your comments.
- Understand the versioning strategy of the team/company you are working with. Your team members hate to run into merge conflicts because of small(really big) mistakes like pushing to the wrong branch.
- Make it a point to push your code before closing off the day. Yes! even when it's not yet stable. That's why develop/feature branches exist in versioning. Also why versioning exists in the first place.
- Take a break. Zoom out for a bit. Try a different angle. Chat with someone else about something other than code for a few minutes. It's okay to relax for a second.
- Try to find out your most productive hours within the day and use them to the fullest. You can even let the other team members know. Block off time to give it your best. Avoid distractions at all times.
- Keep an eye on what comes naturally to you. In terms of front/backend, DevOps etc. I know it can be hard to find out by yourself as a junior. But if you do, it's very helpful especially when you work in teams. Your teammates get to know your strengths early enough. It can become a motivating factor even when you can do everything (full stack).
- It's okay to copy-paste code from stack overflow. But, always make sure you know exactly what the code can do before you commit it. If you ask me, don't copy-paste such code. First, Type it out yourself. Then, take a minute to understand each line.
- When you get a chance, listen in during planning sessions. And sometimes you might not get the whole picture and that is fine. Things start falling into place finally; one piece at a time.
- Ask, ask and ask. Got it? No? Ask again. But remember, ask to understand.
- Have fun finding solutions to problems that affect real people. It's fulfilling.
That's it for now. I hope this doesn't come out as a rant but rather ideas on how to be a better junior software developer.
Benjamin Lutaaya is a software developer at Laboremus Uganda. Follow him on Twitter: @benjunni.