Weeknotes 37
Elaborate systems
-
This was my team’s first proper five-day work week since June. The general consensus is that working on Friday is for mugs; I certainly didn’t have much brain juice left after four consecutive days of work. Oh well. As everyone knows, you can’t change the system.
-
There’ll be more content recycled from other sources this week because iOS 14 has made it possible for me to pin my weeknotes note to my homescreen, and therefore easier for me to keep adding mildly amusing things to it as they crop up. Time will tell whether this is a benefit.
-
Last week’s tambourine man content went down surprisingly well. Per the system, here is some more tambourine man content.
A brief digression: I’ve been using Disney+ as a source of mindless longform entertainment while exercising. I started earlier in the year by working through all the MCU films since I’d only seen some of them, mostly on a crappy screen built into the back of an aeroplane seat. They’re broadly watchable and don’t demand much attention so they did the job nicely. Once those ran out, the next obvious choice from Disney’s catalogue was Star Wars. The prequels were a real slog, Solo and Rogue One were alright, and this week I finally broke through into the warm nostalgia bath of the original trilogy.
Anyway. I was doing some exercise. It was a warm day so I had the window open, but tambourine man started up and I had to close it again in frustration. Then, right after Han said “looks like somebody’s beginning to take an interest in your handiwork” to Luke and Obi-Wan in the Mos Eisley cantina, I could hear the tambourine again. I felt panic rising: had tambourine man moved closer? Had tambourine man got louder? Had I developed the ability to clearly hear tambourine man through a double-glazed window? See if you can work it out.
-
From his robes it’s clear that tambourine man is a Hare Krishna. I thought about going down there to tell him he was making my day shit, but a) I didn’t want to bother putting trousers on, let alone a mask, and b) I wasn’t 100% confident it wouldn’t degenerate into a comedy sketch where it cuts immediately to both of us playing tambourine in identical robes. ♻️
(When I texted this to James he replied “I realise you have goals for your life and whatever, but I think that would’ve been worth it for the lols”.)
-
In principle it’s bad that YouTube has blocked iOS’s picture-in-picture support to bully people into buying YouTube Premium, but in practice picture-in-picture is used exclusively by monsters, so maybe it doesn’t matter.
-
If I’ve learned anything by working in the tech industry (which is debatable) it’s that nobody cares how much a product is ruined for the sake of getting “data” out of it, even though you’re now getting data on something nobody likes any more. ♻️
-
I was enjoying Lonely Mountains: Downhill but ultimately it didn’t hook me. Maybe it’s too difficult? Too inconsistently unforgiving? Unlike, say, Celeste, I can repeat the same challenge many times and not be any closer to succeeding. I feel like I don’t understand how to get better at it.
-
I read A Philosophy of Software Design over the weekend. It’s pretty good overall, full of reasonable and actionable advice on software design from someone who’s done a lot of it. It also has the benefit of being short and to the point.
I like its focus on reducing complexity, and it delivers several good ideas along those lines: preferring deep modules to shallow ones, preferring strategic programming to tactical, separating general- and special-purpose code, keeping different levels of abstraction in different layers, avoiding special cases, choosing good names, prioritising simplicity & consistency. It’s a good provocation and I expect every software engineer would benefit from reading it regardless of whether they agree with all its advice.
On the other hand, it’s a bit unclear what the “philosophy” mentioned in the title actually is, and the book frequently undermines itself with some weird or misguided decisions. It places an absurd amount of emphasis on code comments — three chapters! — which creates the impression it’s fallen through a wormhole from a universe where Git and automated testing don’t exist.
It does briefly mention unit testing but then explains that comments are “a design tool” and “the canary in the coal mine of complexity” without once acknowledging that tests are a sharper tool for those purposes. It goes so far as to say that test-driven development “focuses attention on getting specific features working, rather than finding the best design” which is the opposite of my experiences with London-school TDD. It also very quickly dismisses the idea of putting documentation in commit messages rather than (of course) comments which, again, comes across as an oversight or even an anachronism to me.
Those problems compound in advice like “methods containing hundreds of lines of code are fine if they have a simple signature and are easy to read”. I understand the interface simplicity argument behind this but I think the conclusion is just wrong: however well-written the comments are, it is actually better to break long stretches of code into smaller pieces that can be named and understood independently. Testing is a powerful design tool precisely because it forces this realisation sooner.
Another misstep is the suggestion that “it is better to match the declaration with the allocation” in a situation like
private List<Message> l; l = new ArrayList<Message>()
because the different types “can mislead a reader”, which is such a blatant refusal to recognise the information-hiding benefits of subtyping (in a book which otherwise strongly advocates information hiding) that it feels like an intentional troll.Happily the author is so annoyed about one specific design decision from
java.io
that he makes a point of roasting it on several occasions, which made me laugh. Recommended! -
I don’t know why I’m so resistant to elaborate systems. Most people I know have an Elaborate System for brewing coffee or taking notes or configuring their text editor or whatever. I just want everything to be as mindlessly simple as possible with minimum effort. Is this 🦋 laziness?