I have observed some common traits in the brilliant software developers I have come across. I will list six of them.
They have a dislike for inefficiency
They cringe at doing a repetitive task manually. They become experts at using regular expressions to do search and replace. They might use Excel to generate repetitive code or SQL. They write a script to automate chores – like checking status of a service or deploying a new build of the software.
They sharpen their axe
The saying goes “sharpen your axe before you start cutting the tree”. So the brilliant software developers keep their toolkit in good shape. They master their IDE. They know the shortcuts, they know the productivity features – like generating code, refactoring. The IDE is integrated with the source control. They have a well developed Unix shell profile. They have aliases for commonly used commands.
They can find problems just by reading the code
There is a bug in production. The average developer will reproduce the bug in development environment and then debug through the code to find the root cause. However, there are the brilliant ones, who can debug by studying the log and code. They can quickly understand another developer’s code. They can logically play the code in their mind to figure the piece of code or data that is causing the issue. There is a certain logical rigor with which they can explain the issue and the fix required. This quality is extremely useful when the issue is hard to reproduce. Multi-threading problems fall into this category.
They write robust code the first time
They learn through experience to take care of the edge cases while writing code. Their switch statement handles the “default” gracefully, not just the the known cases. The end condition of their loop is “<=” or “>=” instead of “==”. They use enum instead of a plain “int” constants. They compare floating point values while keeping precision in mind. They make code thread-safe by default. They can smell a race condition and stay away from it. Their objects are immutable unless required otherwise. Their public APIs are minimal.
They keep learning
You will find their bookshelf full. They read or watch tutorials, blogs to understand new technologies. Their curiosity is not restricted to the work they are doing. They are curious about science, technology and mathematics in general.
Fearlessness about new tools and technologies
They are ok to get out of their comfort zone in technologies. They easily adopt a new technology, if it makes sense. This trait should not be confused with the fascination for anything that is considered “hot” new thing. They can cut through the hype and make practical choices. For example, even if they are primarily a Java programmer, they do not think twice if writing a simple shell script gives the desired result in a shorter time.