Epic had some nice features and it was really cool working directly with nurses and doctors. But it has some churn issues and the software sucks to use, especially with Epic's insistence on "all software built in house". While a good marketing ploy, it results in reinventing crappier wheels.
That's honestly impressive. Though I don't envy people who have to work on this stuff.
How do you even come up with this?
The classic implementation is filled with horrible warts, although arguably many of them were helpful in squeezing a production multiuser system into the tiny resource constraints of the original 1960s implementation platform (18-bit PDP-7, same machine as Unix was birthed on, although Unix soon moved to the 16-bit PDP-11, which was in practice more spacious)
Modern implementations make many of those warts optional, although they still support them for backward compatibility
The biggest problem with the language in practice is that many major code bases (e.g. VistA) are still predominantly written in the legacy extremely terse coding style rather than a more modern readable style. I do wonder why there isn’t more effort put into migrating to a more modern style, especially since with the kinds of tools we have nowadays that migration could be (at least partially) automated.
I also dream of something modern like this (https://tablam.org) but is certainly a significant undertaking. Accept partners!
xBase is arguably a very different idea - it is based on flat-file/key-indexed databases, akin to VSAM on IBM mainframes, but wrapped in a 4GL. The experience of xBase is very similar to many mainframe 4GLs, what made it distinctive was providing that experience on low-end platforms (it started out on 8-bit CP/M systems, but it was on 16-bit DOS that it really took off)
By contrast, MUMPS has multidimensional associative arrays as a basic data type, and the difference between temporary (in-memory) and persistent (on-disk) arrays is simply whether the variable name is prefixed by a caret. Perl’s tied arrays are close, but tied arrays are a rather peripheral feature of Perl (many Perl code bases never use them), but a central feature of MUMPS
Expected pay of 85-120/hour, which pays way more than my full-time job. It's a fun language to write in, and the adrenaline rush you get when you get a triple index loop working is awesome.
Also random fact - according to Epic HR , the average college GPA of Epic employees was 3.5, which is probably the perfect formula in hiring loyal corporate servants. I always thought it was weird that I had to apply with my transcripts and resume.
But I guess it's nice to see the healthcare software disgrace works well at least for some.
I don’t know if the alternatives - e.g. Oracle Health/Cerner - are really that much better - and if Epic is as bad as you say, I suspect that says more about their corporate culture than choice of programming language
In reality it's not a dilemma. In other cities and countries there are EHR systems from other vendors that work less bad and with lower cost.
But MUMPS is indeed more a symptom of a rotten industry. E.g. the bidding process that led to this mess was very corrupt, from all sides.
Should be super easy.
There’s also a native Apple Silicon tarball that I’m not sure is as easy to get your hands on.
>probably because the eco-system isn't diluted with low-wage workers from India/China.
Are there other technologies like MUMPS that have the same characteristics?
I similarly thought it weird when Garmin asked me for transcripts when I applied there a few years ago. It had been 15 years since I'd graduated, so I was lucky I still had a couple copies of my official transcripts from back then. After spending the effort to find and scan them in with my 3.8 GPA, didn't even get a phone screen.
https://docs.intersystems.com/latest/csp/docbook/DocBook.UI....
If anyone remembers, CSIF used NIS (not even NIS+) and all password hashes were available to everyone on any cluster machine by running `getent passwd`. John the Ripper found about 90 short/dictionary-based passwords within one minute on a machine of that era.
A Case of the MUMPS (2007) - https://news.ycombinator.com/item?id=36268931 - June 2023 (109 comments)
M, or MUMPS is a procedural language with a built-in NoSQL database - https://news.ycombinator.com/item?id=19388048 - March 2019 (2 comments)
MUMPS - https://news.ycombinator.com/item?id=18936990 - Jan 2019 (6 comments)
Isn't There a Vaccine for MUMPS? - https://news.ycombinator.com/item?id=17898927 - Sept 2018 (2 comments)
Introduction to the Mumps Language (2017) [pdf] - https://news.ycombinator.com/item?id=16309237 - Feb 2018 (42 comments)
The Mumps Programming Language - https://news.ycombinator.com/item?id=13859961 - March 2017 (178 comments)
MUMPS Instance - https://news.ycombinator.com/item?id=13618649 - Feb 2017 (1 comment)
Ask HN: Encryption and Security in MUMPS - https://news.ycombinator.com/item?id=13542953 - Feb 2017 (4 comments)
50 year old NoSQL DB that is better than MongoDB - https://news.ycombinator.com/item?id=12791425 - Oct 2016 (2 comments)
MUMPS, the Archaic Health-Care Programming Language - https://news.ycombinator.com/item?id=9895311 - July 2015 (49 comments)
I am a MUMPS programmer – Ask me anything - https://news.ycombinator.com/item?id=6312391 - Sept 2013 (68 comments)
EvanAnderson•17h ago
BeFlatXIII•17h ago
roywiggins•16h ago
timschmidt•16h ago
roywiggins•15h ago
And of course some code ends up relying on ambient global state to function properly, so the codebase is strewn with "environment setting" methods that set up the required globals before you call the functions that rely on them.
The other fun one iirc is that calling a function inside the "true" branch of an IF can clobber the global TEST flag and cause the "false" branch to execute as well, since the "else" keyword relies on $TEST to decide what to do. The fix is to end it with a noop "if true" to unclobber $TEST.
The other worst MUMPS code was MUMPS code that used string concatenation to generate more MUMPS code from the worst DSL you've ever seen, MUMPS code that seemed to partially implement a MUMPS interpreter...
Forge36•14h ago
dang•16h ago
tkclough•10h ago
surgical_fire•5h ago