Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. - Rick Cook
One of my students had this quote in their email signature, and I have to say... this one hits hard. Not just because it's funny, but because it's true. Painfully, hilariously true.
When it comes to building software, whether it's a billion-dollar app or a humble Access database, you eventually realize that you're not just writing code. You're writing defense. You're designing for the inevitable moment when someone clicks something they shouldn't, types letters where numbers belong, closes the form before saving, or somehow pastes an entire Excel sheet into a single text field.
And yes, I spend a lot of time in my Access lessons talking about how to idiot-proof your database. Trap errors. Validate inputs. Lock things down. Use combo boxes instead of open text fields. Hide things that users shouldn't touch. Add warnings, confirmations, backups, autosaves, and undo buttons if you're feeling generous. Because if it can go wrong, someone out there will find a way to make it go wrong.
But let's be honest... this isn't just a software thing. It's a life thing. Look around at the state of the world and tell me the universe isn't winning this little arms race. From people falling for obvious scams to someone using a toaster in the bathtub to imposing tariffs on islands inhabited by only penguins*, it's clear we're still losing ground to creative forms of user error.
Now, I don't know much about Rick Cook, the guy behind this quote, but after seeing some of his books online, titles like The Wiz Biz, I'm intrigued**. Apparently, he writes fantasy novels about a modern-day programmer who ends up in a world of magic and tries to make sense of it using code logic. Sounds like something I'd read. If any of you have checked out his stuff, post your comments below. I'm curious.
This quote really does say a lot. The universe might be winning for now, but we coders aren't going down without a fight. Just remember to keep your code clean and simple and not make your software too complicated, because as Scotty once said, the more they overthink the plumbing, the easier it is to stop up the drain.
Don't let idiots stop up your drain.
LLAP/RR
* Not being political. This is just funny, and I'd laugh about it no matter which world leader did it.
** I just purchased this on Amazon. Planning to read it on my next flight.
From my experience in adding a lot of features to demanding applications, which make it easier to stop up the drain, I get it. However, I can't say how many late nights or weekends I lost trying to figure out what some "idiot" user did, that bypassed my efforts to bullet-proof the application. Yes, they did an idiot thing, but if I listened, they sometimes had an explanation that involved something they needed the software to do, that it didn't. I wish they had of come to me first, before striking out on their own creative efforts, but I guess I wasn't always available to them either. In these cases, they weren't the universe's idiot. In other cases, they were. And in some cases, I was the idiot. It's been a long road, but I've become more tolerant of idiots. Unless they program commercial or government websites, or work at a bank.
Thomas Gonder
@Reply 16 months ago
Here is a great example of what I just went through today. Those of you that have seen my forms know that I am trying to bypass many of the standard features that are in Access forms. At the top of my forms is a little button that does a validation of all the data. The problem is when there is a new record, I have to do a lot of code to bypass what Access naturally wants to do. Today I pressed on that validate button for the first time on a new record and Access barfed up an error message that I had never seen before. What idiot would try to validate data when they haven't entered any yet? Well, people like to push buttons and I might as well be bulletproofed against that possibility, or an .accde will just crash out.
I have hundreds of little code bits like this to deal with all kinds of possible idiot moves:
Public Sub sValdtAll(frm As Form, fCntl, fObj, Optional aShow As Boolean = False)
'** Validate all fields in form
...
If (fCntl(0, 11) = "FORM" Or fCntl(0, 11) = "NEW") And (frm.Dirty = False And IsNull(frm!ID)) Then
sAddStatus frm, fCntl, fTranltLang(TempVars!LangID, "3_ValdtNoEntry", "H"), , , , True
GoTo ExitCd
End If
...
Many of them take quite some time to figure out the exact combination that will work.
Thomas Gonder
@Reply 16 months ago
Jeffrey Kraft
@Reply 16 months ago
Sorry, only students may add comments.
Click here for more
information on how you can set up an account.
If you are a Visitor, go ahead and post your reply as a
new comment, and we'll move it here for you
once it's approved. Be sure to use the same name and email address.
This thread is now CLOSED. If you wish to comment, start a NEW discussion in
Captain's Log.