> Edsger W. Dijkstra ... in fact shouldn't, involve actual computers at all.
Computer Science is an applied science. .
Wrong. Compute Science is the theoretical side of programming, and very much behaves like it. It came out of the Mathematical departments. The Applied Science is Software Engineering, which most schools fail to teach at all. It's more akin to Computer Engineering but with a higher software focus.
Dijkstra was an idiot who thought that only theory should be taught.
* In theory performance shouldn't matter
* In practice it does.
Implementation details do matter regardless of many fucking cluesless profs try to handwave them. For example, how do you sort your data when it fit into available RAM? There is a reason why Map Reduce was invented.
Focus solely on theory is the wrong approach. There are 3 types of optimizations that a programmer needs to understand.
1. Micro-optimization: Bit-Twiddling
I.e.
https://graphics.stanford.edu/...
2. Algorithmic
Spending time to optimize a bubble sort is a complete waste of time when you could use mergesort, quicksort, etc.
3. Macro-optimization (or cache-orientated) aka (Data-Orientated Design)
Techniques such as Memoization exist for a reason.
A good programmer learns HOW to optimize. i.e.
Code Clinic 2015: How to Write Code the Compiler Can Actually Optimize
Ignoring optimization doesn't make it go away. That's how we end up with bloated crap where a user is forced to download a 50 MB file for a bloody printer driver.
A good Software Engineer knows how to do those things; however, it's hard to find any good Software Engineers. Software Engineering goes way way beyond those things too and it is extremely hard to find a good Software Engineer, especially since most programmers want to be about art instead of engineering.