I believe the other name for coding is the “struggle”. And if you are a beginner or a junior developer, this struggle often is multiplied by 100. Learning to code, finding the right resources, making a portfolio, hunting an internship or a junior dev job, and then working on a real-life project — everything can be a struggle.
But the good thing about struggling is that you learn and come out of your comfort zone to experience new things and implement new ideas, eventually polishing yourself to be a better version of you.
In the tech industry, there are a lot of success stories presenting a long journey of struggle and learning. Everything looks fascinating from the outside. Especially for junior developers, their senior colleagues and mentors are the best people who come up with great logic and astonish them with their amazing ways of writing code.
But when we get closer and see things clearly we realize that everyone has to face challenges, everyone gets stuck with bugs and errors. But through time and experience, we see that they just get stuck on bigger and complex challenges than we do.
Let me share my two favorite tweets from two people from whom I learned a lot. These tweets always make me smile and motivate me. I realize that perhaps we are all in the same boat and sharing the same vision for the same destination.
In the learning phase, I was always in search of appreciation and acknowledgment that I would ever become a good programmer. I wanted to know if programming was my thing or not, or if I would ever be able to write good logic and code as other great programmers do.
Getting stuck on small issues and not being able to fix things quickly used to make me flustered and frustrated. But seeing some top programming celebrities being honest and displaying to their followers that they are also not perfect helped me believe in myself.
And my second most favorite tweet during my time of struggle was from one of the finest developers and the author of the You Don’t know JS series, Kyle Simpson.
Haah! Feeling good? I’m not sure about you but this made me feel a bit more relaxed for some time at least.
After sharing my story of learning and not earning in my previous article, today I’m going to share another phase of my technical journey: after a long struggle of getting a job, struggling to survive in that job.
A bit of recap
I recently started a remote internship at Outreachy. I’m working with Mozilla on the Firefox health dashboard for the next three months. I realized that with learning and experience, my fears and insecurities about my career also changed. This article is part of my internship assignment — to write down the fears and challenges I faced during the first few weeks of the internship. I hope it helps newcomers and those junior developers who are struggling to get in the race or survive and lets them know that everyone struggles and it is necessary for learning.
I was excited and a bit nervous to start my first week at Mozilla with everything ready the night before. but I didn’t see an unexpected thing coming: a nine hour long electricity shortage at my place. I was unable to communicate with the mentors and start anything at work.
Thankfully, it came back at 5pm and I had a very welcoming onboarding meeting with Outreachy fellows and the mentors from Mozilla. Things were quite interesting and new to me, like meeting people from around the world and communicating in English for almost an hour. I met my mentors Armen and Dustin for the first time, and it was good to see them. It felt totally different than emails and messages.
My mentors already had a trello like board organized at GitHub with some issues placed according to their complexity. Starting the next day, I had to pick issues and start working on them. After starting to work on the issues I realized that the party has just begun. The previous struggles were just a trailer.
It’s all about understanding the code.
My feelings while applying for the internship were totally different from the feelings when I started. Now the fears of not getting this opportunity got replaced with the fear of not doing well and ending up losing it.
And it was really hard when I was stuck with my first issue which was to customize the graphJS tooltip according to the requirements. At first, I thought I would be able to do it easily but it really gave me a tough time. I was unable to figure out the solution for two days.
I asked a couple of questions from the mentors and was trying my best to solve it. But for a moment, I believed that I wouldn’t be able to fix it and that was depressing.
At that time, my mentors didn’t pressure me. Instead, they gave me the confidence and the idea that it is totally okay to struggle with a new, large code base. Sometimes it takes time to understand things and the code written by others, so we shouldn’t be hard on ourselves. We need to take our time to grasp new things.
After realizing that I was struggling to understand the code base, with hundreds of functions and files, my mentor told me about the Rubber Duck Technique and asked me to explain the code to the rubber duck. This would help me get a better understanding of the code and what was going inside.
“It is okay to get stuck, we all get stuck with issues and errors. With the years of experience we get stuck less, but we still get stuck.” — Armen Zambrano
So here are my findings
Knowing where to start is half the battle
Most of the time you know the solution, and maybe the logic, and how to implement it, but you don’t know WHERE TO BEGIN! With a lot of code files and functions, you get confused as to where this solution should be placed to work well. My mentor Dustin Mitchell suggested that I use comments to understand the code and functions, in addition to my own technique to console.log(everything that comes in the way).
After the first issue, things went a little smoother but were still challenging. I got stuck again on a relatively complex issue and it took a few days to get fixed. But luckily, our mentors and people in opensource are kind enough to understand that we, the junior developers, sometimes struggle — and they don’t make us feel bad for this. We need more people like these in tech who are willing to help and mentor, who provide juniors with the best resources to learn and not to burn out.
Merge conflicts hurt!
Ah!! If you are a beginner and new to opensource, I want to warn you about merge conflicts. It hurts badly when you don’t know to how to resolve them, you have spent hours on finding the solution of a problem and you end up losing your code in an attempt to fix the merge conflict.
I ran into some conflicts and I messed up with a few git commits. It was annoying and scary. But I wouldn’t have learned some new concepts in git merging, committing, and resolving conflicts if I hadn’t done this. Thanks to Sarah Clements and Dustin Mitchell for helping me get out of the merging trap.
Recognizing your own code is a struggle
This holds true for almost everyone, and it is really funny that even after a few days we fail to recognize our own code, written by our own hands. After solving a bug, I tried to solve a similar bug and went back to the previous one for reference. And I was like… how come I wrote this code and why the hell is it working?!
Working code can be as confusing as a non-working code. In most cases, the working code gives us a tougher time. And sometimes after coming back to old code, you rethink it and you can come up with a better solution. So you don’t need to worry or feel bad if you don’t understand your own code or others’ code. Maybe you are close to learning something new.
Tell me how to survive
Based on my first few weeks as an intern, I have some suggestions for myself (and others) for the rest of the internship. And most of these suggestions are from my mentors and awesome people I met at Mozilla during the internship. I am sharing them with you, so that maybe they can help you, too.
Don’t take things personally and focus on learning
This suggestion is by Sarah and I second that. It is hard to not take things personally and feel insulted when a senior dev or mentor makes a correction or suggestion. It’s even harder when you’re working in open source and it’s in a public platform.
But I recommend that you focus on this point and have a learning attitude. You won’t be able to learn new concepts and good coding practices unless you have a humble and learning attitude. Put all your ego aside and focus on learning from the experience and knowledge of others.
Absorb the maximum amount of information and ask about new things
Keep your eyes and ears open and try to absorb the maximum amount of information and have a thirst to learn new things. Don’t be afraid of trying new and different things which are not in your comfort zone. Sometimes we feel comfortable with our way of thinking and writing code but there are some good practices and design patterns we aren’t aware of. Try to learn as much as you can. This is only possible if you follow the advice mentioned in the first point.
Do your homework before asking questions
Asking questions is not a bad thing, and especially when you are stuck. But it is good practice to do your homework and due diligence first and come up with some valid questions or a solution. Then you can get a review from your mentor or seniors.
This will help you to figure out how to do things on your own. Your mentors will also not feel that you are not putting in the effort before asking. People in open source and in senior positions are often nice and willing to help you if you come up with a valid question.
Do not compare yourself with others
Do not keep comparing yourself with others. It will affect your performance and you will end up losing your confidence. Remember, every master was once a beginner. Everyone struggles, and even your seniors were also at your place in the beginning. They are familiar with the pain and the challenges a junior developer goes through. No one becomes a master just in one night — there is a process and everyone has to pass through the process. Wait for your time to come, and until then, work hard.
Remember, every junior developer is in the same boat you are — you are not an exception. What we study in college is very different from what we have to implement in real life, and we need to learn a lot of things to be a competent developer in the industry. And every senior has been at your place and is familiar with the pain you are in. You just need to focus and have a learning attitude to keep learning and keep growing.
I’m planning to share more things based on my experience and learning. This is the 2nd article of the series I am writing after getting my remote, paid internship through Outreachy.
Feel free to share your thoughts @aimenbatool.