When I taught programming, one of the mental frameworks I had to put in place was that computers only do one thing at a time, in sequence.
(Yeah, yeah, I know - pipelines, cores, blah blah. Parallelism is fine once you understand that computers only do one thing at a time, finishing one step before starting the next.)
I had to teach that, by single-stepping little programs, because students tended to think since computers appear to be so fast, they must do everything at once.
Well now, thoroughly competent young programmers have a similar issue. It goes like this:
Nowadays, processors are so fast, and memory is so cheap, that nobody needs to worry that much about speed or storage.
So for example, when performance is discussed, it often comes down to measuring, and looking for bottlenecks.
As if computation should be looked at as a swiftly flowing liquid, that sometimes gets choked at narrow passages.
The idea that the computer is doing individual little instructions one after another, with each one having a purpose, is tucked away in a mental closet, never opened.
So this is one old-timer who has single-stepped lots of code.
That's one way we used to do what's now called "unit testing".
If you do that, you understand in your bones what it's like to be a computer, being asked to do scads of things, often for very poor reasons.
You wouldn't mind working hard - you like working hard, but you don't like your effort being wasted.
So there's more to being a Crusty the Clown of software than understanding performance, but that's a good place to start.
I've tried my best to explain it.
It's worth pointing out that SO and its related forums is a terrific resource for sharing knowledge.
I never had the benefit of that when I was younger.