This is perhaps one key characteristic of simple software. It’s humble, doesn’t look like much, its potential is not always easy to understand, nor is the underlying trade-offs balance.
The issue isn’t specific to software, but in fact arises in unrelated areas: simplicity tend to be overlooked, and to require a certain degree of mastery to be appreciated.
Simplicity is the ultimate sophistication.
– Leonardo Da Vinci
Chopsticks and forks
Take chopsticks for instance, and compare them to regular modern Western forks:
More precisely, think about how much simpler a chopstick is, conceptually-wise, compared to a fork:Β simple enough to be of value even as an abstract object: one can easily craft a pair of chopsticks from some bits of vegetation. A fork on the other hand, even a wooden one, will be more challenging to build from raw materials: the concept itself is of lesser practical value.
Think also about how the tool’s simplicity demands more of its users: while a fork can be used intuitively in a rather efficient manner, however crude, chopsticks on the other hand require finer dexterity to be used as efficiently.
Then, think about how chopstick usage will contribute to polarize cooking (e.g. the use of glutinous rice), or how it will affect the psychological development of its users. To put it in computer science terms, there’s some kind of “cultural” leaky abstraction there.
There are also more practical, down-to-Earth advantages: chopsticks are easier to thoroughly clean, a small stick of wood offers a wide hacking surface (from unplugging a sink to ad-hoc tablemat), etc.
We’ll revisit such background influences in the context of software, in the following article.
Planes
Woodworking planes are another example that we can polarize East/West in some ways, and from which we can derive a set of similar thoughts. Let’s make a hardly fair comparison, but for the sake of making the point saillant:
If you’re not familiar with such tools, I can’t but recommend to spend a moment learning about them; next time you’ll see a handcrafted piece of furniture, you’ll to appreciate it with greater depth:
As previously mentioned, the comparison is unfair: not only do the planes have different uses, but the Stanley 55 is far from being representative of the planes traditionally used in the West, which are closer to their Eastern counterparts, as in “a piece of metal wedged into a piece of wood”:
Still, the following points are quite remarkable regarding the Japanese planes: despite their apparent simplicity, everything has been carefully, holistically, designed:
- the weight of the blade, which increases the plane’s stability, and whose dimensions contribute to a slow wear;
- as the planes deteriorate, both sole and blade can be replaced; leftovers can be used to make smaller planes, which have practical advantages over bigger ones;
- the advantages of a laminated, bi-metal construction: blades are made by laminating two different kinds of metal, not only reducing costs, but also easing sharpening, reducing shattering, etc.
- the sole’s setup, aiming at reducing friction: only a very small portion of the wood is actually in contact with the surface to be planed;
- how the planes are used by pulling instead of pushing, thus increasing control/stability, and reducing (in most cases) the amount of physical effort needed (Chinese woodworkers are known to use both motions: it seems in some cases, pushing can still be a reasonable choice);
- how to use friction/vibrations to set/remove the blade out of its wedge, instead of a more sophisticated design;
- etc.
And many more
We could keep going in many different ways, but this should be enough to get the main points across. I’ll leave a few traces for those willing to continue the thinking.
Exercice: Curious readers might want to ponder about the evolution of writing implements, clothings (say, toga vs. blue jeans), the evolution of cars from 60 years ago to today, or, jumping away from the old vs. new dichotomy, to think about the influence of the addition of the notion of zero to a numbering system, from algebraic point of view.
Why?
As we’ve already discussed, and as we’ll see in more detailed in a later article, similar patterns arise in computer science, where elegant solutions often look plain boring and uninteresting, at least at first sight. And not just boring, but sometimes painstaking, which will discourage, for better or for worse, lesser brave users.
The study of traditional approaches can also bring a few insights when it comes to understand why is software so bloated and generally ill-conceived. Among others:
- Woodworking (and plenty of other manual skills) have been passed-down for centuries, giving them time to flourish. By comparison, computer science is still in its infancy;
- Our society tend to under-value manual crafts, and value their systematic automatization; over a few generations, we lost the ability to appreciate the refinements that they demand, and are thus unable to be as exigent regarding computer science, and when we are, we aren’t always paying attention to what is really important;
- Computer science is matterless: when you mess up a piece of wood, it’s messed up, and you’ve got to live with it, but computer science, in the general case, gives you infinite undos;
- Since the beginning of modern computing, the monetary value of crude software is easily orders of magnitudes above having no software at all. Because poor software’s cost will manifest in the long-run, this can is likely to be overlooked, or misunderstood;
- Not really related to traditional views, but still important: once a piece of software goes public, people will start to depend on it, sometimes critically. As a result, changes will need to be backward-compatible, so as to avoid causing systemic issues: thus, interfaces can hardly be simplified once the software has reached enough momentum, and we have to live on with the complexity.
Comments
By email, at mathieu.bivert chez: