Freshly graduate, you are enthusiastic about your first job but it’s more difficult than you expected. We have all been there at some point. I have been lucky to receive great advice and I would like to share some of those as I think they can be very valuable.
Software engineering is hard, especially for newcomers. It’s easy to feel overwhelmed by the number of things you have to learn. Job descriptions are intimidating and you might end up with this feeling that you are not ready, that there is still so much to learn. So here comes my first advice.
It’s ok to not know everything. Focus on one thing at a time
As a junior developer, we don’t expect you to know all the technologies from the CNCF landscape for example. We know you can only be proficient in a few programming languages. It’s normal and senior developers know just a little bit more than you. Be sure that the knowledge gap is narrower than you think.
Don’t be afraid of job descriptions. You can apply for a job even if your profile doesn’t match perfectly. Recruiters know their expectations are super high, sometimes a bit too high…
I saw a job post the other day. 👔— Sebastián Ramírez (@tiangolo) July 11, 2020
It required 4+ years of experience in FastAPI. 🤦
I couldn't apply as I only have 1.5+ years of experience since I created that thing. 😅
Maybe it's time to re-evaluate that "years of experience = skill level". ♻
If you want to feel confident about your skills, don’t try to rush and learn everything, navigating from one side project to the other. Focus on one thing at a time. Start with a language, then discover popular libraries or frameworks for this language. Build small projects along the way.
You can create your own roadmap to help you throughout your journey. It will help you stay consistent and motivated. There are some nice inspirations on the Internet.
Companies don’t expect you to know everything but there is a minimum you need to know and this brings me to my second piece of advice.
Know your basics very well
A few years ago, I was in a position where I wanted to become a data scientist. This job attracted me because the achievements of this new discipline were incredible. While I was watching the excellent documentary on AlphaGo, the first AI to defeat a go world champion, I thought it might be a good idea to learn more about the techniques they used. Oh God, I was incredibly wrong.
Starting your data science journey with recurrent neural networks whereas you don’t know the basics of machine learning yet is way too ambitious. First, this is useless because the step is too high but worse, it will demotivate you.
In short, don’t put the cart before the horse.
There is a couple of things you can learn and you can be sure they will be helpful:
- Version Control: Git is widely used nowadays, focus on learning the concepts, not the commands. You will use Git on a daily basis regardless of your job title. This is required for all developers.
- Testing: testing is language agnostic. Learn the philosophy behind the tests. For instance, do you know the difference between a unit test and an integration test?
- Networking basics: know the basics of networking protocols like TCP/IP, HTTP. Would you be able to tell what is a hostname? How is it related to DNS?
You may have noticed that I have mentioned hard skills essentially. As a junior developer, they are mandatory because we expect you to deliver features quickly and you don’t have any other responsibilities. But as you grow, you will see that soft skills are as important and it is never too early to work on them.
Work on your soft skills
Hard skills run the tech, soft skills scale it up.
This quote is from Jean Baptiste Pringuey, VP of engineering at Teads, a large tech company specialized in online advertising. I couldn’t agree more. As a developer, you need to permanently reinvent yourself. This requires two main character traits:
- humility: in this field, everyone can teach you something, from the intern to the CEO. There is a book that really opened my eyes to the subject: the start-up of you by Reid Hoffman, the founder of LinkedIn. In this book, Hoffman highlights the fact that you have to adapt yourself continuously in order to stay up to date. This is what he calls the “beta” mode.
- listening: if you want to make progress, listening is fundamental. Embrace code reviews and pair programming. They are great opportunities to develop your coding skills but only if you are listening. Accept feedback.
Also, work on your written and oral communication skills. During the pandemic, you may have discovered the importance of clear communication while working from home. Here are a few tips you can keep in mind:
- Be precise and structured.
- Don’t assume anything about the person you’re speaking to. It is a common mistake to assume the person in front of you has the same context as you. This is never the case. For example, during daily meetings, you can use this template: “I am working on the user story X. I have identified n subtasks. I have completed the first task which is X. Now I’m moving on to the next one which is Y. I’ve found it challenging. I have a lead but I would appreciate your help, Alice.". Thus, everyone has the same level of information, you provide clear explanations about your progress and announce the next steps.
Finally, be kind and remain positive throughout challenging periods. Don’t forget that you are part of a team, be the person everyone wants to work with.
That’s a wrap! We have seen that in order to be a better version of yourself every day, you need to be patient and focus on one thing at a time. On the other hand, even though hard skills are required for your day to day job, soft skills will help you keep growing.
Again, this is not me giving you some advice, this is me forwarding the best advice I’ve received. They really helped me evolve these past 2 years.
This post was more personal and meant to be a basis for discussion as I keep receiving tips from my coworkers. For instance, read the official documentation first before googling your issue, stay off the hype-driven development, think in terms of business/user needs, take some time off, etc.