Last week I got the opportunity to join a TypeScript/Angular/Ionic training at Hackages in Brussels. They're a consulting and teaching company specialized in modern web technologies.
The training followed a learning-by-doing methodology. We were submerged in a continuous exercise session, of which a large part revolved around fixing common mistakes planted in example code. Sometimes important concepts were briefly explained & demoed, but mostly we tried to fulfill the requirements of an incomplete program, with little pointers on how to code these.
So, we were still scouring the web for documentation, like you would when learning a new language on your own. The difference with self-study is: 1) you can ask when you're really stuck for a while 2) you're doing pair programming.
This is generally a valuable learning approach. But I have my critiques:
The line between learning by fixing mistakes & being frustrated by annoying bugs is thin.
Maybe this is not the best way to learn "good practices": the internet or your intuition does not always point in the right direction.