I have a similar learning technique. I have to create my own projects to work on when learning a new technology or I get bored. Most importantly I keep the projects small and simple in the beginning.
I’m looking to learn Go and I think your suggestion on contributing to an open source project that you’re interested in is a great one.
Combine all these technique, online courses, tutorials, personal mini projects and open source contribution and you can’t go wrong.