Programmers, Developers, and Hackers, oh my! colorful lead photo

Are you a programmer, hacker, or computer scientist? Perhaps a software developer, engineer, designer, or architect? Despite having plenty of connotations, these titles don't have solid definitions. Consider: to some extent this is the same pool of people, distinguished mostly by the organization they happen to work for and their years of experience.

Still, some people say "Developers are from Mars, Programmers are from Venus," some people think hackers are the true elite, while others think architect is a four-letter word or that making software is not engineering. (Check out McConnell's response if you follow that last link.)

While I deny that distinctions between these titles have real meaning, I think it's true that different programmers (I'm gonna call them all programmers, for the time being) adopt fundamentally different approaches to their work, partially because of experience and circumstance, but also simply because of their core personality. One the one hand, we have the consultant: his code was copy-and-pasted together from earlier consulting gigs, but it's exactly what the customer wanted. On the other is the academic computer scientist, figuring out the optimal way to traverse a semiconnected digraph with the weak openness property. (I hope that doesn't mean anything.)

These two denote the extremes along a continuum from "building the right thing" to "building the thing right," which is just one of the possible dichotomies we could talk about to divide programmers. In the end, there are as many kinds of programmers as there are programmers.

All these approaches are the result of smart people trying to do their jobs well, so it's not much of a surprise that they probably get it mostly right. If we had the consultant and the computer scientist switch jobs, I don't think either would do very well. Is the real problem actually a lack of flexibility? Engineers have a motto: "Good, fast, cheap: pick two." I like the implied professionalism of this statement: the engineer is agnostic even about quality; that's the customer's decision, not his. He's got more than one gear, so to speak.

We all have our strengths, our own favored approaches. But - for the same reason we don't drive in 4th gear in the city or in 1st on the highway — it's important to choose the right approach for the job at hand. Of course it's also ok to have a preference, and to identify yourself a hacker or an architect or whatever. But there's a difference between having a single gear and a favorite gear. No one mindset is better than another if you're stuck in it.

A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects.
-Robert A. Heinlein

- Oran Looney August 9th 2007

Thanks for reading. This blog is in "archive" mode and comments and RSS feed are disabled. We appologize for the inconvenience.