
The Blind Men and the Elephant: A Story of Noobs - mshafrir
http://yehudakatz.com/2010/02/09/the-blind-men-and-the-elephant-a-story-of-noobs/
======
InclinedPlane
This is just another example of the "clear only if known" (COIK) problem,
which is pervasive especially in tech. The proper way to explain a complicated
system to someone who doesn't know anything about it already is to start with
the most basic of simplifications, start with a mental model and build up from
there, adding levels of detail at each step, making sure that each level of
detail makes sense in the context of the previous level. Working from overly
simplistic, inaccurate abstractions down to the nitty gritty details.

Instead what tends to happen is that people describe each component in detail
and the entire system in too much detail. None of it makes sense because none
of it has context, but eventually with persistence and immersion it may make
sense, but it's a lot more difficult than it should be. Nobody sensible tries
to teach someone about how cars work by giving them a circuit diagram of the
EFI system, yet that's not too far off how many devs are introduced to complex
systems in software engineering.

The problem is far worse than this may seem though. Because at a very
fundamental level software engineering lacks a common set of abstractions and
a common language to even properly discuss software design at a wide range of
levels of abstraction. This is reflected not just in problems educating
"noobs" but also in the very design of most software. This lack of vocabulary
and mental models is devilishly intertwined with a distinct lack of design
patterns at certain scales in software, which helps explain why so much
software tends to be a tangled mess of crap rather than well-designed and
modular. We build big ball of mud after big ball of mud instead of tractors,
cathedrals, and cruise ships partly because we don't have the intellectual
tools (vocabulary, models, design patterns, etc.) to tackle design problems on
that scale.

Compare the complexity of software architecture patterns such as MVC or
layering to the construction patterns of, say, an automobile, a house, or an
airplane. When you start doing that you realize just how incredibly young this
field still is.

