Slashdot Mirror


MUMPS, the Programming Language For Healthcare

citadrianne writes: An ICU patient is monitored and assessed according to 12 different variables. These include such measurements as body temperature, heart rate, blood oxygenation, blood pH, and others. Together, they're used to formulate a quantitative answer to the question, "How bad is it, doc?" Many of these physiological signs are measured in real-time via electrodes and like a billion different varieties of catheter. Add to it barrages of lab tests done multiple times per day per patient and the need for 20 or so clinicians (per patient) to have access to all of this data, and the result is very a deep data problem. Multiply that data problem by hundreds of thousands of patients.

This is the fundamental problem that the programming language MUMPS (sometimes called just "M"), or the Massachusetts General Hospital Utility Multi-Programming System, aims to solve. To its proponents, MUMPS allows for a one of a kind synthesis of programming and database management, while to to its detractors, it's a bizarre anachronism with little connection to the evolution and innovation taking place elsewhere in programming. Probably to most people that do things with computers, MUMPS/M is poorly understood, at best, and more likely to be completely unknown.

166 comments

  1. I see what you did there! by Anonymous Coward · · Score: 0

    So rather than calling it MGHUMS, you called it MUMPS! Genius!!!

    1. Re:I see what you did there! by Giant+Electronic+Bra · · Score: 1

      It's been called MUMPS for at least the last 20 years...

      --
      "Malo periculosam, libertatem quam quietam servitutem." -- Jefferson
  2. MUMPS, ancient and rarely used by Sez+Zero · · Score: 5, Interesting

    I have a doctor friend who, before becoming a doctor, was a CS grad. He's in his 50's now. When I told him we hired someone from Epic Systems that knew MUMPS, he exclaimed, "They still use that?! MUMPS was going out of style back when I was an undergrad!"

    I believe it is also still used in older banking/financial tools.

    1. Re:MUMPS, ancient and rarely used by alci63 · · Score: 2

      Well, Intersystem's Caché database is essentially the latest instance of MUMPS. It still used quite widely in Hospital systems...

    2. Re:MUMPS, ancient and rarely used by Registered+Coward+v2 · · Score: 5, Funny

      I have a doctor friend who, before becoming a doctor, was a CS grad. He's in his 50's now. When I told him we hired someone from Epic Systems that knew MUMPS, he exclaimed, "They still use that?! MUMPS was going out of style back when I was an undergrad!" I believe it is also still used in older banking/financial tools.

      While MMR vaccine has pretty much eradicated MUMPS the anti-VAX crowd is big enough so that it still crops up in isolated populations.

      --
      I'm a consultant - I convert gibberish into cash-flow.
    3. Re:MUMPS, ancient and rarely used by anchovy_chekov · · Score: 1

      As mentioned in the article, it's still in use in VistA (https://en.wikipedia.org/wiki/VistA), which has its own interesting history - in that the source code was made available via a successful application for release under Freedom of Information Act and has subsequently entered the public domain.

      VistA still going strong, and a number of successful businesses are based on it.

      MUMPS (or M if you prefer) is a terrible language, but it's heartening to know that all the effort that went into VistA didn't go to waste - and that there is still a viable community around it.

    4. Re:MUMPS, ancient and rarely used by Anonymous Coward · · Score: 1

      Notice that VAX was in uppercase.

      In this case, the OP was making a play on the name of the VAX minicomputer architecture. It was a very nice architecture for it's time.

      Of course, now everyone's going to come along and ask "What's a VAX ?". Thanks in advance for making me feel old. :-)

    5. Re:MUMPS, ancient and rarely used by Anonymous Coward · · Score: 0

      Intersystems Cache is used in a majority of Credit Unions, mostly for core processing (branch teller, online and mobile access) and increasingly real-time transactions (Point of Sale, ATM) displacing NonStop.

      So you may use it routinely.

    6. Re:MUMPS, ancient and rarely used by angel'o'sphere · · Score: 4, Informative

      That is not really correct. Cache is an objecy oriented database, Mumps is a programming language/programming system which happens to use Cache.

      https://en.wikipedia.org/wiki/...é ... I wonder if that link works :)

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    7. Re:MUMPS, ancient and rarely used by Archtech · · Score: 1

      They said that about COBOL too. It's still very probably the most-used language for business applications - for very good reasons.

      --
      I am sure that there are many other solipsists out there.
    8. Re:MUMPS, ancient and rarely used by Anonymous Coward · · Score: 0

      COBOL and MUMPS are both The Languages That Would Not Die. The difference is that COBOL was actually designed.

    9. Re:MUMPS, ancient and rarely used by nmb3000 · · Score: 3, Insightful

      I have a doctor friend who, before becoming a doctor, was a CS grad. He's in his 50's now. When I told him we hired someone from Epic Systems that knew MUMPS, he exclaimed, "They still use that?! MUMPS was going out of style back when I was an undergrad!"

      Yep, and MUMPS is still used at Epic, though they call it M and claim to have made customizations and improvements to it. I was offered a job there a few years ago and they go to great expense to attract recent graduates with high starting pay (more than $84,000 in Wisconsin), unbeatable benefits including the most amazing health care plan I've seen, and a pretty cool campus.

      Unfortunately it wasn't enough for me to overcome moving to Madison, working long hours, and (most importantly) becoming an expert in an all-but-dead language. When I investigated career paths at the time, the only path MUMPS offers appeared to be (1) work at Epic for a couple of years and then (2) consult for Epic's products for the rest of your career.

      If you want to see the very worst 1966 has to offer today:

      A Case of the MUMPS
      MUMPS Madness
      Revenge of MUMPS Madness!
      MUMPS

      It's kind of like the worst parts of COBOL, Javascript and PHP were all mixed together and then baked at 400* until charred and smoking.

      --
      "What do you despise? By this are you truly known." --Princess Irulan, Manual of Muad'Dib
      /)
    10. Re:MUMPS, ancient and rarely used by WindBourne · · Score: 1

      in fact, it is at the core of the VA system, as well as EPIC which is the largest medical system going behind the VAs.

      --
      I prefer the "u" in honour as it seems to be missing these days.
    11. Re:MUMPS, ancient and rarely used by LWATCDR · · Score: 1

      I do not know about the rarely used part but MUMPS has been around for a very long time.
      https://en.wikipedia.org/wiki/... VistA can use MUMPS for the backend so it is probably still in pretty wide use.

      --
      See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
    12. Re:MUMPS, ancient and rarely used by Tipa · · Score: 1

      The Digital Equipment Corporation's VAX line was entirely compatible with MUMPS (https://en.wikipedia.org/wiki/MUMPS). I guess you could say that VAX did nothing to destroy MUMPS, and in fact, was instrumental in its spread, seeing how integral DEC computers were to the greater Boston-area industries in the 80s.

    13. Re:MUMPS, ancient and rarely used by preaction · · Score: 1

      https://medium.com/backchannel... This, as well, is a story about health care computer systems, which means it's 60% likely they're talking about MUMPS.

    14. Re:MUMPS, ancient and rarely used by Darinbob · · Score: 1

      It's a nasty language too. Some is just from the style of the programmers at the time too; lots of spaghetti code, very short variable names, lack of comments. But even with good programmers, the language basically needs a good redesign (or a first design). I know someone who used MUMPS programs to study program complexity.

    15. Re:MUMPS, ancient and rarely used by Anonymous Coward · · Score: 0

      Well, just because something is OLD does not automatically make it bad or obsolete.

    16. Re:MUMPS, ancient and rarely used by ValentineMSmith · · Score: 3, Funny

      Actually, it's kind of the other way around in reverse. MUMPS is the database backend. Cache exists as an object oriented datastore that uses MUMPS. Cache also has a VB-ish scripting language that can be used for those that don't feel like parsing stuff that looks like

      N X S X="^DIC(",X=$QS(@X)

      Many (but not all) of my personality problems derive from supporting software written in MUMPS for the last 15 or so years.

      --
      Karma: Chameleon - mostly influenced by bad '80s New Wave music
    17. Re:MUMPS, ancient and rarely used by Anne+Thwacks · · Score: 1
      It's kind of like the worst parts of COBOL, Javascript and PHP were all mixed together and then baked at 400* until charred and smoking.

      Absolutely the best description of the most dreaded PDP/11 infection ever., but I think there was some evil Perl miasma there too - hence the Zombie like undeadness.

      --
      Sent from my ASR33 using ASCII
    18. Re:MUMPS, ancient and rarely used by Anonymous Coward · · Score: 0

      stuff that looks like N X S X="^DIC(",X=$QS(@X)

      Isn't that how you save a file using emacs?

    19. Re:MUMPS, ancient and rarely used by Anonymous Coward · · Score: 0

      Tell me more!

      You can reach me at wustl!olin!vax11!drebin

    20. Re:MUMPS, ancient and rarely used by Anonymous Coward · · Score: 0

      I worked at a place that tried to convert COBOL programmers to C++ programmers. Can you say "unmitigated disaster"?

      And, btw, screw you Yossi H, still.

    21. Re:MUMPS, ancient and rarely used by modmans2ndcoming · · Score: 1

      It is used for SunQuest, Soft and a number of other medical software platforms. Cache Systems is actually a pretty good platform.

    22. Re:MUMPS, ancient and rarely used by modmans2ndcoming · · Score: 1

      Epic drives their staff into the ground but they are a pretty cool place to work. They have been moving to a web platform for their front end and use C# so unless you were going to be working as a Technical Services rep you probably would have had an opportunity to do cool stuff on their core developer team rather than work with M (the Tech Services folks do a lot of M programming)

    23. Re:MUMPS, ancient and rarely used by modmans2ndcoming · · Score: 1

      I have seen 5 line Perl programs that could be re written into 30 line programs that are easier to follow than most of the older M code I have seen.

    24. Re:MUMPS, ancient and rarely used by Applehu+Akbar · · Score: 1

      Same reaction here. MUMPS was old news when I started my career, in 1965.

    25. Re:MUMPS, ancient and rarely used by level_headed_midwest · · Score: 1

      If you think EPIC might be a bad place to work, try to actually use their products. They are expensive (so expensive we are legally prohibited in the EULA from discussing how much) and difficult/slow to use (cannot say more, specific performance analyses are also prohibited by their NDA.) That $84k they are offering comes from somewhere...their largely captive market customers.

      --
      Just "gittin-r-done," day after day.
    26. Re:MUMPS, ancient and rarely used by UnixUnix · · Score: 1

      (cough) Fortran. Cobol. (cough cough)

  3. MUMPS: are you kidding? by iTrawl · · Score: 5, Informative

    O M G

    --
    "Everybody's naked underneath" -- The Doctor
    1. Re:MUMPS: are you kidding? by derfy · · Score: 1

      The instant I saw MUMPS, I was thinking, "Haven't I seen that before?"

      Yes. Yes, I have.

    2. Re:MUMPS: are you kidding? by Apocryphos · · Score: 3, Interesting

      As usual, the real WTF has more to do with the people/management than the languages used.

    3. Re:MUMPS: are you kidding? by jthill · · Score: 4, Informative

      I'm used to anti-{language,tool,method} screeds being ignorant braying in lieu of effort, but this . . . This isn't even remotely the worst of it, it's only that it's soundbite-able. That first link deserves the word "mindboggling". The list here starts out slow, easing you in to it gently. No, seriously..

      • CASE SENSITIVITY: Commands and intrinsic functions are case-insensitive. Variable names and labels are case-sensitive.
      • COMMANDS: may be abbreviated to one letter, case-insensitive. Includes commands such as IF, ELSE, GOTO, WRITE, and XECUTE [which is my personal favorite, it allows arbitrary execution of code contained in a variable]
      • OPERATORS: No precedence, executed left to right, parenthesize as desired. 2+3*10 yields 50.
      • DATA TYPES: one universal datatype, interpreted/converted to string, integer, or floating-point number as context requires.
      • DECLARATIONS: NONE. Everything dynamically created on first reference.
      • LINES: important syntactic entities. Multiple statements per line are idiomatic. Scope of IF and FOR is "remainder of current line."
      • LOCAL ARRAYS: created dynamically, any number of subscripts, subscripts can be strings or integers. Stored in process space and expire when process terminates.
      • GLOBAL ARRAYS: arrays that start with a caret symbol. Stored on disk, available to all processes, persist when process terminates. This is M's main "database" mechanism.
      --
      As always, all IMO. Insert "I think" everywhere grammatically possible.
    4. Re:MUMPS: are you kidding? by Apocryphos · · Score: 2

      This list isn't totally accurate and seems a bit sensationalized for the "screed" as you put it.
      A variant of the XECUTE command exists in most languages.
      Declarations exist as there is still the concept of "stack level", but are optional. Dynamically created variables are scoped to the current stack level.
      Lines ... Well, you can put a lot on one line. But you can also write the equivalent of C# curly braces and do multi-line.
      Many of the others are presented with a tone of "can you BELIEVE this shit??" but really aren't negatives.

    5. Re:MUMPS: are you kidding? by Anonymous Coward · · Score: 0

      Time to rewrite everything in PHP, it'd be a step up!

    6. Re:MUMPS: are you kidding? by jthill · · Score: 1

      Thank you. I had dailywtf as more reliable than that. The older I get, the more I see that starting out assuming any publicized outrage -- and the more outrageous the more certain -- is nothing more than hyped-up attention-seeking jackassery is the way to go.

      --
      As always, all IMO. Insert "I think" everywhere grammatically possible.
    7. Re:MUMPS: are you kidding? by Anonymous Coward · · Score: 0

      I love X....I can pass routines around my program with impunity!

    8. Re:MUMPS: are you kidding? by Anonymous Coward · · Score: 0

      daily wtf is 95% fiction. I've had friends (more than 1) that submitted pieces and didn't recognize it when it was published.

    9. Re:MUMPS: are you kidding? by Areyoukiddingme · · Score: 1

      Many of the others are presented with a tone of "can you BELIEVE this shit??" but really aren't negatives.

      With the notable exception of:

      OPERATORS: No precedence, executed left to right, parenthesize as desired. 2+3*10 yields 50.

      No. Just no.

      MUMPS is a language broken by design, if it does that. That's indefensible. And outrageous. And wrong on so many levels. I don't trust any part of the language if the designers thought that was a good idea.

    10. Re: MUMPS: are you kidding? by Anonymous Coward · · Score: 0

      Unless there's an option to force *required* variable declarations, you can still use a variable that hasn't been declared and the language will happily create a new variable for you. Having optional variable declarations gives absolutely zero benefit over having none.

  4. paging keith lynch.... by mix_left_and_right · · Score: 1

    doesn't the VA use this?

    1. Re:paging keith lynch.... by preaction · · Score: 1

      Yes.

  5. You should have called it... by Anonymous Coward · · Score: 0

    Artificial Intelligent Doctor Service or AIDS

  6. Why? by drinkypoo · · Score: 5, Insightful

    Maybe it made sense once. But reading TFA, what convinced me that MUMPS is really BOLLOCKS was this quote:

    For one thing, as a programmer, I can take an item stored in one of those globals and give it "children," which might be some additional properties of that item. So, we wind up with lists of different things that can be described and added to in different ways on the fly.

    Hmm. That sounds almost like you're tracking relationships. Maybe you should use... (wait for it) A RELATIONAL DATABASE. Seriously, we often store object databases in relational databases. It's easy to add more properties to objects in your database with a relational db because of its very nature. You just create a new relationship, appropriately keyed. And there are lots of examples of systems backed by relational databases which permit you to add arbitrary new properties to objects. Take Drupal, for example; you can always either add a new module which will add new properties to old node types, or just add more data types to old node types. You could add, for example, a parent-child relationship. In fact, modules exist to do this already.

    Maybe there is something about MUMPS which makes sense, but if there is, it wasn't articulated in this article. I tunneled down to the MUMPS/II page and found this:

    1. Hierarchical database facility. Mumps data sets are not only organized along traditional sequential and direct access methods, but also as trees whose data nodes can addressed as path descriptions in a manner which is easy for a novice programmer to master in a relatively short time;
    2. Flexible and powerful string manipulation facilities. Mumps built-in string manipulation operators and functions provide programmers with access to efficient means to accomplish complex string manipulation and pattern matching operations.

    So basically, nothing you can't have in perl today, with a relational database, and a table or two to track relationships between objects. But instead, it's a whole new opportunity to create problems! MUMPS is a great name for it.

    --
    "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    1. Re:Why? by Sez+Zero · · Score: 2

      Hmm. That sounds almost like you're tracking relationships. Maybe you should use... (wait for it) A RELATIONAL DATABASE.

      Keep in mind that MUMPS first appeared in 1966, so it isn't exactly new.

    2. Re:Why? by Registered+Coward+v2 · · Score: 2

      Maybe it made sense once. But reading TFA, what convinced me that MUMPS is really BOLLOCKS was this quote:

      For one thing, as a programmer, I can take an item stored in one of those globals and give it "children," which might be some additional properties of that item. So, we wind up with lists of different things that can be described and added to in different ways on the fly.

      Hmm. That sounds almost like you're tracking relationships. Maybe you should use... (wait for it) A RELATIONAL DATABASE. Seriously, we often store object databases in relational databases. It's easy to add more properties to objects in your database with a relational db because of its very nature. You just create a new relationship, appropriately keyed. And there are lots of examples of systems backed by relational databases which permit you to add arbitrary new properties to objects. Take Drupal, for example; you can always either add a new module which will add new properties to old node types, or just add more data types to old node types. You could add, for example, a parent-child relationship. In fact, modules exist to do this already.

      Maybe there is something about MUMPS which makes sense, but if there is, it wasn't articulated in this article. I tunneled down to the MUMPS/II page and found this:

      1. Hierarchical database facility. Mumps data sets are not only organized along traditional sequential and direct access methods, but also as trees whose data nodes can addressed as path descriptions in a manner which is easy for a novice programmer to master in a relatively short time; 2. Flexible and powerful string manipulation facilities. Mumps built-in string manipulation operators and functions provide programmers with access to efficient means to accomplish complex string manipulation and pattern matching operations.

      So basically, nothing you can't have in perl today, with a relational database, and a table or two to track relationships between objects. But instead, it's a whole new opportunity to create problems! MUMPS is a great name for it.

      The challenge isn't that you can't do the same thing with a newer type of database but converting all that data into the new one. That is expensive, time consuming and invariably winds up with the loss of 20% or so of the data. My general rule is 2-2-20 Costs twice as much as planned, takes twice as long as planned and you lose or screw up 20% of the data.

      --
      I'm a consultant - I convert gibberish into cash-flow.
    3. Re:Why? by geophile · · Score: 1

      So, basically, a NoSQL database.

    4. Re:Why? by Anonymous Coward · · Score: 0

      I've played around with mumps and the globals system is extremely flexible, but nowadays there's plenty off nosql databases that can do the same.
      It's popular since the huge systems in healthcare have been their for ages. I still find the language itself odd.

    5. Re:Why? by Anonymous Coward · · Score: 0

      But, but... BASIC had been around for a whole two years by then!

    6. Re:Why? by BitZtream · · Score: 1

      You should have stopped reading the summary when it got to this:

      and like a billion different varieties of catheter.

      And like I love, like, when a 16 year old, like, writes articles about stuff, like, they don't fully understand, like now. like dude.

      --
      Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
    7. Re:Why? by Anonymous Coward · · Score: 0

      Seriously, Perl?

    8. Re:Why? by Anonymous Coward · · Score: 3, Informative

      MUMPS originally had a sort of in-memory database layer (map > >). They then abstracted that so it could load chunks of the database on the fly from disk. Later, that became a separate product (forked?) known as Intersystems Caché, which billed itself as a post-relational database (read: pre-relational, hierarchical database). Caché at least added SQL-like language to the product so it could pretend to be an RDBMS... so it's not necessarily no-SQL, because they added SQL later, but it is non-relational, yes.

    9. Re:Why? by Anonymous Coward · · Score: 0

      Ah yes, the substitute of a perfectly adequate tool with a mish-mash of new tools, because.

    10. Re:Why? by dmr001 · · Score: 3, Interesting

      As noted above, MUMPS (in the guise of Intersystems' Caché) is the database underlying both the VA's Vista and Epic Systems' Epic, which are probably the two leading large-scale EMR vendors on the planet. My 5 state hospital system uses the latter, having upgraded from a system that just handled part of one state and ran on top of Oracle and would regularly slow to a crawl. I don't know how much of Intersystem's marketing-speak to believe, but for a gigantic disparate database of branching nodes of something on the order of a million patients and all their chart notes, telemetry data for those who have been hospitalized, lab results and links out to everything from fetal heart tracings to MRI's, the thing is fast and seems to be close to bullet-proof. MUMPS itself is scary (to me, anyway) with its global variables and odd syntax, and I have a few bones to pick about the interface, but the database layer is really remarkable.

    11. Re:Why? by Anonymous Coward · · Score: 0

      >Maybe there is something about MUMPS which makes sense

      There isn't It's an archaic object/relational database with a piss poor relational language built on top of it. These old hospital systems are build on it, and stuck on it. No one wants to learn it and I suspect Dice has been tasked to find some Mumps people, thus this article.

      At my old job, we were tasked to port our perfectly good Oracle based application to support Mumps (Cache) and it sucked. There is no additional benefit and now you're dealing with an object/relational database under the hood with a crappy relational SQL converter on top of it. We now had to support a dual database application for no good technical reason, only because other HIS systems use it.

      If you want something that makes sense, all these entrenched HIS systems use it because they're old as dirt. No one wants to do Mumps because it sucks. They need people and don't want to convert to something modern (meaning created after the 1960s), because it would hurt their profit.

    12. Re:Why? by T.E.D. · · Score: 1

      So basically, nothing you can't have in perl today, with a relational database, and a table or two ...

      MUMPS was an ancient joke of a language back in the '70's when I started programming (40 years ago). But now you've managed to sell me on its benefits.

    13. Re:Why? by Apocryphos · · Score: 3, Interesting

      Agreed. I worked for Epic for many years and while M was a lot to get used to, you DO get used to it. And it is amazing for certain tasks.

      Epic crushed a lot of competition by marketing a "fully integrated suite". All of the applications (there could be dozens) for a customer run off a single M database. Why wasn't the competition stronger? Many reasons, but one was because most competitors were using SQL and couldn't compete on performance.

      The big limitation of M is reporting. Epic solved that by running extracts to a SQL "reporting database" and hooking up off the shelf reporting tools.

    14. Re:Why? by plopez · · Score: 2

      "nosql databases that can do the same

      Except NoSQL databases are not guaranteed ACID compliant. Meaning you may lose critical medical information. The relational model is built around ACID compliance. I hope by now so is MUMPS.

      --
      putting the 'B' in LGBTQ+
    15. Re:Why? by Pitawg · · Score: 1

      It may be old, but it is a quick solution for many tasks. It is a text based coding environment using something similar to perl hashes, but they are multidimensional and sorted. Put a carot in front of a variable and it becomes a database entry that all processes can see, but otherwise local variables for the code. The commands can be shortened in many cases down to a letter or two. Strict form of Optional-Label space command space arguments space command space arguments..... Reminds me a little of basic, but instead of line numbers, optional labels on any line will name and index the code as well as the data storage.

      There were many at one time, but most were gobbled up by Cache'. They seem to have turned theirs into a web server to avoid the terminal text limits. Pity.

      There is a FileMan package of mumps code made for the VA way back, that is a pretty complete relational database package for those needs. Call centers have used it well. Multi-user in/out bound switch controlling script engines. Some of the script applications used FileMan as a base for storage, but the data could still be used in a native manner. Some of the script editors were very featured, and could generate mumps code very cleanly. Other than FileMan however, I did not see anything but custom code.

      I liked using under VMS the most, but the aix version is just as useful. DOS versions were a nightmare for me. I love it still, but trying to stay with it and avoiding the healthcare industry is getting harder every day. Most recently however, perl takes up more of my time.

    16. Re:Why? by Archtech · · Score: 1

      "And like I love, like, when a 16 year old, like, writes articles about stuff, like, they don't fully understand, like now. like dude".

      That's rather funny, in view of some of the comments here about MUMPS' technical features. Criticizing a programming language and database management system based on a few lines of remarks made by someone who may not know much about it either... doesn't make a lot of sense.

      What cuts a bit more ice with me is that MUMPS is still being used - by the people who are responsible for getting the work done.

      --
      I am sure that there are many other solipsists out there.
    17. Re:Why? by Qzukk · · Score: 1

      nothing you can't have in perl today, with a relational database, and a table or two to track relationships between objects.

      Sure, and there have been written entire books and essays and algorithms on how to get your relational database to store and return a hierarchy. It reminds me of those highschool programming challenges where you implement a binary tree in a single array because why the fuck not?

      But instead, it's a whole new opportunity to create problems!

      Every language invented in the 60's was a whole new opportunity to create problems. The problem now is continuing to use it without fixing the problems. Even PHP has made improvements to the language.

      --
      If I have been able to see further than others, it is because I bought a pair of binoculars.
    18. Re:Why? by FranTaylor · · Score: 1

      Except NoSQL databases are not guaranteed ACID compliant.

      Except when they are:

      https://en.wikipedia.org/wiki/Berkeley_DB

      "Despite having a simple architecture, Berkeley DB supports many advanced database features such as ACID transactions, fine-grained locking, hot backups and replication."

    19. Re:Why? by Anonymous Coward · · Score: 0

      Only in that Mr Codds "rules" weren't even a twinkle in his eye when it was created.

    20. Re:Why? by littlewink · · Score: 3, Interesting

      Hmm. That sounds almost like you're tracking relationships. Maybe you should use... (wait for it) A RELATIONAL DATABASE. Seriously, we often store object databases in relational databases. It's easy to add more properties to objects in your database with a relational db because of its very nature. You just create a new relationship, appropriately keyed. And there are lots of examples of systems backed by relational databases which permit you to add arbitrary new properties to objects. Take Drupal, for example; you can always either add a new module which will add new properties to old node types, or just add more data types to old node types. You could add, for example, a parent-child relationship. In fact, modules exist to do this already.

      Except that MUMPS did it 30-40 years before such features were available in relational databases.

      And see Henry Baker on "Relational Databases", Comm. of the ACM 35,4 (April 1992), 16,18.:

      Why were relational databases such a Procrustean bed? Because organizations, budgets, products, etc., are hierarchical; hierarchies require transitive closures for their "explosions"; and transitive closures cannot be expressed within the classical Codd model using only a finite number of joins (I wrote a paper in 1971 discussing this problem). Perhaps this sounds like 20-20 hindsight, but most manufacturing databases of the late 1960's were of the "Bill of Materials" type, which today would be characterized as "object-oriented". Parts "explosions" and budgets "explosions" were the norm, and these databases could easily handle the complexity of large amounts of CAD-equivalent data. These databases could also respond quickly to "real-time" requests for information, because the data was readily accessible through pointers and hash tables--without performing "joins".

      I shudder to think about the large number of man-years that were devoted during the 1970's and 1980's to "optimizing" relational databases to the point where they could remotely compete in the marketplace. It is also a tribute to the power of the universities, that by teaching only relational databases, they could convince an entire generation of computer scientists that relational databases were more appropriate than "ad hoc" databases such as flat files and Bills of Materials.

      Computing history will consider the past 20 years as a kind of Dark Ages of commercial data processing in which the religious zealots of the Church of Relationalism managed to hold back progress until a Renaissance rediscovered the Greece and Rome of pointer-based databases. Database research has produced a number of good results, but the relational database is not one of them.

      Sincerely,

      Henry G. Baker, Ph.D.

    21. Re:Why? by Darinbob · · Score: 1

      The problem is the same with lots of old programs. No one has the budget to throw them all away and rewrite them again, and then convert all the data formats. At least with COBOL there are a lot of people who know that language and the language is not terrible, so it survives with good reason. But MUMPS has few programmers and is a nasty language.

    22. Re:Why? by sfcat · · Score: 1

      Except NoSQL databases are not guaranteed ACID compliant.

      Except when they are:

      https://en.wikipedia.org/wiki/Berkeley_DB

      "Despite having a simple architecture, Berkeley DB supports many advanced database features such as ACID transactions, fine-grained locking, hot backups and replication."

      Except that Berkeley DB predates NoSQL by a few years/decades. Its more of a DB library than a DB and really intended to be used when writing a DB. And no, there isn't currently a NoSQL DB that is ACID compliant.

      --
      "Those that start by burning books, will end by burning men."
    23. Re:Why? by FranTaylor · · Score: 1

      BerkeleyDB IS a NoSQL database

      Just because it existed before the word NoSQL doesn't mean it isn't one

      BerkeleyDB is most certainly a database, it comes with an executable program that can be used as a full-featured database.

      And no, there isn't currently a NoSQL DB that is ACID compliant.

      Isn't that funny? The very product mentioned in this article (Intersystems Caché) is a NoSQL DB that is ACID compliant.

    24. Re:Why? by plopez · · Score: 1

      OK, context check. I meant modern "NoSQL" database engines. The older ones have survived because they got better. The new ones I was actually referring to are proud of the fact they are eventually consistent, meaning they are not ACID compliant. Though over time they will be, or will be discarded.

      --
      putting the 'B' in LGBTQ+
    25. Re:Why? by FranTaylor · · Score: 1

      I meant modern "NoSQL" database engines.

      a useless impractical distinction if I ever saw one

      BerkeleyDB is thoroughly "modern", could you please list a single attribute that keeps it from being "modern"

      a hilarious attempt to back out of your "no true scotsman" statement you ignorantly walked into

    26. Re:Why? by Anonymous Coward · · Score: 0

      The good Dr. Baker is caught in a time warp and is fighting yesterday's battles using yesterday's arguments.

      Relational databases comprise over 80% of all databases (this is a very old number now and probably too low by a considerable amount). They took over for multiple reasons, but mainly because they brought a standardized way of thinking about and evaluating any database design. Standardized as in, universally agreed upon, excepting only for the people who will defend the prior order.

      Relational database theory is based upon mathematical set theory. It has rigorous logical underpinnings. All prior database models lack this. Defend the ancien régime all you want, this is truth and the truth will set you free.

      Furthermore, arguing that "MUMPS did it 30-40 years before such features were available in relational databases" may well be true, but so what? There is a limitless supply of anecdotal stories of "X did Y, Z years before N had it." It's not a sufficient basis for keeping technology X around. We don't get paid in IT to be nostalgic; when it's time to move on to a better technology, you had better notice that times have changed. Hell, sometimes the new tech is simply more popular (though this does not apply to the database argument specifically).

      I know all about the strengths of older systems too. Don't characterize me a clueless newb. However I remain committed to the following: If you get stuck in the past you've stopped growing. Nostalgia is a decent hobby but you cannot maintain a career on it.

    27. Re:Why? by modmans2ndcoming · · Score: 1

      Hierarchical databases are more efficient for healthcare....and most applications that have lots of real time I/O

    28. Re:Why? by Anonymous Coward · · Score: 0

      plus Cache mirroring is freaking cool.

    29. Re:Why? by plopez · · Score: 1

      As in the modern as in approximately this century. I assumed when I said "NoSQL" you knew what I meant as opposed to "no sql".

      --
      putting the 'B' in LGBTQ+
    30. Re:Why? by Anonymous Coward · · Score: 0

      I further note that the backlash against relational technology, that Dr. Baker forecast in 1992 didn't happen. It didn't happen and it is now 23 years after he wrote this article. Perhaps it will take yet another quarter century before Computing Science supposedly comes to it's senses?

      Or maybe Occam was right and Dr. Baker was wrong?

  7. This MUMPS? by Anonymous Coward · · Score: 1

    I first heard of a MUMPS language on Vax/VMS in the early 1990's. It seemed to be associated with lab environments. I find it hard to believe that hospital requirements are so unique as to not be addressable by a general purpose language like C++.

    1. Re:This MUMPS? by nitehawk214 · · Score: 3, Funny

      Yeah, you would think Vax would get rid of MUMPS.

      Must be those damn Anti-Vaxers.

      --
      I'm a good cook. I'm a fantastic eater. - Steven Brust
  8. Damn anti-vaxxers by CajunArson · · Score: 0

    You know, they've had a vaccine for MUMPS for a long time but those anti-vaxxers are apparently bringing it back!

    --
    AntiFA: An abbreviation for Anti First Amendment.
  9. MUMPS is an ancient shitheap of a language by Anonymous Coward · · Score: 0

    Just google MUMPS horror stories and you'll get an impressive list of all the ways in which MUMPS is horrible as a language... and then all the ways that MUMPS is 10x worse in practice because of how it's prone to horrible problems with structure and readibility. And then all the ways it's worse than that because everyone who has a choice programs in something else... which means MUMPS "programmers" are generally a bunch of halfwits who would be right at home implementing complex business applications in excel spreadsheet macros.

    If it wasn't for the sad fact that a lot of hospitals adopted it a few decades ago, it would have been left in the wastebin of programming history to which it rightfully belongs.

  10. Programming languages do not solve problems by Anonymous Coward · · Score: 0

    > This is the fundamental problem that the programming language MUMPS (sometimes called just "M"), or the
    > Massachusetts General Hospital Utility Multi-Programming System, aims to solve.

    This is not a matter of the language. The S in MUMPS stands for System. A System is a collection of concepts that can be implemented in any turing complete language. The ideas behind the system are the important things.

  11. Worst ever serious language by Sangui5 · · Score: 1

    When discussing stupid/nasty/unpleasant programming languages, INTERCAL and Brainf*ck typically come up. However, both of those are artificial languages designed to be unpleasant. They are jokes.

    I wish MUMPS was a joke.

    MUMPS makes both APL and BAFLL seem sensible. The classic DailyWTF article, A Case of the MUMPS, really explains it all. Including things like an 8 character function name limit (even C fixed that, although not before we got the "creat" system call).

    MUMPS is just as bad as it sounds.

  12. MUMPS oddities by Anonymous Coward · · Score: 0

    MUMPS has many odd things about it. Evaluation is strictly left-to-right, so 1 + 2 * 3 evaluates to 9. There are 26 reserved words in the language, each of which begins with a different letter of the alphabet. In the old days, to conserve memory, it was allowed and encouraged to abbreviate each reserved word down to the first letter. There are essentially two scopes: "global", which means persistent, on disk, and "local", which everyone else would call "global".

  13. Microsoft got 'em beat already by blind+biker · · Score: 1

    Microsoft is about to release their RAD for healthcare, called Visual AIDS. MUMPS has got nothing on them.

    --
    "The agriculture ministry is not in charge of Gundam" - Japanese ministry official.
  14. Oh the pain... by aethelrick · · Score: 5, Interesting

    I was unlucky enough to have to advise how best to integrate a cobbled-together creaking MUMPS system into a more modern healthcare environment where the business wanted to "use SQL" to write reports against the data in the MUMPS system... of course the ancients who wrote the MUMPS system had done so with a complete disregard for maintenance and extensibility. NOTHING in the system was well thought out... in fact it looked a lot like a bunch of programming novices had just added a crap-ton of data in attribute/value pairs in no particular structure over a period spanning many years with each individual change being in complete isolation because the authors did not understand what had gone on before. It was also sadly really easy to copy/paste vast tracts of code along with the persistent storage bit so guess what the novices I mentioned earlier did? Yup, they copied and pasted a bunch. Now while this distasteful in any language, consider how much this hurts when it's in effect your actual data storage you're copying and pasting along with the code Furthermore... the authors had used every shorthand short-cut in the book because they hated typing (and the reader apparently). I can honestly say I'd rather debug befunge in my head than work with anything remotely related to MUMPS, M or Cache every again. From what I saw, the system was a write-once/read-never data soup that had no place in the GP practice management software that had been written in it. The system held fairly small amounts of data in bloody idiotic structures that were impossible to read without writing more MUMPS. All the business was trying to do with it was print a few letters and government forms... something ANY SQL database along with a report writer would have handled in a much simpler, cheaper and more maintainable manner. *shudder*

    1. Re:Oh the pain... by LF11 · · Score: 1

      I'm going to go out on a limb and guess that you were looking at the database structure itself and did not take the time to learn MUMPS well enough to really work with it.

      I've never worked with MUMPS, but your aggravation is quite familiar. It's what happens when you try to take apart a schema that is designed as an object store, without using the object accessing framework.

      I'm not defending MUMPS in any way, but you should be aware of this if you ever attempt data conversion in the future. Often (not always!) it is best to become properly familiar with the original system of accessing the schema, and use that model to inspect and interact with the data store. It's frustrating as shit to have to learn a whole new (often proprietary) system in order to get at the data cleanly, but it will likely save you quite a bit of time and frustration. Plus you can put it on your resume, so there's that.

    2. Re:Oh the pain... by Ailicec · · Score: 1

      Here's my experience with MUMPS. About twelve years ago, I interviewed with a shop that used it. One of the interviewers told me, a little smugly, that MUMPs was so powerful, that nobody can be productive in it for at least a year. Then I got a one paragraph description of it and was asked to write some basic programs, using pen and paper, with someone watching. My recollection was it was a bastard child of assembly and LISP. There were lots of parentheses, but only register variables to work with. (That doesn't seem to match the wikipedia description, but it's the description I got at the time.) The place probably didn't have a choice about using it, but they seemed convinced it was the best thing ever. I'm not too broken up over not getting that job.

    3. Re:Oh the pain... by aethelrick · · Score: 1

      There was no structure. There is no "database" the code _is_ the database. I learned enough MUMPS in order to understand what I was looking at and what I could see was a system (I use the term loosely) that was made up of a disparate bunch of arrays with no conventions, arbitrarily duplicated and messy with no design or plan in sight. I'm quite comfortable with object stores and I learn fast, love data and I revel new challenges. In the project in question we'd already successfully and happily integrated around 20 legacy systems written in all sorts of different languages and using all sorts of data storage. I can honestly say, I've NEVER seen a bigger heap of crap than that MUMPS system. As it happened, I wasn't the poor sod who was tasked with the actual integration, just the "smart" person sent to see if it was possible. Based on what I saw, my advice to management was to ditch it and re-write the app as the overall requirements were small compared to the morass of crap an integrator would have to deal with. Last I heard, the company had had three or four failed attempts to integrate this product and eventually it got killed off completely.

    4. Re:Oh the pain... by Giant+Electronic+Bra · · Score: 1

      Hahaha, that wasn't IDX (AKA GE Healthcare) was it? I interviewed with them back in the early 90's. They were the most arrogant dorks you can possibly imagine, and their product frankly stank. They had a very good grasp of the business side of things, but their actual software engineering practice was execrable and MUMPS couldn't have helped.

      --
      "Malo periculosam, libertatem quam quietam servitutem." -- Jefferson
    5. Re: Oh the pain... by Anonymous Coward · · Score: 0

      Yeah, so as previously said, you failed to understand M and globals.

  15. MUMPS predates UNIX by Ian.Waring · · Score: 2

    When I joined DEC as a trainee programmer in 1976, MUMPS-11 was one of the OS choices on the PDP-11. One of the guys still Product Managing high end systems at HP UK was a MUMPs support guy in Software Services at the time. Last saw it in the flesh as VAX DSM (Digital Standard MUMPS) back in the late 1980's. A lot of the revolutionary stuff like NoSQL and JSON type databases are just reincarnated from DEC way back when.

    1. Re:MUMPS predates UNIX by Arnold+Reinhold · · Score: 1

      MUMPS started on the 18-bit PDP-7/9/15 series and kept the ponderous PDP-15 alive for years after other uses had switched to minicomputers like the PDP-11.

  16. See, legacy systems aren't dead! by ErichTheRed · · Score: 1

    I do systems integration work, and most of the companies I work with are airlines or somehow connected with air transportation. Besides banks, airlines were the first companies to computerize, and a lot of that legacy is still baked into modern systems.

    I've read about MUMPS, never programmed in it, but I see huge parallels in my work. The language was written back when every single byte of memory was expensive, hence the need for single character keywords. Airline systems were built out at a time when every single byte of data transferred over a comm link was super expensive. This is why an experienced reservation agent can complete a flight booking in about a minute if they know all the parameters -- the command language they use on most res systems is extremely terse.

    The other thing is that most industries outside of legacy-land don't have literally man-decades worth of prior systems work to support. Everything user-facing these days (kiosks, airline web sites, etc.) is built on a framework of message-passing to mainframes at one level or another. And it must work and continue to work. Your average Node.js coder has no such limitations -- they just open up an AWS account, take a database server here, a web server here, slap some glue code together, and presto...iPhone app! It gets way harder when your bottleneck is something that just can't be fixed because it needs to continue working that way, because 1000 other systems are depending on that component to stay the same.

    I can definitely see MUMPS being something like that -- horrible to work with but nearly impossible to replace with something modern. You can't just swap out a mainframe if your availability or I/O requirements don't allow you to use anything else, for example. Most legacy stuff can and does have some of the components replaced or abstracted away, such as terminal session management or data access for chunks of the application that don't require the power or availability of the underlying mainframe. Maybe the main thing driving MUMPS still is that in-memory database paradigm they support or just the sheer volume of business logic that would have to be rewritten to work with a regular DBMS. Either way, I wouldn't want to be forced to program in it. Go download the source code for the VA's Vista system, written entirely in MUMPS. It made my brain hurt.

    1. Re:See, legacy systems aren't dead! by FranTaylor · · Score: 1

      I've read about MUMPS, never programmed in it,

      you could have stopped right there, everything after it is nonsense

  17. Its hard to google by amias · · Score: 1

    "MUMPS/M is poorly understood, at best, and more likely to be completely unknown."

    because anything with a single letter name is pretty much impossible to google (R anyone ?)
    and mumps is an overloaded term in the medical namespace so its going to give a lot of false positives

    I'm all for humourous names but you need to make sure they don't conflict or confuse first

    --
    [site]
    1. Re:Its hard to google by meta-monkey · · Score: 1

      I've never had trouble googling for help on R. I just google "r topic i need help with" and it's pretty much always relevant.

      --
      We don't have a state-run media we have a media-run state.
  18. MUMPS is nothing special by xaintly · · Score: 4, Interesting

    MUMPS is only used in healthcare/financial systems because those institutions developed applications in the 1970s and are still maintaining them. There is zero interest in MUMPS for any new development. At the time (the 1970s), MUMPS offered a lot of features that other languages didn't. It is basically a hierarchical key/value datastore (like the windows registry, or a filesystem), coupled with a minimalist programming language (it still doesn't support 'while' loops, switch statements or variable scoping). There is no concept of relationships (except between layers of the hierarchy), no way to enforce datatypes, no way to sort an array, no way to search the hierarchy for anything, no way to create discrete objects or associate methods with data.

    It does contain some advanced features (for the 1970s); multi-threading, distributed data, and the ability to abbreviate all language commands down to 1-2 letters so your program can fit into 4k of RAM.

    EPIC, the medical records product used by many hospitals in the US, is built on top of Intersystems Caché. Caché adds relational features to the MUMPS database, object-ish features to the MUMPS language and supports SQL queries. Internally, it converts all queries to MUMPS, and you could totally bypass the API and write anything you like directly to the database (violating any constraints the API would have imposed on you).

    If you are interested in schema-less/noSQL databases, I would suggest you have a look at MongoDB. It has all the features MUMPS does, but without the ancient programming language attached to it. It also has powerful searching capabilities, can store terabytes of data and supports transparent replication and distributed storage.

    If you are interested in a schema-less database for a MEDICAL ENVIRONMENT, where accuracy matters and the difference between having a '12' in the dosage column vs. "123 any street, anytown, usa" (silently converted to 123 when treated as a number) could kill somebody, then please consider an alternate profession.

    1. Re:MUMPS is nothing special by Apocryphos · · Score: 1

      Your understanding of the language and Epic's environment is incorrect.

      For example, you can write while loops, it has a different implementation of variable scoping (things down the call stack can access anything declared by any level above but not vice versa), of course you can sort an array (in fact, it's sorted as it's built), of course you can search the hierarchy (extremely quickly, too) and of course you can create and use discrete objects.

      While Epic is built on Intersystems Cache, it does not use any feature that is not part of the ANSI language standard.

      Obviously, your data conversion example is foolish. Do you really think that is an intractable problem that hasn't been solved? Do you really think that vulnerability exists in Epic's system?

    2. Re:MUMPS is nothing special by xaintly · · Score: 1

      Most languages have workarounds for things that aren't natively supported. MUMPS programmers can use loops with no looping conditions and GOTOs or QUITs to exit the loop, simulating a 'while' loop. You can also copy arrays into new arrays that are sorted the way you want, or "insert a value in the middle" by creating array element "3.5" between 3 and 4. Likewise, you can attempt to enforce data types by layering a type-enforcing API on top of MUMPS and then hoping everyone uses the API instead of ignoring it.

      A good programmer considers each language/environment to be a tool and uses the right tool for the job. In safety-critical systems where invalid data could kill someone, using a typeless, schema-less system with nonstandard language conventions as a starting point seems irresponsible. Why not start with a normalized relational database and a language designed to encapsulate and protect data from inadvertent data-entry or programming errors?

      Epic may not allow you to store an address in a numeric column, but that's only because the application goes through the Cache SQL API, and either the app or the API will disallow it. If you can write MUMPS/Objectscript, you can simply write directly to the underlying data and nothing will stop you. Contrast that with any SQL database, where you can't write "XYZ" to an INTEGER column no matter what your access level

    3. Re: MUMPS is nothing special by Anonymous Coward · · Score: 0

      Your example fails a quick sanity check.

      ?.n

      Now what?

    4. Re:MUMPS is nothing special by Apocryphos · · Score: 1

      In safety-critical systems where invalid data could kill someone, using a typeless, schema-less system with nonstandard language conventions as a starting point seems irresponsible. Why not start with a normalized relational database and a language designed to encapsulate and protect data from inadvertent data-entry or programming errors?

      Because performance. Yes, Epic had to put extra work in to essentially build their own version of the SQL server black box, but now they are very difficult to compete with.

      Epic doesn't use the Cache SQL API. Instead, they built an API on top of objectscript that stores fields safely. They have a staggering amount of code written in objectscript, and while it's true that "nothing will stop you" from writing directly to the underlying data oddly enough that doesn't seem to be an issue because developers can learn how to follow best practices.

    5. Re:MUMPS is nothing special by sfcat · · Score: 1

      If you are interested in schema-less/noSQL databases, I would suggest you have a look at MongoDB. It has all the features MUMPS does, but without the ancient programming language attached to it. It also has powerful searching capabilities, can store terabytes of data and supports transparent replication and distributed storage.

      MongoDB is not ACID compliant. Makes it a non-starter for something in the medical field.

      --
      "Those that start by burning books, will end by burning men."
    6. Re:MUMPS is nothing special by FranTaylor · · Score: 1

      Why not start with a normalized relational database and a language designed to encapsulate and protect data from inadvertent data-entry or programming errors?

      nobody actually does this in production systems, if you put in code to detect all possible data input errors, you will not meet any sort of performance goals

      you can put in indexes and referential integrity constraints to your heart's content, but then you will find that your INSERT operations are just outrageously slow

      it's better in all cases to constrain user input at the application level

    7. Re:MUMPS is nothing special by Anonymous Coward · · Score: 0

      By now it's fairly clear that you have no knowledge of SQLite, MySQL, or MUMPS.

      You should probably shut up and close your browser.

  19. Mumps usage by kcokane · · Score: 4, Informative

    /. comments seem to be a contest to see who can demonstrate the least knowledge of the subject. While Mumps is largely unknown to many, it is widely used in health care and finance. Epic Systems controls about 40% of the US market (http://medicaleconomics.modernmedicine.com/medical-economics/content/tags/electronic-health-records/why-epics-market-dominance-could-stifle-ehr?page=full) and is written in Mumps as is the world's largest clinical information system, VISTA (http://worldvista.org/AboutVistA).

    Mumps is a simple, string oriented scripting language for a builtin multi-dimensional and hierarchical database (http://www.cs.uni.edu/~okane/source/MUMPS-MDH/stonehill.pdf). It is especially well suited for applications such as medicine where knowledge is often as varying depth hierarchies that are not well suited for relational systems.

    The commercial vendors are Intersystems (http://www.intersystems.com - their version is called Cache') and GT.M (http://www.fisglobal.com/products-technologyplatforms-gtm) whose version is open source / GPL. My own version (http://www.cs.uni.edu/~okane/) is also open source / GPL and can map the Mumps global arrays (the sparse array trees) to PostgreSQL.

    --
    Kevin O'Kane http://www.cs.uni.edu/~okane/
    1. Re:Mumps usage by Archtech · · Score: 2

      "/. comments seem to be a contest to see who can demonstrate the least knowledge of the subject".

      Exactly. And the competition is white hot.

      --
      I am sure that there are many other solipsists out there.
  20. Too bad it's so old... by Anonymous Coward · · Score: 0

    otherwise it would be a wonderful new Agile NOSQL database sytem.

  21. MUMPS was designed for a different world by twasserman · · Score: 1
    I was part of the MUMPS community back in the 1970s and was the principal author of several documents that provided an executable specification of the language syntax and a guide to implementing globals efficiently, given the systems of that era. (I didn't write any MUMPS code that found its way into production.)

    MUMPS was initially developed for the 18-bit DEC PDP-7 in the late 1960's, where memory and disk constraints were severe, and processor speeds were a tiny fraction of today's slowest devices. Early MUMPS programs were limited to 1k characters, so every character counted, with most variables being 1 character long. Globals were done as a hierarchical "database", such as X(1,5,Z), again for space-saving and for efficient retrieval from the extremely small and slow disk drives of the day. MUMPS programs were interpreted, not compiled. With these constraints, comments were exceedingly rare, since they used part of the 1k, and slowed down the interpreter, which scanned every character.

    As a computer scientist, I was appalled by certain features of the language, particularly the ability to change a running program by executing a variable. That's a security nightmare, since you could effectively read a string (stored as a global or input from the console) and then execute it as MUMPS code.

    Here we are, more than 40 years later, and many of the major medical information systems are still running code that derives from the original flavor of MUMPS. Meditech and EPIC Systems are major vendors of medical information systems, including software for electronic health records, mostly developed in MUMPS. The much-overpraised VA electronic health record system is also MUMPS-based. As with any other production application, it's very difficult for a new vendor to come along and displace an incumbent, particularly if the conversion process is highly complex, as is the case here. As a result, there's no practical way to update these systems, other than rewriting them from scratch for modern languages and systems, something that is unlikely to happen anytime soon.

    1. Re:MUMPS was designed for a different world by Apocryphos · · Score: 1

      As a computer scientist, I was appalled by certain features of the language, particularly the ability to change a running program by executing a variable. That's a security nightmare, since you could effectively read a string (stored as a global or input from the console) and then execute it as MUMPS code.

      Do you spend a lot of time being appalled? Many languages have this capability, including SQL and the C variants.

    2. Re:MUMPS was designed for a different world by Anonymous Coward · · Score: 0

      And Adobe Reader, don't forget Adobe Reader!

    3. Re: MUMPS was designed for a different world by Anonymous Coward · · Score: 0

      Even in an interpreted language there's no reason to have to write and maintain code with abbreviated keywords. Hell, the editor should be smart enough to display the full commands even if they were stored in abbreviated form, and it shouldn't matter whether you typed them full or abbreviated. GW-BASIC was doing that 30 years ago; every line of code you entered was compressed into an abbreviated extended-ASCII format and re-expanded back to human-readable form if you needed to LIST or EDIT it.

  22. MUMPS is a capable platform by Eravnrekaree · · Score: 1

    I've heard about MUMPS from it being used in Vista, the records system of the Veterans Affairs Administration, a large public domain corpus of software which was released from a FOIA request to the VA.

    MUMPS is not a bad language. As with many languages, the source code readability depends on the programmers mostly, there isnt anything about MUMPS that makes it particularly hard to read. Intersystems Cache is one of the commercial implementations though it tends to downplay its MUMPS foundation, because of the false stigma around the language.

  23. Insurance Claims Systems by Kagato · · Score: 1

    There are several Insurance Claims systems are built onto of MUMPS. If they are still active they almost certainly have Intersystems Caché running onto so that the data can be exposed to more modern stuff.

  24. People who think VMS was a pain by tepples · · Score: 1

    At least @david415 and @adr are anti-VMS. @willrad explains the joke.

  25. HP/MPE had a hierarchical database, too by msobkow · · Score: 1

    HP/MPE had a hierarchical database, too. That OS and database have been dead for many years.

    There is a good reason for that.

    While I applaud the original poster's learning a bit about the bowels of computing history, the fact that they did so doesn't mean new systems should be developed with archaic tools like MUMPS. There is nothing a hierarchical database can do that relational databases don't do better. And as long as you're using one with ACID compliance, even a NoSQL database is better than a hierarchical system.

    How, pray tell, is the ability to add attributes on the fly any different than "ALTER TABLE ADD COLUMN..."?

    --
    I do not fail; I succeed at finding out what does not work.
    1. Re:HP/MPE had a hierarchical database, too by Apocryphos · · Score: 1

      There is nothing a hierarchical database can do that relational databases don't do better.

      That's rather absolute. It seems performance is an area that hierarchical can be better, at least in certain use cases:

      http://www.intersystems.com/assets/datamart_wp-ee478edf530b40311ef506615c0da74d.pdf

      Conclusion
      In tests simulating a data analysis application typical for a telecommunications software firm, Caché was 41% faster than Oracle when creating a data mart of mobile phone information. When the resulting data mart was queried using SQL, Caché’s response times ranged from 1.8 to 513 times faster. Clearly, Caché’s unique multidimensional data engine make it a good choice for applications that require rapid analysis of large amounts of data.

    2. Re:HP/MPE had a hierarchical database, too by msobkow · · Score: 1

      MUMPS does not let you deploy a clustered database server as Oracle does, nor any of the other major RDBMS vendors, so it's scalability is limited to how big a single node can be. Also, shoehorning Oracle onto a 4GB node is kind of a joke. I use as much memory for a laptop.

      I also see no mention of client-server deployment, with separate application servers. That is another implied limitations of MUMPS -- not only are you restricted to one database server, your applications have to run on that same server.

      The "white paper" doesn't even suggest that MUMPS can take advantage of SMP hardware, which, given it's age, it might well not.

      --
      I do not fail; I succeed at finding out what does not work.
    3. Re:HP/MPE had a hierarchical database, too by Apocryphos · · Score: 1

      Yet Epic uses a single node per customer for all but a handful of its customers (Kaiser), and runs all of the customer's applications off that one server. The fact that they were able to do this was a major selling point, not a "limitation".

      For Kaiser, they set up logical geographic nodes and built their own sync system to update the network of nodes on demand.

    4. Re:HP/MPE had a hierarchical database, too by FranTaylor · · Score: 1

      perhaps you might want to actually read the documentation for the current shipping product before you make indefensible statements

    5. Re:HP/MPE had a hierarchical database, too by msobkow · · Score: 1

      Perhaps I have better things to do with my time than read documentation for obsolete CRAP.

      --
      I do not fail; I succeed at finding out what does not work.
  26. Comments from a former MUMPS programmer by lurker412 · · Score: 4, Informative

    I used MUMPS (and MIIS) extensively while working in healthcare in the 80s and 90s. It was an efficient programming and database environment for mini-computers which combined a hierarchical database and interpreted language with sparse arrays and extensive pattern-matching capabilities baked in. It was widely used in hospitals for clinical operations and that legacy is still present in healthcare. The language itself would scare the shit out of anybody using modern technologies (self-modifying code, anyone?), but used with discipline it ran many applications that were literally a matter of life or death for patients. Some variants (MIIS, DEC) were also stand-alone operating systems running on the bare metal. It gave you lots of bang for the buck, even if the code itself looked like a printer test. There used to be a small but active community of vendors and users. Today, there is one large player, Epic Systems, which dominates the applications market, especially in the electronic medical records area. They use Intersystems MUMPS (now known as M) as the underlying language; it has an extensive application building environment on top of the basic language to provide relational, Web and object-oriented abstractions. You can build applications in this environment without ever touching MUMPS code, though commercial applications will generally drop down into MUMPS for special purpose routines.

    1. Re:Comments from a former MUMPS programmer by Anonymous Coward · · Score: 0

      They use Intersystems Cache, which runs in MUMPS.

  27. Hierarchical database by tomhath · · Score: 1

    Maybe you should use... (wait for it) A RELATIONAL DATABASE.

    The advantage of a hierarchical versus relational database model is that the former is much faster storing large amounts of data that fits in the hierarchy (which healthcare data does). Foreign keys and hierarchical joins are built into the data. The disadvantage is that doing anything the doesn't fit the hierarchy is difficult compared to the flexibility of a relational model. This is why systems written in MUMPS have great transaction throughput and the UIs are usually responsive, but running reports is a nightmare.

    1. Re:Hierarchical database by Blaskowicz · · Score: 1

      Fast, simple and hierarchical : is that a bit like an LDAP? Out of curiosity, do people sometimes build a database application on LDAP? Then if you need to do some desktop or other LDAP-enabled software, for more traditional purpose of not having to log in again and manage permissions etc. you already know how to do it.

    2. Re:Hierarchical database by srmalloy · · Score: 1

      This is why systems written in MUMPS have great transaction throughput and the UIs are usually responsive, but running reports is a nightmare.

      It's not necessarily a nightmare; it depends on the flexibility of the reporting tool. I've pretty well given up on using the built-in reporting tool at work for the reports I'm asked to produce because the tool doesn't allow for making the sort of complex links between globals that the report needs (i.e., patients with a given diagnosis who are also on a given medication, and their most recent result from a specified lab test), while producing the data with a MUMPS routine is straightforward because of the internal arrangement of the data. So I would have to say that creating the reports requires a high level of expertise, while running them once they're created is easy.

    3. Re:Hierarchical database by spiritgreywolf · · Score: 2

      Not quite. In COS (Cache Objectscript) just a superset of M really, the whole point of the language is to manipulate the data. You have the best of both worlds - the ability to store data hierarchically as well as relationally at the same time. Just figure out what you want to do and add in the appropriate indexes and write reports off of that. Like anything else you have to PLAN what the Hell you want to build before you go off and build it.

      I have coded in MUMPS since it was on a PDP 11/84 called Digital Standard MUMPS (DSM), though the VAX years and up through the PC and now highly scaled systems. Coded, managed and maintained systems on AIX, Linux, Windows and HPUX, so I kind of have at least a modicum of understanding of its abilities. It's no slouch. It handles transactions - FAST. But then again, understand it was a system designed in the day when there wasn't a lot of money put into healthcare IT. It had to do stuff on little PC's (Micronetics MUMPS and DataTree MUMPS) when a small PC had to run an entire clinical laboratory - instrument interfaces and all. Try that back then with an early version of Oracle in the late 90's and a little computer would bawl its eyes out. I seem to recall Oracle at one point needing THREE CD's just for the ODBC driver? Yeah. That would have never flown in the "M" community. There wouldn't have been enough money to put out the three CD's :-)

      No - it's not magical. It's not the Hammer to Make All Problems Look Like a Nail. Though it is one of the most flexible, competent languages I have used - but like ANY language, it can be abhorrently abused and butchered. You can make structured code in M be simple enough that an 8 year old can understand it, or you can make it look like your computer just took a core dump on your screen. It's totally up to you if you want to avoid making "wicked" or "readable" code. It's the same in Perl, PHP or anything else...

      You pick the toolset appropriate for your industry, company, product, need, etc. you have and code into its strengths. It can be a very capable back-end transactional server that would pound a comparable Oracle box into the sand and make it its bitch, but that is also dependent on having capable programmers to make it happen. You certainly won't need as many "handlers" in the way of FTE's to administer a Cache installation that you do with Oracle - but again, that too comes from experience working on both sides of the fence. You can have processes that support insanity or not. Totally up to the corporate culture everyone embraces.

      Personally I love working with the toolset, but then again I'm biased. I've had to interface it to .NET framework stuff, external Java calls, etc., and that's fun too - and I would always move the logic of what needs to get done out to the appropriate locale or "tier"... But I wouldn't knock it saying any one tool is better overall than any other when it comes to a platform as large as Cache/MUMPS. That just shows how myopic one can be when looking at solutions to problems.

      --
      Never have a philosophy which supports a lack of courage
    4. Re:Hierarchical database by tomhath · · Score: 1

      LDAP is hierarchical, but it's nowhere near a complete DBMS

    5. Re:Hierarchical database by meta-monkey · · Score: 2

      This is why in Epic they extract to an SQL reporting database and you write your reports off that.

      Kind of interesting, because for analyses we turn to data warehousing techniques, wherein you flatten your relational database into a star schema so you can quickly aggregate millions of rows. So you can go

      MUMPS (for transactional throughput) -> normalized SQL (for custom reporting) -> denormalized SQL (for analysis)

      --
      We don't have a state-run media we have a media-run state.
    6. Re:Hierarchical database by Dr_Barnowl · · Score: 1

      People use the engine behind LDAP servers as a database.

      LMDB

    7. Re:Hierarchical database by FranTaylor · · Score: 1

      good luck making complex queries without having to scan all the records, this is precisely why SQL is better, it can optimize queries so you don't have to scan every record

    8. Re:Hierarchical database by modmans2ndcoming · · Score: 1

      so you write a data extract process and send the reportable data over to it in a daily batch...now you get your monthly reports like a pro using BO and Crystal :-)

    9. Re:Hierarchical database by modmans2ndcoming · · Score: 1

      Indexing FTW!

  28. MUMPS by Stormcrow309 · · Score: 1

    As a former MUMPS programmer, yeah; it is bs. Modern languages do a better job in data management. However, certain health care systems do an EPIC job in pushing for obscure languages and technologies - like a message queuing database with a VB middle-ware layer to make it talk like a mainframe. Probably has something to do with lock-in and consulting... Yet, we have to push data into a relational data warehouse to do anything useful with it. SSIS and relational for the win.

    --

    In God we trust, all others require data.

  29. Mumps? by koinu · · Score: 1

    Mumps? It sounds more like a disease than a programming language.

    1. Re:Mumps? by camperdave · · Score: 1

      According to some people, it can be both at the same time.

      --
      When our name is on the back of your car, we're behind you all the way!
  30. MUMPS sucks by Anonymous Coward · · Score: 0

    I worked for Quest Diagnostics and they used MUMPS. Cache is just the gift wrapping on the turd that is MUMPS. It's embarassing that our whole health care system depends on EPIC and MUMPS.

    1. Re:MUMPS sucks by spiritgreywolf · · Score: 1

      Comments like this make me giggle. I could say that same thing about most attempts at making a middleware engine out of Java (ICAN, JCAPS) that moves data around in Healthcare requiring more hand-holding and debugging than is worth it - but that too is just an opinion...

      Then again, any badly created system in any language can share the same root "turdiness" - it depends upon how it's built and maintained. I've seen some awesome Perl code that is elegant and readable, as well as some that looks like it was coded by a lemur tripping on acid and smacking a keyboard with his tail because of the cool "clickety-click" sound it made.

      Were you even a programmer for Quest? Granted I knew some of them back in the day - and a couple of them were rather scary to me - but I could also say the same about some Java, PHP or .NET developers I know. Hate the game not the playa, baby...

      --
      Never have a philosophy which supports a lack of courage
  31. GT.M by paugq · · Score: 1

    Fidelity Systems also has a MUMPS-based database called GT.M. It's open source (licensing is GPL+fuck up) and it's the main competitor to Intersystems Caché

    https://en.wikipedia.org/wiki/...

    1. Re:GT.M by Anonymous Coward · · Score: 0

      I wouldn't exactly call it a competitor.. They (GT.M) and Intersystems Cache Objectscript are of two entirely different levels of speed, support and power...

  32. old news by anjrober · · Score: 1

    how is this News?

    many other healthcare systems are built on mumps, not just VA and EPIC. Notably Meditech is also mumps based, having rolled out of MGH the founders of MT took mumps with them. Judy Faulkner (from epic) then rolled it from MT created epic and drug around mumps with her. IDX (now GE) is also heavily into mumps. its everywhere. here she is talking about using mumps http://www.modernhealthcare.com/article/20150314/MAGAZINE/303149952

    the new bread of healthcare apps have pretty much moved away from it.

  33. IDL by tepples · · Score: 1

    It's what happens when you try to take apart a schema that is designed as an object store, without using the object accessing framework.

    Shouldn't object stores be describable in some IDL? At least then you could add means to import and export objects with JSON or something like that.

    1. Re:IDL by FranTaylor · · Score: 1

      At least then you could add means to import and export objects with JSON or something like that.

      since when do you need an IDL to work with JSON?

    2. Re:IDL by tepples · · Score: 1

      I meant more along the lines of if you can understand a program's object model well enough to express it in an IDL, you understand it enough to make working JSON import and export.

  34. How I searched for MUMPS and R by tepples · · Score: 1

    because anything with a single letter name is pretty much impossible to google (R anyone ?)

    I just tried two searches on Google (with queries r language and mumps language), and the top 10 results of both were relevant. What query was giving you trouble?

  35. Web scale? by tepples · · Score: 1

    If you are interested in schema-less/noSQL databases, I would suggest you have a look at MongoDB. It has all the features MUMPS does, but without the ancient programming language attached to it.

    But then you have to contend with rejected villagers from Animal Crossing arguing over whether it's "web scale" or like "piping your data to /dev/null".

  36. Welcome to the Dept of Veterans Affairs! by Anonymous Coward · · Score: 0

    I don't comment but, the VistA/CPRS system that runs the entire VA, leave/trouble tickets/etc..., is written in MUMPS and Delphi. So when they talk about interoperability with DOD or anyone you are dealing with an EMR that was cobbled together in the late seventies and eighties. By self taught government employees in MUMPS! So this is the 800lb Gorilla in the room with every project, I once asked when are we getting rid of this piece of @#$%, the stunned silence was deafening. No one in management has every been in any other hospital but the VA. None of the IT staff have a background in IT, or outside of the VA. So this is all they know, integration projects with new software is completed in months to years. So when you see a story about VA not being able to complete anything on time, this is the environment that they are operating in.

  37. MUMPS is a fatal disease - in life and in IT by LOGINS+SUC · · Score: 1

    TL;DR: Think PASCAL for critical and wildly complex life-support systems; operating in the Internet age.

    Having spent the last 10 years working in healthcare, I cannot overemphasize the ever growing cataclysm-to-be built upon MUMPS. One might then associate MUMPS the language with Mumps the disease (sans vaccine).

    Worldwide, most major Electronic Health Records (EHR) systems are fundamentally based on MUMPS. Since the language largely predates all modern programming and system design principles like logic-data abstraction, imagine the mess created when various clinical applications (i.e. apps for pediatrics vs. oncology vs. pharmacy vs. radiology vs. geriatrics vs. etc.) are independently created and loosely cobbled together into a complex system - duplicative data representation and non-deterministic 'macro' processes/procedures are woefully common.

    As cited in the Wikipedia MUMPS page, MUMPS is foundational to the largest EHRs (ref. Top 10 [US] EHR vendors by overall market share. In my opinion, this isn't so much because MUMPS is superior in anyway but because there really is 40+ years of codebase out there; much of it still in use today. Consider the US Indian Health Service (IHS) as example. For FY2014, IHS spent a total of $98M for IT. Although recognizing its own RPMS is hopelessly flawed, the agency estimates a capital investment >$150M and 15+ years to transition to newer technology. All the while, they must maintain and operate the current RPMS for ongoing healthcare delivery. Suffice to say and for the foreseeable future, IHS is hopelessly bound to the incumbent RPMS.

    Meanwhile, "extensions" to MUMPS continue to proliferate. Since MUMPS heralds from the days of text-only dumb terminals, there is no in-language accommodation for graphical user interfaces and the common controls associated with event driven systems. This has led to many language extensions created for presentation 'wrapping' the underlying MUMPS output. And since MUMPS precedes modern design principles, newly minted programmers, admins and integrators must learn everything "from scratch" and, most often, in defiance/conflict of tenets they have been taught. Tenets and principles developed in response to hard lessons learned over the last 40 years of widespread IT experiences. These issues are exacerbated because those with the greatest experience are largely retired (or soon to be) and there are no significant opportunities for educating younger professionals except through other than "real life" - using live/production systems and actual persons' medical information.

    1. Re:MUMPS is a fatal disease - in life and in IT by FranTaylor · · Score: 1

      there are no significant opportunities for educating younger professionals except through other than "real life" - using live/production systems and actual persons' medical information.

      the nonsense is STRONG in this one

  38. Integration of data and language by Tablizer · · Score: 1

    dBASE (AKA "xBase") also integrated the programming language with the database, and I was super-productive under that language for a good many tasks. The bloated database API's used now are just eye and finger clutter and wasted busy-work and causes of Carpel Tunnel.

    xBASE was not suited for formal "enterprise" applications or if you wanted fine control over the UI, but for smaller projects I could crank out apps in a snap. True, it was not always the easiest to maintain if not written carefully, but that's true with just about anything.

    At least if you had to reinvent the wheel, the reinvention process was quick. Reuse and DB brand swap-ability is over-rated if it costs too much up front to get it.

    Maybe there is a middle ground somewhere between "modern" languages and data-oriented languages. I really really miss the productivity of the integration. I hope it comes back in some incarnation.

  39. There's a computer language for women! by Anonymous Coward · · Score: 0

    A group of rappers created the Programmers Utility Multipurpose Programming System And Non Determinant Allpurpose Binary Utility Multiprocessor Protocol, designed to encourage young women to go into the CS field.

    One of its creators publicly stated that despite their (and the CS field in general's) misogynistic reputation, they actually liked the girls with the PUMPS AND A BUMP!

  40. MUMPS criticism by Anonymous Coward · · Score: 0

            MUMPS criticism (Score:?)
            by Anonymous Coward on Wednesday July 15, 2015 @01:55PM

            MUMPS was designed as an extremely robust language language for programming life-and-death software.

            MUMPS critics can be divided into two categories:

            1) Those who say, "MUMPS has GLOBAL variables. Arrgh."
            2) Those who say, "MUMPS is a '70s language which was ahead of its time. Maybe it is time to move on. There are companies which can move your MUMPS legacy system to modern databases and languages for $100,000.00."

            If someone tells you that MUMPS is ruined by its dependence on globals does not know what they are talking about. MUMPS's Global Variables were names "global" before the term got its modern meaning. They are really more like what we call today "persistent variables." They are instrumental to a fundamental property of a good MUMPS program: the ability to maintain state through a pull-the-plug-out-of-the-wall type of crash.

            Yes, it is possible to misuse persistent variables in much the same way that you can misuse xBase globals. But MUMPS makes it easy to avoid that. And hard to DO it.

            I work in an environment with a MUMPS back-end maintained by people who have no idea how to maintain it. Despite this, the back-end is the most reliable part of our IT operation. (For MUMPS programmers: These guys are trying to maintain a VistA-based system, heavily modified, without using M-unit.)

            I once described MUMPS to an object-oriented programmer like this, "Its data structures are essentially structs and it has the lambda function."

            He replied, "Then it has objects." I understood what he was saying, but it was invented in the 1970s, before the concept of OOP had even been invented.

    1. Re:MUMPS criticism by AJWM · · Score: 1

      but it was invented in the 1970s, before the concept of OOP had even been invented.

      If it really was the 1970s, then it came some years after SIMULA-67, aka "ALGOL with objects". (I.e., SIMULA-67 was to ALGOL more or less as early C++ was to C.)

      Everything in CS is (probably) older than you think. Including many of its practitioners ;-)

      --
      -- Alastair
    2. Re: MUMPS criticism by Anonymous Coward · · Score: 0

      You're correct that MUMPS "global" variables are not what programmers today call "global" variables. But MUMPS "local" variables ARE what programmers today call "global" variables. So "MUMPS has globals" is a well-founded criticism.

  41. Accreted Horror by Sarusa · · Score: 1

    I thought it was fairly well known just as a horror story about what happens when you don't design a language, you just accrete it (charitably, when the language is extended so far beyond the initial design that it completely escapes it). Like bash or perl or PHO but oh so much worse because everything's worse in health care and govt.

    From Wiki, this is considered good MUMPS code:

    GREPTHIS()
                  NEW SET,NEW,THEN,IF,KILL,QUIT SET IF="KILL",SET="11",KILL="l1",QUIT="RETURN",THEN="KILL"
                  IF IF=THEN DO THEN
                  QUIT:$QUIT QUIT QUIT ; (quit)
    THEN IF IF,SET&KILL SET SET=SET+KILL QUIT

    But in practice it looks like:

    %DTC
    %DTC ; SF/XAK - DATE/TIME OPERATIONS ;1/16/92 11:36 AM ;;19.0;VA FileMan;;Jul 14, 1992
              D I 'X1!'X2 S X="" Q
              S X=X1 D H S X1=%H,X=X2,X2=%Y+1 D H S X=X1-%H,%Y=%Y+1&X2
              K %H,X1,X2 Q
              ;
    C S X=X1 Q:'X D H S %H=%H+X2 D YMD S:$P(X1,".",2) X=X_"."_$P(X1,".",2) K X1,X2 Q
    S S %=%#60/100+(%#3600\60)/100+(%\3600)/100 Q
              ;
    H I X2&'(%Y#4)+$P("^31^59^90^120^151^181^212^243^273^304^334","^",%M)+%D
              S %='%M!'%D,%Y=%Y-141,%H=%H+(%Y*365)+(%Y\4)-(%Y>59)+%,%Y=$S(%:-1,1:%H+4#7)
              K %M,%D,% Q
              ;
    DOW D H S Y=%Y K %H,%Y Q
    DW D H S Y=%Y,X=$P("SUN^MON^TUES^WEDNES^THURS^FRI^SATUR","^",Y+1)_"DAY"
              S:Y21608+%H-.1,%Y=%\365.25+141,%=%#365.25\1
              S %D=%+306#(%Y#4=0+365)#153#61#31+1,%M=%-%D\29+1
              S X=%Y_"00"+%M_"00"+%D Q
              ;

    1. Re:Accreted Horror by Sarusa · · Score: 1

      PHO? Obviously that was the version before PHP.

  42. Note from a former MUMPS coder by karchie · · Score: 1

    My first job out of grad school in 1981 was with the University of Wisconsin clinical cancer center. We built a DB to track clinical trial data. I was 1/2 the programming staff and we wrote the code in MUMPS running on a special purpose OS that ran on a Data General minicomputer. The base of our code was a DB-like program written by the VA and distributed all over. The OS was the truly terrible part. The disk was formatted into 1K blocks and these blocks were the closest things to files that it had. The blocks had names and were organized alphabetically. Programs that didn't fit in 1K had to be broken into multiple blocks, executed in a chain alphabetically. Mumps had some OK features like good string pattern matching and the array like structures were handy. Each array was the equivalent to a DB table and each row a tuple. No query language though. To effectively use the ridiculous 1K block structure, all reserved words were 1 character and so where all variable names. A legal statement was I I W W So, as others have said, just writable but un-readable. I gave a talk at a MUMPS conference and was one of very few trained programmers there. Most were medical professionals who did some coding. Some of the people who had worked on this project before me had gone off to form Epic Systems. I wouldn't want to code in it again, but it was a good job.

    --
    You knew the job was dangerous when you took it. -- Super Chicken
  43. The grand-daddies of NoSQL by gbe386 · · Score: 1

    MUMPS and PICK (BASIC) are the grand-daddies of NoSQL. They are both very much alive today. I've been a PICK programmer since the late 90's. The schema-less structure of the database tables (and like MUMPS, it's a language & a database... and at one point it was also an O/S) is much easier to work with than SQL's relational structure. The data is not normalized and is more commonly known as "multivalue." More info here... https://en.wikipedia.org/wiki/...

  44. Mumps used for more than Medical and Finance by Anonymous Coward · · Score: 0

    It was used in many areas, police blotter, 911 dispatching, and police line up creation. Yes I worked on those systems using Intersystems Mumps on various platforms in the mid 90's. The language itself was relatively easy to pick up and learn, but it was a nightmare to support the older code. Spaghetti code is an understatement. Self modifying code, executing global variables as code, then add to that single letter commands, and you had a serious nightmare trying to debug anything you didn't write yourself. I remember several times where I just rewrote things from scratch just because it would be faster than me figuring out what some routine did then modifying what was there. I can say I am glad I don't use it anymore.

  45. Holding things back... by ndykman · · Score: 2

    The main problem with the environment is that between Epic Systems and VistA (the VA system), MUMPS holds back some real innovation. Sure, you'll hear tons of success stories about the VA or from EPIC, but the fact is that this vendor lock has huge costs. A major hospital chain I worked with spent a billion+ on a EPIC implementation. Did it improve interoperability with other hospital systems? Nope. Even two EPIC implementations will have a very hard time sharing records.

    And that's the whole point of a EMR, to have a consistent version of a patient's history throughout their life. And these systems can't support that model in our current system. If every doctor had to use one system (like in some national health care systems), it'd be better, but that's not what we have. Sadly, the other attempt to standardize healthcare systems and interoperability (HL7) is an equally convoluted mess.

    What is needed (but we won't get because of the players) is a standards driven process that is focused on building up a workable ecosystem for exchanging information.

    It'd be hard to create a standard that would allow for healthcare professionals to: provide proof that they are a provider and to provide electronic evidence that they have a patient (via a secure exchange) to create a unique identifier for that patient/provider, but it is doable. Solve that, then move on to exchanging of information between providers and allowing providers to mark information as not shareable to the patient or other providers. All of this could be done, and it would provide a real basis for a proper EMR system.

    1. Re:Holding things back... by Anonymous Coward · · Score: 0

      Really? you think the problem with sharing records has to do with the EMR? CareEverywhere is perfectly serviceable, even when getting data from other Epic clients. Hospitals like to not allow their data to be shared so they prevent it from being queried. HISP infrastructure is a JOKE. the idea should be a secure protocol that works like a DNS system when locating data but the independent HISP providers gouge the crap out of doctors and skilled nursing facilities who are the number one and two groups that would benefit from HISP. To have real data sharing we need universal identifiers that can be used to match across health systems, well implemented protocols and health care providers that are willing to fully share the data.

  46. VERY OLD and I wish it would die by Anonymous Coward · · Score: 0

    I first encounters MUMPS in 1994 while working for a major hospital in Cleveland. The company, HBOC used the language for their patient care software. The language is bit for those who believe that knowing C or other similar programming language that this will be easy. MUMPS USES SINGLE characters as instructions and is a throw back to assembler days. I tried following the one and only MUMPS programmer available, who was backlogged for months if not years with request for work and gave up. A capital 'J' might be a loss memory while a lower case 'j' something different.

    I thought that the reason for the back log in work was because of the archaic language, and I laughed and went back to my own programming.

    Healthcare will always be a mess until the industry moves at least into the 1970s and dumps the MUMPS.

  47. DEC PDP-11 Software handbooks by Old-Claimjumper · · Score: 1

    Oh, The joys of a shelf full of old computer books.
    DEC transitioned MUMPS from the 18-bit line onto the PDP-11s. I think that the majority of Mumps systems were on the 11s and then moved to VAX as it came on the scene. I can find no mention in the PDP-8 books. If MUMPS was moved there it was not a standard DEC product. Likewise, the PDP-10 books don't cover MUMPS. I would assume that it was moved to the 36-bit machines, but have no reference. Does anyone out ther have some record of MUMPS on the PDP-10??

    The DEC PDP-11 reference manual set had one volume on software systems for the PDP-11s.
    I pulled the 1975 and 1980 versions.

    DEC PDP-11 Software Handbook, Copyright 1975
    Section II: PDP-11 Operating Systems
    Chapter 1: Cassette Programming System CAPS-11
    Chapter 2: Foreground/Background RT-11
    Chapter 3: Resource Sharing Timesharing System RSTS/E
    Chapter 4: Multi-user Database Managemetn System MUMPS-11
    Chapter 5: RSX-11
    Chapter 6: IAS

    The intro to MUMPS describes it as: A small to large sized timesharing system that offers a unique fast access data storage and retrieval system for large database processing.

    The MUMPS chapter is 26 pages long with a reasonable amount of reference detail for the time. The database aspect was the unique selling point.

    By the 1980 version of the same DEC PDP-11 Software Handbook, MUMPS had moved to Chapter 8: Digital Standard MUMPS.
    The intro section describes:
    DSM-11 Digital Standard MUMPS operating system for PDP-11 processors.
    A small to large sized timesharing system that offers a unique fast-access data storage and retrieval system for large data base processing. Originally designed for medical record management and now available for similar data base applications.

    Chapter 8 of the 1980 Software Handbook has a more prose-like description than the reference-manual-like 1975 chapter. The new version has a good description of hospital medical record processing and claims over 500 major hospitals using MUMPS.

    So it was under active development and use through the 70s on the PDP-11s.
    With that base it is not surprising that MUMPS is still in use.

  48. I work with M at work by modmans2ndcoming · · Score: 1

    At first I thought it was a ridiculous anachronistic language developed by a bunch of IT guys in the 60's that had a poor understanding of even most contemporary ideas of programming languages. now? I think it has it's place. It is very focused on mutli-dimensional arrays and makes manipulating hierarchical data structures very efficient. Another person's Perl code is easier to read but it is efficient for what it does.

  49. Really bad by Cafe+Alpha · · Score: 1

    As I understand it, it's like Lua, except that variables aren't declared, and they're in a global namespace. And they're limited to 8 characters long. And if's and loops are limited to single lines (that are probably limited in turn to 80 or 60 characters - whatever their punched cards were eh?)

    Basically unusable for large systems. But used for them anyway.

    Any shop that's forced to use Mumps should write a compiler for a better language that outputs Mumps, and convert their Mumps code to that better language. It would take a much shorter time than maintaining Mumps code.

    1. Re: Really bad by Anonymous Coward · · Score: 0

      Any shop that's forced to use Mumps should write a compiler for a better language that outputs Mumps, and convert their Mumps code to that better language. It would take a much shorter time than maintaining Mumps code.

      Ugh, and have your new code being compiled back to run on MUMPS? Better to write a compiler to go the other way and convert all your MUMPS code to something better.

  50. MUMPS is ok by brausch · · Score: 1

    I came to MUMPS late in life (programming for 30 years in a dozen other languages before ever encountering it), but I like it just fine. The hierarchical database is very flexible to use and very disk space efficient compared to the standard relational model. Keep in mind that most relational databases get their "efficiency" by creating indexes, which are basically invisible extra tables containing cross-references into the visible tables. You can explicitly do that in MUMPS if you want to; it just doesn't happen "automatically".

    Some problem domains just beg for a relational solution and some work well with a hierarchical solution. A good programmer's toolbox contains many tools.

    The language is pretty cryptic, but no worse than several others from that era. You can write "good" programs in any language and you can write "bad" programs in any language. You learn the syntax and learn the semantics and then practice for a while. The language itself has some very powerful constructs that can make a programmer's life easier or harder. Likewise with the database that backs it up.

    MUMPS today is primarily used in the medical world, but the European Space Agency also uses it extensively as do Credit Suisse and others in the financial world.

    --
    "Almost every wise saying has an opposite one, no less wise, to balance it." - George Santayana