You start off right away with object oriented programming basics and simple algorithms, with most of your first year dedicated to those, design patterns, basic maths, basic communication (English and French in our case).
Second year moves into specialisations (networking, business systems design, or software development). I did software development and that's where the Java enterprise projects come in (applying design patterns), some Android programming, some more advanced algorithm stuff (still easy on the whole, similar level to the leetcode questions at FB interviews), ...
The final year will have some side courses on introduction to law (focus on copyright), some stuff about extreme programming, some communication, a bigger project and then the second half will be an internship.
And that's it. No crazy math, no super theoretical stuff, only basic non-engineering skills with a focus on the things that are practical skills as a software engineer.
I felt prepared for the professional world after that. Maybe not the things where you micro-optimise algorithms, build low-level tools and languages. But it definitely gave me a fantastic basis to join a web development company. Enough knowledge about programming and patterns to be able to pick up new languages and be productive in them fast.
You'll see few people with this degree in the hard computer science jobs, but I do think (having seen both) that people straight from school with my degree are better at just building applications on top of existing frameworks. We had practical experience with a lot of popular tools at school, and maybe less hang-ups about not always sticking with the theoretical most efficient way if it'd take longer to implement.
This type of education exists, works and has it's place.
(Note: I actually dropped out after three years without finishing the internship and without passing some of the non-coding courses because I had a nice job offer. I did do every subject so basically have the education, just not the proof.)