cold code
I was part of a very nice software engineering reading group at Spotify, just before I left. In addition to being around for the coining of Lamere’s Law (“Your future self has no more time that you do”), I had a small epiphany about Code As A Medium.
McLuhan, that great charlatan*, talks about media as being hot (print) or cold (speech) To quote from Oxford Reference, “Hot media are ‘high definition’ because they are rich in sensory data. Cool media are ‘low definition’ because they provide less sensory data and consequently demand more participation or ‘completion’ by the audience“.
I think if you had asked me in the past, I would have said that computer code – or anything much to do with computers – would be hot. Computers, after all, are deterministic, just do exactly what you tell them, and so forth, right?
I think that now, as computer code becomes more and more high level / abstracted / distributed, it becomes a colder and colder medium. This is especially true for things like machine learning or networking, but I think it is still true if the code is 100% offline and deterministic.
So this means that computer code is much more like speech than it is like print. And some nice things fall out of this, in a very McLuhan-ish (which is to say, charlatan-ish) sort of way.
- “Code is poetry” always sounded nice, and now makes sense – though much like “global village”, perhaps not in a good way.
- Rubber-ducking – talking through your problems – suddenly makes perfect sense.
- Comments and documentation try to “heat” code up – but then the code changes, aiii!
- Naming really is a hard problem – you are talking to someone in the future, why would they ever understand you?
- Refactoring and reorganizing code makes sense as a way for you to understand code better – otherwise, you’re reading someone else mumbling at you from the past.
This also leads to some more practical concerns and explains some of the things that I dislike about parts of the industry.
- If your code breaks, it is probably your fault and not some lower-level abstraction. But the intuition to say “this feels like a problem with a lower level abstraction”, which is to say a colder part of code, is very powerful (see the 500 Mile Email yarn for a fun example).
- The ability to easily step over the threshold into a lower level abstraction is also very, very useful (I am not good at this and wish I was better).
- Likewise, the ability to build bad abstractions is a reverse superpower; you can really ruin people’s days, for a long time, by forcing them to traverse down and up the pyramid of abstractions on the regular.
- Most interviewing questions are in fact hot questions (provide a correct answer to a totally self-contained problem), hence why I feel
that they do not represent the actual, mostly cold, work of being a software engineer.
The most fun parts of this are, of course, the hand-wavy statements about poetry. I do think that the overall insight of not only “here be dragons”, but also “here also be dragons that you don’t even know exist” is an important one – even if it can be said without the handwavy media theory stuff.
*I should say that I call McLuhan a charlatan with love, but the man sure could handwave, my word.