I have been coding for more than 15 years now, and quite often I come across a common concern, not only from the newbies but also from the experienced developers, "How to become A Better Developer?". The common recommendations we get is either pick a programming language and start coding or go to a competitive programming website and start solving problems. Isn't it what you were also recommended for. I guess most of us get the same answer. In my opinion, both these things are only helpful when you have your basics right. I think getting your basics right should be the very first thing in you list. Here is how I look at this situation:
Both these approaches have a common problem. They are not practical to follow on a regular basis. Being a good developer is not a seasonal fruit, it is a process. It is really hard to keep up with all the languages and technologies coming every now and then. Also, it is impossible to keep solving every new problem getting released on competitive programming websites. We need a programmatic approach of growing as a developer and solving real world problems. This can only happen when you get your basics right. Once you have the understanding of pragmatic way of approaching things it is going to take no extra efforts in your daily job to master the skills and also grow as a better developer.
The points I have mentioned below will help you build that approach. Once you have that outlook you will have a broader perspective to look at the problems. I can bet you will reap the benefits in long run if you focus on these points. So here are they:
You have to understand what resources you have to access to get the right information. There are hundreds and thousands of websites, books and resources lying out there and it is really hard to go through each one of them, but when you get hold off a good article, bookmark it, save it in some form so that you can come back and refer it again if you are stuck in a similar situation. Human brain has a cognitive memory. We can not remember everything. Saving these articles for future reference can come handy when you want to clear your thoughts on a particular topic. Make this as a practice. After some time you will see you have a good collection of useful resources. This can be helpful for your teammates too just in case they are also dealing with the similar situation that you might have worked on before. I would suggest to make a list of your best places to go to.
Take a simple book which can help you understand how does a computer works internally. How does a CPU function. What is Cache? What is L1, L2 and L3 cache? How does Hard disk connect to your RAM? What are the capabilities and limitations of these different objects? How does Operating System manages all the resources. Understand the basics of network concepts (topologies, TCP/IP and OSI Model). This will give you an idea whenever you are writing a program that how much of a resource can be consumed.
There are hundreds of data structures and algorithms and we cannot understand each and every one of them. But there are a handful of data structures and algorithms that we should know as a Software Developer. Those could be understanding Arrays, Linked List, HashMap, Trees and Graphs. All these are the foundation of any programming language and would be very useful in your daily life as a Software Developer. Even most of the Job interviews in todays time are based on these Data Structures and Algorithms. Once you have a strong hand on these algorithms you will feel have confidence in your capabilities.
Like a plumber has a set of tools for himself, we as a developer should also have a set of tools for ourselves. You should know what IDE/softwares helps you in making your job easy. What are you more comfortable with? What are the features available in that Software? Just make a set of your own Softwares. That is going to help you a lot because every time when you are stuck into something you do not have to think much. You would know that you have a tool in your bag suitable for that situation and you will quickly use that. Make your own list. Whatever you think is helpful for you on a daily basis and make sure to use the features they provide you.
A software developer cannot write good software until and unless he knows the good design principles. You can start with SOLID principles. What does S-O-L-I-D exactly mean? How can you implement it in your program? How can these principles will help in improving the code quality and maintainability.
With the emerging markets in any domain, there are new processes that are developed. The same way processes are being improvised and developed for the software development Industry too. As a software developer you should understand different Software development methodologies that exists in today's world. It could be LEAN, KANBAN, SCRUM etc. So just go ahead and get a better understanding of the Software development methodologies. What are the pros and cons of that methodology? You might come up with a few ideas which you might want to put in your daily meetings. So just go ahead, study it and propose the idea.
Make sure you are not rushing to get help from people around you on a very common topic. Try to identify the obvious answers on your own. People generally get annoyed if you come up with a very basic question. Try to answer yourself for the same question which you are thinking to ask someone else. Look for examples on internet. Do some research. If you do not get an answer even after doing all this then reach out to people. Frame the question appropriately so that it makes sense and can be explained in simple words with a little background to the problem.
As we grow, our professional responsibilities also grows and we rarely get a chance in our career to go back and focus on these things. With time the expectations from leads starts to seem unrealistic to get things correct in a few attempts. However, if we follow the points mentioned above it will make things easy for us. As they say it's never too late. So at whatever stage you are in your career go ahead and try to implement these changes.Good luck!