When you start learning programming (in something like Python), you first learn all the syntax and basic constructs of the language. These are your if, for, while, functions, classes and the likes. You’d then encounter sample applications like finding factorial, calculating compound interest, etc.
However, given a problem, you’re not able to come to a solution on your own. At this point, you’ll be able to perfectly follow someone else’s solution. But you have a hard time constructing a solution of your own.
This is where you need to start investing more time in deep skilling. Start with a free, university-level beginner programming course like Programming Methodology by Stanford. All the previous tutorials or courses that you might have taken touch a lot of basic concepts at a surface level so that you don’t get bored. But if you’ve decided that you’re serious, and are willing to invest good time learning to think like a programmer (rather than just memorizing syntax), then Programming Methodology is the first course that I would recommend.
It’s in Java, but the concepts are easily translatable between languages. By the end of the semester, students create a wide variety of applications (including the game Breakout).