Trial and error.
I know you're not talking to me, but that's how we get good at things.
I don't consider myself good. I know just enough to be dangerous.
I look at old code, shudder, then mutter "Never again!"
I look at old code, and I wonder who wrote it. (Spoiler: it was me!)
I give myself little challenges that keep me engaged. The challenges I give myself will lead to the creation of some type of product.
For example, I wanted to create if then statements, so I gave myself that task for whatever I was working on. I wanted to have characters actually battle each other, so I then took if then statements to the next level adding in attributes. Then I wanted to create basic artificial intelligence in a game so I took attributes to the next level.
I feel like if I just studied youtube videos or websites without a purpose, I would never have made a lot of progress. I needed to give myself challenges, but challenges that would be meaningful in the creation of something.
The questions I answered, the more I thought "that can't be too hard to find", until I seem to have a decent working knowledge of the engine.