Systematic, Pragmatic and Opportunistic Programmers


Steven
Clarke
added a href="http://blogs.gotdotnet.com/BradA/commentview.aspx/754c3e0c-ee8f-49b6-8fef-992ee303cefa">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 (23)

  1. Corey Haines says:

    I’m a cross between a pragmatic and an opportunistic. http://www.coreyhaines.com/

  2. milbertus says:

    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.

  3. John Cavnar-Johnson says:

    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.

  4. Yoshi Beal says:

    I think these definitions are largely bunk. Everyone is one of these at one point or another. Would a systematic programmer really turn down a productivity gain? Don’t opportunistic developers need to understand internals in order to debug their apps? Stereotyping people is unproductive. Flush Mort, Elvis, and Einstein down the crapper – we’re all professionals here.

  5. Keith Patrick says:

    I’m systematic at home, pragmatic at work. At work, I’m often forced to throw things together, hence the "anything that makes it work that is well-designed," meaning that I don’t abandon design, but I’m more general with error-handling and documentation. At home, where I’ve been refining and refining the same project for over 10 years (with the current iteration being by far the most complete and functional, having been completely rewritten in .Net and on the 3rd pass and 6th month of a code review/overhaul). I guess the reason for this is that it is my learning tool for so many areas, as it’s scope is enormous enough to allow me to explore to my heart’s content just about any programming area that interests me. Given my systematic nature, I spent a week walking the line by line to ensure proper error handling. Spent a month redocumenting. And that’s all before a security/attribute overhaul, so I’ve got another one to go! But it’s the obscenely time consuming systematic approach that helps make so many aspects of the framework more 2nd nature and realistic in a more pragmatic environment; I’ve already begun throwing a lot of the more helpful .Net stuff in when I’m speedcoding at work, although I do still regret not having precise exception handling, which I don’t think there’s much way around in a time crunch.

  6. Adam Weigert says:

    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?

  7. Lance Hunt says:

    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!

  8. Frank Hileman says:

    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.

  9. Sergio Pereira says:

    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.

  10. CliffNotes: There are three types of developers: Java Developers, C# Developers and VB Developers. *ducks-for-cover*

    FWIW, I tend to be a mix between pragmatic and systematic (and yes, I code in both C# and Java)

  11. David Levine says:

    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…

  12. David Levine says:

    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…

  13. Steve says:

    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.

  14. I fall under the fire sign "systematic programmer" with the moon rising in the house of pragmatism. Phoooeeeyyyy.

  15. I fall under the fire sign "systematic programmer" with the moon rising in the house of pragmatism. Phoooeeeyyyy.

  16. LeonBambrick says:

    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.

  17. In my previous post I talked about setting up an API usability study. In this post, I’ll talk about how…

  18. Nick Parker says:

    What type of developer are you?

  19. Nick Parker says:

    What type of developer are you?