Experts in any field organize their knowledge in specific ways. They have their own unique vocabulary and draw on specific analogies and metaphors. They have established key beliefs and distinctions around their expertise, and though they understand their subject their understanding maybe different and deeper than the rest of us.
All experts draw on skills that are learnable. This means that if we know the things they know and do the things they do then we can get the results they get. Experts were not born that way, they simply have a few key distinctions that the rest of us don’t have and expert software developers are no exception to this rule.
One of the key characteristics that I find in virtually all expert software developers is that they are expert problem solvers. They are able to penetrate into the core essence of a problem and create organic solutions based on that insight. And their solutions are both understandable by others and also extendible.
The best developers I know, the top experts in their field, are not sloppy coders. They are incredibly neat and they focus on keeping their code clean. I used to think that in order to be fast you have to be a little sloppy but the top developers I’ve met are also the neatest. I suspect there is a correlation.
When we don’t understand something it tends to seem complicated. The very best teachers are able to show us the simplicity in the world around us. They help us make sense of things. This is also what good software does. When we read the code or use the program it just makes sense. But this doesn’t happen by serendipity. It takes a great deal of intention as well as skill to pull it off.
Expert software developers have to figure a lot out on their own because many of the rules and finer points of developing software have not really been written down by anyone.