Apart from their development tools, which are of course create by and for programmers. So, we have a tool that does the wrong thing and users that can't appreciate this and don't even expect to appreciate such things. I've seen people, and I'm sure I'm not alone, mistake HTML for a page description language. They may make many other errors, too. However, they needn't be stupid.
Ignorance is sufficient.
Alas, one of the problems with ignorance is how little it is recognised. Hence my concern with the design of tools in general. Hence my distinction between tools created by programmers for programmers, and tools created by programmers for non-programmers . Nobody has to pass a test before becoming a web designer. Thus, few of us know what we need to know in order to do web design.