At the very beginning I think the advice I want to give is to check out standard library codebase. All the design patterns or classical methods are found everywhere in the exemplary codebase. Just steal them and apply to your own code.
Cannot agree more with your points. I once thought to explore difference languages can satisfy my curiosity. However it does not work after I run through the official tutorials. I think the key point is to identify a problem and stick to solving it. Along this journey we will find that we have learnt a lot!