Menace
Watching a German quiz show a while back, I learned from this most unsuspected of sources that a man named Donald Michie had, in the early 1960s, devised an entire machine learning solution for playing Tic-Tac-Toe. This thing would actually apply reinforcement learning to improve over time, to the degree that games against a strong human player who knows the optimal strategy would always end in a draw.
The model is called MENACE. What’s particularly fun about it is that it is built using matchboxes filled with coloured beads. Each box represents one possible layout in the grid. The beads are randomly used to decide on the next move, and beads that lead to winning the game are multiplied in the respective box, thereby increasing the chance for being picked. Beads leading to losing the game are removed.
This illustrates nicely how reinforcement learning is about statistics. It is so simple that children can understand it.
Tags: the-nerdy-bit
Parse This
The German language is an example of Kurt Gödel’s incompleteness theorems. The following sentence does make sense, but does not parse. “Die Welt und mir ist schlecht.”
Tags: the-nerdy-bit
Code Documents Itself
“The code documents itself!” is nonsense unless everyone thinks exactly alike, and that would be a sad, sad world indeed. So, documentation it is!
Forgive the snotty intro. I’ve been sounding like a broken record when it comes to spreading knowledge in engineering (and other) teams - wherever I’ve worked for the past 10 years or so. Knowledge sharing can take on many forms, pair programming being one of them; and written documentation, another.
Going from the “self-documenting code” illusion to a usable actual documentation is a piece of work. More yet, it needs to be part of every piece of work: documenting what’s being built has to become a standard task in engineering. Just like (hopefully) writing tests. Only when this habit is ingrained, documentation will flow from everyday work like code. Not effortlessly, but habitually.
A description of a structured journey is found in this nice article.
Tags: work
Large-Scale Choral Music
How about some monumental “contemporary” unaccompanied choral music? Two 20th-century composers (so much for “contemporary”) I admire have written pieces that are impressive for their length and complexity or superficial lack thereof (as we will see).
The composers are Alfred Schnittke and Arvo Pärt. Both were born in the Soviet Union - Schnittke, in Volga; Pärt, in Estonia - and found their unique musical languages partially through their experiences living in the totalitarian system. Both the works I want to introduce are both based on Orthodox Christian texts treating the broad topic of repentance. Schnittke’s lyrics are in 16th century Russian; Pärt’s, in Church Slavonic.
This is where the commonalities end: musically, the two pieces could not be farther from one another.
Take Schnittke’s Psalms of Repentance. The piece is some forty to fifty minutes long and harmonically challenging. There are neither complex rhythm nor counterpoint: the singers basically “read out” the lyrics to the listener, albeit with the composer’s interpretation added. The music directly slams the full emotional bandwidth into the listener’s ears: ranging from self-doubt, consciousness of and sadness about guilt, and trust in forgiveness and eternal love are all there, mostly in the harmonics. Here is a recent (and quite excellent) rendition.
Now, take Pärt’s Kanon Pokajanen. Commissioned for the 750th anniversary of Cologne Cathedral, it had to be monumental, and with a duration of 80-90 minutes, it does not disappoint. (Remember, this is for unaccompanied choir.) The piece is written in Pärt’s personal style, which is not known for huge dramatic effects at all. That makes it immensely hard to perform and listen to. The performers, on the one hand, have to muster the strength to keep very long arcs of subtle suspense that often incorporate actual silence. Getting this wrong makes for a very monotonous and dull experience. It’s hard, very hard, to sing like that for such a long time. The audience, on the other hand, must be ready to endure a long time of meditative no-drama tension. It’s really quite unique. Kanon Pokajanen does have all the drama that comes with the lyrics, but it’s veiled and more spiritual than with the previous piece. Give it a try: I could not find a good complete rendition on the ’tubes, so here’s a collection of excerpts that has appropriate quality.
Tags: music
How to Sabotage Your Organisation
Who’s interested in an overview of how to sabotage software engineering organisations? It’s inspired by an old CIA guide for how to infiltrate and sabotage companies, and is directed to a CTO-level audience. Still, it’s easy to see how it can apply to people in any kind of leadership role in engineering, so here you go.
(If you’re not interested in sabotaging, use it as a guide to patterns to recognise sabotage.)
Tags: work
Spelling Musically
Musical notes have names, and there are different systems for naming them. The German one I grew up with (C, D, E, F, …) is particularly fun because it allows to encode words using the letters. For example, the word “fish” can be encoded using the notes “fis” and “h”, which would translate to “f sharp” and “b” in the English naming scheme. Some composers even fully qualify - Johann Sebastian Bach having inspired several composers to writing pieces on his name: B-A-C-H (or “b flat”, “a”, “c”, “b” in the English system).
One example I recently came across is a piece written by a lesser known Danish composer, August Enna. For the celebrations of an anniversary of renowned Danish fairytale writer Hans Christian Andersen, Enna composed a festival overture that makes excessive use of the notes H-C-A (“b”, “c”, “a”) at the beginning, and keeps going back to them throughout. Have a listen.
Tags: music
Reasons for Failure
Amy Edmondson has an interesting spectrum of reasons for failure. From most blameworthy to most praiseworthy, it starts with deviance (intentional violation of process), and ends with exploratory testing (honourable experimentation with existing systems - “how can I break this?”).
Edmondson’s work on psychological safety at work has already done much good. Her latest research is about failure. I like the gist of it, because it’s quite aligned with how I’ve always felt about failure - it’s OK to fail as long as you own the failure and learn from it. A very healthy approach.
Tags: work
Platform Team Interaction Modes
This here article by Martin Fowler introduces a collection of collaboration patterns between platform teams and other teams. I found it very interesting because the patterns are presented in a framework that is organised along phases of interactions, and notes how the roles of the team that drives work and the team that stewards a codebase shift.
In brief, platform teams usually have internal customers - i.e., other teams -, which sets them apart from feature or product teams. In collaborations between platform and internal customer teams, one is usually driving the work, which is associated with having an interest in delivering it. The other (or, indeed, the same) team is the steward for the codebase that the work needs to be done in.
In the platform migration phase, the platform team drives changes to steward teams’ codebases to enable some new platform capability. During platform consumption, when product teams simply use platform capabilities, those teams are both drivers and stewards. Finally, during platform evolution, product teams drive changes they need in the platform stewards’ codebases.
Each of these phases necessitates different forms of collaboration. The article uses a clear pattern language to illustrate those. I’m not going to reproduce everything in detail here, but will strongly advise readers who are interested in shaping such collaborations to give it a look.
Tags: work