It's not easy to make it simple

2022-11-20 02:48 by Ian

Semantics taken for granted in this post.

Consider...
The Standard Model of Particle Physics is unreasonably simple considering it describes nearly all phenomena in the Universe. And reality is probably even simpler than our best confirmed models reflect. But anyone who tells you that it is easy to understand is lying or doesn't understand it themselves. Simple can be insurmountably difficult for some people.

When I set out to build something for other people to use, I think very hard about about separation of concerns and encapsulating complexity to minimize its cognitive burden. This is the core problem of API design. What the API actually does and how was generally decided and done before I start carving an API.

Complexity is not something to be avoided, but a resource to be spent in service of solving a given problem. Even if the problem itself can be stated simply, its solution might be complicated. The real world is ineffably complex, and people want to cope with it as easily as they can. Even when they say they want it "simple".

If they really wanted "simple", they would reject anything but a single listing of assembly code with hard-coded origin addresses and ranges, with no dependencies. No compiler, since the introduction of even C brings tremendously more complexity. Now people using it need to ask questions such as...

"What version of GCC are you using?"
"What options was it configured with?"
"What flags did you pass to the build command?"
"You aren't using 'string.h', are you?"

All of those questions reflect complexities admitted for the benefit of saving on the cost of authorship, understanding, and maintenance. Because even though an assembly listing (and assembly language itself) is simpler than C, most engineers find it unacceptably difficult by comparison.

The same applies to C vis-a-vis C++, and to polymorphic design patterns.

Previous:
Next: