Systematic, Pragmatic and Opportunistic Programmers

Steven
Clarke
added a recent
comment
to my blog that I thought was worth highlighting:

Systematic programmers tend to follow a defensive coding
style. They do not make assumptions about the code they are writing, the
platform it runs on, the class libraries that they are using etc. For example,
they do not assume that a class library will behave as advertised. Instead,
systematic programmers will test the library in a safe environment, inspect the
library source code etc before using it in a production environment. Systematic
programmers desire programming languages and APIs that give them full control
over the execution of their code and that do not hide important details from
them, even if it means they have to write more code and take more time to
understand how the code works. They value being able to get under the covers and
tinker with components or even replace them.

Pragmatic programmers tend to be less defensive than
systematic programmers. In many cases, they are comfortable trading off control
for productivity as long as they are aware of the existence of the trade off.
Rather than spend the time understanding the full working details of an API,
they will prefer to learn as they go, building up an understanding of the API,
programming language etc in the context of the work that they are doing. They
value being able to get under the covers and tinker with components should they
need to, but will prefer not having to do so.

Opportunistic programmers value productivity features in a
language, API and IDE very highly, often higher than anything else. Unlike
systematic programmers, they place less value on having complete control over
their code, since for opportunistic programmers, the cost of control is added
development time. They particularly value 3rd party controls and APIs that allow
them to concentrate on the business problem that they are trying to solve,
rather than on configuring the control or specialising the API so that it meets
their requirements. They don't really value being able to get under the covers
and tinker with components - they would rather look for some other API or
control that met their needs instead of modifying controls or APIs that they
already have.

What type of developer are you??

Comments

  • Anonymous
    November 18, 2003
    I'm a cross between a pragmatic and an opportunistic. http://www.coreyhaines.com/

  • Anonymous
    November 18, 2003
    I would have to say that I'm a pragmatic program, although definitely on the systematic side of things. I was originally going to say that I was systematic, until I read that pragmatic programmers "Rather than spend the time understanding the full working details of an API, they will prefer to learn as they go". That's me right there.

  • Anonymous
    November 18, 2003
    Depends more on what I'm building than anything else. If the requirements of a project are fluid (as is often the case with UI work), I'm opportunistic. If I'm building a typical business app, I'm more pragmatic. However, when I build infrastructure code (i.e. code that other programmers will depend on or will be used for application integration) then I'm definitely systematic.

  • Anonymous
    November 18, 2003
    The comment has been removed

  • Anonymous
    November 18, 2003
    The comment has been removed

  • Anonymous
    November 19, 2003
    I'd like to add two more types of programmers ... the Application Programmer and the Technical Application Programmer ...Application Programmer:Sadly, these two types exist. You have people that program just as a job, who are passionate enough to learn the technology behind it. They want to know as little as possible to get their job done. They do not want to know how the environment behaves only the techniques they need to use to complete a task. They could care less how to install software and expect someone else to do it for them. They expect the company to pay for any training they may require to do the task at hand.Technical Application Programmer:Then you have the technical ones who love the technology and are interested in it and more than just code. Maybe the environment that they build for interests them. They can install software, OS, or anything else and can figure out how things work by playing. They also can customize software/OS settings to get better performance or do something they way they like it. They actively seek out knowledge for things outside their job but that help them become a better programmer...Those are some short descriptions of people at our company. Its very frustrating for a technical programmer to work with a non-technical programmer. They passion just isn't the same. It is sad really.Which one are you?

  • Anonymous
    November 19, 2003
    I agree your two additional programmer-profiles exist, but they are really just the external behaviors exhibited by the original three classes above;The Application Programmer you describe, is really just an Opportunistic programmer in disguise. And, the Technical Application Programmer is somewhere between a Pragmatic and a Systemic programmer.Also, note that I have witnessed equal frustration of the Application Programmer when having to work with the Technical programmer, because the former's Opportunistic personality will often have difficulty with the latter's desire to spend time on things other than completion of coding.Frankly, I don't think there is one "perfect" personality for a programmer, depending upon your perspective; Managers generally prefer the Opportunistic programmer, because of his focus on results. Architects tend to respect the Systemic programmer for his eye for proper coding technique , ability to optimize, and knowledge of system internals. Technical Leads & Technical Managers tend to seek a balance, so the Pragmatic programmer is usualy their preference.Luckily, there is usually room for all of us, and even people like me who fall somewhere in-between the definitions. (or perhaps in my own separate definition)Btw....Great topic & discussion, guys!

  • Anonymous
    November 19, 2003
    I also think the stereotypes are no longer useful. Most everybody is being forced to pragmatic and opportunistic, whether they want to or not, simply because companies such as MS churn out one API after another, each one larger, layer upon layer. Few people have time to be "systematic", even if it is their natural tendency.

  • Anonymous
    November 19, 2003
    I'll say I'm a Pragmatic that codes with the Opportunistic developer in mind. I hope that the developers using my APIs and Libraries find them straightforward and productive.

  • Anonymous
    November 20, 2003
    CliffNotes: There are three types of developers: Java Developers, C# Developers and VB Developers. ducks-for-coverFWIW, I tend to be a mix between pragmatic and systematic (and yes, I code in both C# and Java)

  • Anonymous
    November 20, 2003
    I believe there are two types of developers; those who can be classified according to the three groups you devised, and those who cannot. Anything else is just an implementation detail...I fall into both camps...

  • Anonymous
    November 20, 2003
    I believe there are two types of developers; those who can be classified according to the three groups you devised, and those who cannot. Anything else is just an implementation detail...I fall into both camps...

  • Anonymous
    November 21, 2003
    I really think I am more systematic... I really like to inspect what is going on and how things can be improved. It keeps me interested in programming and actually helps me get a little better.

  • Anonymous
    November 21, 2003
    I fall under the fire sign "systematic programmer" with the moon rising in the house of pragmatism. Phoooeeeyyyy.

  • Anonymous
    November 21, 2003
    I fall under the fire sign "systematic programmer" with the moon rising in the house of pragmatism. Phoooeeeyyyy.

  • Anonymous
    November 26, 2003
    Definitely "Pragmatic" - but systematic when there's sufficient time, or when designing a fresh new app.Some of these 'Systematic' idealists can be quite annoying - they spend so much time trying to 'perfect' the system (according to their own philosophical techniques), without taking any time to listen to users, or determine current business problems that need to be acted upon.

  • Anonymous
    May 05, 2004
    Don't be a

  • Anonymous
    April 19, 2005
    In my previous post I talked about setting up an API usability study. In this post, I'll talk about how...

  • Anonymous
    January 25, 2007
    What type of developer are you?

  • Anonymous
    January 06, 2008
    What type of developer are you?

  • Anonymous
    May 21, 2008
    PingBack from http://agilenature.com/2008/05/21/the-impact-of-human-resources-in-the-agile-enterprise/