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

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

  • Comments 16

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. 

  • 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.
  • 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)
  • There is a lot of smart people out there. The problem is most of us are only smart within narrow boundaries. Once outside those boundaries we are as stupid as the rest of them.

    There is a lot of misdirected smartness out there. Developers have spent the last 20 years preventing errors in C programs which every two bit Ada/Modula-2/Pascal compiler finds in no time. The problem is solved, but since we don't like the solution, we keep messing up. Is that smart?

    We are not talking about shaving a few percent of the project completion time. We are talking about cutting developement time in half.

    We want to learn C/C++/Java, because that is where the money is. Thse are cool languages with direct connection to the tinkerer center in our brain. But we would learn faster, be better programmers and understand more if we first learnt Ada/Delphi/Eiffel.

    If you start looking we will find more and more bad choices. Not smart choices. A lot of smarts is used to make bad choices workable.

    A good way of messing up a good programmer (at least in Norway) is to ask him to make a program from the tax return form. They almost invariably screw up. Not because it is difficult, but because they are trying to do too much at a time. They are being too smart.

    Worst of all: they don't understand that the tax return form is a step by step description of how to do it. All they have to do is to transcribe it to a programming language. It is not hard, just a lot of boring work.


  • 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 one's ever come close. He's the guy who taught me how to get past my own cargo-culting.
  • 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.
  • 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.
  • Just out of interest... how come there are so many Morts at Microsoft who use Visual SlickEdit et al?

    Intellisense isn't useless if you know what you're doing. It avoids having to remember the exact syntax of commands or function calls - you can still learn what they do and what they're for, but it's much easier to learn new APIs if all you have to remember is what you're looking for - not the absolute nitty gritty of its function signature. And it's nearly essential if you have polymorphism in the mix.

    I defy any programmer - Elvis, Einstein or Mort - to use Visual Assist ( for two weeks and at the end of that two weeks, not tear the head off anyone who tries to pry it out of their hands.
  • Essay on the need for Transitionality in Developer Tools
  • I love the long tail metaphor. It explained the business model behind Amazon, Netflix, Web 2.0 and now...
  • PingBack from

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

Page 1 of 2 (16 items) 12