It’s been just over a year working in the NHS, and it has been a very interesting experience where I have had the pleasure to work on some really great new systems using all the modern web has to offer, but have also had to work with and improve/maintain some not so enjoyable legacy systems, one of those being a proprietary stack (InterSystems Caché) built atop the MUMPS language and database.
For those that have not been fortunate to have experienced this environment, here is a very short explanation – MUMPS (or simply M), is a programming language providing ACID transaction processing and is tightly coupled to a NoSQL ‘schema-less’ database where its data is store in multi-dimensional sparse arrays (best to read that Wikipedia page for full details), I find it quite fascinating that this database/language first appeared in 1966 which I think predates any other NoSQL style database system.
Sounds interesting, tell me more…
So we have an interesting sounding underlying architecture, but due to the limitations of 1960’s computers, programs in MUMPS were more often written with performance/size (fewest chars and lines) in mind, so do appear quite cryptic to the uninitiated (i.e. me) – the language has matured over the years as machines have gotten more powerful, but a lot of the developers are ‘old skool’ and so, still produce code in this cryptic style (making some of the older files I have had to peruse take several sessions to digest!).
InterSystems stuck with MUMPS and its underlying database system, bolstering on new features to propel it into the world of modern computing – they do this by adding many advanced features onto MUMPS and calling this new language Caché which brings objects and a faux SQL querying and mapping capability to the underlying data structures.
The first few months
My first few months with MUMPS/Caché was a baptism of fire, as there are very few resources other than the official ‘Windows 95 style’ documentation from InterSystems (you’ve got to love those classic Publisher style clipart images used everywhere!), which can be a rats maze to find what you are looking for at times, and there are even fewer books on the language, not surprising with Caché being a closed source product.
As the language and the data source are all tightly coupled, you are left with only one useful option for code editing, and that is the InterSystems Studio product, which despite its many flaws, isn’t all that bad – what has been interesting is following the SublimeCache GitHub repo, which is a work in progress compatibility layer for using Sublime Text as an editor using the new REST API present in the latest version of Caché.
“If a window of opportunity appears, don’t pull down the shade.”
I feel that InterSystems missed an amazing opportunity to get their technology better known during the NoSQL resurgence that took off a few years ago, fuelled in part by how much traction Node was starting to get, making a free-ish version of Caché (commercial use restriction of some kind maybe, or just open-source it and charge for support like some of the other big boys), instead, we got GlobalsDB which is the database part with MUMPS and Caché stripped away – and I’m sorry, but a PDF is not a good enough API doc!
Migration and the resource wasteland
Health-care will hold on as will the financial organisations that use this, as they just have too much invested – I feel very sorry for the poor chap who’s job it would be to migrate away to a new system keeping all these schema-less data references intact, even more so for any upper-management who decides migrating is a good idea.