"Learning by doing" is an effective paradigm for solving immediate problems and finishing projects. It's not effective for the broad sense of learning either programming or a language. That's because you only learn the bits you need when you need them. It's possible to write significant projects in Java, for example, and never learn inheritance or polymorphism. You just write the classes you need and keep going. To learn to use the full language, you need to understand interfaces, abstract classes, and all the details that go with them.
I had a love affair with video trainers, but the bloom is off. They are good for gathering information about a language or other aspects of programming. But they can't compare to books. Books necessarily have the detail and, as you note, the structure to enable you to put together multiple pieces. What's more, with books you can look up things you are vague about, and review them.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.