Most people would say that a programmer is a developer and a developer is a programmer; and for those of us who write code for a job when asked to describe ourselves, we'd be comfortable using either term depending on the mood we're in. Most people would think that there's no difference and even if there was I'd have to be nitpicking to find it, right?
Both terms describe someone that writes and maintains software. But if we take a moment and think about this, there's more to creating a software product than just applying technical training. Why is it that some software is fantastic, some is OK and some is downright horrid? Why is that some people can product fantastic code that's bug free, easy to maintain, a pleasure to use and exceeds expectations while other people, filling exactly the same role, can produce abominations that tear at the very fabric of space and time and should never, ever, under any circumstances see the light of day?
Is it intelligence? Is it training? Is it the tools? Is it management? Is it something else?
I'll scratch intelligence from the list right now. I've seen people of average intelligence produce great software and I've seen really smart people produce unmitigated rubbish.
I'll also remove training and tools from the list. Go into any workplace and you'll find people with the same training having wildly different results. You'll also find those same people using the same toolset. So let's scratch that as well.
Maybe it's management. Maybe it's something else.
Here's some 5 characteristics I find strongly evident in people I would call programmers:
- Enjoy writing code
- Have good technical skills
- Turn a design into working software
- Very task focused
- Stay current with new developer technologies and enjoy using them
Now compare this with the characteristics strongly evident in people I would term developers:
- Want to deliver software they can be proud of
- Want to keep their customers happy
- Understand the non-technical factors of what they do
- Very goal focused
- Stay current with technologies
There's quite a difference between the two, and to me the difference can be summed up with two words: Perspective & Attitude.
A developer looks at things from the customers point of view and tries to come up with the best solution for the customer. A programmer looks at things from a technical point of view and tries to come up with a solution that the programmer finds pleasing. The developer is outward looking, while the programmer is inward looking.
I believe that having a customer based point of view makes a whole world of difference in producing software that meets the needs of the customer and ultimately it's pleasing the customer that ensures they use your software, and call it successful, and invite you back to write more.
What about Attitude? I think that Developers on the whole take a much more pragmatic approach to problem solving. They realise that there is no correct solution, that there are usually a multitude of ways to peel the potato, that the latest and greatest developer tools may not be suitable for the task at hand, that all development is inherently risky and that their one and only measure of true success is their ability to produce working software of high quality, delivered on time and enjoyed by their customers.
Programmers on the other hand seem less inclined to pragmatism. The desire is more towards writing the perfect code, the ultimate algorithm, the most ideal technical solution using with leading edge tools and integrating with all the latest buzz-toys they know of. If there's a shiny bauble to be added, add it. If you talk loud enough and passionately enough, you can convince the customer they need it and hang the risk and hang the cost. And if this thing doesn't ship on time then it's the project managers fault for letting the customer get away with so much scope creep (I hope you see the irony there).
I believe that the days of the programmer are numbered. Companies want to hire people who create great working software not people who think each project is another excuse for learning new stuff and that never deliver on time. Customers want to buy software that works as expected and meets or exceed their needs. They don't want technical wizardry, stuff they don't need and they definitely don't want to be a guinea pig for some in-disguise R&D program.
When I hire people I look for the Developers not the Programmers. When I work with people, I choose to work with the Developers not the Programmers. And when I need advice I ask the Developers not the Programmers.
If you write software you're either a Developer or a Programmer. Which one are you?