Twenty years of schooling ...
by joe

Posted on 2018-09-24

Twenty years of schoolin'
And they put you on the day shift.

Bob Dylan - "Subterranean Homesick Blues"

Software Rules - The Manual May Be Wrong

[cue nostalgia]
About 45 years ago we were taking a Programming Languages course at the University of Texas. It was a graduate-level survey course covering languages such as FORTRAN, LISP, and Pascal. When we got our first FORTRAN assignment, one of our classmates asked the professor, "Is this a one-pass or a zero-pass DO-loop compiler?"

Another classmate immediately responded, "Just read the manual." (RTFM was not spoken among the innocents of 1973 - at least not in class.)

The professor said, "No. Don't read the manual; test the compiler with code. There are any number of ways that you can get the wrong answer from a manual. The manual may be wrong. Or it may not be the manual for the version of the compiler you are using. If you want to know what the compiler does, ask the compiler."

That lesson has stood us in good stead for almost half a century, and we commend it to you.

Write it for yourself

We just added a feature to the composer-editor function ("edit_spiel/n") of the blox database editor. Completely off-the-cuff, with very little consideration of appropriateness for anyone else who might want to use this system in the future.

It's the "+[placeholder]" button on the "edit_spiel" page. All it does is to add a placeholder rhyme at the end of the (ordered) list of rhymes for the spiel. (See commit 73880b4.)

We're working on the uWSGI post to go up in the next day or two. We originally wrote the uWSGI post back in March and April. For the current version we are copying individual rhyme content (i.e., verses) from those old posts and editing as we go along. After only a couple of iterations of hitting the "Add a New rhyme" button, then putting some placeholder text into the verse field, then confirming with the "Add Rhyme" button on the "new_rhyme" page, we decided to add the "+[placeholder]" button to the "edit_spiel" page. All it does is to put and empty "paragraph" rhyme at the end of the spiel.rhymes list. But it does it with a single button click. We think we are really going to like this feature.

Looking over the explanation above, it is apparent that we need to develop a clean lexicon for this blox project - and explain it somewhere. For the time being, we're going to let that slide.

[Cue nostalgia]
In our original business, we wrote a compiler (with our partner) for the HP3000 called PROTOS. The language had a simplified Pascal-like syntax with semantics customized to produce human-readable and -maintainable COBOL code to work with HP's Image database and View forms handler. After folks started buying it, we followed a two-pronged approach to guide and prioritize further development: 1) we listened to our customers; and 2) as users ourselves, we attacked whatever we considered to be the current biggest pain in the ass.

It was a very successful approach. Our own use of the product for new application development continually exposed the product's shortcomings. As typical (or near-typical) users, our difficulties and frustrations mimicked (or presaged) the needs of our users.

We happened onto a market technique much stronger than "eat your own dog food". When you are (or approximate) a typical user, "write it for yourself".

And just so you understand the parenthetical qualifications, we are aware that developers of tools are, of necessity, not entirely "typical users" of whatever they develop.

At long last, wireless ...

Apple finally offers a full-size wireless keyboard. We bought ours today, unboxed it at our desk, unplugged our wired full-size keyboard, turned on the new wireless, and it popped up immediately. Cmd-Tab shows us that it works just fine. Happy guy.

Now, though, our wireless Evoluent vertical mouse doesn't work. Jiggle it. Turn it off and back on again a couple of times. Nothing. Seems a bit too coincidental, but we replaced the battery. Still no joy.

We're still operational because we use two vertical mice: wireless right and wired left. But we are not happy. What is it about ginning up a bluetooth wireless keyboard that disables my wireless mouse? The mouse isn't even bluetooth. What's the connection?

About an hour later, it hits us. The mouse is not bluetooth. It connects to the computer via a USB fob - a fob that is plugged into our now unplugged wired keyboard. Move the fob to a USB hub, and all is right with the world.

That is how troubleshooting works. All too often we are distracted by coincidence or correlation and immediately assume causation - even when we cannot come up a reasonable explanation.

We've reorganized the site so that the generalized subject matter of this post (see the 20 Years is an Understatement sidebar below) has now become a separate blog thread. We'll follow the same plan, but we'll make each entry a separate post instead of sticking it at the top of this one.
20 Years is an Understatement
We have been writing computer programs for over 50 years now. We have had functioning software, running at customer sites for over 40 years - 30+ programming languages, a dozen or so operating systems, and at least that many databases and file systems.

This post will be updated fairly frequently with vignettes that illustrate the imperfection of experience and highlight the mundane nature of programming in the semi-modern world.


It will be some time yet before we get a comments section working here. In the meantime feel free to send comments via email. On this site our name is Joe Python. The email address is our first name at

Edited: 2019-01-30 20:55:12(utc) Generated: 2019-06-10 17:29:58(utc)