Software Philosophy

Motivated by the current trend towards a more complex and less understandable^1 ^2 ^3 ^4 ^5 ^6 software world, I tried to formulate my personal software philosophy. I came up with these four headlines.

Simplicity and Readability Counts

You do not write code for computers, but for humans.^8

This very statement says it all. Since we developers must deal with all the mess we create, it is priority number one to create a readable mess. The human brain is some kind of a ring buffer. After time we forget things. It must be easy to re-read and re-understand a codebase. In order to achieve this goal there are a few things I consider important:

The Power of (Good) Defaults

Configuring things is annoying. It is even more annoying when non-trivial initial configuration is required. This might be unavoidable for server software such as e-mail. But it is avoidable for things like a text editor. I used to use vim a long time ago. The defaults are annoying[^7] and small tweaks (e.g. set background=dark) are always needed. I migrated to nvim which has “strong defaults” as a design goal. Deploying a fresh Linux machine and installing/configuring a few programmes is refreshing now, since I can just use my tools without any tweaks.

To make your software usable, my thoughts are:

Minimal Dependencies

Drew has written an article about dependencies and maintainers. I think his article makes a good match.

Choose the Right Tool

I love this one. Chose the right tool for your task. Think outside the box and use tools which are simple, easy to remember, and available. Do not start writing a e.g. custom Python script for every small task. A lot of problems are solved and there are a lot of good solutions available. Know these solutions and use them wisely.

[^7]: It got better the last years, though.