Slack—like email, but somehow with a lot less guilt about ignoring it.
Archive for August, 2017
Every time we have an open day at Kent, the University of Essex (hello to my dear friends there!) pays someone to drive a bloody great van with a mahoosive “University of Essex” poster on it and park it all day opposite the main entrance to our campus.
I can’t imagine that 20-30 years ago, when we first started to talk about having some kind of competitive ethos between universities, that we would ever have imagined that we would end up in a situation like this. And it seems to be a systematic inefficiency baked into the system. Unlike the often talked about “inefficiencies” of public sector management, which seem to be just a matter of motivation and management skill, there are real, ongoing, impossible to avoid inefficiencies at the core of a competition based system.
This is a few hundred pounds that could be going into student’s education or research or goddamn it on nicer port for the vice-chancellor’s summer party. Is there any way in which we can get out of this kind of arms race that is consuming vast amounts of money, time, and attention?
It’s surprising to me, in a world where social media is generally assumed to be ubiquitous, how many people have minimal-to-no online presence. Whilst I was sorting through piles of stuff from my Dad’s house (well, sorting out in the sense of looking at it and then putting it in a box in a storage unit), I came across a lot of things with names on—old school photos, programmes from concerts and plays at school with lists of pupils and teachers, lists of people who were involved in societies at University, details of distant family members, etc. Looking up some people online, I was surprised how often there was no online trace. I understand that some people might have changed names, gone to ground, died, or whatever, but a good third of people, I would say, had no or close-to-no online presence. Don’t quite know what to make of this, but it shows how the idea that we are a completely online community to be unreliable.
When I hear about the gun debate in the USA, it sounds to me like this:
Alice: “So, in your workplace, how do they make sure that people do their work well?”
Bob: “Well, its straightforward really. Its written into our contracts—which we’re all very respectful of—that our bosses can hit us over the head with a large piece of wood if we are even a little bit slacking. So, each of the bosses has this piece of wood, and they walk around with it all day,…”
Alice: “But that sounds terrible. Why do people put up with it?”
Bob: “Well, actually it’s not too bad. You see, we have a very strong union, and they’ve agreed that we can all have large pieces of wood too, and so we can hit back and defend ourselves.”
Alice: “But, wouldn’t it be easier for you to all agree not to have the pieces of wood in the first place?”
Bob: “I’m not quite too sure I get you there…”
The flexibility of computer languages is considered to be one of their sources of power. The ability for a computer to do, within limits of tractability and Turing-completeness, anything with data is considered one of the great distinguishing features of computer science. Something that surprises me is that we fell into this very early on in the history of computing; very early programmable computer systems were already using languages that offered enormous flexibility. We didn’t have a multi-decade struggle where we developed various domain-specific languages, and then the invention of Turing-complete generic languages was a key point in the development of computer programming. As-powerful-as-dammit languages were—by accident, or by the fact of languages already building on a strong tradition in mathematical logic etc.—there from the start.
Yet, in practice, programmers don’t use this flexibility.
How often have we written a loop such as for (int i=0;i<t;i++)? Why, given the vast flexibility to put any expression from the language in those three slots, hardly put anything other than a couple of different things in there? I used to feel that I was an amateurish programmer for falling into these clichés all the time—surely, real programmers used the full expressivity of the language, and it was just me with my paucity of imagination that wasn’t doing this.
But, it isn’t. Perhaps, indeed, the clichés are a sign of maturity of thinking, a sign that I have learned some of the patterns of thought that make a mature programmer?
The studies of Roles of Variables put some meat onto these anecdotal bones. Over 99% of variable usages in a set of programs from a textbook were found to be doing just one of around 10 roles. An example of a role is most-wanted holder, where the variable holds the value that is the “best” value found so far, for some problem-specific value of “best”. For example, it might be the current largest in a program that is trying to find the largest number in a list.
There is a decent argument that we should make these sorts of things explicit in programming languages. Rather than saying “int” or “string” in variable declarations we should instead/additionally say “stepper” or “most recent holder”. This would allow additional pragmatic checks to see whether the programmer was using the variable in the way that they think they are.
Perhaps there is a stronger argument though. Is it possible that we might be able to reason about such a restricted language more powerfully than we can a general language? There seems to be a tension between the vast Turing-complete capability of computer languages, and the desire to verify and check properties of programs. Could a subset of a language, where the role-types had much more restricted semantics, allow more powerful reasoning systems? There is a related but distinct argument that I heard a while ago that we should develop reasoning systems that verify properties of Turing-incomplete fragments of programs (I’ll add a reference when I find it, but I think the idea was at very early stages).
Les Hatton says that Software is cursed with unconstrained creativity. We have just about got to a decent understanding of our tools when trends change, and we are forced to learn another toolset—with its own distinctive set of gotchas—all over again. Where would software engineering have got to if we had focused not on developing new languages and paradigms, but on becoming master-level skilled with the already sufficiently expressive languages that already existed? There is a similar flavour here. Are we using languages that allow us to do far more than we ever need to, and subsequently limiting the reasoning and support tools we can provide?
Old joke: A scientist has a good-luck horseshoe hanging over the door to their lab. A visitor to the lab says to them “Surely you don’t believe in superstitious nonsense like that?”; the scientist replies “Of course not; but, I am told it works even if you don’t believe in it.”
New joke: An atheist goes to church and joins in enthusiastically with the hymns and prayers. Their friend says to them “I thought that you didn’t believe in all of that religious stuff?”; the atheist replies “I don’t; but, I am told it doesn’t work even if you believe in it.”
I have a colleague who is a non-native speaker of English, but who speaks basically fluent English. One gotcha is that he refers to “scrap paper” as “crap paper”—which, when you think about it, isn’t too unreasonable. It’s not unreasonable that “crap paper” could be a commonly-used term for paper that doesn’t have any focused use. I’ve been procrastinating for years about whether to mention this infelicity; it is probably too late now.
Bigger lesson—it is hard, when learning a language, to hoover up that final 0.01% of erroneous knowledge.
There was an interesting question on AskMe a little while ago—what “about us we are oblivious to, but are totally obvious to others?”. There are a number of excellent responses there. My response was that there are lots of people who go through life oblivious to how disorganised they are. There are people who are frightfully disorganised, and don’t realise the amount of picking up/reminding/pre-emptive care/doing stuff that the people are taking around them to ensure that their life/work/whatever doesn’t collapse in on them. They just think that they are doing the norm, and that somehow the world works with the level of organisation that they have.
This has subsequently provoked in me one of my long dark night of the soul moments, where I worry about what I am doing that doesn’t fit in, that irritates people, etc. I consider myself to be fairly relaxed and laid back, and I often deal with things in a way that is organised but not obviously rushed. I think I am calm but on top of the situation—but, to other people, am I the undercommunicative person who is causing hassle for other people by being too relaxed? Or, have I got the balance right? Perhaps this is the sort of thing that would be interesting to discuss at a 360° review or similar.
I think that where I get into dispute with the social scientists and literary theorists about whether the world is “ordered” is basically down to the counterfactuals we are each thinking of. To them, the fact that sometimes some people can’t quite manage to agree that some words mean the same thing means that the world is fundamentally disordered and truth uncertain and subjective. Whereas to me, I’m constantly gobsmacked that the world isn’t just some isotropic soup of particles and energy, and regard it as amazing that we can even write down some equations that describe at least some aspects of the world to a reasonable level of accuracy, and that by some amazing happenstance the most compact description of the world isn’t just a rote list of particles and their position and momentum.