Throughout my career, many newbie developers have asked me what’s needed in order to become a truly good developer, which languages are mandatory, etc.
Cranking out a ton of code is just a small fraction of the whole game.
Here is the answer I generally give them.
Learn the Basics
Learn theory, read about algorithms, data structures, design patterns, and object-oriented programming.
The important thing is that these basics will help you understand your craft and broaden your knowledge base. When you stumble onto a problem, you’ll find a solution quicker, “This looks like a tree, I can work this out …”
Get a Mentor
Look for a mentor, a friend or someone more experienced than you and who’s willing to help you out. No stalking, please!
A mentor will help you validate your ideas and knowledge. She’ll let you know when you are applying the wrong concept, allowing you to dive deeper into the subject matter.
Learn to use a version control system. Git is the quintessential tool for this and most developers and companies use it.
You should at least know how to create a branch, merge, rebase, squash, commit, pull and push. Git features many options and each team has different workflows, but once you learn the basics, the flow is easy. Even if you work by yourself, Git will be of great help to keep a record of your progress.
Github as Resume
For a developer like you, a GitHub account is equivalent to your resume.
Your resume does tells others about the path you’ve chosen, the projects you’ve undertaken, etc. On the other hand, the thing that speaks best on your behalf is your code.
Share Your Code
You might be somewhat afraid of showing your code to the world, but it’s the best thing you can do. If someone becomes interested in your code and helps you with it, you’ll improve as a developer.
With each comment you receive, you’ll learn something that will indeed make you a better developer.
As a side note, try to contribute to Open Source projects that are already in GitHub. Go to the issues list, solve them and do a pull request.
Helping and teaching others will help you grow.
Create a Blog
Having a blog will enable you to explain your ideas and knowledge. The more you explain, the more you learn, since you have to know exactly what you’re talking about in your post. In addition, you receive feedback that helps you spot things you hadn’t previously noticed.
When you are going to be interviewed and you say you have a blog, most likely the interviewer is going to take a peek at it. So, keep this in mind.
Participate in the Community
Most likely, there are communities of developers in your city. Join them and participate actively, either by organizing events, giving talks or workshops. Not only will you be able to share your knowledge and receive feedback, but you will also learn new things and meet people in your industry.
Perhaps you could end up meeting your ideal partner with whom you will create a great product.
It will also help you to have more people learn about your work and land some projects.
The best tools, languages, blogs, tutorials, videos, etc. are in English. If you don’t know English you’re falling behind.
“Learning English is not optional. It is not optional. Again, not an option.” — Jorge Symonds
Doing exercises helps to sharpen your skills as a developer, to think outside-the-box, and streamline your mind. Even during interviews, you’ll be asked to work on two or more exercises. Practice.
Work on a Real Project
By this, I actually mean software that has a real user base and that is being constantly used. This may be difficult if you are just starting out, but look for one nonetheless.
The experience of working in a real project is immense. Every successful system is based on its ability to fulfill the needs of a group of people. When you deliver part of your system and people start using it, you quickly find out if your system works or not, and whether it lives up to its promises.
When you work in a system that nobody ever uses, you never really get feedback, you are programming blindfolded, and you fail to learn anything new.
Every developer should know at least a little of how to deploy a system.
Each language and framework has tools to help you deploy on real servers. Learn how to use them and become a better developer.
Regardless of how smart or experienced you think you are, how many books you’ve read, or how many systems you’ve built, there will always be someone smarter, better read, and more experienced than you.
There is always something to learn from others. Even the least experienced person has something to offer.
Be humble and open and you’ll learn quite a bit from it.
In Closing …
Always seek to learn from others and share what you know. Remember that feedback is essential to improving. Never assume that you know everything!
Of course, there is a bunch of other things that you’ll need to become a better developer, but I think this is enough to start.
Oh, and remember: crank out lots of code!