Title: Blog Plans
Date: 19th April 2021

For my own delectation I hearby list some of the immediate goals of this blog.

  1. Document my exploration of the Linux world and the various problems I encounter and the solutions to solve them. Hopefully, this will be useful if I ever run into them again.

  2. Generate ideas for new projects and problems to solve. Hopefully this will keep me in business with interesting programs to explore.

  3. Finally a more idle long term goal - refining the system overtime to minimise complexity.

Running your own blog is sort of like an example par excellence of something that you can do with a computer. Although, conceptually quite simple - send the details of a document to another computer to render - a modern system in fact requires in the order of tens of millions lines of code to accomplish this take. Now of course there are various caveats to that, a lot of that code is not really needed for the blog, it just sits around in the computer genome like so much junk DNA. I think it will be an interesting exercise to see how much of that can be stripped away and how amenable to understanding is whatever is left.

As I've found myself pronoucing on the state of modern systems I will offer a few reflections.

  1. The accidental complexity of modern computing systems dwarfs by several orders of magnitude the essential complexity of the functionality they provide to the end user.

  2. I don't view this as a collective judgement of damnation on the software world. There are excellent reasons why it is this way, for instance: --1. Backwards compatibility is all important. We are constantly discovering new and better ways to do things. When we discover a non-backwards compatible way of improving some software, the value of changing is often outweighed by the damage to whatever processes and dependencies have been built on top of it. Therefore we need to invent a new system that either sits on top of the old one or along side it. --2. The world is a mass of uncoordinated individuals, it's incredibly challenging for a single programmer to write nicely factored code. Of course in the real world every problem will be solved many times over in many different ways at every level. What's amazing is that we have chaotically, biologically evolved mechanisms that all this code can interact at all. --3. The demands of the real world often favour new features over nice code, there simply isn't the time available to profitably go back and make things understandable. --4. Refactoring and simplifying are hard, it is not just a case of mechanically simplifying things. True refactoring requires seeing the world in a conceptually different way. --5. We've made the problem domain hard. Of course a C++ compiler will require a lot of code, it's a complex language. Of course a web browser will be complicated, it reinvents half the operating system.

That said, it's possible to imagine histories of the world where software was more or less complicated than it is today. I'm hoping we can move the dial towards the simpler end.