As a recent graduate who did both since I switched from a very theory first uni to a practice first uni I find starting with a high level language much better.
If you're trying to learn "class, method, extends, static, var/Integer/int, interface, abstract, virtual, different exceptions, recursion and loops, etc" having to also learn about memory is not helping and if you try to do basic pointers first it becomes kind of like spell chanting. You just start trying different combinations of * and & until it works. Partially because you're a bit overwhelmed and partially because it seems like useless knowledge.
The more I worked the more I started to appreciate subjects like operating systems, algorithms, etc but at the time of doing them they seemed too theoretical since they were way above my practical knowledge and useless to the projects I was doing. "Why would I need to know how to build a file system/compiler/etc? Why in the hell would I ever do that?"
The other aspect is that if you start with learning the theoretical side you end up worrying you won't be able to code by the end after a bit. For example you've been there for 2 semesters and while you can talk about low level subjects you've barely done a todo list/calculator/chess. If you start with the more high level things by the third semester you can definitely be working part time.
This is from the POV of doing CS to start working as a dev and not do academia.