The Programmer and the Mailbox
A problem I have had to deal with at home has caused me to meditate on the mentality a programmer must have. Of course, my wife suspects that I may have a mild case of Asperger’s syndrome. If that is true, I would venture to say that there are some aspects of the ideal programmer’s mentality that may resemble autism- and when I say that I do not mean to make light of a serious medical disorder.
In our small town, the local post office made a request of the townspeople that they install mailboxes at the curb so that mail can be delivered from vehicles rather than hand-carried up to the house. (This request has not been well-heeded, but that is another issue.)
For many programmers, especially those with normal manual skills and brains, this would not be an earth-shaking task. My programming teacher, for example, could not only program, but he could change a transmission, remodel his basement, bake cheesecakes for sale to restaurants, and brew his own root beer. Not me. My manual skills are minimal; I can do many things that others can do, but not as well, and it takes me a lot more time.
Anyway, I asked the reasonable question, “Where exactly should the box go?” The directions from the post office, to a normal person, may have seemed clear: “The box should be 6 inches from the curb, and the bottom of the box should be 42 inches from the ground.” But the problem: The curb does not rise from right angles from the street. The curb arcs about 90 degrees, so the the top of the curb ends about 7 inches horizontally measured from the bottom of the curb. In other words, the top of the curb is already 7 inches from the street. Do I hang it 1 inch over the edge of the curb to get 6 inches from the street, or do I put it 6 inches from the top edge (13 inches from the street)? The top of the curb is about 7 inches higher than street level. Do I put the box 42 inches from street level (35 from ground level) or 42 inches from ground level (49 from street level)?
My wife asked the maillady. She said that she thought that it was 42 inches from ground level. ( An opinion, not a ruling. No help.) The post is designed to be driven into the ground. After obliterating the first inch or so of the post with my sledgehammer, I sawed off the ruined post end, dug the hole and put the post in. Now that the post was in the ground and the adjustable mailbox support was in place, I looked more closely at the instructions that came with the mailbox post. It said, ‘The bottom of the mailbox should be from 41 to 45 inches from street level; check with your local postal service.’ Mildly better; but it gave me a four inch range, and copped out by telling me, in the end, that the post office was the final authority.
I can just see me writing a program with that level of lack of precision. In effect, I am being asked to wing it. Unless you are writing a program for your own amusement and edification, when you are writing programs YOU CAN’T WING IT! You are not allowed to make assumptions. Almost every mistake I have ever made as a programmer has been a result, at some level, of erroneous assumptions, whether at the coding, testing, or implementation level. In other words, mistakes come in programming when you make human assumptions, when even for just a moment you forget that the program, and therefore the computer, does what you TELL it to do, not what you WANT it to do. For most programs, especially when being used at a business level, “ALMOST CORRECT” IS NOT GOOD ENOUGH.
This is especially true when dealing with financial applications. In my experience, the best person to talk to when developing specifications for a program is an accountant or other financial specialist. They seem to have a special appreciation for precision, even if they don’t know a lick about programming computers. And if a report is $10 off, or even 10 cents off, they want to know why. And that is a good thing. I appreciate that.
I think that most programmers can relate to what I have just said. What amazes me is that you can have people who can deal with uncertainty in most other tasks but don’t tolerate it in their programming (my teacher, again, being an example). I need strict specifications in almost everything in my daily life. ( I once spent 15 or 20 minutes trying to decipher a wordless, picture-only description of how to install windshield wiper blades.)
So how did I resolve my problem? I put the mailbox about 6 inches from the top edge of the curb (about thirteen inches from the street) and about 46 inches from street level (about 39 inches from ground level). Why? Because, since the box will probably never be filled from a vehicle at street level, I should do it for the walking mail carrier. I winged it. Fortunately, the height can be adjusted later, if needed.
All very imprecise. And all very unsatisfactory.