Thursday, June 27, 2024

Guessable

For some technologies I have used, there is a philosophy that holds all of its functionality together. It is mostly consistent. It fits a pattern, it feels connected.

Its existence means that if you need to do something, and you understand at least part of that philosophy, you can take a pretty good guess at how to get it accomplished.

Usage is guessable.

For some technologies I have used, because of their construction, everything is erratic. All of the parts and pieces were built at radically different times, by very different people, following very different individual philosophies of construction. There isn’t one big philosophy holding it all together, rather there are so many little islands that there is effectively no philosophy at all.

In these technologies to do something, you have to have known how to do it already. This doesn't slow you down with common repeating tasks, but if you have to leave your comfort zone, then it is difficult. You first have to search around a lot until you find the magic incantation that will make it happen. If what you are doing is complicated, then you will need to spend a lot of time to find a bunch of incantations.

Any sort of guess you make will be wrong. Some of them will have very bad consequences, so you quickly learn not to guess.

Usage is only searchable, and often not easily searchable.

When you have to spend a lot of time searching, and it is hard since you don’t even know what you are looking for, everything takes way longer to accomplish. It is a lot of friction. It is slow. If you are used to smoother technology, it is frustrating.

It was pretty obvious to me when I was younger that I preferred to spend my days working in an environment that is guessable. The classic example back then was Unix versus Mainframes. Unix had a wickedly great philosophy and was mostly consistent, Mainframes could do all the same stuff, but it was brutal trying to figure out how to do it.

It plays out with programming languages as well. I prefer smaller languages that are consistent over larger languages that are a mess. I liked C for example, tolerated a subset of Perl, and despised Php. These days I prefer Golang over Rust, pretty much for the same reason. I return to AWK again and again, because it is just so sweet.

Technologies with tight philosophies can get broken over time. It is inevitable to some degree if it gets popular. Other people want to contribute, but they do not bother to learn or understand the philosophies that make the tech great. They are too keen to get going. They enhance it, but in ways that are not as guessable and require searching. I see those types of enhancements as mostly negative.

Big technologies should have tight philosophies. Sticking within the philosophy should be enforced somehow. It doesn’t matter if you can do it, if you cannot guess how to do it. Existing functionality is nothing if it isn’t frequently used. Oddly, we see a form of this within development projects as well. When usage is guessable, there is more reuse. When it is only searchable, the code is excessively redundant.

No comments:

Post a Comment

Thanks for the Feedback!