| I would define simplicity as "the approach that minimizes cognitive load while meeting all other objectives" I would hope that people with the same objectives would agree on simplicity for that domain. Examples: Need a lot of machine control, direct memory control (page alignment, cache alignment, shared memory, numa, etc) interact with system calls directly, interact with hardware, and security is not important in the domain (e.g. private hpc cluster behind a firewall) C is probably the simplest Need to quickly prototype something medium sized that involves non-trivial data structures or needs to interact with an http server. And you don't care about performance. Something like Python is probably simplest Etc etc etc By contrast.. try doing the former with Python, Java, etc and see how much additional cognitive load you have to add.. ever try the later with C.. no fun. |
That's one dimension of simplicity, but it doesn't take into account some of the other benefits of simplicity, such as, eg: robustness. Another definition would be "the approach that minimizes the total number of possible interactions" (akin to "moving parts" in a physical machine). In that sense, the fewer total possible interactions, the fewer places something can break. There might be MORE cognitive load to a human in direct sense, but the system is far more constrained to only do the "right thing".
I sometimes think of the generalization of it being "the approach that minimises the total state space of the system, including the brain of the human trying to understand it".