Becoming a better developer does not always mean being an expert in a programming language. Nor does it mean being the smartest person in the room. More often than not you will find that you aren't an expert and you aren't the smartest person. Work is more than just programming, it's understanding and developing products that people will use and to do that it requires more than just a rock star programmer, it requires a person who is has the abilities to help their company succeed.
I read a Twitter thread that broke down a list of steps that developers should take in order to progress in their career. This is a commentary on that thread with some personal insight into how I have experienced it in my personal career growth. I like to look at my career as a stool with three legs and a base. The three legs are programming, architecture design, and interpersonal skills. These skills provide support for the overall business and its goals. Without a leg in the stool it becomes unstable and you are unable to support the business. The business in turn will support you the developer. So it is incumbent upon you, the developer, to develop and strengthen these basic principles in order to strengthen the business.
As a developer, this should be an obvious area to always improve. But programming is more than just knowing how to write in a specific language. What are the conventions? What are the patterns and anti-patterns? How do you test? What does "production level" code look like? This is a simple list to test depth of your understanding of a language and a guide to help learn and develop that language.
In the Pragmatic Programmer, the author suggests to look at adding one new language a year to continue your career development. When I pick a language I make the above list (along with some common integrations I may use) and try to chip away at it over time. At times I'll try to consult with someone who may have deeper knowledge of the language or try to validate the "production quality" of my code.
Learning a new language is necessary and it is common practice for newer developers to hop on an learn languages that appear on Hacker News. Yet programming has a depth that is necessary for those who wish to grow in their careers.
Understanding how to program something is just a small piece of being a developer. The bigger portion is how well your code fits in with other applications. This is a rather deep area that I won't go into much detail here but think about how you would go about building a house. Would you use just a hammer? Or just a saw? Furthermore outside of the tools, how do you access things a house needs like electricity or water?
In the same way you need to think about how you application will work in the larger ecosystem of your company and try to find and understand the right tools for the job. You might develop in Go but your company wants to start adding some machine learning into your product. What would be the best language to do this in? What are the standards? Should you take this particular challenge on or should you work with someone else? These are questions that someone with an eye towards the architecture of the system would ask.
This skill requires a broad view of the technologies and tools out there but is not an invitation for you to learn them all. Focus on what you can do but understand that other tools may be more helpful. Fit the needs of your company if no one is able to do the work but do not try to be an expert in everything or you will find that you are an expert in none.
Very rarely will you be working by yourself. When you are a developer you work on a team and with the business. Interactions with others is a daily thing and should be embraced instead of avoided. Your growth as a developer hinges on how well you work with others more so than your skill set.
When you function as a member of a team you make them better and they make you better. This allows you all to grow. You are more likely to stand out if you helped the team succeed rather than trying to be a hero and do it yourself.
Mentoring reinforces your understanding on the subject. If you wish to become a lead or a manager, most of your work will be delegation and mediation of others work. So it’s better to get started by helping mentor someone early so you can establish and hone those skills.
Your interactions with others will ultimately determine the direction of your career and is by far the part that is most within your control. I'm not saying you need to be everyone's friend, but you should try to be a person people want to talk to and ask for advice instead of the unapproachable developer who acts above others.
Just the start
There are plenty of other areas that you can work on as you grow as a developer. I have written about keeping up with tech trends or how teams should be run. But this exercise helped me distill the basic pieces that I have found to help me grow as a developer. I'm sure this list will change over time but in the end once again it is up to you how you approach your career and it is you who can define your future.
*Personal side note about three-legged stools. They don't wobble because the three points always form the same plane. This is a level of "stability" that you wish to form in a career.