1. 16
  1. 6

    The more I learn about MUMPS, the less ‘awful’ it seems.

    It’s a strange language, sure – but so is Python (semantically-meaningful indentation), Lua (use of tilde for negation, combined array-dictionary-object type), FORTH & LISP (for obvious reasons), JavaScript (ditto), and basically every popular language besides. There’s so much variety in languages that we can’t reject something like indenting with period as an indicator of quality.

    MUMPS has language features I wish were more common! For instance:

    • first-order arbitrarily-nested non-relational databases with autovivification
    • an almost smalltalk-like image/persistence, because all variables prefixed with ^ become persistent across runs

    Between these two features, MUMPS as a computing environment has an out-of-the-box usability that shames more ‘modern’ languages & REPLs for certain types of problems (in particular, problems involving big, complex, free-form relationships between different kinds of objects).

    1. 4

      MUMPS is still in active usage, I think? A few years ago I interviewed someone out of the midwest (Minneapolis or Michigan, I think) who worked for a large health software vendor. They’ve been around for a long time, and they’re in a lot of hospitals across the US. I’m pretty sure their whole system is built in MUMPS.

      1. 1

        Epic is the vendor iirc. It is also all up in the VA Vista system.

        It is part of the fractal of sadness of healthcare.

        1. 1

          Is the supply/demand ratio enough to add MUMPS to the list, along with COBOL, of languages that are liable to make consultants rich?

          1. 2

            I don’t really know enough about the MUMPS ecosystem to answer, but maybe? It seems to fit the COBOL criteria:

            1. “Outdated”[0] language people don’t really want to work in,
            2. Relied upon in core parts of large, “boring”, slow-moving companies who have a lot of code and,
            3. Who are very unlikely to be disrupted out of their space any time soon

            I got the impression that this particular company was one of the few/only software games in town, wherever they were, and that they kinda hoovered-up a lot of the engineering talent from the surrounding region. That said, the person I spoke to was very aware that MUMPS is incredibly niche and was looking to build transferable skills in a more mainstream software environment, and was looking in the Bay Area. So, I could guess they might have a retention problem, at least amongst people who are also willing to relocate for work. That’s speculation, though.

            Caveat: This is all from memory of an interview a few years ago

            [0] I used air-quotes because not everyone has these perceptions

            1. 1

              “Outdated” is a loaded term, sure, but I think we can explore it a bit.

              Things can be outdated because more work has been done in the space to create technology which is better in every technical respect, but that doesn’t mean the existing technology is going to be changed, because social and political aspects factor in as well. Of course, in both software and buildings, something becomes outdated once flaws are no longer repaired when found, but fixing bugs becomes a political and social football as well.

              (Then, of course, there are the sad cases who need to be contrarian to the point they’ll argue that technology which has been superseded and abandoned is in no way outdated. They’re the ones who throw out the most heat, and obscure the most light, when someone’s trying to understand the field.)

        2. 1

          I don’t think this is the right solution

          . . for  set zig=$order(^ZIG(zig)) do  quit:'zig
          . . . do takeOff(zig)
          . . . do move(zig)

          neither is

          for  set zig=$order(^ZIG(zig)) do
          . do takeOff(zig)
          . do move(zig)
          . quit:'zig

          If you don’t want to run takeOff or move with zig=”” and get an infinite loop you must write this code:

          for  set zig=$order(^ZIG(zig)) q:zig="" do
          . do takeOff(zig)
          . do move(zig)

          I prefer this way to write in MUMPS, simple and writeless

          F  S zig=$O(^ZIG(zig)) Q:zig=""  D
          . D takeOff(zig)
          . D move(zig)