There is a difference between knowing specifics and knowing how, when, and why to find them.
It's easy to teach specifics. It's hard to teach people how to find them. It's tricky to teach people when to start looking; and most of the biggest mysteries in software development can be boiled down to the elusive "why".
In my experience, the biggest confounding factor is "secrecy", a word usually written out as: "proprietary".
There are two approaches to learning: definition and inference.
A public system, like Linux, can be learned from its roots, each definition built on the last.
A secretive system, like Windows, must be inferred. Every piece of knowledge is limited to the "best guess", and whatever conditions that guess was tested with.
Unfortunately, most people are working with secretive systems, so inference is the only strategy they get any practice with. That's the wrong strategy to apply when writing software, because - at the very least - one can read their own codebase.
Inference can teach you something close to specifics. It can tell you "when" to start looking (now and always, because your testing conditions are fragile). Unfortunately, inference can never truly answer you, "why".
Remove the secrecy, and everyone will know to value the basics, because those basics lay at the foundations of every answer.
It's easy to teach specifics. It's hard to teach people how to find them. It's tricky to teach people when to start looking; and most of the biggest mysteries in software development can be boiled down to the elusive "why".
In my experience, the biggest confounding factor is "secrecy", a word usually written out as: "proprietary".
There are two approaches to learning: definition and inference.
A public system, like Linux, can be learned from its roots, each definition built on the last.
A secretive system, like Windows, must be inferred. Every piece of knowledge is limited to the "best guess", and whatever conditions that guess was tested with.
Unfortunately, most people are working with secretive systems, so inference is the only strategy they get any practice with. That's the wrong strategy to apply when writing software, because - at the very least - one can read their own codebase.
Inference can teach you something close to specifics. It can tell you "when" to start looking (now and always, because your testing conditions are fragile). Unfortunately, inference can never truly answer you, "why".
Remove the secrecy, and everyone will know to value the basics, because those basics lay at the foundations of every answer.