To a certain extent that’s true, but this also butts head with your statement that you should jump into a project. What's a relevant task to do for learning concurrency programming for example if you're a junior with 0 knowledge not just of the concept iself but also any language using that? It's easy to waste time just looking for what to, when you have no idea about the how.
Sure, it's bad to follow along when you're not doing the actual work, but it's fine to follow along if you're also doing the coding work even if you don't go much beyond it initially as long as you follow through with practical work at the end )eg, you learn Go and at the end you jump into a project at work).
To give a different bottom line: it's all up to what kind of person the student is. If you see a junior which isn't inquisitive, focused or interested enough to follow up after the class, that person won't do any better if you tell them to look for a practical project on their own, they'll get just as distracted.
In the end, it's not an issue of the class or the form of learning, it's the student.