Free Republic
Browse · Search
General/Chat
Topics · Post Article

Skip to comments.

9 lies programmers tell themselves
InfoWorld ^ | 28 October 2019 | Peter Wayner

Posted on 11/12/2019 3:41:01 AM PST by ShadowAce

Programmers have pride with good reason. No one else has the power to reach into a database and change reality. The more the world relies on computers to define how the world works, the more powerful programmers become.

Alas, pride goeth before the fall. The power we share is very real, but it’s far from absolute and it’s often hollow. In fact, it may always be hollow because there is no perfect piece of code. Sometimes we cross our fingers and set limits because computers make mistakes. Computers too can be fallible, which we all know from too much firsthand experience.

Of course, many problems stem from assumptions we programmers make that simply aren’t correct. They’re usually sort of true some of the time, but that’s not the same as being true all of the time. As Mark Twain supposedly said, “It ain’t what you don’t know that gets you into trouble. It’s what you know for sure that just ain’t so.”

Here are a number of false beliefs that we programmers often pretend are quite true.

Programming languages are different

We pound the tables in the bars after work. We write long manifestos. We promise the boss that this time, this new language will change everything and wonderful software will flow from the keyboards in such copious amounts that every project will be done a month before the deadline. In the end, though, we stick data in variables and write some if-then logic to test them.

Programmers see structure in their code and dream of squeezing every last inefficiency from it. So they imagine elaborate castles in the air called “frameworks,” “scaffolding,” “platforms,” or “architectures” and fiddle with them until they offer just the right support to the current problem so that everything can be written in a few elegant lines. Alas, the next assignment has a different structure.

In the end, all of this is artifice and syntactic frosting. Structural liquor that numbs the pain of coding life until it wears off.  Computers are built out of transistors and no amount of clever punctuation and type theory can hide the fact that all of our clever code boils down to one bit of doped-up silicon choosing to go left or right down the fork in the code and there is no middle path.

Frameworks are getting better

Perhaps you built your last web application in React because you were unhappy with the pages constructed in Vue? Or maybe you wrapped together a headless Ruby with some static pages built from a templating engine because the WordPress interface was clumsy and dated? Or maybe you rewrote everything in something smaller, newer, or cooler like Marko or Glimmer or Ghost? The programmer is always searching for the perfect framework but that framework, like the end of the rainbow, never appears.

Ralph Waldo Emerson anticipated the programmer’s life when he wrote “Self-Reliance” in 1841. “Society never advances,” he noted, speaking of course of programming frameworks. “It recedes as fast on one side as it gains on the other. Its progress is only apparent like the workers of a treadmill... For every thing that is given something is taken.”

And so we see again and again as developers create new frameworks to patch the problems of the old frameworks, introducing new problems along the way. If a framework adds server-side rendering, it bogs down the server. But if everything is left to the clients, they start slowing down. Each new feature is a tradeoff between time, code, and bandwidth.

Null is acceptable

Figuring out how to handle null pointers is a big problem for modern language design. Sometimes I think that half of the Java code I write is checking to see whether a pointer is null.

The clever way some languages use a question mark to check for nullity helps, but it doesn’t get rid of the issue. A number of modern languages have tried to eliminate the null testing problem by eliminating null altogether. If every variable must be initialized, there can never be a null. No more null testing. Problem solved. Time for lunch.

The joy of this discovery fades within several lines of new code because data structures often have holes without information. People leave lines on a form blank. Sometimes the data isn’t available yet. Then you need some predicate to decide whether an element is empty.

If the element is a string, you can test whether the length is zero. If you work long and hard enough with the type definitions, you can usually come up with something logically sound for the particular problem, at least until someone amends the specs. After doing this a few times, you start wishing for one, simple word that means an empty variable. 

Computers can capture human choices

The problem of codifying gender and choices of possible pronouns is a big minefield for programmers. Computers deal fixed lists and well-defined menus and humans keep changing the rules. One very progressive school licensed an off-the-shelf application only to discover that the forms gave only two choices for gender.

Computer scientists never really solve problems, they just add another layer of indirection, in this case a pointer to an empty string field where the person can fill in their choice. Then some joker comes along and chooses “his majesty” for a pronoun, which makes some kids laugh and others feel offended. But going back to a fixed list means excluding some choices.

This design failure mode appears again and again. If you force everyone to have a first name and a family name, some will have only one name. Or then there’s someone who doesn’t want to be known by a string of Unicode characters. And what if someone chooses a new emoji for their name string and the emoji doesn’t make the final list of acceptable ones? No matter how much you try to teach the computer how to be flexible and accepting of human whims and follies, the humans come up with new logic bombs that trash the code.

Unicode stands for universal communication

There’s an earnest committee that meets frequently trying to decide which emojis should be included in the definitive list of glyphs that define human communication. They also toss aside certain emoji, effectively denying someone’s feelings.

The explosion in memes shows how futile this process can be. If the world finds emojis too limiting, spurring them to turn to mixing text with photos of cultural icons, how can any list of emojis be adequate?

Then there’s the problem of emoji fonts. What looks cute and cuddly in one font can look dastardly and suspect in another. You can choose the cute emoji, and your phone will dutifully send the Unicode bytes to your friend with a different brand phone and a different font that will render the bytes with the dastardly version of the emoji. Oops.

Human language is consistent

One of the ways that developers punt is to put in a text field and let humans fill it with whatever they want. The open-ended comment sections are made for humans and rarely interpreted by algorithms, so they’re not part of the problem.

The real problem resides in structured fields with text. When my GPS wants me to choose a road named after a saint, it tells me to “turn onto Street Johns Road.” Road names with apostrophes also throw it for a loop. It’s common to see “St. John’s Road” spelled as “Saint Johns,” “St. Johns,” “Saint John’s,” and even the plural form: “Saint Johns.” The U.S. Post Office has a canonical list of addresses without extra characters, and it maintains an elaborate algorithm for converting any random address into the canonical form.

Time is consistent

It may feel like time keeps flowing at a constant rate—and it does, but that’s not the problem for computers. It’s the humans that mess up the rules and make a programmer’s life nasty. You may think there are 24 hours in every day, but you better not write your code assuming that will always be true. If someone takes off on the East Coast of the United States and lands on the West Coast, that day lasts 27 hours.

Time zones are only the beginning. Daylight saving time adds and subtracts hours, but does so on weekends that change from year to year. In 2000 in the United States, the shift occurred in April. This year, the country changed clocks on the second Sunday in March. In the meantime, Europe moves to “summer time” on the last Sunday in March.

If you think that’s the end of it, you might be a programmer tired of writing code. Arizona doesn’t go on daylight saving time at all. The Navajo Nation, however, is a big part of Arizona, and it does change its clocks because it’s independent and able to decide these things for itself. So it does.

That’s not the end. The Hopi Nation lies inside the Navajo Nation, and perhaps to assert its independence from the Navajo, it does not change its clocks.

But wait, there’s more. The Navajo have a block of land inside the Hopi Nation, making it much harder to use geographic coordinates to accurately track the time in Arizona alone. Please don’t ask about Indiana.

Files are consistent

It seems that merely remembering the data should be something a computer can do. We should be able to recover the bits even if the bits are filled with many logical, stylistic, orthographic, numerical, or other inconsistencies. Alas, we can’t even do that.

Whenever I ask my Mac to check the file system and fix mistakes, it invariably tells me about a long list of “permissions errors” that it dutifully repairs for me. How did the software get permission to change the permissions for access to my files if I didn’t give permission to do it? Don’t ask me.

These are only two examples of how file systems don’t honor the compact between user (the person supplying the electricity) and the machine (desperate needer of electricity). Any programmer will tell you there are hundreds of other examples of situations where files don’t contain what we expect them to contain. Database companies are paid big bucks to make sure the data can be written in a consistent way. Even then, something goes wrong and the consultants get paid even more money to fix the tables that have gone south.

We’re in control

We like to believe that our instructions are telling the computer what to do and that arrogant pride is generally true except when it’s not.

What? Certainly that may not be true for the average nonprogramming saps, unwashed in the liniment of coding power, but not us, wizards of logic and arithmetic, right? Wrong. We’re all powerless beggars who are stuck taking whatever the machines give us. The operating system is in charge, and it may or may not let our code compute what it wants.

OK, what if we compile the Linux kernel from scratch and install only the code that we’ve vetted? Certainly we’re in control then.

Nope. The BIOS has first dibs over the computer, and it can surreptitiously make subtle and not-so-subtle changes in your code. If you’re running in the cloud, the hypervisor has even more power.

OK, what if we replace the BIOS with our own custom boot loader? You’re getting closer, but there’s still plenty of firmware buried inside your machine. Your disk drive, network card, and video card can all think for themselves, and they listen to their firmware first. 

Not only that, but your CPU might have a “Hidden God Mode” that lets someone else take command. Don’t bother looking at the documentation for an explanation because it’s not there. And those are just the problems with the official chips that are supposed to be in your box. Someone might have added an extra chip with a hidden agenda.

Even that little thumb drive has a built-in processor with its own code making its own decisions. All of these embedded processors have been caught harboring malware. The sad fact is that none of the transistors in that box under your desk report to you.


TOPICS: Computers/Internet
KEYWORDS: code
Navigation: use the links below to view more comments.
first previous 1-2021-4041-6061-71 next last
To: duckman

Worked for Burroughs for 38 years.
Languages I used::::

SOAPII
AUTOCODER
GMAP
COBOL
B3500 Assembler
SDL
ALGOL

SDL was the best. Developed by Unisys small systems for system programming. System Development Language.


21 posted on 11/12/2019 5:44:59 AM PST by Allen In Texas Hill Country
[ Post Reply | Private Reply | To 16 | View Replies]

To: ShadowAce

The only programming I ever actually enjoyed was assembly language.


22 posted on 11/12/2019 5:52:07 AM PST by Fresh Wind (The Electoral College is the firewall protecting us from massive blue state vote fraud.)
[ Post Reply | Private Reply | To 1 | View Replies]

To: ShadowAce

Computers do not make mistakes. Programmers and data entry folks make the mistakes.


23 posted on 11/12/2019 5:52:28 AM PST by BubbaBasher ("Liberty will not long survive the total extinction of morals" - Sam Adams)
[ Post Reply | Private Reply | To 1 | View Replies]

To: ImJustAnotherOkie

Hear hear! Garbage in/garbage out.


24 posted on 11/12/2019 5:55:58 AM PST by snippy_about_it
[ Post Reply | Private Reply | To 17 | View Replies]

To: Allen In Texas Hill Country

The reason I chose IBM was other firms had programming ads all over the place in the NYT, all using IBM software. So if I wasn’t offered an employment opportunity there, I had many other firms to apply to.


25 posted on 11/12/2019 5:56:10 AM PST by duckman ( Not tired of winning!)
[ Post Reply | Private Reply | To 21 | View Replies]

To: duckman
...I could read a punched card...

Boy, does that bring back memories.

Where I went to school, you could pick out the computer science majors; they all had a half dozen rubber bands around their wrists. The engineering majors had a slide rule in a holster on their hips. (The math majors were all off in their own world somewhere.)

26 posted on 11/12/2019 5:58:09 AM PST by sima_yi ( Reporting live from the far North)
[ Post Reply | Private Reply | To 9 | View Replies]

To: ShadowAce

An If is an If, a For is a For.


27 posted on 11/12/2019 5:58:55 AM PST by McGruff (Does no one is above the law apply to Democrats?)
[ Post Reply | Private Reply | To 1 | View Replies]

To: SES1066

The one law that never changes: GIGO - Garbage In, Garbage Out


28 posted on 11/12/2019 6:01:37 AM PST by dfwgator (Endut! Hoch Hech!)
[ Post Reply | Private Reply | To 10 | View Replies]

To: SES1066

A diagonal stripe with a felt pen across the side of the stack helped.

My experience with programmers is that they are all artists at heart. To tell them that their software is not working as it was specified is the same as telling an artist you do not like his painting. I have had programmers tell me, “That is the best that I can do.” My “criticism” so crushed them that they could not bear to touch the defiled software again.

Get a grip. Do your job.


29 posted on 11/12/2019 6:02:50 AM PST by super7man (Madam Defarge, knitting, knitting, always knitting)
[ Post Reply | Private Reply | To 13 | View Replies]

To: SES1066

“Still have nightmares of a spilled box of the same!”

I have a box with the game “Advent” around here somewhere.
XYZZY


30 posted on 11/12/2019 6:04:46 AM PST by FXRP (Cogito, ergo Spam!)
[ Post Reply | Private Reply | To 13 | View Replies]

To: sima_yi

When I went to high school, early 60’s, no one knew what Data Processing was, now called IT. It was something done in large buildings on large machines. It was a big mystery as to what was being done in those buildings. LOL


31 posted on 11/12/2019 6:05:20 AM PST by duckman ( Not tired of winning!)
[ Post Reply | Private Reply | To 26 | View Replies]

To: ImJustAnotherOkie

> Why not Exclusive OR with your birth date.

Padding on both sides of the number with a couple of bits “keeps me centered” ;-)

... which allows for more possible combinations of numbers. Mostly its just a refresher for me to keep bit arithmetic in my head.


32 posted on 11/12/2019 6:10:05 AM PST by glorgau
[ Post Reply | Private Reply | To 19 | View Replies]

To: glorgau

Now a lot of code is a hot mess. All poorly copy-pasted by some brainless H1B Indian that doesn’t understand how the code is even to function. Code quality in general has plummeted.


33 posted on 11/12/2019 6:16:33 AM PST by Starcitizen (American. No hypenation necessary. Send the H1B and H4EAD slime home. American jobs for Americans)
[ Post Reply | Private Reply | To 32 | View Replies]

To: ShadowAce
These are only two examples of how file systems don’t honor the compact between user (the person supplying the electricity) and the machine (desperate needer of electricity).

Desperate needer of elictricity. Yup. Mine has even trained me to supply it clean power through an UPS. I just wish the UPS were more reliable. I had one recently that I had to replace, because even the slightest bobble of power would cause it to drop like a stone. Even when said bobble wasn't enough to even reset the clock on my microwave.

34 posted on 11/12/2019 6:18:40 AM PST by zeugma (I sure wish I lived in a country where the rule of law actually applied to those in power.)
[ Post Reply | Private Reply | To 1 | View Replies]

To: ShadowAce

The biggest lie, I think, is time. They will write something quick in an hour then spend three weeks making it work, but when asked how long it took they claim an hour.


35 posted on 11/12/2019 6:23:04 AM PST by CodeToad
[ Post Reply | Private Reply | To 1 | View Replies]

To: glorgau

“I write my pins on the back of my debit cards in binary with a bit shift. It helps keep me centered.”

Funny thing, I do it too! I’ll shift maybe three bits then flip the first. Simple to undo.


36 posted on 11/12/2019 6:23:57 AM PST by CodeToad
[ Post Reply | Private Reply | To 12 | View Replies]

To: glorgau

Great thing about XOR is after 3 times you’re right back where you started.


37 posted on 11/12/2019 6:51:00 AM PST by ImJustAnotherOkie (All I know is The I read in the papers.)
[ Post Reply | Private Reply | To 32 | View Replies]

To: ShadowAce
I think the key to remember is that once you learn how to program in the abstract, then whatever language you choose is just syntax.

Yup.

38 posted on 11/12/2019 6:58:34 AM PST by TomServo
[ Post Reply | Private Reply | To 4 | View Replies]

To: ImJustAnotherOkie

What base is that ‘3’ in?


39 posted on 11/12/2019 7:13:42 AM PST by Still Thinking (Freedom is NOT a loophole!)
[ Post Reply | Private Reply | To 37 | View Replies]

To: Still Thinking

Swap values of two registers in place without another temp variable.

A XOR B
B XOR A
A XOR B


40 posted on 11/12/2019 7:25:33 AM PST by ImJustAnotherOkie (All I know is The I read in the papers.)
[ Post Reply | Private Reply | To 39 | View Replies]


Navigation: use the links below to view more comments.
first previous 1-2021-4041-6061-71 next last

Disclaimer: Opinions posted on Free Republic are those of the individual posters and do not necessarily represent the opinion of Free Republic or its management. All materials posted herein are protected by copyright law and the exemption for fair use of copyrighted works.

Free Republic
Browse · Search
General/Chat
Topics · Post Article

FreeRepublic, LLC, PO BOX 9771, FRESNO, CA 93794
FreeRepublic.com is powered by software copyright 2000-2008 John Robinson