Development is such an odd career. Only in development can things you learned and refined be tossed out as worthless, obsolete skills, in favor of the next new shiny framework. It's a difficult profession, one that many many struggle to excel at. So what is it that makes a developer good? What is it that makes them rise above what all the other developers and to shine in such a harsh, fast paced career? Let's look at some of what I think is critical to truly shine in this unforgiving but rewarding career.
First off, I want to draw a clear line that there is a big difference between a developer, and a programmer. Regardless of how your company uses each term, a programmer is an individual that can write computer code when given specifications. A developer is someone who does programming, but whose true expertise lies in the skills needed to develop software. This is a broader job, one that requires soft skills, some design skills, and many other skills that help
code become software. I could write at length about the distinction, but the key for this conversation is to understand that we are talking about more than simply coding skills.
With that out of the way, what composes a great developer? I can't say that I know everything that moves a person from good to great, but all of the great developers I know and have worked with share common traits, many of which I attribute to what makes them great.
- Experienced and skilled at learning
- Good at deconstructing problems and finding their source
- Able to understand the user's interactions, and put themselves in the user's shoes
- Proud of the code they write
- Ashamed of how bad the code they wrote a month ago was (Constantly growing!)
Learning to be good at learning
Development is nothing if not one big treadmill of new technologies, techniques, and practices. If you are not actually good at learning these new things you will be left behind, and be inefficient as a developer. An artisan always makes sure his tools are as effective as possible, and as developers, our brain is the most important asset we have. In fact most often I find it matters very little what you know, what matters is what you can know in short order. My co-workers tell me that I have amazing Google-Fu, something that I take great pride in, as that is how I turn something I don't know into something that I know.
More importantly, learning really is a skill that you have to hone. It doesn't come naturally to most, and only by forcing yourself to constantly learn can you really improve it. Those who have perfected it find it much easier when it comes time to pick up that new framework, or orient themselves with the latest API changes. Because of that, I consider being good at learning to be the most important skill for a great developer.
Pinpointing the needle in the haystack
Sometimes I feel like development is 10% writing code, and 90% trying to figure out why it doesn't work. Troubleshooting and debugging code is a critical skill for development. Those who aren't good at it will waste untold hours trying to figure out where code is failing, and grasping how to fix the problem.
I have known developers who write clean well composed code but when that code does not work quite right, waste hours and hours trying to narrow down what is happening. The simple skills of troubleshooting, including systematically eliminating variables, and being controlled when reintroducing the uncertainty can cut down on the wasted time very dramatically.
As with learning to learn, this is a skill that must be developed. Unlike learning however, this requires more than simple repetitions to master. Blindly stabbing at the issue will eventually yield an answer, but does nothing to actually improve skills.
The user's perspective is really the only one that matters
This is solidly in the "applies to developers, but not programmers" skill-set. As a developer, every day we make decisions that have a serious effect on a user's experience with our software. To be able to make good decisions about how to write software, we need to be able to put ourselves in the user's shoes. To some people and for some industries this comes naturally. If you are writing software for people just like you it is extremely easy to think like the users - After all, you practically are one.
In other industries it is something that must be actively worked at. It is trivially easy to look at the code and just see it as a collection of instructions. However, to your user it is something that they use and often rely on. Think about the software you use each and every day. Did those developers take you into consideration?
Proud today, ashamed tomorrow
This is a two aspect topic. First, great developers take large amounts of pride in the work they do. They write the cleanest code they can based on their skills. They test as much as they can, both manually and automated, to ensure the highest quality they can produce. In short, they are craftsmen, devoted to their craft.
Next, any developer worth his salt should cringe at the sight of his old code. What, you might say? I thought they did the best job they could, why would they be ashamed? Because if they are improving themselves as craftsmen in their trade, they should be able to do things better now then they could then. They should have learned new techniques, new approaches, and should have learned from their mistakes. The best of yesterday should no longer be the best for them if they have kept learning and growing as developers.
While this may not be all of the considerations that add up to a great developer, they are some of what I think are the most important. If you are a developer striving to transitioning from good to great, I strongly suggest that you work on perfecting these skills. While it may not be everything that you need, it is a great start!
Are you a great developer and agree or disagree with my list? Know a great developer and think I missed important attributes? Let me know in the comments below!