So in practice, the concept of "P vs NP", and order notation are largely useless.
I've not found this to be so. For example I can remember one instance of a problem that, in a blinding flash of the obvious, could be mapped onto an NP problem - which immediately told us that we wanted to be doing something like simulated annealing to give us a reasonable answer in a reasonable time.
Use big O notation all of the time when I did work in the financial sector. Very handy in giving us clues on how things will scale up on very large data sets.
Personally, I found that while academic learning is interesting, it's rarely useful. It's nice that you can write your own compiler, but your job will involve producing graphs and reports, not writing compilers.
Depends on your job. I've been paid to write compilers several times during my career. The ones I did after my undergrad compiler course were a lot better than the ones I wrote before it ;-)
In any case, I've been left with a distaste for breathless undergrads, and people who think that "more complicated is better", or people who think "new is better": most of the time, the boring, obvious encoding is the most maintainable encoding, and when it's not, you can at least understand what was done, and slot in your clever little algorithm where it's needed.
s/undergrads/youngsters/ and I'll agree with you 100%. For me its a symptom of age and experience rather than an academic or industry background.