Passion. I have come to the conclusion that, that simple word is what separates an average developer from a great developer. IQ, education, degree, books, none of that matters, these are all symptoms of passion. A passionate developer will use these tools to find answers and refine his/her craft, so they are good indicators of a great developer, but not quantifiers.
A great developer takes ownership of his product, even if he doesn’t believe in the product. That person will most likely pour their life and soul into their current assignment. Typically you will find this person spending hours of their own researching and visiting user groups to enhance their skills. Some might even stop shaving facial hair in order to show their dedication to a particular assignment.
Should this be expected of all developers? No! Not everyone needs to have that level of passion for a project, but the chef needs it. I love the show Hell’s Kitchen and you can tell Gordon Ramsey takes a passion in what he does. Because of that passion he drives his potential employees to become better Chefs. This effect is exactly why the team leader needs to have this passion.
Time does not give you this passion, so in my opinion it doesn’t make sense to have the longest running employee be given top developer ranking. Sometimes age can push you in the opposite direction, and you no longer care about the right things anymore. Instead you care about trivial things like your dog, or your kids soccer game, or your birthday, or the big kicker sleep! I jest.
Why is passion so important? Is it because with time you care less? Not really. I believe this industry is extremely exhausting. Every time you turn around there is a new hot trend, and unless you are on it, you are so last minute! That is easy enough to remedy, just don’t get on the new train, then you don’t need the passion. The problem with that is that the industry is so young, if you don’t stay on the train you will probably be creating more work for yourself by following old practices that are more time consuming. This isn’t a problem in more established fields like Architecture (of the wood/cement type), or Dentistry (of the teeth type), because…they are established. These professions have been refined over hundreds if not thousands of years of the human experience. What? I don’t believe that statement myself, but think about it. Architecture has been around for literally thousands of years. Humans have had an extremely long amount of time to find out what works and what doesn’t. Programming has been around for 20+? There is a big difference there.
There is another aspect to the passion. Even after we have refined our craft to the point where it isn’t changing every 5 seconds, we will still need passionate developers. That is because programming is only about 20% of what we actually do for the organization we are apart of. We, developers, are responsible for building systems that satisfy business needs. There is no one size fits all here, we have to understand what the business needs in order to build it. That is what I love about what I do, because with every new job I can completely switch my entire industry, but be doing the same thing. So if I get bored with the travel industry, I can switch back to the financial industry, or I can switch to the military industry. But the flip side of that is I have to be passionate enough to invest the time and energy into understanding the business as my users understand the business. Otherwise you won’t be able to produce the highest quality product.
I imagine this is why 37Signals is so successful. They always talk about building applications for themselves. This is an easy way out, this allows them to bypass the second part of the passion, because they are the users, so they already understand what they want. This is not a bad approach, but everyone can’t do this. Could you imagine if doctors or lawyers had to write their own software, they would have to spend an additional 4+ years in school on top of their already 8+ years. They wouldn’t ever get anything done. I am not knocking 37Signals, I am just suggesting everyone can’t build software for themselves. Especially since it takes a certain mind to wrap around software engineering and it is rare to find a master of two trades that would be able to do this for every industry (not impossible, just improbable).
So what does it all mean? I believe it means that it doesn’t matter how fast you code, or how many patterns you know, but it is about the fact that you care about what you are doing. That probably seems obvious, but I personally find it extremely enlightening. Whenever I write a piece of code I think about why I did it, and ask if there is a better way. I don’t become attached to code, so when I learn a new technique I am not afraid to rewrite old code. I don’t see writing code as my job, I see building solutions to business problems as my job. The work is in figuring out what to build and how to build it, not the code that is making it happen.
This may be a bit presumptuous but I believe that is the difference between a great developer and an average developer. A great developer helps build solutions to business problems and needs, and an average developer just takes orders and writes code. All the work is in working with the business to figure out what they want and how to do it, to a great developer writing code is like polishing the hardwood floors, it is the cherry on top of the perfect ice cream sundae.