author: niplav, created: 2019-04-11, modified: 2024-10-16, language: english, status: in progress, importance: 2, confidence: log
I have found that I have found great use in software recommendations by people who I respect, such as gwern, the suckless project, and cat-v.org. I hope that the recommendations presented here can provide a comparable utility to similarly-minded people.
In rough order of proficiency.
My most important criteria for choosing software are simplicity, consistency and durability.
Simplicity here means mostly simplicity of implementation, though in reality there is very little difference between software with a simple design&interface and software that only has a simple implementation. Most of the time, simplicity can be roughly approximated in the total number of sloc used to implement the software.
Consistency
is even more difficult to define and classify than simplicity.
Broadly speaking, consistency is dependent on symmetry (every input
method has a corresponding output method and vice versa, for example)
and generally a lack of "surprise" when using the software (that is,
most parts of the software are similar in structure, but not content,
to each other). A good example of inconsistency is found in programming
languages with a unary +
, but not a unary -
, or programs with vastly
different naming conventions. Perhaps consistency can be thought of as
a certain type of symmetry; if not that, then at least symmetry plays
a big role in consistent systems.
Durability, by comparison, is quite easy to explain. It simply describes the amount of bit rot that occurs in the given software over time. This includes the probability that it will be maintained for a long time, and the durability and number of its dependencies. A good example for durable software is correct C code. It still compiles and runs after decades of neglect, though often not without warnings (platform specific C code is of course less durable).
As a result of this, the programs I use mostly come from the Unix/Linux ecosystem.
I tend not to care very much about hardware, except for compatibility problems. Nearly all of my computing could be done on a Raspberry Pi, or on a generic mildly priced new laptop. I like the Raspberry Pi because of its ability to run a wide variety of operating systems, beyond that hardware is rarely a bottleneck for me. I do care about peripherals, though.