It's the best time to become a software developer. There are so many tools and resources. You can learn everything just by sitting in front of your computer.
It's the worst time to become a software developer. There are so many tools and resources. You can spend months or even years jumping from one tutorial to the other and never making significant progress, let alone finding a job.
Do you see the issue here? That's the paradox of choice. We can pick and choose from an infinite number of resources, but instead of helping, it makes us confused and paralyzed. Getting further advice from hundreds of internet experts makes our heads spin.
In the last few years, I've met hundreds of junior developers and helped some of them to grow and find jobs. Unfortunately, I noticed many focus on the wrong things. It hampers their growth and kills enthusiasm.
Here are some of the most common mistakes junior developers make.
Getting stuck on tutorials
Tutorials are awesome. You can watch a YouTube video for free and learn the basics of programming in a few hours. Even after over seven years of programming professionally, I still watch some tutorials to grasp the basic concepts of some new framework or the library.
Unfortunately, the tutorials also have a dark side. They give you a false sense of accomplishment. When you finish one, you get a dopamine hit. It feels so good. You're on top of the world, and the only thing you want is to feel it again. So you start the next one. But there's a thing:
No course or tutorial will make you a programmer. It doesn’t work that way.
Programming is not about typing random letters or following a recipe. It’s about solving problems in a chaotic environment with different stakeholders, priorities, and limitations.
Even the best courses can’t replicate it. The course environment is artificial; the teacher controls everything and has all of the answers. And all of the questions.
This is why you can feel so comfortable doing the course and hopeless when you have to code something yourself. Nobody will tell you what to do next, so you get stuck.
When you code by yourself, you have to break a big problem like "I want to build a to-do app" into smaller issues like:
How to store the tasks?
How to create tasks?
How to delete tasks?
What information is necessary for each task?
This process of breaking problems into smaller pieces is what programming is all about. And this is precisely what programming teachers do instead of you.
To learn to code, you need much more than the best course. You need to struggle. So if you want to grow faster, ditch the next tutorial and build some apps. You'll thank me later.
Learning too many things at the same time
If I had to pick one thing that helped me the most to get a programming job and grow, I'd pick a focus.
If I had to pick one thing that slowed down my growth and almost made me quit programming before finding the first job, I'd pick lack of focus.
When I started learning to code, I had no idea what I wanted to do. For months, I tried many different things, from C++ and computer science to Django, Flask, and even testing. I couldn't decide on one thing, so after five months of learning, I knew almost nothing and was on the brink of a nervous breakdown.
I decided to give programming one last try, this time focusing only on one thing — front-end development. Suddenly, my productivity skyrocketed, and my mood improved. Five months later, I had my first software development job.
Focus saved my career.
How can you improve your focus? First, identify what you're interested in and what fits your skills. The easiest way to do it is to make a negative selection. If you don't use mobile apps, mobile app development is probably not something for you. And if you don't have an eye for detail, the front-end will be boring. So maybe back-end or data science? Eliminate fields until you find a winner.
Always take just one step at a time. Ignore everything besides the step you're about to take. Over time, the steps you’re taking will become bigger.
You will mess up many times. Software development is a vast and complex field. You don't know everything and will never know everything. The same goes for everyone else. Probably nobody put in better than As E.W. Dijkstra:
“The competent programmer is fully aware of the strictly limited size of his skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.”
Sometimes you'll get away with your mistakes. Maybe nobody notices, or you move on to a different company before they know what you've done. And sometimes, someone will criticize you. It might be your boss on a performance review or a colleague on a comment to the PR. It doesn't matter. What matters is how you react to your mistakes and criticism. And the best approach is:
Never take criticism personally.
Criticism comes from two places. Either someone wants to make your code better, or they are just being rude. In both cases, not taking it personally can do wonders.
In the first case, you benefit from listening to a different point of view. You may even disagree; for example, you may think some code is readable when the other person thinks otherwise. But even then, getting a broader perspective and seeing a problem from different angles is good for your growth.
In the second case escalating the conflict is rarely a way to go. You shouldn't let bully intimidate you, but you have to understand it's not about you or your code, so it's better to take ego out of it.
You make mistakes, and everyone else makes them too. Recognize your mistakes and own them. Use them as fuel for your growth.
Thinking code is the product
It's a misunderstanding of what it actually means to be a software developer. The sad truth is that our code is not the product, even if it's the greatest code ever.
Real-life programming is not a contest for the best code. It's about solving real problems and creating products.
It’s about providing value.
And to give value, you have to understand the needs of your clients and users.
To become a great programmer, you must think this way and have multiple tools in your toolbox. Use them knowing the business environment you're operating in and its restraints.
Different stacks and patterns are appropriate when you're building a small MVP for a startup with a tight budget and when you're building a banking app that needs security and reliability for years, maybe even decades. These things impact every decision you make.
To become exceptional, you must understand and build your technical knowledge along the domain knowledge and communication skills. Only then can you make a difference between the success and failure of the project.
In programming, perfectionism comes in different forms. Sometimes it's overdoing things, but it can also be overpreparation.
I can't count all the instances where some junior developers worked on the feature for a week, even though they had a working solution after one day. They tried to tinker with it for the next few days, adding layers of abstraction and complexity. Eventually, the code became unreadable, worse than it was on day one.
Improving your code is great, but you have to know the limit. Especially if you're a junior developer, you often don't have enough experience to judge how good is the code. So write your first draft, improve on it, but later show it to another team member to get feedback. This way, you'll lose much less time and learn more.
Overpreparation can be even worse. Many people start watching tutorials when they don't know how to do something. After finishing the tutorial, they feel happy and energized. But they don't feel confident. So instead of creating their task, they watch another tutorial. And another.
Perfectionism = Procrastination
The truth is you'll never feel ready. As with everything in life, you must start before you're ready. That's the only way to go. Fear of failure kills our dreams much more often than doing imperfect things. So go on and build things, let others worry about perfection.