That's not real CS. CS is mostly about managing complexity across disparate intercommunicating systems, not about the speed of algorithms.
I have written low level networking code and you can abstract that to high level networking code. You can make handling thousands of threads easy. But, there is nothing to abstract away when you want to know everything within 10 feet of each object in a list. Granted, there are way's of solving that with a billion object list but they all depend on how the data is setup and not a general solution.
And yet P seems to capture pretty well the concept of "problems for which there are efficient algorithms." For whatever reason, no algorithm seems to have a complexity like O(n^1000). I don't know why. I'm not sure anyone does. But the highest exponent I can think of right now is n^12 for the original upper bound on the AKS primality testing algorithm, and I think that was later reduced to n^6.
N^2 means 10 million is not acceptable in a reasonable amount of time. (10^14)
N^6 hit's 10^14 at 216.
N^log N hit's 10^14 a little after 5500 [edit 5517] and it takes 1,000,001 before it's worse than N^6 but it's all downhill from there.
Indeed, an algorithm being in P may not be sufficient to scale, but if a problem is NP-complete (assuming P != NP) there's almost certainly no scalable algorithm for it.
I should have said If N^2 means 10 million... Anyway, I tend to think of 10^10 nanoseconds as vary bad (10 seconds) and (10^14) > 1 day as unreasonable, but that's just a rule of thumb from the days of 1Ghz CPUS's.
But the masters inherently know when they need to switch to a more complex algorithm with a better bound. You can't get that without understanding of complexity theory.
There are several really interesting problems that people might want an algorithm for which lies in the NP space. Granted, most ${STANDARD} programming is not about the solution to such problems. But then again, it was not the intention that people skilled in theoretical CS should use their time on such problems. In this sense, the theoretical people tend to be far far ahead the "real world".
Ahem, you mean it's not real software engineering. SE != CS.