Tuesday, September 11, 2007

You Take the High Road, I'll Take the Low Road

I was pondering on my commute home today about different types of developers that I've run across in my career. I came to the conclusion that there are basically two types of developers (major disclaimer here: I'm over-generalizing this, obviously, so don't be too critical of the narrow-mindedness of this post): those that need to "go deep" with a technology or concept--the "deep diver," as I call them; and those that love to play with all sorts of technologies, collecting them like sea shells on the sea shore--these I call the "tinkerers".

There are various shades of these two personalities. For example, some "deep divers" like to *really* go deep on a particular technology, to the exclusion of pretty much anything else. These people are sometimes referred to as "fanatics." Others just like to spend enough time on the technology such that they feel that they've mastered it (not just "good enough" but "right enough"), and then move on to another that interests them. These tend to specialize in related technologies, languages, or concepts.

Some "tinkerers" may just love to play with technology, never really learning to use it beyond piecing it together. I've noticed that they really like scripting languages like Perl, Python or Ruby (not that there are no deep divers that like these languages). Others "learn enough" to do what they need to do and move on. They tend to have a broad background across many technologies, but have never truly mastered any particular one.

Rarely do you run into anyone that would come close to fitting in to both groups. The reason for this is simple: there's just too much "stuff" to learn, see, or play with. Many consider themselves to be a hybrid when they really are a "learn enough" tinkerer, since they don't "see" the depth that they are lacking. Others feel that they have a broad background when they know only a language or two and have worked with a small handful of libraries, but have mastered these extensively (typical mindset: "...this is how you should do that because that's how it's done here, and there's no better way of doing it because this is the greatest technology...").

Is being in one group or the other better? I don't think so. What puts us into one or the other is based upon interest. We go where we find "interesting things." For some, that means diving into a particular topic and really understanding it. For others, it's viewing the grand landscape that is the information technology industry. However, taking one of these to an extreme (too deep to exclude all else, or so broad that you don't really understand what you learned) is probably not appropriate.

Does knowing which group you're in matter? Is understanding that there are two types of personalities matter? I think so, and here's why: if I could convince someone who believes that "technology/language X" is the best solution to whatever problem is before them (when you have a hammer, all problems look like a nail) that there are *many* possible solutions (many of which could do the job just as well or better), then I've made them more humble and a better practitioner of the art. I wonder how many technological errors are made because the decision was made by someone who couldn't see deep enough or broad enough to fully understand the possible solutions.

Unfortunately, we're all human and at this stage in the industry's maturity, there's no way that a single person can know and understand (to a sufficient depth) all the possible solutions and tools available to apply to a particular problem set. We all work with limited knowledge. The goal is becoming humble enough to be open to new ideas and courageous enough to go deep when it's time to really understand something.

(By the way, I'm a "deep diver" type.)