Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Locked thread
eschaton
Mar 7, 2007

Don't you just hate when you wind up in a store with people who are in a socioeconomic class that is pretty obviously about two levels lower than your own?

MALE SHOEGAZE posted:

Serious question but why? You like, seem to enjoy doing this.

Is it because you enjoy having to do terrible programming poo poo? Because yeah, I'm starting to feel like my future is maybe in fortran or something where inventing stupid DSLs is a good use of my time.

learn Common Lisp or Scheme, and then just use S-expressions for your DSLs and have some Common Lisp/Scheme trivially generate whatever other language you need from them

Adbot
ADBOT LOVES YOU

KidDynamite
Feb 11, 2005

Old Manager left 2 and a half weeks ago. Still not been given any work. Have reached out to other teams they have said yes come on. Still not given any work. I'm going to get even more terrible at programming because I don't do any. Very much don't want to work on my own code during work time and then i head home so apathetic I don't want to work on it there.

Send help.

Sagacity
May 2, 2003
Hopefully my epitaph will be funnier than my custom title.
So, someone wrote an experimental WiiU emulator but didn't post the sourcecode on Github, only binaries. Not only are people now feeling entitled and demand the author release the sourcecode, there is ALREADY a war going on debating the right license to use.

Symbolic Butt
Mar 22, 2009

(_!_)
Buglord

KidDynamite posted:

Old Manager left 2 and a half weeks ago. Still not been given any work. Have reached out to other teams they have said yes come on. Still not given any work. I'm going to get even more terrible at programming because I don't do any. Very much don't want to work on my own code during work time and then i head home so apathetic I don't want to work on it there.

Send help.

read a book like SICP idk man just do something

Soricidus
Oct 21, 2010
freedom-hating statist shill

KidDynamite posted:

Old Manager left 2 and a half weeks ago. Still not been given any work. Have reached out to other teams they have said yes come on. Still not given any work. I'm going to get even more terrible at programming because I don't do any. Very much don't want to work on my own code during work time and then i head home so apathetic I don't want to work on it there.

Send help.

polish your resume

DONT THREAD ON ME
Oct 1, 2002

by Nyc_Tattoo
Floss Finder

Soricidus posted:

polish your resume

DONT THREAD ON ME
Oct 1, 2002

by Nyc_Tattoo
Floss Finder
Qualifications: am smartest kid

Kilroy
Oct 1, 2000

KidDynamite posted:

Old Manager left 2 and a half weeks ago. Still not been given any work. Have reached out to other teams they have said yes come on. Still not given any work. I'm going to get even more terrible at programming because I don't do any. Very much don't want to work on my own code during work time and then i head home so apathetic I don't want to work on it there.

Send help.
When you say you're not 'given any work' what do you mean exactly? Some teams will expect you to figure out what other people have on their plate and then take some of it off.

Sometimes that's it and it isn't a big deal, and sometimes it's some sort of weird power thing where you have to play political games just to do the basic stuff of your loving job. Like they're paying you this salary but work items are treated as some sort of currency and everyone is hoarding what they can.

If it's the latter then that's really dysfunctional and you should sever immediately, but if you just have a manager who is hands off, then find something that needs doing that no one is working on yet, and do it.

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

MALE SHOEGAZE posted:

Serious question but why? You like, seem to enjoy doing this.

Is it because you enjoy having to do terrible programming poo poo? Because yeah, I'm starting to feel like my future is maybe in fortran or something where inventing stupid DSLs is a good use of my time.

Why do I enjoy it, you mean? Well, there's some naive stuff and some cynical stuff to it:
Naive:
1)Like I said, I was literally stabbed in a gang fight at 15. I was basically supposed to go nowhere and now I have managed to claw my way rear end-backward into an upper-class income. Epic paid for the education and took the chance on me, so there's a lot of good feelings there.

2)Even if the technology isn't always awesome, the problem domain is. What I do has, provably, saved people's lives. It's saved hospitals money that they've used to save more lives. Our software has been used in research that found new treatments for diabetes and asthma, and so on. It's a pretty loving good feeling, rather than waking up and thinking "How can I make Satiya some more money today?"

3)Sometimes, it really is fun to solve "solved" problems with the tools available to you. For example, I need to create a natural sort algorithm (e.g., one that would sort "a9" before "a10"). MUMPS globals are inherently sorted in the ASCII collation order, and that's usually good enough so no one had really bothered writing sorting algorithms. Solutions in other languages weren't directly portable. Instead, I got to write this pretty neat little function, which takes advantage of the structure globals and an uncommon method of traversing them a to achieve a sort (there's code surrounding this that I removed because it's more proprietary, but you should be able to guess what most of the variables do):
code:
940    f ln=1:1:data(0) d 
941    . s val=data(ln) 
942    . s buffer="" 
943    . s ref=$na(sorted) 
944    . s inNum=0 
945    . f idx=1:1:$l(val) d 
946    . . s char=$e(val,idx) 
947    . . s oneNum=(char?1N) 
948    . . i inNum=oneNum s buffer=buffer_char q 
949    . . s inNum=oneNum 
950    . . i buffer'="" s ref=$na(@ref@(buffer)) 
951    . . s buffer=char 
952    . s ref=$na(@ref@(buffer)) 
953    . s @ref="" 
954    k data 
955    s ref=$na(sorted) 
956    f  s ref=$q(@ref) q:ref=""  d 
957    . s val="" 
958    . f idx=1:1:$ql(ref) s val=val_$qs(ref,idx) 
959    . s data(0)=data(0)+1 
960    . s data(data(0))=val 
4) For the most part I get to work with pretty cool people. You read these LMKL horror stories or or YOSPOSTERs' tales of horrible code reviews and political conflicts, and there's just not that much of that here. Assholes get fired, and it's generally pretty pleasant to be here.

Cynical reasons:
1) Variation on above, I was never supposed to get this far in life. I was born and raised in Wisconsin and I don't know that I'd even want to live in some of the major tech areas, even if I could get a job there. I doubt google is looking for programmers with poetry degrees and a history with the law.

2) I've done programming in other languages (like the aforementioned OSes course I took in C), but it was hard and I have major impostor syndrome all the time. I worry I wouldn't be able to work anywhere else.

3) The tech bubble looms, but healthcare IT is pretty protected by the Meaningful Use program and the relative necessity of an EMR today. We have multiple national governments as customers at this point, so Epic is a pretty stable place to be long-term.

4) They give me health insurance that covers everything (for real, everything) with no copays or deductibles. My meds caused me $2 a month, and it's $50 to use the ER. That's it. I get a match in my 401k up to 3%, and there's a lot of ancillary frills to being here.

This is probably too earnest a post for the 'pos, but I hope that helps you a little. It's important to like what you do every day. Having a fun or meaningful job is way more important than getting to work with the latest tech that we'll all just be making fun of 5 years from now anyway.

Jerry Bindle
May 16, 2003
your job and work sounds really cool. did you learn all the MUMPS on the job?

AWWNAW
Dec 30, 2008

how else would you learn that poo poo? are there any public instructional materials on their bespoke language horror?

KidDynamite
Feb 11, 2005

apparently i had two managers fighting over me because my new manager had volunteered me for something and i had reached out to someone. it just got sorted. the one i got volunteered for won. still not been given any tasks. :downs:

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Barnyard Protein posted:

your job and work sounds really cool. did you learn all the MUMPS on the job?

Yeah, your first few months are an orientation period where you go to in-house classes about the languages and technologies we use. I went to a MUMPs class for 2 weeks which covered the language and some of the data structures we've built on top of it. Then there's a 3 week crash course in VB6 and the old client tech we built on that. There's also a 6-week course in C# .net + Javascript that covers are new client tech, but my area hasn't moved to the new platform yet so I've only taken the basic intro to C# .net's basic features. There's also a bunch of classes you take about how healthcare works as a whole, what IT's role is in healthcare, expectations on how you interact with your coworkers, how to take criticism, etc. My favorite thing is one of our classes is actually pretty openly critical of the US healthcare system and compares it pretty disfavorably to both the NHS and to Germany's hybrid system. Our CEO is basically miss frizzle and I honestly think she cares way more about saving the world than about making money. It's a pretty refreshing culture to work in, even if some people are just way too true believer for my cynical rear end.

AWWNAW posted:

how else would you learn that poo poo? are there any public instructional materials on their bespoke language horror?

Yes actually. MUMPS isn't bespoke to us. It was created in the 60s by a hospital. The VA's medical record system, ViSTA was programmed in it. Meditech was made in it and then converted to their in-house variety. A few banks use it. The "definitive" text is http://www.amazon.com/Mumps-Programming-Language-Kevin-OKane/dp/1438243383.

Some nerd maintains this site about it too: http://71.174.62.16/Demo/AnnoStd

The MUMPSorceress fucked around with this message at 16:35 on Oct 14, 2015

KidDynamite
Feb 11, 2005

Kilroy posted:

When you say you're not 'given any work' what do you mean exactly? Some teams will expect you to figure out what other people have on their plate and then take some of it off.

Sometimes that's it and it isn't a big deal, and sometimes it's some sort of weird power thing where you have to play political games just to do the basic stuff of your loving job. Like they're paying you this salary but work items are treated as some sort of currency and everyone is hoarding what they can.

If it's the latter then that's really dysfunctional and you should sever immediately, but if you just have a manager who is hands off, then find something that needs doing that no one is working on yet, and do it.

I got transfered to a new manager who literally said to me i don't have any work while this project is starting up and said enjoy the time off

Jerry Bindle
May 16, 2003
my wife's mom learned BASIC in this course where she and all the other students wrote their programs out long-hand and the instructor just read through them and assigned a grade, seems like a way someone could/would learn MUMPS

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Barnyard Protein posted:

my wife's mom learned BASIC in this course where she and all the other students wrote their programs out long-hand and the instructor just read through them and assigned a grade, seems like a way someone could/would learn MUMPS

If you're morbidly curious, GT.M is an open-source publically-available implementation of MUMPS. You can literally install it and play with it. For further horror, ViSTA, the VA's EMR, was programmed in MUMPS and the source code is owned by the American people, so you can download it and play with that too.

Luigi Thirty
Apr 30, 2006

Emergency confection port.

I don't know if "is used by the VA to track patients" is a good endorsement for your software

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Luigi Thirty posted:

I don't know if "is used by the VA to track patients" is a good endorsement for your software

The VA doesn't use our software? I was just giving examples of MUMPS things that are publically available for anyone who wanted to touch the poop.

In fact, one of the outcomes of the scandal with the VA's waitlists is that they were ordered to get a new scheduling system. They just finished the selection process and went with us. So, in a year or two, the VA will be using our software to schedule patients. If they're honest about wanting to improve wait times, their wait times are going to go down after they go live, just like they have for every other customer who's taken our software.

oh no blimp issue
Feb 23, 2011

is that why it's called MUMPS, hahaha

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Awia posted:

is that why it's called MUMPS, hahaha

wikipedia posted:

MUMPS (Massachusetts General Hospital Utility Multi-Programming System)

It's a terrible backronym made by some database dork in the 60s who Mass General paid to make them a medical database.

oh no blimp issue
Feb 23, 2011

all hospital systems should be named after infectious diseases imo

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Awia posted:

all hospital systems should be named after infectious diseases imo

Quick, someone find a backcronym for AIDS and I'll try to convince the CEO to name a product that. Bonus points if you can also think of a HIV product that clearly works with AIDS somehow, but AIDS can't be provably shown to derive from it.

Luigi Thirty
Apr 30, 2006

Emergency confection port.

LeftistMuslimObama posted:

Quick, someone find a backcronym for AIDS and I'll try to convince the CEO to name a product that. Bonus points if you can also think of a HIV product that clearly works with AIDS somehow, but AIDS can't be provably shown to derive from it.

Heuristic Information Visualization/Asychronous Interface for Distributed Systems

jony neuemonic
Nov 13, 2009

Luigi Thirty posted:

Heuristic Information Visualization/Asychronous Interface for Distributed Systems

:five:

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Luigi Thirty posted:

Heuristic Information Visualization/Asychronous Interface for Distributed Systems

pos me

Jerry Bindle
May 16, 2003

Luigi Thirty posted:

Heuristic Information Visualization/Asychronous Interface for Distributed Systems

lol

KidDynamite
Feb 11, 2005

Luigi Thirty posted:

Heuristic Information Visualization/Asychronous Interface for Distributed Systems

:thurman:

compuserved
Mar 20, 2006

Nap Ghost

Luigi Thirty posted:

Heuristic Information Visualization/Asychronous Interface for Distributed Systems

triple sulk
Sep 17, 2014



Luigi Thirty posted:

Heuristic Information Visualization/Asychronous Interface for Distributed Systems

Soricidus
Oct 21, 2010
freedom-hating statist shill

LeftistMuslimObama posted:

3)Sometimes, it really is fun to solve "solved" problems with the tools available to you. For example, I need to create a natural sort algorithm (e.g., one that would sort "a9" before "a10"). MUMPS globals are inherently sorted in the ASCII collation order, and that's usually good enough so no one had really bothered writing sorting algorithms. Solutions in other languages weren't directly portable. Instead, I got to write this pretty neat little function, which takes advantage of the structure globals and an uncommon method of traversing them a to achieve a sort (there's code surrounding this that I removed because it's more proprietary, but you should be able to guess what most of the variables do):

this is legit. solving problems by working round crazy restrictions is genuinely fun. it's the same impulse that drives people to write things in esolangs, or to code golf, or to port things to obscure processors, or to write javascript frameworks.

Symbolic Butt
Mar 22, 2009

(_!_)
Buglord

Soricidus posted:

this is legit. solving problems by working round crazy restrictions is genuinely fun. it's the same impulse that drives people to write things in esolangs, or to code golf, or to port things to obscure processors, or to write javascript frameworks.

or to play tis-100

Hunter2 Thompson
Feb 3, 2005

Ramrod XTreme

LeftistMuslimObama posted:

Cynical reasons:
1) Variation on above, I was never supposed to get this far in life. I was born and raised in Wisconsin and I don't know that I'd even want to live in some of the major tech areas, even if I could get a job there. I doubt google is looking for programmers with poetry degrees and a history with the law.

The Google engineer on the other end of my first phone screen interview (which I absolutely flunked) had a degree in poetry, so don't discount yourself :)

Soricidus
Oct 21, 2010
freedom-hating statist shill

Symbolic Butt posted:

or to play tis-100

oh cool i didn't know about that

echinopsis
Apr 13, 2004

by Fluffdaddy
dude i made a thread about it. it was bigger than jesus but only briefly

oh no blimp issue
Feb 23, 2011

Luigi Thirty posted:

Heuristic Information Visualization/Asychronous Interface for Distributed Systems

lord of the files
Sep 4, 2012

the language does operate like a cripplingly disease to the programmer.

quote:

http://thedailywtf.com/articles/A_Case_of_the_MUMPS

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

COMMANDS: may be abbreviated to one letter, case-insensitive. Includes commands such as IF, ELSE, GOTO, WRITE, and XECUTE [which is my personal favorite, it allows arbitrary execution of code contained in a variable]

OPERATORS: No precedence, executed left to right, parenthesize as desired. 2+3*10 yields 50.

DECLARATIONS: NONE. Everything dynamically created on first reference.

LINES: important syntactic entities. Multiple statements per line are idiomatic. Scope of IF and FOR is "remainder of current line."

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

Nitrocat posted:

the language does operate like a cripplingly disease to the programmer.

That's out of date, fortunately. It's now possible to explicitly declare variables explicitly. You can create a curly-brace language style if block using a the do operator.

The other stuff is still true though. I'll post my 99bottles program tomorrow at some point so you can see just how fun XECUTE is.


Thanks City of Glompton for the glorious sig

JewKiller 3000
Nov 28, 2006

by Lowtax
xecute doesn't seem any different from eval in other interpreted languages, hardly the worst or most unique feature of mumps

fyi if you can write useful programs in mumps while also understanding and clearly describing the drawbacks of the language, as you have done in this thread, you can probably get a job doing another type of programming that pays more than 75k. just in case you decide on a career change

The MUMPSorceress
Jan 6, 2012


^SHTPSTS

Gary’s Answer

JewKiller 3000 posted:

xecute doesn't seem any different from eval in other interpreted languages, hardly the worst or most unique feature of mumps

fyi if you can write useful programs in mumps while also understanding and clearly describing the drawbacks of the language, as you have done in this thread, you can probably get a job doing another type of programming that pays more than 75k. just in case you decide on a career change

Maybe with a bit more experience. The 75k job only lasts for a year and then at the end my work is evaluated and I get promoted to the big-boy 6-figure job. I'm the equivalent of a junior dev or whatever you'd call it right now.

Since this is the terrible programming thread though, let's talk about the implicit variable declaration for a minute. It's fun :).

Up until the mid 90s, the MUMPS specification did not include a way to create variables other than to simply assign a value to an identifier. To avoid the obvious issues with this, a couple different solutions arose. Programmers came up with naming conventions that ensured that "locals" would have names unique to the routine they were declared in. For example, if you were writing a routine called ^STUPID, you might name all your variables rfsVarname where "rfs" stood for the "really loving" team and their "stupid" routine.

Another solution was to explicitly null or kill variables you used before using them initially. This was incredistupid because the value would be changed all the way up the call stack to the initial creation of the variable, and the functions and subroutines you were returning to might have depended on that value.

Add to this that for a long time there was no concept of functions in MUMPS (though we're talking pre-90s here), resulting in the concept of "assumed" variables. Assumed variables are when a subroutine declares a variable and expects another subroutine it calls to populate that variable with a value. Back then, you'd do this by doing something like 's result="" d subroutine^ROUTINE', then expecting that subroutine to populate result.

In the 90s, they added the NEW operator (and functions at some point too). What NEW does is give you true locals like you'd have in most languages. When you NEW a variable, it initializes it to null and this becomes the active variable of that name for anything added to the stack. Any variables shadowed by the newed variable aren't accessible from this stack level or higher, but now subroutine-local variables act like the locals of methods in other languages.

Of course, by the time NEW was added, most of the applications still using MUMPS were pretty mature so there's still assumed variables all over the place, and many subroutines' behavior depends on them. One of the biggest pain points in MUMPS programming is debugging issues involving assumed variables. Because they're not declared actively anywhere, and there might be dozens of codepaths to the subroutine where the issue manifests, it can be difficult to nail down which initial declaration of the variable is the one affected. Stack traces aren't always enlightening because of situations like:

sub A creates bugVar and calls sub B.
sub B calls sub C, sub C calls sub D.
Sub D calls sub E, which sets bugVar to "i suck"
E returns, d returns, c returns.
B calls sub F which checks bugVar's value and sets it to a new value based on that first value.
sub F calls sub G, which then manifests the behavior that indicates the bug.

C, D, and E won't show up anywhere in that stack trace, so all you know is that bugVar is getting hosed up before it gets to G. There could be 4 or 5 other paths to G that also do things with bugVar, so often the only way to find the bug is to read any and all code that has a variable called "bugVar", set a bad value in it, then watch for that bad value in the subroutine that's having problems. This almost always requires you to stand up a private instance of the database server in a VM so you're not loving up code other people's work is depending on.

This is significantly alleviated by the existence of NEW and functions that explicitly return values. It means that a variable is usually only being set in the code that declares it, and if it's needed in another routine it's passed in as a parameter. Of course, this doesn't stop old-timers who've been working in MUMPS since the 90s from doing things the old way and loving up your day when you do code review for them. Fortunately, they all got paid enough that they're mostly retired now.

Now, here's an extremely fun MUMPS fact that is truly stupid:
Up until the newest MUMPS specification (a couple years back), the only way to null-check a variable was to do this:
code:
i var]"" d
. ;more code here
"]" is the "sorts-after" operator. It checks if a value comes after the rhs in the ASCII collation order. In MUMPS, the empty string is NULL (because all variables are strings until you perform math on them, at which time an implicit conversion occurs). There's a not operator ('), but this code wasn't guaranteed to work:
code:
i var '="" d
. ;more code
It usually worked on most modern implementations, but it wasn't part of the specification and so fell into the land of UNDEFINED BEHAVIOR C programmers are so fond of. On some implementations that statement would behave somewhat randomly, and on others you'd get whatever the most recent value of $T was. Similarly, "<=" and ">=" are only recently in the spec and you used to have to do "'>" and "'<" in the past.

Fortunately, we have very rigorous code reviews now and a strict emphasis on readable and easily debuggable code, so these sorts of gross things only appear in old code, which we're under orders to rewrite as we touch it.

If you guys see any other gross MUMPS stuff you'd like me to talk about, I'm glad to. It's probably one of the weirder languages still in use today and I totally understand the mild horror most of you view it with. It's kind of what makes the job fun, but it also can lead to pretty bad days too. I think that's most programming jobs though.


Thanks City of Glompton for the glorious sig

Adbot
ADBOT LOVES YOU

gonadic io
Feb 16, 2011

>>=
What are your editing tools like?
I don't think I'd be able to deal with scala if I didn't have an ide - go to declaration, show type of variable, and show implicits in scope save a huge amount of time and effort.

And that's not including any of the refactoring tools like renaming variables across all usages in multiple files.

  • Locked thread