Programming in the Middle Ages: Docker makes a lovely pair of trousers
Lest we forget
Stob These days we hear a lot about luring the young away from happy, fulfilling careers and into the world of programming. The kids have been freed from the tedious yoke of the boring and 'Microsoft-heavy' ITC syllabuses courtesy of popular hero Michael Gove.
Now every child receives more Raspberry Pi than rice pudding; double Python periods substitute for double French; and instead of class discussions about Regan, Goneril and Cordelia, they chat for hours with Siri, Alexa and Cortana.
However, with all this brouhaha, it has been forgotten that more mature programmers need loving too. Being auto-congratulated on a 17 year work anniversary by a recruiter robot which somehow got hold of your LinkedIn handle only takes you so far.
In a recent article, Don Denoncourt argues, and rightly argues, that old coders must struggle against unfair prejudices. Just because vintage techies hold their mobile phones at arm's length in order to be able to read the ridiculously titchy text, there is no need to assume they won't be bang up to speed with Docker. As it happens, I have an older friend who is a great fan and notable expert: he won't consider any other trouser.
The time has come for the grey-haireds, ok, we grey-haireds to strike back against this atmosphere of mean-spiritedness and unfriendly ridicule.
Our medium-term plan must be to do what all disgruntled factions in the software-making world do: fork off our own implementation of Node.js. But this can only happen when we are ready.
(To clarify: the actual repo-forking is the work of a moment. The tough part is the framing of a suitable open source licence. We will struggle to outdo the fantastic Beloved Community License as seriously considered by some supporters of Node fork Ayo. Among other things, the BCL requires users of the licensed software to 'recognize that reparations and atonement are a part of a needed healing process for the oppressed Multitude [sic]'. For our licence, I am planning something a little less ambitious; perhaps inserting a clause that encourages users to remember to put the seat down afterwards.)
For the short term, we need to raise awareness of our cause, and set out what we have to offer to the programming community. This is my mission for today.
You may be surprised to learn that silver coders have our very own, specially adapted data structures. This is because oldies are often more used to situations with very heavy memory constraints.
One of the most popular is the Implied-Content Single-Linked List (ICSLL). As its name suggests, the content is not known at the time the list is constructed - it is, if you like, a list of promises. ('We promise to look the thing up on Google if we must.')
All this can be difficult to digest in the abstract. Time for an example. Here is a conventional linked list of strings:
Here is its ICSLL encoding:
>>> I'm talking about that princess of Star Trek who died and there was a plane | >>> Oh, God, I remember, what's her name? and then her mother went too! It was so sad | >>> Yeah and the mum was in that old film with that man who could dance
Note that, as with all singly linked lists, it is only possible to traverse an ICSLL in the forwards direction.
Manipulation is straightforward. For example
>>> Oh, is that the film with the dance 'wot' the wig-hairy-legs-play man spoofed?
appends an item to the ICSLL:
whereas the action
>>> Actually, I was thinking of that cute womble-thing that lived on Waterloo Station
performs an in-place substitution of the current value:
Algorithm nerds will naturally be wondering how fast these operations run: the answer is, of course, O(um).
RAM, disk and other storage capacities
Silver coders always understate memory capacities by a factor of at least 103, and sometimes 106 or even 109.
So when an oldie says "I think you should consider putting in another two gig drive in the NAS box", or "Phil's just got a new 128MB iPhone. Looks like he's going to be downloading a lot of porn", do not snigger or pretend not to understand what she means. If I may borrow an American idiom here, you do too know what is meant, perfectly well.
The problem is that, when the SI prefixes 'mega', 'giga', 'tera' and, so help me, 'peta' are stored in the human brain, they are all sufficiently similar to get stored in adjacent memory slots. When brain cell decay starts to kick in, the selection mechanism fails, and simply reverts to what would have been the right answer in 1998.
Shuddup laughing. This is a serious theory, OK? Nobody ever confused 'kilo' and 'mega', because the two words are not dressed in the same cute clothes. It's larboard and starboard all over again, I tell you. One day there will be a ghastly accident, and then we will all be sorry.
Message passing is long established as a technique for moving data around a distributed system. Erlang, to name but one example, comes with a much-admired architecture enabling the development of robust communications between many lightweight processes.
The silver coder version of message-passing differs from other implementations in that, instead of transmitting information from the sender to the receiver, it instead transmits a packet of anti-information. After the message has arrived, paradoxically, the receiver has less information available than at the start of the transaction.
Again, a brief, practical example clarifies:
Verity: There's no native driver, so we'll need some generic way of communicating with the plant. Dave, what's the name of that awful API we use to talk to PLCs? You know, the bloody dreadful thing that's based on COM?
Dave: Oh God. I could have told you if you hadn't asked me. Do you remember the time I spent three days trying to set it up on site? Arse hats! Will will know. Will, what's that crappy comms standard where you have to spend hours poking around in DCOMCNFG, and you end up making the Guest account an administrator, and it still doesn't work?
Will: Argh. Argh. It's on the tip of my tongue. I think it's got an 'F' in the name. Or maybe a 'J'. You mean the one that forces you to open up a multi-port hole the size of the Thames estuary through the firewall? That always goes down like a cup of cold sick with IT? Buggabuggabuggabugrit. I DO know the answer... Rog, what's that API...
The anti-message carries on being passed around until a more youthful colleague enters the room and says "OPC". Then everybody can relax, and sip tea, and resume browsing websites for cheap, term-time holidays.
We silver coders are absolutely up-to-date with the latest skills, as illustrated by this fragment of conversation I had recently:
Verity: I see that functional programming is coming back into vogue.
Another Silver Coder: Ha! These young ones know nothing. Round we go again.
VS: Yes, the youngster I was chatting to the other day was astonished to learn that I did FP at college.
ASC: Not just functional programming. We used to do lots of procedural programming too. We used Pascal, so we could do both, because Pascal has functions and procedures. Not like Java.
ASC: Actually the best programming was GOSUBal programming in GW-BASIC. Set F% to the function you wanted and just GOSUB 32000. Mark my words, that will come round again soon.
VS: Yup. Indeed. Hum. By the way, did you hear Phil's got a new 128MB iPhone?
Actually, to be serious for a moment, we older programmers are always careful to keep up to date with all the latest developments. I was only talking to my colleague Dave the other day, and I said to him: Dave, where do you stand on Docker? And he replied
[Reader's voice: VERITY! Stop! You did that gag in the intro!]
So I did. Keep your hair on. No need to shout. Just a little mistake.
I blame all the subheads they put in - it's like going into a different room to fetch something.
Now I did have a really grand conclusion planned for this piece, but you put me off back there, shouting.
It was all about raging against the fading of the brain, somehow cleverly incorporating references to the Today programme's bizarre decision to put regex puzzles on the wireless, a medium to which they self-evidently don't belong. Never mind. It'll come to me in a moment. ®