Condividi tramite


Cargo Cultists, Part Three: Is Mort A Cargo Cultist?

My colleague Mike, in a comment in yesterday's entry, mentions "Mort". Who is this Mort guy?

At Microsoft, we do a lot of market research, and frequently discover that large segments of our customers have characteristics in common. It's a lot easier to talk about these customer segments if we take one prototypical example of that segment and give them a name. It's a lot easier to say "Mort likes Intellisense" than "the professional line-of-business programmer who lacks a degree in computer science but has a great deal of familiarity with Office and VBA, and who typically writes productivity applications shared amongst his coworkers, likes Intellisense."

There are many of these prototypical customers but the three we talk about most often on the Visual Studio team are Mort (the line-of-business developer), Elvis (the professional application developer) and Einstein (the expert on both low level bit-twiddling and high-level object oriented architectures.) Elvis and Einstein got their jobs by studying computer science and going into development as a career. Mort comes to a development position via his line of business -- he's an expert on frobnicating widgets, and one day realizes that his widget tracking spreadsheets could benefit from a little VBA magic, so he picks up enough VBA to get by.

Clearly Elvis and Einstein are not Cargo Cult Programmers -- Elvis wouldn't last a month and Einstein's entire reason for continued breathing is directly opposed to Cargo Cult Programming. Is Mort a Cargo Cult Programmer?

Though Mort is more likely to be a Cargo Cult Programmer, I don't think that he necessarily has to be, and I certainly think that he does his job better if he is not! Yes, Mort doesn't understand OOP, but for the kinds of problems Mort solves, he doesn't need to know what inheritance is or how polymorphism works. Mort's programs tend to be straightforward procedural manipulation of object models and strings, with a few loops and subroutines thrown in here and there. Mort does understand that stuff, and often has a quite sophisticated understanding of the practical uses of the object model.

What makes Mort cargo-cultish is that he tends to proceed from a not-quite-working solution (often obtained off the web, or by macro recording) to a working solution by piecemeal local changes. Mort is a very local programmer -- he wants to make a few changes to one subroutine and be done. Mort does not want to understand how an entire system works in order to tinker with it. And my goodness, Mort hates reading documentation -- more on that tomorrow. Intellisense is Mort's favourite feature in the whole world because it lets him look stuff up by hitting the period key. Mort's primary job is to frobnicate widgets -- code is just a means to that end -- so every second spent making the code more elegant takes him away from his primary job.

But what makes Mort not cargo-cultish is that Mort actually does enjoy writing code, Mort is interested in writing code, Mort wants to do the right thing to write more effective code. But Mort, like all of us, sometimes fails to put in the necessary investment in time now that will pay off later. That's not because Mort is a lazy idiot; Mort's a very smart, dedicated guy, but you know that he's got this huge pile of widgets to frobnicate by Wednesday…

In a sense, my advice for novice developers doesn't apply so much to Mort, because that advice was directed towards people who want to be Elvis. Mort does his job better if he avoids cargo cultism. Elvis can't do his job at all if he falls into cargo cultism. In the future I'll try to be more clear about what developer segment I'm blogging about.

Creating developer tools that work for Elvis and Einstein is relatively easy. Creating dev tools that make Mort productive and effective is hard. Creating tools that work effectively given the widely varying goals, learning styles and knowledge levels of those three is the hardest and most interesting thing about this job. I'll certainly talk a lot more about Mort, Elvis and Einstein (as well as Matt, Thomas and Erin) as I start blogging more and more about VSTO.

Comments

  • Anonymous
    March 02, 2004
    I jsut thought I'd add that I see LOTS of "Evlis" cargo cultists. People who have gone through a CS course and are actually making real-world programs, but are just getting by on pure luck or divine intervention. I saw someone who had written perhaps, 20 apps that were in production, and he had a while(true) loop with no exit, for no reason! And then I got the case to figure out why the program was hanging. Turns out he wanted an if instead of a while(true).

    I'm constantly surprised at the number of people like this. My friend ran into someone at a very large, global IT company who was writing a printer driver. They were stumped on what a "thread" was.

  • Anonymous
    March 02, 2004
    I like intellisense because I don't get to do programming every day. Sometimes I don't get a chance to do any for a couple of weeks or more. So, having intellisense helps remind me what the options are.

    I'm glad that you guys are finally starting to pay attention to my needs. VB.Net is way harder to use than VB6 for building simple apps. My buddy Elvis finds it way more powerful, but for me it's too complex.

    (not really Mort, but close enough)

  • Anonymous
    March 02, 2004
    The comment has been removed

  • Anonymous
    March 03, 2004
    A good book written years ago on much of all this was Gerald Weinberg's "Psychology of Computer Programming", still very relevant to much of this discussion.

    But even beyond the Novice, Mort, Elvis, Einstein model, there is a programmer that has the best of Mort & Einstein...who can see the business side or economics, the sociology of the app, the "linguistics" i.e. HOW the app is going to have to "fit" into the organization as it were as well as the code...the code becomes almost a superfluous, trivial issue and this person works intellectually at a meta-level. I've only met only one in my whole career. Many Elvis', some Einsteins (whose egos are larger than their knowledge...see Psychology of C. Programming), but only one of these...this guy had an MBA from Wharton's, a CS degree from Carnegie Mellon, and routinely "enhanced" the assembler on our project, while teaching the rest of us how to code assembler. He's still my idol 25 years later...no one's ever come close. He's the guy who taught me how to get past my own cargo-culting.

  • Anonymous
    March 03, 2004
    Actually, Mort doesn't typically have Widgets to Frobnicate; that's Matt's job. Mort is a full-time programmer, but he comes in at 9 and leaves at 5 and it's "just a job" rather than a passion. He takes pride in his job and wants to do good work / get a promotion / etc.

    Matt is the one busy frobnocating one day when he realises he can increase the productivity of his team 20% by recording some macros.

  • Anonymous
    March 04, 2004
    Yeah, I deliberately conflated Matt and Mort for rhetorical purposes. In thinking about this afterwards I realized that for the rhetorical purposes of this blog, these personas don't need whimsical names; in fact, they might cause more confusion than clarity.

    In my more recent blog entries I've started naming the personas after their job function, which I hope has less potential for confusion.

  • Anonymous
    March 28, 2004
    The comment has been removed

  • Anonymous
    April 17, 2006
    Essay on the need for Transitionality in Developer Tools

  • Anonymous
    August 06, 2006
    I love the long tail metaphor. It explained the business model behind Amazon, Netflix, Web 2.0 and now...

  • Anonymous
    November 01, 2007
    PingBack from http://mhinze.com/aspnet-20-anthology-book-review/

  • Anonymous
    December 18, 2007
    Earlier this week I wrote about The Two Types of Programmers . Based on the huge number of comments,

  • Anonymous
    May 05, 2009
    The comment has been removed