Friday, July 8, 2016

coding

Coding means giving computers instructions.

Of course, using computers means giving computers instructions. Coding is the advanced form of the art.

What pretension! If we had manners we wouldn't give computers instructions, we would ask them to do things. What I mean is, we wouldn't speak of giving instructions, we would speak of asking computers to do things.

And the idea that coding is the advanced form of the art is steeped in pretension, too.

But, coding is a distinct form of the art. I mean, "coding" isn't an actual defined concept, but the "term" - calling it a term is a bit silly - it's really an affectation - the affectation comes from a modality for making requests of computers.

We can, at least for the purpose of argument, describe three modalities making requests of computers. Maybe if we call them three kinds of language that computers can understand, that might help. So, a language is a set of symbols that we can manipulate to communicate requests. The most basic language computers understand, then, uses two symbols, 1 and 0, and requests can be formulated by stringing together 1s and 0s.

But, while computers have no difficulty interpreting strings of 1s and 0s, people find it quite difficult to construct meaningful strings of 1s and 0s. So the language of 1s and 0s isn't used much by people to communicate with computers.

In order to make it easier for people to construct requests that computers can interpret, early programmers used strings of 1s and 0s to ask computers to interpret a language people can work with more easily. That language uses some larger set of symbols, such as the letters of the alphabet plus the numerals plus assorted punctuation marks. These can be organized into words and phrases, in ways that are similar to the way we normally write - normal writing but of a strange sort - so people are able to manage writing in that style much more easily than they can manage writing in 1s and 0s alone, and then the early programmers gave computers information - in 1s and 0s - about how to interpret that kind of language for us. Truly, it was a wonderful accomplishment.

However, the language that emerged, this way of writing using words and phrases, but for communicating with computers, looks rather strange and complicated, so programmers were concerned that ordinary people - there's another part of the conceit - wouldn't be able to use those languages, and they looked for ways to use those languages to ask computers to interpret other kinds off thing people could do to communicate. Note that programmers use languages made of letters, words, and phrases to do this work. Even for programmers communicating in 1s and 0s is too difficult. But, then, communicating in "writing" - we'll call using letters and the related symbols to construct words and phrases that - requires some skill. The perception is it's beyond most people, and that the way ordinary dumb people can communicate is with grunts and gestures. So programmers have been working hard to enable ordinary dumb people to communicate with computers, by asking computers (using writing) to interpret grunts and gestures.

Some of the systems that have emerged, which allow people to communicate with computers using grunts and gestures, are actually quite advanced, and the word coding could quite appropriately be used to describe them. The term emerges from the practice of communicating with computers using writing, or even from the digital language (1s and 0s) ... because the requests, when formulated, look like the kind of writing that would be used for hiding the meaning of a message from someone without the key to the code. Right? I mean, the origin of the term is intuitively obvious. What we're discussing is what it means, if anything. But, though I'm critical, I think it does mean something, and by that I mean that it means something useful. I mean, it's interesting, and I like it.

Here's what I would like it to mean, and I think maybe this is what it really does mean: First, it's quite easy to make a request of a computer. It's very easy to do so using grunts and gestures ... I mean, I'm being sarcastic and silly, but ... using gestures. You know: you can click a link to make something happen. It's pretty easy, if you investigate a bit further, to make simple requests using writing. But here's the thing: if we want to make more advanced requests, it starts to become a question of asking computers to do this, then that, then the other thing, and lots of those things are in forms like "if this, then that" or "get this from there, and that from this other location, and then if this is true, do that with those." And, if you assemble enough such requests in one place, managing the process becomes a real challenge. The word coding implies that something mysterious is going on. At a glance the process looks impossibly complicated. How to make sense of it is what we could say is the code, or the key to the code, and learning how to use the code, or construct the code, could be called, maybe in a more meaningful way, learning how to code, or just coding.

OK, let me say something else about this. Coding is not as complicated as it looks. It looks hellaciously complicated because it's new to us - the collective us, and this includes the programmers - and we haven't, shall we say, quite assimilated the logic of it. If we investigate the question we can discover that there is, in fact, a logic to it, and by definition logic is a simple thing. Here's the thing: in order to ask computers to do things, we are building tools for the purpose, but, because we generally don't fully understand the logic of computing, our tools end up not being very logical in their design. There's definitely room for improvement.