The Four Simplicities
By Edward Willis (http://encw.xyz)
Published Jan/23/2023


I often talk about the need for simplicity in software. Recently Greg Gauthier,
over on http://lunduke.locals.com, asked me to elaborate on what I mean by
simplicity. Here follows what I am calling "The Four Simplicities".

1.) Simplicity of machine code: The smallest possible volume (and to an extent
complexity) of machine code needed for a program. That includes all
dependencies, not just libraries, but the entire software stack.

If you choose to make your project for use in a modern, up-to-date browser for
instance, you are requiring some 30+ million lines of code in order for your
program to run, on top of what is required by the operating system, which will
if it is any of the big 3 (Windows, MacOS, Linux) add another 20+ million lines
of code, at least.

In other words the project will strongly prefer native code, and less code.

2.) Simplicity of source code: The source code should be kept clear of long
complicated lines and unnecessary complexity in its architecture. No need to be
"clever"; keeping it simple is being cleverer. Prefer verbosity and readability.
It should also be as minimal as can be, while remaining as simple to read and
understand as possible.

3.) Simplicity of execution: Software should be statically linked, and contain
all the code it needs to run. Using the software should be as simple has having
a copy of it.

4.) Simplicity of use: The programs should be simple for the user, preferencing
interactive use over commands when text based. A user shouldn't have to remember
all the commands and options and the rest. Just the name of the program.

I'm absolutely for commands with arguments and piping, my point is that if a
user just types the name of the command, there should be some sort of
interactive hand-holding experience.

Most people aren't going to remember all those options and forms.

People complain when they are forced to use the terminal because they don't want
to remember this stuff. Why make them? If we could make the average user more
comfortable in the terminal, we could perhaps obviate the need for some GUI
systems, and therefore lower the complexity of that software.


Perhaps some of my points are a bit glossed over and simple, but I think they
are firm enough to give a decent understanding of my intent, and work as a
starting point.