I know, this sounds like I have the secret formula to becoming a developer, but it's actually what I, in my experience working with teams and my personal growth, find important to accomplish that goal.
Some things that most people ask when they find out I'm a software developer are: "You must be so intelligent", "Can you hack a Facebook/Instagram?" (I know I'm not the only one, right?) and the most important one "How can I become a developer like you?" and I kept wondering about that. Here, I will name what I think are the most important to accomplish that goal.
I know, it's a cliche, but it's RIGHT! Developers must think out of the box to build the software that solves users' problems. This is because when developing we have to think like users, clients, developers, and every single one of the actors that will use or participate with that software.
Most of the solutions that clients ask us to build or the ones that we build as entrepreneurs must be thought out from a perspective no one has ever thought of, or even add something new to aggregate that key point to your application to make it more appealing to users.
If you're about to pursue this career, you have to know that it changes a lot! In one moment vanilla PHP is the best you have and out of nowhere something comes and becomes the new cool stuff to use and you have to learn it to try (Let's be honest, we try our best but technologies changes faster than us) to be "surfing the wave" and to be up to date with new languages, frameworks, libraries, and a lot of things that will help us find good jobs or become better at ours.
There are a lot of websites that we can access to keep track of the new stuff: Medium, Hashnode, DEV (DUH!), and really huge etcetera of places where you can find more information (If you wanna know more, I recommend reading the post of my good friend Alberto Yanes about 5 tools to keep up with tech).
But continuing in this topic, I highly recommend finding a language you love and become really good at it instead of trying to be like my people say, "an ocean of knowledge with 1 cm dept".
One important thing to understand is that we're not alone. There's a huge possibility that one problem that you have with your code, someone else around the world had it too and probably it's been solved. So, ask the community, see other developers' solutions, don't be ashamed to don't know something, this is completely normal. Also, keep asking your more experienced developer friends about your doubts and problems, I'm sure they will help you out.
Software factories allow us to work with different teams, projects, project managers, workflows, technologies. So, use this as a way to fully understand how to work with teams, and different technologies, the difference between a really great client with all his processes and fully organized and clients not so great that will ask you to work with the minimum and want everything in no time. I know the last part doesn't sound too appealing, but trust me, it's really useful for your personal development. Then, when you gather some experience and knowledge, you can move to a product company, they're usually less stressful.
This is the most important one, to be a developer you have to love it. Because it's really stressful and frustrating, can be repetitive sometimes, you can work with clients that have really boring projects, you have to keep track of new things, always keep studying, some clients will be a pain in the ass or even some managers. But, it's a great thing to do when you do it with passion.
When writing this post I remembered the words of Anton Ego from Ratatouille:
Not everyone can become a great DEVELOPER, but a great DEVELOPER can come from anywhere.
Yeah, I paraphrase a little, but it's the same idea.
This is an old saying from my country, but it means not being stubborn when someone more experienced gives you advice. Higher seniority developers can know best about some things because they were in the same spot you are right now and don't want you to hit the same wall.
It's ok to don't know something or to ask for advice if needed, and who is better at that than your Senior/Technical Lead/Software Architect/CTO? Remember, they have the same goal, to finish the project in time and with a quality software.
Well, this is it. Do you have some key points to add? Please, put it in the comments below.