Mumps for Muppets

What? No, this isn't some niche fantasy site about puppet diseases. 'Muppet' in the UK is an affectionate term for someone daft, stupid or silly. And 'MUMPS'? Here I'm refering to the Programming language/database/sometime-operating-system created in 1966 on a PDP minicomputer, the "Massachusetts General Hospital Utility Multi-Programming System".

MUMPS was designed to function as an all-in-one system for hospital data needs; patient details, lab results, admissions, pharmacy stocks etc.

The first versions were a stand alone operating system, serving multi-user terminals for programming, database administration and the actual programs for the end users; the medical staff at the hospital. As it grew in popularity and developed, MUMPS was ported to different machines by a variety of vendors, and more commonly ran on top of a host operating system like UNIX and VAX/VMS, even down to DOS and CP/M. The variety of MUMPS implementations that have been developed is quite wide, and sadly poorly archived, with several 'lost' versions such as the IBM VM/370 mainframe version.

In the 1980s/90's when I worked writing MUMPS software for the UK NHS and MOD, the versions knocking around in the sites we supported were MSM, DSM, ISM and DTM. While at the time it seemed like MUMPS was very widely used in the UK, it was much bigger in the US, where the entire VA health system was based on a MUMPS suite called VistA, which is still in use today, though it's gradually fading. As Vista is open source, it's found use in developing countries, being a large part of the Indian healthcare system. It's hard to say exactly how prevalent MUMPS is today, it's certainly there in places like EPIC healthcare systems and Cache, though the role of MUMPS is usually downplayed, being as dirty a word as COBOL to the bright young things. Like COBOL, it's still there, doing it's intended job regardless of fashion.

I know litte about it, but MUMPS also found use in large banking systems, the Bank of England and Barclays included. One of the few still current implementations is GT.M, which is maintained by FIS, a fintech monster of a company. There were a lot of seriously unhappy nerds where I worked, stuck in the unsexiest tech job imaginable (as they saw it, I loved having my hands on what was considered outdated systems, even back then), with not great pay. The lure of London and a high paid MUMPS job in the banks pulled more than a few of our best coders away.

One of the original aims of MUMPS was to have a relatively simple language that people who were not highly trained CS graduates could effectively utilise. Indeed, though I was a huge nerd, I landed my MUMPS job (my first in IT) with no former experience or qualification to my name. I seem to remember just spurting on about my interst in green screen tech to a bemused interviewer for 10 minutes. The 'training' I had for the MUMPS language was mostly a DOS based interactive course, with various tests along the way. I wish I still had it (along with a single user PC version of MSM I've not seen since, despite scouring the internet; another 'lost'?), as it came at its task from the premise of 'Teach someone who knows the bare minimum of CS this language to the point where they can write/maintain commercial software'. This is the reason for the existence of this site, which would be called MUMPS for Dummies, if it wasn't a protected IP.

As I write this, I'm re-learning MUMPS after a long period of disuse. I've programmed in many languages since, for many end-purposes, but I'm still as dense as I was in 1994. There are other introductory guides to MUMPS out there, but I've found even the friendliest of them to be North of point confusion for bears of little brain, and this is intended to be a basic introduction to programming and using MUMPS almost from the ground up. It assumes a very basic knowledge of programming, such as variables, loops, logical operations like IF this THEN that, but I hope it will be simple enough to be read by anyone.

I've already mentioned GT.M as being one of the still-current MUMPS available. YottaDB is a fork of the open source GT.M, and Cache by Intersystems is the commercial evolution of many earlier MUMPS implementations. What these have in common is that they are capable of running utterly gargantuan, continent sized operations of critical infrastructure. Consequently, the complexity of the software features is high, and the documentation is very dry and technical. While MUMPS programming was meant to be easy and egalitarian, the actual installation/administration of systems was always meant to be carried out by qualified CS types. These days, we've got Unix in the form of WSL Linux right on our home Windows, or behind our Mac desktops, and to get legit, capable MUMPS system running is down to the individual, not a systems admin. This is a disconnect from how it's meant to be really, and an impediment to keeping MUMPS alive and in use beyond those of the Old Guard, full-stack megaNerds (you know who you are).

The actual installation of GT.M is trivial to be fair. Two lines of Linux commands (with caveats) and you will have a working MUMPS system, but in this Muppets opinion, as you start using it beyond simple one-liners or programming examples, the underlying complexity (echoing it's huge capability) starts to show, and though the documentation is conscise and huge, it's also difficult to read unless you're pre-immersed. Remember, the system you've just installed with a simple 'apt-get' is technically capable of running the health systems of the largest country on Earth, or the national a bank of a large economy. MUMPS is amazing.

One problem with MUMPS is (and always has been) the issue that although core language features are generally compatible, there's always been a lot of implementation-specific features, such as the ubiquitous $Z commands. MUMPS is a simple language, and it's very easy to use it to extend itself, using small routines (MUMPS speak for 'programs') to do things like list files, print out things etc, and different vendors had their own approach to populating thier versions with these very useful but non-standard extensions to add value. There have been several ANSI/ISO Standards published for MUMPS, the last being in 1999. Some people claim this was the true cause of the nuclear explosions that propelled the moon out of orbit, but that's another website.

An implementation adhering to this last published standard has been under development since 1999, first by Ray Newman as MUMPS V1, now taken over by David Wicksell and renamed Reference Standard MUMPS, or RSM. This is arguably the 'purest' MUMPS still under active development and support today. While it is still a WIP, it is a very capable implementation designed for real-world use, free, and with a lot of supporters in the MUMPS/VistA community, including the developers of GT.M and YottaDB. This website will use RSM as the base system to try examples on. The language based sections would mostly work on practically any 'modern' MUMPS you choose, there are more than I've covered here, but the aforementioned implementation-specific features will start to cobble you sooner or later, and using MUMPS productively is more than knowing the language, you need to know the environment it runs in, as the two are closer than many modern languages. I'll try and include some GT.M/YottaDB/Cache alternative crib sheets later, which will serve as a springboard into using those systems, but first things first....

Install and set up RSM