MUMPS, the Archaic Health-Care Programming Language
motherboard.vice.com
motherboard.vice.com
https://www.bostonglobe.com/business/2015/05/31/partners-lau...
The company that provided the software is interesting:
Based in a suburb of Madison Wisconsin, founded in the mid 1970's by a grad student who wrote some software for a local hospital. They grew organically by word of mouth never spending on sales or marketing. They landed Johns Hopkins as a client years ago and now Epic chooses which hospitals are allowed to "invest" in their software. They hire young grads right out of college who have never worked anywhere else - who find themselves trapped with completely non-transferable skills. It is like this company evolved in complete isolation from any outside influence on software development.
Of course it is typical enterprise software developed by waterfall method that puts users last. My wife says the doctors are in open revolt. They have 1000's of open change requests - some critical to patient safety. For example the field to enter prescription instructions is only 64 characters. This is a hospital that administers chemotherapy so the instructions are more complicated than "take with food three times a day." The developer who got assigned that ticket had the nerve to suggest using abbreviations instead of making the change.
Epic is far more sophisticated and good than 90% of the other options in use by real hospitals today. I'm only half joking when I tell my friends in tech that it's hard for me to talk about what I've seen. Not just bad software but horrible 80s era curses GUIs, truly garbage proprietary query languages, systems with 100 different pieces of shoddy vendor garbage bolted on here and there to cover the gaps in their functionality.
Epic is best in class--and that's sad. Maybe 20 years from now we'll have EMR and patient accounting systems that will please 2015 HN.
But after I left the interview I did some research to find awful Glassdoor reviews of the company - the worst I've seen. There were also articles which alluded to heavy lobbying (not necessarily a bad sign, just weird) to get their software and services legally or protectively into hospitals.
Overall an interesting company that I'm glad I avoided.
And not to be a pedant, but Epic's big break was with Kaiser, Hopkins came a years or two later.
(fake) bitly . com /grandapas-chemo-meds
Edit: Not Co-Star, but COSTAR: https://en.wikipedia.org/wiki/Computer_Stored_Ambulatory_Rec...
Try not to judge quite so much.
Meanwhile EHR systems have become a huge industry, but now having to catch up is hard. Learning about VistA is mind-boggling in its scope and complexity, and especially since it has been open-sourced for a long time. It's a point of curiosity that it's not been discussed more than a little here and there in the FOSS media.
So I appreciate the informative article, as it gives me some starting points to explore this vast field. Might even give another stab at MUMPS, though it's a hill to climb. However some of the open-source projects that grew out of (or on top of) VistA offer some interesting ways of approaching it.
One project with immediate appeal to me is EWD.js, which is a node.js javascript implementation of server and client via WebSockets, and a MUMPS DB backend. Should be interesting to try out. http://gradvs1.mgateway.com/download/EWDjs.pdf
I could be wrong but it seems someone just starting out could find opportunities in the field of health care computing. Given the political thrust to have EHRs everywhere seems logical the field will grow.
Above all, the need for security expertise in the EHR domain is enormous and will greatly expand in the next several years. The FOSS aspects might well create openings for innovators with creative products and ideas to reduce the cost burdens that high-priced EHRs have been contributing to health care systems.
> document-oriented databases (where different types of data are stored in one unified document instead of a bunch of tabular cells)
There isn't one document, and typically documents aren't "unified" in the sense of having an enforced schema.
> columnar databases (where data is laid out in key-valued arrays)
Er, no. Where data is laid out in columns, to speed up aggregate and analytical operations.
> (Confusingly, the NoSQL name corresponds to "not only SQL" rather than "no SQL.")
Backronyms ahoy!
> But the thing about abstraction in computer science, whether it's a high-level virtual machine-based programming language like Java or a bare-bones Unix shell, is that it always has a cost.
So does hard-baking a single storage and access pattern, which is that you get it wrong and have catastrophically slow access and aggregation times. A relational database is a generalist, query optimisers are generally good at guessing how best to traverse a normalised schema and the last time people used "abstractions are too costly!" as a serious argument it was in the days of rewriting desktop apps in assembler.
As a programming language, it's a fairly standard procedural language. Cache introduces the ability for scoped java-like classes over the top of the standard procedural code and there's a SQL/ORM layer that at least allows a definition for the giant persistent hash table. That being said, a bunch of our code is in the legacy unscoped routines which is... interesting.
The two real downsides are the complete lack of libraries for it (imagine having to allocate time to port DEFLATE as part of your developement scheduling) and the fact that 20 years of schemaless, unvalidated, tightly coupled data access leads to a boatload of weird bugs.
Feel free to AMA.
Is it wrapped up in a library and consumed from another language that handles web requests/responses? Can you extend the Cache libraries by writing code in another language (even C) and importing it through a FFI?
At the moment we're solving the problem by calling out to a set of Golang microservices from Cache over http.
Cache itself actually has web support baked in, either via early-00's PHP style "echo directly down the pipe" or a newer MVC style framework they've built, but sadly stopped developing. Our product team made the choice to transition to their MVC style framework, another team built on ASP.Net so there are options.
Wow. I mean... why?
https://en.wikipedia.org/wiki/Pick_operating_system
MUMPS can thus be seen as a member of a (loose) family of 1960s era systems.
Then I cried myself to sleep.
True story.
Here's an example:
MSH|^~\&|MegaReg|XYZHospC|SuperOE|XYZImgCtr|20060529090131-0500||ADT^A01^ADT_A01|01052901|P|2.5 EVN||200605290901||||200605290900 PID|||56782445^^^UAReg^PI||KLEINSAMPLE^BARRY^Q^JR||19620910|M||2028-9^^HL70005^RA99113^^XYZ|260 GOODWIN CREST DRIVE^^BIRMINGHAM^AL^35209^^M~NICKELL’S PICKLES^10000 W 100TH AVE^BIRMINGHAM^AL^35200^^O|||||||0105I30001^^^99DEF^AN PV1||I|W^389^1^UABH^^^^3||||12345^MORGAN^REX^J^^^MD^0010^UAMC^L||67890^GRAINGER^LUCY^X^^^MD^0010^UAMC^L|MED|||||A0||13579^ POTTER^SHERMAN^T^^^MD^0010^UAMC^L|||||||||||||||||||||||||||200605290900 OBX|1|NM|^Body Height||1.80|m^Meter^ISO+|||||F OBX|2|NM|^Body Weight||79|kg^Kilogram^ISO+|||||F AL1|1||^ASPIRIN DG1|1||786.50^CHEST PAIN, UNSPECIFIED^I9|||A
HL7 v2 is actually fairly nice as a data structure. It's really easy to parse, compresses nicely, and is quite flexible in terms of schema. I'll grant you that the standard message schemas are terrible, but the data structure is elegant for what it needs to do.
It fine in modern languages with good string parsing tools but if you have a v2 parser using simpler techniques in something that's difficult to debug with, it can be a nightmare when something goes slightly wrong. I'm not a fan of how we did it, but it has worked for 95% of cases and was coded in 1999, so I can't really complain all that much.
Part of the struggle is massaging message parses where a vendor is doing something slightly differently (or very terribly, like adding the lab's director on every fucking OBX segment as if the director will get fired mid-HL7 message and we gotta know about it).
Very telling about it's effectiveness though: you didn't spot "nickell's pickles" in there!
Run, dude
Also, COBOL got a spec update in 2014. It is not really a dead language.
Huh?