And that's how you end up with CS students aceing theory exams, while completely flunking the coding exam...
> Computers are not at all human, in that they do exactly what someone has set them up to do, which is often not what they thought they were doing, while many beginners expect them to "understand what they meant" and act accordingly. Every simple-looking capability is burdened with detail: the computer "knows what time it is" (thanks to some nontrivial engineering with some possible failure points); the out-of-order CPU "runs just like an abstract in-order machine, but very fast" (until security researchers find a difference); DNS "resolves domain names to IPs" (but is frequently intercepted by networks, and can also serve as a covert backchannel); video codecs "make videos smaller" (but are also complex domain-specific programming languages); text rendering "is just copying bitmaps into the right places" (unless you care about Unicode or antialiasing or kerning).
Although people don't really encounter complex leaky abstractions like that as a beginner in coding. More likely, they'll encounter some simpler poor abstraction like Scratch blocks not being all fully composable in an intuitive fashion, or a sheer wall of complexity (e.g. getting taught in Java/C for an introductory course)