I went to a top 10 US university for CS, and while I completely agree with your disdain for things like 'write html classes', I experienced pretty much the equal but opposite. There was a relatively widespread disdain for application vs theory, to the point that I have no doubt that the overwhelming majority of my graduating peers could not write a Tetris clone, even graphics aside - I just mean the logic/architecture.
I actually have an amusing anecdote there. In one lower level class the professor ended up asking about how to convert a lower case string to an upper case one, or vice versa. I immediately chimed in with the right answer - you flip the 5th bit. This is literally how ASCII was intentionally designed. Capital and lower start at 65, and are separated by 32, so changing the case is a single bitflip. The same even works in unicode english characters where they're still separated by 32, though in this case it was not a unicode input string anyhow.
He just about lost his shit trying to mock me and my 'inelegant hacky solutions' in front of everybody. It didn't bother me in the least because I knew I was right, but later (perhaps after he looked it up?) he actually went out of his way to find me outside of class and sincerely apologize. I just found it all pretty amusing. But if anything it really emphasizes the overly embraced gulf between theory and practice at higher tier institutions, or at least mine. And FWIW this was an algorithms class which should ostensibly be 100% about practical application.
I think your experience reflects high expectations that these CS students will be academics first and foremost. Also, if you have a big brand degree, you get away with knowing less. The expectation that you will learn on the job is higher among people that care about such things.
If you go to a lower-ranked school, it is full of working-class students who need to hit the ground running. So there is less abstract stuff and more practical stuff IMO. I've never been to a top school but I can tell you my program at a bargain state school was excellent and practical. It had theory as well but the university consulted industry people often to get feedback on the program.
Back when I was a teacher's assistant in college, the professor for an introductory "learn to program" course was teaching students this is the right way to define an array of chars:
{'h,', 'e,', 'l,', 'l,', 'o'};
He also gave them sample code where the assignment was to fill in the body of one of the functions, but in an unrelated part of the code he had a typo that resulted in infinite recursion in an object constructor.
I actually have an amusing anecdote there. In one lower level class the professor ended up asking about how to convert a lower case string to an upper case one, or vice versa. I immediately chimed in with the right answer - you flip the 5th bit. This is literally how ASCII was intentionally designed. Capital and lower start at 65, and are separated by 32, so changing the case is a single bitflip. The same even works in unicode english characters where they're still separated by 32, though in this case it was not a unicode input string anyhow.
He just about lost his shit trying to mock me and my 'inelegant hacky solutions' in front of everybody. It didn't bother me in the least because I knew I was right, but later (perhaps after he looked it up?) he actually went out of his way to find me outside of class and sincerely apologize. I just found it all pretty amusing. But if anything it really emphasizes the overly embraced gulf between theory and practice at higher tier institutions, or at least mine. And FWIW this was an algorithms class which should ostensibly be 100% about practical application.