Standard warming about people like me trying to take over your mind with thoughts like “Be damn careful what you allow into your mind”. There are many such, in many varieties, on this site, read them all, you can’t be too careful with intellectual hygiene issues.*
Idle thinking had me asking “Why ‘#1’ in the Cats and Dogs title?”
Which lead to “There are two kinds of people in the world, those who start counting with zero and those who don’t.” Which is true in my world of programming, and a deep divide of mentalities. To quickly and lightly summarize, intelligent minds begin counting iterations in a loop with zero and terminate with a test of “Less than the number of things to be iterated over”. That was the assembly-language pattern built into the instruction set of all computers I ever used, what got propagated into ‘C’, the first intentional systems language, and then propagated through all civilized, superior languages and programmers up to and including Python and Haskel. We look down on the various alternatives, the artists and philosophers among us have so many reasons we are superior in mind, body and soul.
So I normally start everything at ‘0’, as CS textbooks sometimes do so for Chapters, partly because it was natural in a programming context, and contexts bleed into each other, and partly as a hobo sign allowing fellow programmers to recognize each other.
That assumption about the world, which resulted in 2 classes** of programmers, it occurred to me, along with the tools those languages enable, is an example of precision thinking and communication. Any programmer glances at that loop control and knows many things about the data structures and structure of the program. The tools can check bounds for indexing into the data structure, follow the use of the index through the program via call interfaces, etc. And in a remote procedure call handle endian conversion if required.
That is, a program’s named variables have attributes, e.g. ‘integer’ that define possible operations. It is rarely sensible to apply floating-point or binary-coded decimal operations to an integer. Languages often have higher-level constructs and can define attributes and operations, then enforce that association. Artificial Intelligence languages specialized in that.
Because the language processor can so quickly check a program for violation of such constraints, along with many other things such as mis-spellings, forgot to define a named something, …, programmers can develop very large programs that mostly work most of the time, so long as you aren’t exercising the program outside of its operating characteristic (program reliability term for ‘range of where it works’ — as an academic discipline, that never progressed into actual engineering).
Let me emphasize that thought : we programmers have our best thinking checked by machine every day. The best and most careful of us make many 100s of errors every day. Programmers make progress by correcting mistakes in our best thinking. And then correcting the mistakes in the corrections, … until the program finally works, meaning you haven’t tested it well enough yet.
That is not an exaggeration, that is the life of a programmer or hardware design engineer. And a scientist and anyone else who deals with reality, we spend a lot of time checking, otherwise nothing works.
Consider the life of a writer, for example a blogger, and compare the mental and computer tools used to support this equally-error-plagued mental process.
Reasoning also uses named variables with attributes. E.g. ‘count’ as a noun. ‘Count’ is also a verb, but both have a range of meaning. Most of the time your first guess will get it right, but if it is even possible to go so wrong with such a minor-yet-fundamental example, you can’t have a lot of confidence in the language and the chains of reasoning produced with it.
I could produce a long series of increasingly ridiculous examples, each beginning with something innocuous like that. A short story in which a Count counts on his fingers, but the count was off. Not even close to time flies raping arrows.
The better point, thank me for keeping this short, is that we have no defense short of our error-plagued minds when we encounter US Foreign Policy explanations that include terms such as ‘moderate Rebel groups’. If we had proper tools, it would flag that phrase as ‘no operator for this attribute’, and tell us that the writer is either a fool or a liar.
You might have caught that one because you are in fundamental disagreement with the foreign policy, have seen that bit before, so are biased against it. OK, but without the tool to systematically apply such tests, you are vulnerable to believing the Russian’s claim to be bombing ISIS, when in fact they are bombing the anti-Assad forces, some of whom are genuinely moderate compared to the average in ISIS.
There has been a long program/push/goal to support a ‘semantic web‘, Web 3.0, where airline forms have a meta-level defining its use of terms as defined in a standard hierarchy of ontologies, allowing semantically-structured knowledge. That means the attributes can be used to select operations, and allows tools to ‘know’ what to do with data.
I have not followed that line of thought, but note that it has not taken over the world yet, and that I bet there are a ton of blogs down that line of thought.
*I nearly felt guilty as I wrote that. This is an advanced test. Read a sampling of the many disclaimers and warnings, come back and tell me what you learned. You can’t say I didn’t warn you.
**You could, of course, start at one, and test for greater than, assembly language allowed that, also. But that required more total instructions (usually), longer instructions and ones requiring more clock cycles. I could nearly-legitimately describe it as a hierarchy, nearly a hereditary caste-class system, with the C-derived world of system programmers amazingly superior to all others in intellect, moral strength, physical beauty. But that would be propaganda, and distract you from my image of perfectly balanced judgment with no bias. Everyone tries to put that image into your head, so you exert as little critical judgment as possible as you read the thoughts they want in your head. Me too, of course, so ignore my obvious superiority in choice of programming languages and what that superiority no doubt means.
Do you appreciate what I just did there? I had it both ways. Note the balanced judgment.
Are you being critical enough? If you aren’t passing my little tests, you definitely are not being critical enough. Please be serious, it makes a difference to my life how critical you are. Our ability to think carefully is going to be seriously tested soon, and I want everyone possible to be able to reason to a good result, nobody falling for propaganda like this.
Now, tell me what I did there. And here.
Starting to get it? Can’t be too critical.