I attended a university with a strong co-op program, and I personally believe it is the best possible solution. Classes were focused on theory and my three 6-month co-ops were spent working on meaningful software projects at real companies. As a result, I was able to build up a solid background in Computer Science theory, didn't have to deal with the shortcomings of group class projects, and learned how to ship produ…
I don't know. I attended a regular computer science program and I am glad I did. The goal of university is not to prepare you as best as possible for working life, but to teach academic thinking. Class projects usually have a specific purpose, like teaching computer vision, operating systems or building compilers. You'll spend the rest of your life working. There is no need to rush into it, in my opinion. Then again,…
Because academics don't work on projects? C'mon.
Except for a few things (like math) I wanted a lot to be taught in a project based fashion at university. There was a lot of CS stuff that we learned where the professors were super unclear about why it was important or when the correct time to apply the knowledge was. That not only made the teaching less useful it seriously sapped my motivation.
Years later I was surprised a lot by the applicability (or not) of some of the knowledge taught to us and I think probably the lecturers could probably have guessed that I would run in to these situations - they just didn't put much (if any) emphasis on bringing it up.
Now I'm teaching (as an amateur and not in a university, but still), I'm teaching in a project based fashion because it's how I wanted to be taught.
I do this partly because I'm trying to present every topic as a problem first in a context that seems realistic. I feel like getting students to recognize and 'feel' the problem themselves before teaching them the solution helps with their motivation and the applicability of that knowledge - wherever they decide to use it.