Early on in my programming career, I was very lucky to have had the opportunity to work with an expert programmer who took me under his wing. (I prefer using the word "expert" over the word "senior", because the word "senior" is too muddied up with vague notions about what it means for someone to be a "senior" programmer).
Being a young programmer and with very little experience under my belt, I didn't consider my mentor to be particularly exceptional. Sure, he was doing a great job. But having nothing to compare it against, I just figured this is how all programmers perform. Little did I know.
Over the next 12 years I've crossed paths with many programmers -- some great, some not so much. Nonetheless, having worked with programmers of varying degrees of ability allowed me to put that initial experience into perspective. Moreover, I began noticing certain key characteristics, common to almost all expert programmers I had run into:
Expert programmers treat their work like the age-old fine craftsmen: quality is king. While average engineers churn out reams and reams of code, expert programmers write code that reads more like poetry than code. Their code has an actual aesthetic quality to it and they believe that "Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away."-Antoine de Saint-Exupery
Expert programmers really own their work. Expert programmers don't wait around for "sprint planning", to be assigned tasks or for someone else to write "stories" for them. They simply take ownership of the problem and get to work. This also extends to not blindly following rote requirements and just do what their told -- thus passing their responsibility elsewhere . Instead, they constantly challenge the status quo in order to get to the bottom of the situation and to deliver the right solution. They believe in giving their customers what they need, not what they think they want.
Expert programmers make mistakes like any other programmers. But rather than blaming the stars, the weather and the dog next door for their faulty code, they get down to business to solve the bug. They do not dismiss bugs as a "one-off glitch" or (god forbid) write workarounds around them. Rather, they find the root cause of the problem and eliminate it.
Interestingly, and almost counter-intuitively, expert programmers move very quickly from problem to solution. Despite spending more time on properly designing, writing and testing their solution they usually deliver much quicker than the average programmer. This is because expert programmers rarely start from scratch. Their software is typically built in a way that promotes reusability and extensibility.
Another advantage of the Expert programmer is that they recognize that the vast majority of problems were already solved time and again by other programmers. These solutions can often be found in the form of code libraries, write-ups and best practices. While average programmers will try to solve the problem with the tools and knowledge they have, expert programmers will seek other viewpoints, even if it means getting into uncharted waters.
Expert programmers are some of the most passionate individuals I have ever met. They love what they do and their job seems to me more like play than work. As a result, programming is not something they put aside when their work day is over. They usually spend significant amounts of their free time reading about, practicing and improving their craft. It is this diligence of practice that often has the expert programmer appear as exceptionally gifted. What usually passes as talent is actually consistent study and practice over a long period of time.
If you run into one of these expert programmers, I have but only one piece of advice to give you: "leach" on to them like your life depends on it and learn everything you can learn. No book can replace the one-on-one experience and the gains attendant to apprenticing under an expert programmer.
Also, if you have a related story to share I'd love to hear about it.