There is an old saying in basketball that you can’t teach height. For most basketball positions, having a few inches on your competition helps, sometimes a lot. Being a natural athlete (another thing that can’t be taught) helps too. So, basketball GMs try to draft the tallest, most athletically gifted players they can. The rest can be taught.
I think that this applies to devs as well. Great ones have certain natural abilities that just can’t be taught, at least not fully. I find that there are innate aptitudes which make great devs great:
Abstract Thinking. Being able to reduce a problem to a set of useful abstractions is something great devs do well. I should note couple of things here. First, the emphasis on “useful” is important. Most devs could come up with some abstraction (where
MyWidgetFactory to get an instance of
IAbstractWidget), but it takes talent to find an abstraction that makes the problem more manageable.
Second, while it definitely gets easier with experience, just having experience isn’t enough. Pattern recognition is great, but you still need insight to take advantage of it.
Rapid Learning. Learning (and consequently groking) a new concept quickly is a hallmark of great devs. It’s a sight to behold to see a great dev chew through a new framework or language and go from proficiency to mastery before your very eyes.
Attention to Detail. Great devs fuss over details because details matter. They’re bothered when things look wrong or out of place (a misnamed variable, a sloppily formatted function, a class which does a bit too much). They don’t like leaving things in a bad state (duplicate code, missing tests for edge cases, manual deployment steps). They want and constantly fight for perfection.
* The list above is by no means comprehensive and I’m sure there are other traits that make a difference .
But What About Attitude?
Almost as important as natural ability is having the right attitude. In my opinion, attitude comes down to a few things:
Don’t be a jerk. Devs (good and bad) have strong opinions, which is great. What’s not great is when strong opinions become the-one-and-only opinions. Knowing when to push and when to give in is invaluable in a good dev.
Care. Or, more specifically, care about the code base. Treat it as if it were your own. Clean it, organize it, leave it better than you found it. Write tests for it, automate its builds and deploys, analyze it, make it better. Refactor it without hesitation.
* Again, the list above is not comprehensive. .
You may also like:
Did you love / hate / were unmoved by this post?
Then show your support / disgust / indifference by following me on Twitter!