Technopoly Report feed

Untethered Knowledge

IT people often celebrate learning, but it is mind-boggling how much of that "learning" is just figuring out how to use some badly designed and completely arbitrary interface. The interface could be graphical, file-based, console-based or code-based (i.e. an API). Those differences are not nearly as important as many developers think. "Learning" usually boils down to finding how to effect a particular change, testing it out and memorizing it for the future. We learn which method to call, which file to change, which button to click, or which option to use with a command. Most of such "knowledge" is transient, arbitrary and application-specific. Worse, most of it is untethered. There is no fundamental reason why ls -A prints file names starting with a dot, while ls does not. Someone decided to design that utility that way. They could have decided on a different set of names and conventions. To a large extent it is arbitrary. This is very different from much knowledge in most other fields, including traditional branches of engineering. All of those disciplines have some untethered knowledge, but they also have many facts connected to one another and ultimately to reality itself. Knowing what is a resistor leads you to knowing about resistance, which means you know about electricity, which is a real-life phenomenon. Even if we stop using electricity for some reason, the general concepts connected to it will remain useful. After all, that is why we use words like "current" and "flow" to talk about electric circuits. Those terms were transferred form describing liquids. To be sure, all disciplines have both tethered and untethered knowledge, but the ratio between these categories is catastrophically small in today's tech. You could spend years mastering intricacies of some framework, only to be left with no useful knowledge whatsoever when the framework goes out of fashion. IT people developed coping mechanisms to deal with this problem. We "celebrate" memorizing nerdy trivia. We use it as a sub-cultural virtue signal. We develop websites to make finding the right factoid easier (StackOverflow, anyone?). However, this doesn't change the fact that all of us are expected to constantly cram our heads full of imminently obsolete nonsense. This burns people out and causes all kinds of problems with onboarding and long-term maintenance, just to name a few areas. The problems gets worse as the number, complexity, interconnectedness and the importance of software systems grows over time. I think it's time to admit the problem, stop coping and start fixing. We should fundamentally re-evaluate how we design software in this regard. Reducing the amount of untethered knowledge required to work with a system should be one of the top priorities for anyone who writes code or generally makes any kind of human-computer interface.