Textual programming languages are mostly devoid of structure — any structure that exists actually exists in our heads — and we have to many organize our code around that (modern editors offer us syntax highlighting and auto-indentation, which help, but we still have to maintain the structure mentally).
New programmers often write “spaghetti code” or don’t use variables or don’t use functions. We teach them about these features but they often don’t make the connection on why they’re useful. How many times have you seen a beginner programmer say “Why would I use that?” after you explain to him or her a new feature? Actually, how many times have you seen the opposite? I’ll bet almost never.
I have a hunch this is sort of related to why development communities often shame their members so much. There are a lot of mean spirits around. There’s a lot of “Why the hell would you ever use X?? Don’t you know about Y? Or why X is so terrible? It’s bad and you should feel bad.” We have way too much of that, and my hunch is this is (partly) related to our programming environments being entirely structureless.
When the medium you work in doesn’t actually encourage powerful ways of getting the work done, the community fills in the gaps by shaming its members into “not doing it wrong.”
I could be wrong, and even if I’m right, I’m not saying this is excusable. But I do think we’re quite well known for being a shame culture, and I think we do that in order to keep our heads from exploding. We shame until we believe, and we believe until we understand. Perhaps our environments should help us understand better in the first place, and we can leave the shaming behind.