- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
Oh I'm sure the condoms were just for making balloon animals. And the Jack was for brushing his teeth, of course.
Admin
CAPTCHA consequat - The consequences of not knowing squat?
Admin
Admin
Admin
I have to say, from what the actual MUMPS programmers are saying, about all I'm getting is that MUMPS is Turing-complete, and you can build anything in any Turing-complete language.
Kind of like how, while C itself lacks memory protection, if you're really, really careful about how you use pointers, you'll be fine. Add sufficient wrappers and "best practices" and those potential problems are managed.
But, given the choice, why would you ever use a language that forces you to jump through the hoops described? I mean, yes, you technically could write a practical, secure webserver in Bash, but why would you want to? I mean, other than the sheer geek cred of writing a fully-functional Tetris in nothing but Bash, I just don't get it -- is the job market really that bad?
Admin
Admin
Have you ever tried to decipher ActionScript that was decompiled from a SWF? It's a lot like this, with the upside that functions still have names. Still, all variables are like "loc1", etc.
Admin
Admin
Plus, MEDITECH has 5-cent soda machines* for their employees (or, at least, did the last time I visited their Canton facility several years ago). Course, now I'm at a company with free soda, so that doesn't seem as great as it once was, heh. Was a nice facility, though, except for everyone apparently having half-height cubicle walls.
*That is, the soda cost 5 cents, not the machine.
CAPTCHAm refoveo: refoveo to cherish again, refresh, warm
Admin
The article is not all that accurate, no (and in fairness, I'll add that I work at the company mentioned in that article, and love my job actually). To go point-by-point:
Case sensitivity - there's one simple rule -- everything that is an intrinsic part of the language is case insensitive -- be that a keyword, function, variable, etc. Everything that is user-defined is case sensitive. There is also a slightly different syntax when calling user-defined functions as opposed to standard (user-defined are prefixed with $$ instead of $)
Commands - Yes, you can abbreviate them to one letter. That was tough for me for the first two days; after that point I got equally good at reading either way. The only issue this ever raises is that it makes it harder to search for a particular command.
Operators - Yes, it's left to right. At the time it was created, it was an interpreted language, and computers were much slower than now. So long as you know what you're getting it's really not that hard.
Data types - Not really an issue. Our DBMS that is built on top handles all data typing anyway.
Declarations - You're SUPPOSED to declare variables before use; it has scope implications to fail to do so. But yes, you aren't required to.
Lines - This is the most misleading of the bunch, in that while it's technically true, it omits key information. The article fails to mention the "do block" command. Nobody actually writes one-line loops in MUMPS any more often than they do in C++; you can put in one command that says "execute the following block of code".
Local arrays - It's basically PHP-style syntax.
Global arrays - Yes, this is what underlies the DBMS we have. Compared to table-based systems (especially older ones) this method is better for storing sparse information, which is typical of our needs. It also makes it easy to create hierarchical records, and to lock subsets of records without preventing access to other non-overlapping subsets.
Admin
Mr. Resier? My eighth grade science teacher from Wantage Elementary School?
Admin
Admin
I'd say the big ones:
If and for loops need not be written on single lines; you can use the block syntax to make them execute blocks of code like any other language.
While not absolutely necessary, there ARE variable declarations, which in this language drives scope control, rather than the type control seen in strongly-typed languages (it really wouldn't make sense to do type-control in an untyped language anyway...)
The array syntax (both for locals and globals) is, in my opinion, a positive feature of the language, especially in the niche for which it was designed, medical recordkeeping. Really, any application that makes heavy use out of sparse or hierarchical data sets will benefit from this feature.
The case-sensitivity statement is needlessly complex, when the much simpler explanation of "everything defined by the language is case insensitive, everything user-created is case sensitive" is much easier to understand.
Really, out of all the list, the only thing that really could be a WTF is the operator precedence, but considering the applications the language was designed for and the era, it's quite understandable.
Admin
Ah, you young whippersnappers just don't know how much of a thrill it used to be to find that your predecessor actually followed published standards and wrote intelligible code. It was rare, but it was delightful... In the land of spaghetti-west MUMPS was far less irritating than unrequited go-sub's in BASIC. At least you knew immediately that you'd have to rewrite everything at the beginning, rather than finding out a frustrating six months later.
In my younger days I'd have been tempted to choke the guy to death slowly with a code reference guide, but now I'm older and more caring - a simple burning on the cross without a beating would be sufficient... It figures that he'd be a paedophile as well...
Admin
So, are they gonna convert it to MUMPS.NET?
Admin
Because for the target applications, it not only works, it works well. The biggest WTF listed is its operator precedence -- but it wasn't really designed for math-heavy applications to begin with (FORTRAN already existed for those applications). It was really built for specific types of database applications, particularly for medical records, and in that, you don't really do a whole lot of math.
What it does well:
Storage and locking of sparse, hierarchical database records. The language is built around what it calls globals, which are really nonrelational databases. Database interaction isn't just an afterthought, it's the core feature of the language.
Very good string manipulation utilities.
Xecute allows for flexible coding; you can program hooks where your end-user can plug in a piece of code to run at that point during the program flow. This allows extreme customization of the program logic without ever touching the actual source code.
Addendum (2010-10-27 00:20): #3: I meant the clients' administrators, not end-users.
Admin
you're kidding/trolling on #3 right? Have you ever worked for the Microsoft Internet Explorer team or something? They like inserting those kinds of features too, except replace end-user with "any random hacker on the internet whose web page you view." Passing user input into something like xecute or perl/python eval() with no sanitizing and calling it a feature is pretty hilarious, so I guess I'll hand it to you.
Oh... as for obscure languages of the 60s and 70s you can make a pretty penny maintaining, go look into JOVIAL. Means Jove's Own Version of the International Algorithmic Language (i.e. some dude's almost-ALGOL...) and the military used it quite extensively for everything from embedded systems in missiles to aircraft flight control systems. It's archaic enough that very few people know it, the authoritative document on the language is MIL-STD-1589C.
Admin
Sorry, just tired and not being accurate with language. I meant configurability by the clients' administration teams, not the end-users who are accessing the database. Nothing that actually comes from end-user input should ever be passed to xecute.
Admin
From the MUMPS description here it sounds like it should be relatively easy to do a LLVM mumps-to-mumps compiler that generates much more readable code.
Can't do much about most of the variable names, but shorthands would be easy to expand, and at least some of the routines could probably gain from some SSA-based optimizations..
Admin
I was betting they took on Tyson...oh well
Admin
Yep, all the Mumps side of this story proves is that you can take any language and, if you don't know what you're doing, you can make a right old hash of it and make it incomprehensible to everyone but yourself. The fact that it was Mumps is really neither here nor there. It could have been done in any language. People even do it deliberately - eg in C: http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest
It's true that the lenient nature of Mumps lends itself to the creation of really terrible code in the hands of the undisciplined or unskilled. But well-written Mumps code can be just as readable and maintainable as most other languages.
The real problem is that the examples that people such as this article's author use to trash Mumps are legacy applications that date from a time when the language lacked a lot of modern features (we're talking late 70's - early 80's), and the bad practices (which at the time were the only available practices) tend to get continued today as the legacy code is onwardly maintained. That's not the case if you were starting from scratch today - in the right hands it's very quick and efficient to develop in and has one of the coolest databases you'll find built-in.
Admin
And quite lucky too that you are not a lawyer.
"Aiding and Abetting" means "helping" or "conspiring with", not "knowing", "being friends with" or "working with"
Admin
Wo, and am still laughing.... well explained buddy,
Admin
As advertised, this is a curious perversion in information technology.
Admin
I don't think it's so much that the language lacked modern features, but that originally it was purely an interpreted language (now it's typically a mix) in a time when the supercomputers of the day were less powerful than today's iPhone. Saving several bytes on every instruction by using shorthand was important when magnetic storage was as low capacity, space consuming, and expensive as it was back then. Plus, cutting down the length of the text (short variable names, etc) saved not only space but it made the program faster, because the additional time needed to pull the extra characters off the disk was nontrivial.
The language itself allowed programmers to code for readability even at the time, but the hardware limitations punished those who made readable code, so most people coded for efficiency.
Admin
I just threw up in my mouth a little. Seriously.
Admin
[quote user="Ahhnold"][/quote]She divorced him, re-assumed her maiden name of "Connor", and moved to LA where she was relentlessly pursued by a robot from the future until she met and had sex with a man who wasn't even born yet. Now how's that for pedophilia?[/quote]
Shouldn't that be called prephilia or something?
Admin
It's not all that bad. I used to work in Cache', a derivative of MUMPS.
You get used to the abbreviations pretty quickly, and as someone mentioned earlier, the data storage model is very easy to work with.
Admin
Esta es una historia estúpida. De todos modos, tengo MUMPS trabajo por hacer...
Admin
I award you 100 Skynets for that.
Admin
There are just two kinds of [programming] languages: the ones everybody complains about, the ones nobody uses, and MUMPS.
My apologies to Stroustrup and counting.
Admin
I can think of no more appropriate name for anything that can make skilled programmers disappear in a single work day.
Admin
When the first MUMPS article came by to TDWTF, I cringed. I was pretty sure that nobody would advocate a transaction-less "array database" which stores data using something akin to another classic WTF, the Storray engine.
However, it seems that one of the commenters back then was right: there are two kinds of developers. Those who love MUMPS, and those who hate it. I would add a third category of "never heard of it", but they would probably fall into the hater category as soon as they find out about it.
Just goes to show that any language can have its fair share of defenders; VB isn't alone in being an ugly monstrosity that still has defenders.
Admin
cough I'll just leave this right here.
http://www.perverted-justice.com/index.php?pg=wantedbhaskaran
Admin
Road crews break? Or is this about them taking breaks? Or is it that they brake a lot because they need to stop?
Or are they out of money? Is the application out of money, just like the road crew? Are we talking about the collective road crew, or any given member of the road crew, so if one member of the road crew is bankrupt, the whole road crew is considered to be broke?
Is it slowness and clumsiness also like that of a road crew, or just the brokeness? Is it all three of slow, clumsy, and broke more often than a road crew is all three of slow, clumsy, and broke?
I'm not sure whether the example MUMPS code is worse than that sentence or not.
Admin
I want the next person who defends MUMPS to do it in relation to a modern language. Because endless "Well Common Lisp crashing into COBOL while being soddomised by SQL was good enough for the 70s," apologetics make me weep for humanity.
I have bad news for you, you have Stackholm Syndrome.
Admin
For the last year i am actually working with intersystems Cache (mumps based), and while you have a point (string handling is slightly easier then other languages), i would rather chew off my own hands and stop programming altogether then start a new project in this mess, the storage model might be nice and easy, but something like the JPA framework will take care of the same stuff just as easily.
Honestly, cache/mumps is SHIT
Admin
you have GOT to be kidding. computing performance for the stuff is below that of a javascript engine (i have seen benchmarks by highly skilled engineers working with mumps, showing that javascript is faster) and the IDE/compiler makes being productive a huge pain in the ass
Admin
... wow ...
I had a close friend who worked at a graphics / print company. I have the utmost respect for him due to the following:
When the manager went on vacation, he left his email and computer password on his desk with instructions that the employees were to keep track of the emails coming in from customers and respond to needs in his absence.
What they found was to say the least underage and vile material that he had been exchanging. They all got together and agreed it was worth them all having to find new jobs, and they called the FBI.
The manager got a trip to jail, the company closed, and they all found new jobs.
That is a level of integrity I respect, knowing the cost, they still could not allow that sin to slide. Apparently the company in question here has less ability to deal with such disease, I wish those of good conscience there the best.
Admin
Isn't that something Forth programmers develop?
Admin
Seems to me he ran the code through an obfuscator before skidadlin'.
Admin
Admin
You are excused for failing to read between the lines of that statement, it might be due to your tender age or thick-headedness, but i believe its kind of both.... If you are older, then uuum,
Admin
Admin
Well, that would be more fun, but it's quite hard to find people who would pay you for that. Now on the other hand, MUMPS has the potential to be on the same league as COBOL - nice, steady, safe employment with little competition, little risk of downsizing, and you don't need to strain yourself with 60-hour weeks, since management doesn't have a horde of youngsters who are willing to work insane hours for the same pay [unlike most other programming environments].
Admin
This story can't be real. Is anything on this site factual?
Admin
...at least there is a legal remedy for trying to do and/or doing a 13 year old.
There is no legal remedy for that code. Yeeeech. >_<
Admin
Do please let us see these benchmarks by these "highly skilled engineers". Here's a few real ones that seem to tell a somewhat different story:
http://www.redhat.com/pdf/Profile_Benchmark_Results_11_15_2007.pdf
http://www.intersystems.com/cache/whitepapers/Cache_benchmark.html
http://tinco.pair.com/bhaskar/gtm/doc/misc/101005-1dthreeen1fFilesystemBenchmark.pdf
Mind you, given the performance on Google's V8 Javascript engine these days - as used in Chrome and Node.js, maybe a comparison with Javascript might soon be seen as worthy :-)
Admin
I doubt it
Admin