You seem to be located in .

Corporate website

Blog

How to accel­erate your growth as a Junior Devel­oper 

By: Xuemei Wang, Engineering Manager

Recently, I have received a lot of questions about how I learned as a junior developer. After spending some time recalling my learning journey and answering the questions, I decided to put them down on paper. Hope you can pick one or two tips up to speed your learning journey as a junior developer. 

Learn programming as you would a natural language.   

Question One: There are a lot of things I need to learn. Where should I start?
I am not a native English speaker. When I started learning English, believe me, reading was not a pleasurable experience. In just one sentence, there were always many words I needed to look up in the dictionary. Sometimes, one page took me more than an hour to finish. So, I lost interest in learning English. I felt English was too hard for my simple brain. Until I learned to ignore new words, I just tried my best to guess the meaning based on the context. If a new word appeared more than 5 times, then I started to learn it. 

 

It works the same way when you do not know what to learn first as a developer. When you are working on an existing codebase, you can likely find examples in the codebase, Google, or even ChatGPT. Perhaps, only copy-pasting is already enough for you to finish your task. For the code you copy-pasted, you should first try to read the syntax and understand it. These are the known 'English words' for you. You will absolutely encounter some code out of your knowledge, too. These are the 'new English words' for you. It could be a keyword in a programming language like 'suspend' in Kotlin. 

https://kotlinlang.org/docs/composing-suspending-functions.html 

 

Or a feature in a framework like 'useState hook' in React:

The factory design patten: 

https://www.oreilly.com/library/view/head-first-design/0596007124/ch04.html

It's time for you to count how many times you have met them during your daily work. You can set up a threshold for it, and once it's reached, you know you've got one more thing on your to-learn list.

Focus on the Right Thing to Learn 

Question Two: How should I learn? 

I made a mistake when I was a junior developer. I spent too much time on specific language syntax or frameworks rather than on patterns and principles. As a result, when the language or framework was no longer popular, I had to start from scratch again since I only knew how to solve problems using one specific language syntax or framework. AngularJS v1 is one example. 

 

Nowadays, with the rapid development of AI, syntax and frameworks are becoming less important for developers. If you know the pattern to solve a certain problem, you can simply talk to ChatGPT in plain English, and a code example can be generated for you in a couple of minutes.

 

When you are facing a problem, try to Google or ask ChatGPT about the problem itself without mentioning any specific language or framework. This is how I do it: I asked ChatGPT, 'I have different types of vehicles, and there might be new types coming in the future. Every vehicle has its own type of maintenance plan. What pattern should I use to make the code extendable for new types of vehicles?' Below is the answer I got from ChatGPT:

  

In terms of design patterns for extendable code, you might consider the Factory Pattern for creating instances of different vehicles or the Strategy Pattern to define interchangeable maintenance plans. The use of interfaces or abstract classes can also help ensure that new vehicle types adhere to a contract for maintenance, allowing for easy extension and integration of new vehicle types.

 

Then I can delve deeper into the 'Factory Pattern' and implement this pattern in the programming language used by my project.

 

Ps: <<headfirst design patterns>> is a good book for learning design patterns

 

Refinement meeting

During the refinement meeting, you can observe how senior developers approach a problem and break it down into stories. I used to play a role-playing game during this meeting with myself. I imagined if I were the only developer in the meeting, how would I solve this problem? At the end, I compare my solution with that of the senior developers, as well as ask them how they came up with their solution.

 

Pair Programming

When you are pairing with someone, before diving into coding, try to discuss the story first. What is the business background? What problem does the story try to solve? Are you both on the same page regarding the story? You can even draw a diagram together to plan out the story: what steps will it involve?

During coding, try to think out loud, explaining why you want to write your code in a certain way. By doing this, you will reinforce what you know by talking it through or teaching it. Never think that senior developers know everything. Most senior developers I know have told me they learned something from pairing with juniors. Also, ask questions, such as 'why?' 

Try to follow the same steps when you code alone as well. Think and draw up your solution first. It's even better to discuss your solution with a senior developer, ask for suggestions, and understand their reasoning.

 

Know the What, and Know the Why 

I learned coding through a coding bootcamp without a computer science background. When I started my first job as a developer, there were a lot of terms and computer science concepts I had no clue about. To overcome this challenge, I normally carried a notebook with me during refinement meetings or pairing sessions. I asked as many questions as I could and made notes on these I needed to investigate further.

 

I remember that once I paired with one of my colleagues. I noticed he implemented interfaces a lot rather than extending classes. He explained the principle of  'composition over inheritance' to me. It was a complex topic for me at that moment. So, I took what I could from his explanation, then spent a lot of time learning and practicing it afterwards. 

 

As a developer, the more you know, the better you realize that there is no single best tool/pattern, only the most suitable tool/pattern for a specific problem. This type of deep knowledge gives you the skill to choose tools accordingly. 

 

Learn Things One by One in Isolation

In this modern world, we all program on top of others' programs. It’s common that when you try to follow a tutorial online, there are many prerequisites you need to install or set up first. For instance, when you only want to learn to build a simple Express service, but the tutorial you found uses Docker to build the service as an image and run it locally. My suggestion for this case is to follow the Docker instructions without spending time trying to understand it. Only focus on Express. If Docker hasn't reached your learning threshold, you can just ignore it for the time being.

 

Familiarize Yourself with Your Daily Tools

IDE/Editors, terminals and Git are the most common tools for developers. Familiarizing yourself with their hotkeys and set up terminal aliases can increase your productivity by saving time on boring and manual tasks, allowing you to focus on learning important skills.

There are some tools and learning materials I would like to recommend:

 

Generative AI takes it up a notch. According to McKinsey, it can increase developer speed by 45-50% for simple tasks, even though not for complex tasks. It's absolutely worth your time to master it. https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/unleashing-developer-productivity-with-generative-ai

 

Seek Constructive Feedback

Find someone you respect and trust, tell them witch specific area you would like to get feedback on, and then ask for feedback regularly.

Business Knowledge

Question Three: Beside technical skills, are there any skills we need to learn? 

Ultimately, software is a means to solve business problems. It provides additional context, from understanding technical architectural decisions to designing your Regex expression.

Take this as an example: if your company is a startup, you might choose Heroku rather than AWS as your cloud-based platform. This is because the deployment and scaling of applications are taken care of by built-in runtime services and automatic management of infrastructure, eliminating the need for a DevOps team to manage the infrastructure. However, for global enterprises like Scania, AWS becomes the better choice due to its scalability and curated web services in my opinion.

Another example is if you know the special symbols contained in your customers' vehicle registration numbers, you can write a more accurate Regex expression for validation.

 

Agile Methodology 

Nowadays, most software development teams work in some form of Agile methodology. There are a few popular ones: Extreme Programming, Scrum and Kanban. Your team might follow one of these. A good understanding of these methodologies can provide a better perspective on how your team operates. 

There are also some good resources for learning Agile.

https://agilemanifesto.org/

https://martinfowler.com/agile.html

https://martinfowler.com/bliki/ExtremeProgramming.html

 

Soft Skills

You are a developer, as well as a team member. Being a good communicator and team player is a big plus for scoring your career as a developer. Especially in a cross-functional team, you are communicating with developers, as well as non-technical team members e.g. production owner, UX designer. You need to be able to explain technical problems to them too.

 

Be Patient with Yourself

Last but not least, there is always a lot to learn when entering a new career. There is an old saying, 'More haste, less speed '. So, be patient with yourself; as long as you don’t stop learning, time will be the ultimate ingredient for your success.

How do we accelerate growth among our developers at Scania? 

I believe that we have many diverse developer communities at Scania. The help you can receive isn't limited to your own team. There are numerous channels and internal conferences you can join. You can always find developers who are interested in the same topics to exchange ideas and seek suggestions. At Scania, we believe in servant leadership and a bottom-up culture. We encourage you to express your ideas and suggestions regarding your personal development plan. Your manager will support you every step of the way to make it happen.