• (cs)
    But they made sure that all new developers saw the carrot and understood that, if they worked hard enough, they might get to savor it one day.

    Pah, that's nothing special. I see carrots every day. Matter of fact, there's one right here in front of me as I'm typing this.

  • Ebs2002 (unregistered)

    ...

    Wow.

    I'm not surprised this is happening, but...wow. I feel bad for Bryan, not just because he had to work here, but because he can't find something else because he stayed for 2 years.

    captcha:muhahaha, what I'm sure the management is thinking to themselves when someone tries to quit: "muhahaha, you'll be back, there's nowhere else for you to work!"

  • Craig (unregistered)

    That has to be one of the most horrid and evil stories I have ever heard.

  • (cs) in reply to Craig

    This company wouldn't be based in Madison, Wi would they?

    I think I also worked for them straight out of college.. I only lasted a year though.

  • Remco G (unregistered)

    See its Wikipedia page: http://en.wikipedia.org/wiki/MUMPS.

    Looks like the article wasn't exaggerated one bit. That Wikipedia article is full of wondrous WTFs by itself.

  • (cs) in reply to the-moss
    the-moss:
    This company wouldn't be based in Madison, Wi would they?

    I think I also worked for them straight out of college.. I only lasted a year though.

    As someone currently attending UW, I must know who these people are so I can avoid them.

  • Remco G (unregistered) in reply to Remco G

    Also, this reminds me of a friend, who recently finally landed a programming job (he didn't finish his degree) - and promptly got sent on a COBOL class. Poor guy.

  • (cs) in reply to EvanED

    You know someone that works there (everyone in Madison does). They are building a massive campus in Verona, and the company is a huge success. But it sucks being a developer there.

  • Top Cod3r (unregistered)

    Ontario Systems is the only company I have heard of who use MUMPS. I thought this was supposed to be anonymous for the companies! :)

  • z (unregistered)

    Nice Google ad on the right:

    MUMPS to Java and RDBMS Automatic migration from MUMPS to Java and relational databases

    Salvation? :)

  • Rick (unregistered) in reply to the-moss

    You know, some days the stories are kind of bland, boring, so-what. This is not one of those days.

    I had to shake my head at every single part of the story. My favorite part was reading the UNIX login and unencrypted password from a file. Obviously, security is of paramount important to these guys...

  • (cs) in reply to Top Cod3r
    Top Cod3r:
    Ontario Systems is the only company I have heard of who use MUMPS. I thought this was supposed to be anonymous for the companies! :)

    Makes me think it is possible that it was my old company.. What they use isn't called MUMPS anymore, it's called 'M'. But it from what I remember M is just what the newer versions of MUMPS are called.

  • not a phb (unregistered) in reply to Rick
    Rick:
    You know, some days the stories are kind of bland, boring, so-what. This is not one of those days.

    I had to shake my head at every single part of the story. My favorite part was reading the UNIX login and unencrypted password from a file. Obviously, security is of paramount important to these guys...

    Security by antiquation: who would want to hack such a system?

  • (cs) in reply to the-moss
    the-moss:
    You know someone that works there (everyone in Madison does). They are building a massive campus in Verona, and the company is a huge success. But it sucks being a developer there.

    Okay, that's really the only local tech company I know. And their Wikipedia entry confirms their use of MUMPS. (Sort of an ironic name for the health care industry, no?)

  • Eeby (unregistered)

    It sucks that he had such a horrible experience and now he's having a hard time finding a job. I'd suggest that he get involved in an open source project that uses a more widely-known language. Then he can chalk up some experience and have examples of his work out in the public sphere.

  • (cs) in reply to the-moss
    the-moss:
    Top Cod3r:
    Ontario Systems is the only company I have heard of who use MUMPS. I thought this was supposed to be anonymous for the companies! :)

    Makes me think it is possible that it was my old company.. What they use isn't called MUMPS anymore, it's called 'M'. But it from what I remember M is just what the newer versions of MUMPS are called.

    'M' is what happened when the current owners of the "technology" decided that "MUMPS" had negative connotations... The latest version of the system has layers upon layers of WTF-ey goodness on top; an "SQL Projection", a VB-like language, etc ... All built on top of good ol' M. I'd suggest googling Caché (that accent is important).

    Note, also, that if you happen to be involved in the VA hospital system (that's the Veteran's Administration for those outside the US), all of your data is in a MUMPS-base somewhere ... Unless it was on that thumb drive that got stolen, but that's another story.

    I, too, am unfortunate enough to be in a MUMPS-shop, with no light at the end of the tunnel, unless it's a train.

    Edit: And in my experience, everyone that uses it either absolutely hates it, or has consumed the Kool-Aid and absolutely loves it, and will extol its "virtues" at great length. There doesn't seem to be a middle ground with this pile of crap.

  • (cs)

    Much of this stuff is not new (sadly). And I say that in the full knowledge that MUMPS is from the 1970s.

    The primary design goal MUMPS was to create code that, once written, can never be maintained by anyone ever again.

    APL.

    CASE SENSITIVITY: Commands and intrinsic functions are case-insensitive. Variable names and labels are case-sensitive.

    Numerous flavours of BASIC did this.

    DATA TYPES: one universal datatype, interpreted/converted to string, integer, or floating-point number as context requires.

    Not a WTF.

    LOCAL ARRAYS: created dynamically, any number of subscripts, subscripts can be strings or integers. Stored in process space and expire when process terminates.

    Many forms of BASIC did this, only without the ability to use string keys.

    Within each application lived hundreds of modules, and within each module lived thousands of routines. All of these routines shared the same environment. To ensure that global arrays and code didn’t get mixed up, a strict naming convention was followed. Each routine name was no more than eight characters, and consisted of a two-character application identifier, a two-character module identifier, and a two-character routine identifier.

    This one is right out of the system/360 playbook, and probably goes back even further.

    The editor made extensive use of DEC VT 220 keys as shortcuts; these keys, naturally, did not exist on any modern keyboard. Things that we take for granted (the Enter key, for example) required a bizarre set of escape commands to be entered.

    IBM mainframes still do this.

  • dolo54 (unregistered)

    From the wiki: "The M syntax allows multiple commands to appear on a line, grouped into procedures (subroutines) in a fashion similar to most structured programming systems.

    In MUMPS syntax, some spaces are significant; they are not merely whitespace. There are contexts in which a pair of spaces has a different syntactic significance than a single space. However, extra spaces (in this context not syntactically significant) may always be added between commands for clarity, up to the line length limit in an implementation. Lines are syntactically significant, and carriage returns and linefeeds are not treated as white space; they are statement/function terminators. There is no requirement to put semicolons at the end of commands, and lines may be explicitly continued when needed."

    HOLEEE GUACOMOLEE BATMAN!!! A Russian goolag would be preferable to MUMPs developer job.

  • (cs)
    DECLARATIONS: NONE. Everything dynamically created on first reference.
    Kinda like Perl.
    LOCAL ARRAYS: created dynamically, any number of subscripts, subscripts can be strings or integers. Stored in process space and expire when process terminates.
    Perl's arrays and hashes, though you can't auto-convert between the two (not in the expected way, at least.)
    DATA TYPES: one universal datatype, interpreted/converted to string, integer, or floating-point number as context requires.
    Err... I've never seen Perl auto-truncate, but yeah. The rest of the stuff, though... totally dumbass
  • Danny (unregistered) in reply to Remco G

    Bah! As an intern I got a desk, a chair and a COBOL manual on the first day, and that was great (back in 1978). I also wrote a small program in MUMPS in the 80s and it was no big deal.

    MUMPS may not be buzzword-compatible but it was a good option in the 70s and early 80s when most languages (C, Pascal, Basic) supported only sequential and random access. MUMPS has a very simple yet powerful indexed access - ^Table("Key"). You could also get decent multiuser support from a 16 bit microprocessor (like the good old brain-dead 286). COBOL was another option, but is it really a better language?

  • (cs) in reply to z
    z:
    Nice Google ad on the right:

    MUMPS to Java and RDBMS Automatic migration from MUMPS to Java and relational databases

    Salvation? :)

    Java? - The savior? Wish for a merciful death. I weep tears of blood.

  • Jack (unregistered)

    This story has to be about IDX/GE Centricity. Their systems are so backwards but hospitals have to use it a lot of times because there simply isn't a better alternative.

  • (cs) in reply to asuffield
    asuffield:
    DATA TYPES: one universal datatype, interpreted/converted to string, integer, or floating-point number as context requires.

    Not a WTF.

    In theory. When it works. But when it doesn't ... Get the bandages, because your eyes will start bleeding.
  • Havic (unregistered) in reply to Sgt. Zim

    Note, also, that if you happen to be involved in the VA hospital system (that's the Veteran's Administration for those outside the US), all of your data is in a MUMPS-base somewhere...

    I worked with the VA for a few years and fortunately never encountered Mumps. All of my work was in C# or older ASP with a database of our choosing.

  • Top Cod3r (unregistered)
    All MUMPS code was stored in a Global Array named ^ROUTINES. The only code that existed outside of this array was stored in “Application Startup” codefiles, each containing a single line of code: X(^ROUTINES("XSTARTGB")). The only difference between each file was the last two characters, or, the application identifier.

    First of all, for all you newbies out there, you want to store your code in a global array for performance optimization purposes. You see global arrays get optimized by the compiler making them as much as twice as fast as normal arrays.

    And the code in the Application Startup codefiles was probably put there for flexibility purposes, since startup code only gets executed once it doesnt need the performance boost offered by global arrays.

    The only WTF about this is why you guys all think this is a WTF. Maybe you just dont understand MUMPS.

  • (cs)

    My first job out of college (25 years ago) was a COBOL programming position. (I worked the summer before on a Tandem minicomputer, but I didn't realize at the time how cool that platform was.) I stopped in at the workplace two weeks before my start date to pick up some code examples. (My only experience with COBOL was one course in college, and I wanted to brush up.)

    I saw all sorts of WTF code. I figured it wasn't as bad as I thought, so on the first day of work I asked all sorts of questions about programming practices there. I got all the wrong answers.

    It wasn't easy to quit my first-job-out-of-college on the second day, but I did it. And I was lucky enough to avoid Bryan's fate. I've never regretted that move.

    [And this grammar nazi likes an essay where "caret" and "carrot" are used and spelled correctly!]

  • Porkchop (unregistered) in reply to asuffield

    Sometimes I feel like the only person over 30 on the internet.

    "Back in the day" MUMPS was considered state-of-the-art. Of course, so were 300 baud modems.

    The only real problem I saw in all of this was a company that lacked the vision to build an upgrade path for these legacy applications.

  • (cs)

    I like the spec indicates (if I am reading it correctly) that block of code in FOR loops and IF statements must all be on one single line. And we argue over where to put the curly braces!!! Maybe you can use GOTO's to avoid this?

  • TomTheGeek (unregistered)

    Wow, how many more of you are from Madison, WI? I saw like three people in the first few posts.

    Just seems like a above average number of people from the same place.

    Is it the VA hospital in Madison that uses MUMPS? I came dangerously close to working for them, I worked for the school of Nursing in the Hospital.

  • (cs) in reply to Porkchop
    Porkchop:
    Sometimes I feel like the only person over 30 on the internet.

    I usually feel like the only person who is AND ACTS over 30.

    There are plenty of old farts on the internet. They're just all trying to hook up with teenagers on MySpace.

  • (cs) in reply to Top Cod3r

    The company I worked for was a WTF.

    MUMPS had some WTF's about it. The big one I remember is being told to keep comments to a minimum because they slow down the code's execution.

    It also had some cool features. Being able to store code in a variable and execute it made it easy to customize the app for different clients.

  • cob666 (unregistered)

    Back before I was a 'real' developer I was working for a network integration company in the Boston area. We were tasked with a rather large netware upgrade for a Partners facility in Newton (Partners was partly founded by the Mass General Hospital). One of the IT managers found out that I was the 'developer' on the team and tried to get me to jump ship and work for them. In my initial very informal first interview with one of the managers there I was told that they maintain applications written in MUMPS and was told how incredible and deliciously awesome it was to work with such a powerful language that was designed from the ground up for the medical field. I did some talking to a couple of the developers there and was amazed by how much they HATED their jobs.

    Needless to say, I didn't take the job.

  • Reed (unregistered)

    Umm... what's so scary about MUMPS?? Looks like quite a few other crappy database resident languages. Epic in Madison?

  • TB (unregistered)

    I actually almost got a MUMPS job when I graduated in 1989, from a company in Kensington, MD. They wrote healthcare software. Thankfully, it didn't work out, becaue I would most likely have taken the job, due to poor economic conditions then (and poor interviewing skills at the time on my part).

    This article makes me glad it didn't work out!

  • (cs) in reply to Remco G
    Remco G:
    See its Wikipedia page: http://en.wikipedia.org/wiki/MUMPS.

    Looks like the article wasn't exaggerated one bit. That Wikipedia article is full of wondrous WTFs by itself.

    At risk of being thoroughly ridiculed, I actually like the sound of the overall concept. There are clearly some major WTF's in the implementation (i.e. an else must be followed by two spaces) but I like the idea of having a transparent database accessible through some syntactic sugar. I can imagine a web development framework that provided the same feature being extremely popular. Ruby on MUMPS anyone?

  • Zonkers (unregistered)

    That is a sad story. Keep at it Byran! I can relate a bit.

    I had a similar experience, but with COBOL, I worked my first job out of college for 1 year working on a system that wasn't nearly as bad as that but antiquated and full of WTF's none the less. Some of the stuff that I had to code was basically writing a relational database that was full of business logic that sat upon ISAM and flat files all written in COBOL! It still makes my head hurt remembering that garbage. I hated that job.

    I got out the same way, no job prospects and for a while it looked pretty bleak. It took me about 8 months to find another job (this was in 1996), this time working with modern day tools with a saner environment. There were a couple of times when I wanted to just go into another industry because I thought I might just end up working at another brain dead shop. I'm so glad that I stuck with it.

    Maybe play up your experience in MUMPS. Stress how you had to handle a lot of complexity in that environment that modern environments hide from developers. If you spin it right you might sound like a genius developer for being able to write anything at all in it, which is probably true. But it might be better just to say that MUMPS is a highly specialized language for such and such, etc. etc.

  • curmudgeon (unregistered)

    His job skills are at least a little portable: a lot of the skills one needs to maintain and write MUMPS are similar to those need to maintain Perl code!

  • Seaph (unregistered) in reply to TomTheGeek
    Wow, how many more of you are from Madison, WI? I saw like three people in the first few posts.

    Just seems like a above average number of people from the same place.

    Is it the VA hospital in Madison that uses MUMPS? I came dangerously close to working for them, I worked for the school of Nursing in the Hospital.

    My guess would be that people are refering to Epic Systems Corporation, who makes software for the healthcare industry, but I could be wrong.

  • DaveAronson (unregistered)

    There are a LOT of companies using MUMPS in the Philadelphia (PA USA) area. The main industries there that need programmers, are medical, financial, and cable TV.

    Re Cache', that explains a lot. I was contacted by one of their recruiters a few years back. They want you to take a test. They fax you the test, and want you to fax back your results! Silly me, I fell for it and did it. Or maybe they were serious.

    Captcha: dubya -- don't get me started on a comparison of him and MUMPS....

  • vic (unregistered)

    From the FAQ :

    prints a table of primes,including code to format it neatly into columns f p=2,3:2 s q=1 x "f f=3:2 q:ff>p!'q s q=p#f" w:q p,?$x\8+18

    Almost as friendly as perl.

  • (cs)

    A friend of mine did his PhD thesis on code restructing and tools. Instead of making up fictitious examples, he needed to find real world programs with the most convoluted spaghetti-like call structures he could. His search ended when he found a MUMPS program from a hospital.

    When printed out in a visualizer, it looked like the result of putting cobwebs in a blender. His goal was to automatically try to reorganize the code to give it a more understandable structure. But first he had to understand the code himself, and try some manual refactoring. I think this was when he learned the phrase "WTF?".

    Interestingly enough, his professor's father was one of the creators of SNOBOL.

  • anonymous (unregistered) in reply to Porkchop

    I agree a guy on the thread. Yes, the Real WTF is not having a upgrade path, so better code is posible.

    There are people on mainframes that need emulators to run legacy BINARY code because the src is lost, even the src of the compilers is lost. Seems that crap is OK in the mainframe area, because you need giganteous efforts to upgrade, while on microinformatic is lightweight to do a upgrade. So people still use absolute shit like Cobol and this Mumps shit.

  • Tailors Suit Ya (unregistered) in reply to Eeby
    Eeby:
    It sucks that he had such a horrible experience and now he's having a hard time finding a job. I'd suggest that he get involved in an open source project that uses a more widely-known language. Then he can chalk up some experience and have examples of his work out in the public sphere.

    You mean like Progress? How about those 4GL's huh? Woot.

  • Flo (unregistered)

    Build in obfuscation? oO

    Appendix 7: An example of "traditional" M coding style
    
    %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 X<1410000 S %H=0,%Y=-1 Q
         S %Y=$E(X,1,3),%M=$E(X,4,5),%D=$E(X,6,7)
         S %T=$E(X_0,9,10)*60+$E(X_"000",11,12)*60+$E(X_"00000",13,14)
    TOH  S 
    %H=%M>2&'(%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
         ;
    
    [...]
    From http://www.faqs.org/faqs/m-technology-faq/part2/
  • Jon (unregistered) in reply to themagni
    themagni:
    z:
    Nice Google ad on the right:

    MUMPS to Java and RDBMS Automatic migration from MUMPS to Java and relational databases

    Salvation? :)

    Java? - The savior? Wish for a merciful death. I weep tears of blood.

    HAIIII-KU

  • SarcasticSOB (unregistered) in reply to Sgt. Zim

    So would you say that M is the Enterprise verion of MUMPS?

  • CoderForChrist (unregistered)

    I'm currently working in a MUMPS shop directly out of college.

    MUMPS (or, M, as it's called now) is not that bad of a language in and of itself, especially considering its age. In fact, M can be maintainable, etc., if it was written well. The system described in the article, however, sounds horrid. I mean, I've seen some bad code, but that just blows me away.

    I actually like the fact that an array can have string subscripts. It makes sorting things, etc., much easier. Also, there's a function, $ORDER() that iterates through any array at a specific subscript level ($QUERY() iterates through all subscript levels at once).

    M really isn't too bad once you're used to it, and if it's written well.

    Also,

    Jeff S:
    I like the spec indicates (if I am reading it correctly) that block of code in FOR loops and IF statements must all be on one single line. And we argue over where to put the curly braces!!! Maybe you can use GOTO's to avoid this?
    Actually, the DO command (used for calling subroutines) serves a double purpose here.

    FOR I=1:1:10 DO .[code] .[code]

    The DO command sends it to the next line, and the block is made up of lines beginning with '.'. Each nested block of code adds a dot, so:

    FOR I=1:1:10 DO . code . IF condition DO . . code . . code . code

    The syntax does allow for some...interesting uses as well, that I won't get into (for sake of time). At the same time, we don't have to sit around and try to figure out where to put braces...

    Granted, M doesn't conform to the ideals of certain programming experts, but that doesn't make it wrong. It's just a different way of doing things that, like anything else, can be abused to heck, but can also be useful when done right.

  • AceoStar (unregistered)

    I feel this guy's pain. Lots of us are in similar situations.

  • (cs)

    I don't see any mention of the timeline for this WTF. Actually I read it once, then got curious about the timeline and I'm too lazy to do anything more than scan through it. But why in the world are they still using this MUMPS thing if this is a present-day story? Of course the language is going to be a POS if it is that old... the decision to continue using it is the real problem.

    I also find it hard to believe he is completely out of the job market. He should be able to find an entry level or junior level position easily. After working with MUMPS for two years, he decided not to learn anything marketable like .Net, PHP, and perl in his free time? I'm an idiot and I could still make a living doing PHP, VB.Net and systems administration. Diversify!

  • brian (unregistered)

    MUMPS sounds like the boogie man of all programming langauges. I pray that I never hear about it again.

Leave a comment on “A Case of the MUMPS”

Log In or post as a guest

Replying to comment #120147:

« Return to Article