My entire career I have worked with very talented developers. I have seen their journey, how they evolved from a cowboy coder to a better programmer. But my observation is, being a great software developer is more than how good programmer you are. I call these great software developers “Rockstars”. I believe a rockstar developer can be defined with 3 core attributes.
- Analytical Skill
- Technical Know-how
- Experience of best practices.
I put them on three side of a triangle. Let me I call it Rockstar triangle.
The area inside the rockstar triangle tells you how great software developer you are. The more area you have in there, it's good for you.
Now how do I define these three? Let’s start with Analytical Skill. It’s part of our cognitive ability and hardwired to the brain. Wikipedia has the following definition “Analytical skill is the ability to visualize, articulate, and solve both complex and uncomplicated problems and concepts and make decisions that are sensical based on available information. Such skills include demonstration of the ability to apply logical thinking to gathering and analyzing information, designing and testing solutions to problems, and formulating plans.”
Why a great software developer needs great analytical skill? Well, that’s what we do, “apply logical thinking to gathering and analyzing information, designing and testing solutions to problems, and formulating plans.”” That’s the core, if you are not strong at analytical, go ahead, there is lot of other nice professions out there, be happy with them.
How would you know if you have great analytical skill? If you have it you probably already know. If you want to check as a programmer if you have it enough, one way to test your skill is to try some simple ACM problems.
Technical Know-how is the second biggest deal. You need a very strong, in depth, transparent vision of the technology you are working with. Don’t get me wrong, I am not talking about “Working Knowledge” that we play with our day to day business. It's more of a complete understanding of the topic including how it was built, how it works and how it can be used. I think you can relate to the fact that in most cases we just deal with the last part - how it can be used. I always ask myself when I come up with a new technology, framework or component, could I build it myself. Until your answer is yes, well, you need to dig deeper.
Finally the best practices. You must learn and make them a part of your habit. By best practices I mean the design patterns, architectural patterns, SOLID principles, coding standards, code smells and refactoring, agile techniques, unit testing, dependency injections, AOP, NuGets, xml documentation of code and so on. All this have to be inherent to you, anything you build should have these in them without much conscious effort. They are called practices; you have to practice them to get a grip on them.
Many developers works all around world who are building software. Most of them are just doing this in a way that they can. A rockstar would build software in a way that it's should have been built. The question is how far you will walk to achieve the perfection?