This weekly debrief is for paying supporters of my work. Please only read if you’ve paid. Thanks!
→ Click here if you've paid ←
These past two weeks have been spent finishing an essay critiquing the book ‘Software and Anarchy’, working on a one-page spec for Bedrock, and studying for university.
Essay for an essay
A year or two ago I stumbled into a short book titled Software and Anarchy, released as a draft in 2021 (but I figure it’ll be the only version, it’s been five years by now). The book argues for an anarchistic approach to software development, with the three parts of the book focusing on dynamic programming environments, decentralised labour, and networked software.
The good
The most interesting part of the book for me was the first section, which makes the claim that dynamic programming environments are an important liberatory technology, helping both to improve the efficiency of individual programmers, and to make programs more understandable and extendable.
I’ve slowly moved my way down the software stack over the years, from BASIC to Python, Rust, and eventually Uxn and Bedrock, and I’d picked up the false belief along the way that dynamic languages were only really for less experienced programmers, that good software should be written in a static language to be small, fast, and efficient (to be fair, this mindset was probably informed by the herculean effort required to share Python programs with non-programmers). This book shook that belief out of me; no matter how much I tried to fit Bedrock into their framework of a liberatory technology, I couldn’t refute the benefits of a good garbage-collected dynamic language.
Look at PICO-8 and Decker, for example. Inexperienced and experienced programmers alike can quickly write up really cool pieces of software using a dynamic language in a tidy, constrained environment, and then easily share that program with others. There’s that old epigram by Alan Perlis: “A programming language is low level when its programs require attention to the irrelevant.“ Bedrock absolutely requires attention to the irrelevant, and the point that it’s a much simpler system because of it doesn’t make for a very convincing defence.
The bad
Regardless of this, the book does have its flaws. It is not a tidy book. The authors get passionate, they get loud, they get angry at the senseless violence of static programming environments. They wail in frustration at the foolishness of programmers who force these static languages on the world, despite CommonLisp (the platonic ideal of programming languages) being available to use instead, a cure to all that ails.
The dynamic language that the authors have in mind is never named; we only ever see a flickering shadow projected onto the page by an ever-growing list of criteria. The book begins clearly enough: a liberatory technology is decentralised, amplifies effort, fits the user. We then move onto the ideal programming environment: efficient, understandable, user-modifiable. Beyond this point though, more criteria start to leak in: live-updateable, error-recoverable, duck-typed. By page 16, the authors are comparing static languages to Soviet authoritarian socialism and framing them as both misguided and actively dangerous.
This is what makes me so frustrated with the book. Every time I read it, I feel a sense of excitement and possibility, and simultaneously a sense of welling frustration at the vitriolic single-mindedness of the authors. I absolutely agree that dynamic languages are a brilliant tool that makes programming so much easier, but it’s possible to say all that without having to frame static languages as some evil scheme for making bad programs; there are genuine advantages with static programming environments that apply directly to the purposes of liberatory technologies.
The primordial urge to write an essay
So to sort out my feelings on the book, I wrote an essay. You can read it at Commentary on ‘Software and Anarchy’.
I’ve been meaning to write the essay for a year or two, but each time I sat down and started to piece it together I’d get stuck. The biggest block was with figuring out my own feelings about the book, putting them together clearly while being reasonably objective. I wanted to write something that wasn’t as emotionally driven as the book I was responding to, and I wanted to be able to support my statements with relevant quotations.
One page
I’ve wanted for a while now to write a compact specification for Bedrock that could be printed out on a single sheet of A4 paper. An important feature of Bedrock is that it ‘lasts forever’, so to say: if you had a Bedrock program and a copy of the specification then you should be able to implement the whole system in order to run the program.
The specification as it stands, though, does not fit on one A4 sheet. It’s closer to maybe 20, depending how you lay it out. If I could fit all of the important parts onto an A4 sheet, it’d be the kind of thing you could stick to a wall, and it’d be small enough physically that you’d be able to understand how small it is conceptually as well.
The Bedrock specification was written defensively, with the aim that a correct system could be implemented even if the reader uses the worst faith interpretation of every line. The one-page spec, on the other hand, can be a little looser; it can rely on the user to act sensibly and to already understand concepts such as bitwise operations.
I’m still working away on it, but I’ve got the core and half of the assembler section finished; you can take a look at it here. The final version will be laid out by hand on an A4 page to make the most of the available space.
Studying for uni
I’ve been starting to work through high school physics; all of my notes so far are written up on the Physics page. The linear algebra course notes by Terence Tao are a really good resource on vectors from a pure math perspective.
Thanks
I haven’t been writing weekly for a while now, but I feel it’d be a bit silly to be writing “didn’t do much this week” every second week, it’s better to bundle a couple of weeks up together. I’d like to think that these debriefs are interesting enough that they’re worth the wait.
Thanks for reading them anyway and being interested in my work, and for the continued support. Have a great week!