computing is like learning to draw, it's not that you're getting better in any truly physical sense (outside of like, hand muscles) but your knowledge of what you can tweak any given part to make it go closer or further from some midpoint keeps increasing.
one way to learn is get increasingly in over your head so you're doing even more googling and breaking it down and learning on the fly
the other one is to do problems that are just a bit unknown but you can see how you could solve them if you sat down for it.
libraries are great, frameworks are great, but if you look at their source code they're just built out of, essentially, if/then, loops, and the ability to change variables.
You don't need "good" code if you are running it on a modern machine. some parts of games can need it, but there's plenty of examples of just giant "case" statements (basically a chain of if statements on the same input). ignore most of the advice about not repeating yourself, and just solve things with whatever you can grasp, literally and metaphorically. search to see if they're an easy way you can understand how to do, and if not, you go slower but you're not missing out on much. That comes when it comes.
once you get annoyed repeating yourself typing a lot, you can pull the repeated part into a function. if you hate remembering what an equation does pull it out into a function that describes what it does so you don't need to trust your memory.
functions are just a YCH