I answered a question in the reddit learn programming sub yesterday from someone who was about to take their first programming class and wanted to know what to expect about this thing they are embarking on. Here's my answer, maybe you can leave a better one?
It's a very interesting question you raise. I suggest that a good analogy is to becoming an apprentice carpenter.
You will be given a bunch of unfamiliar tools and materials and told "make a chair, start with a simple one like this."
Over time you learn to master the tools so that you can handle them well, you learn the tricks of the trade (how to make hinges, and seamless joints), things not to do or how to recover when you've chiselled the wrong bit (sorry my lack of carpentry knowledge is now failing me). Eventually with enough time, and having turned out enough chairs, tables, cupboards, stairs of increasing quality, you are an artisanal carpenter and can make wood do anything you like.
That takes a lot of practice and dedication.
In the context of programming the tools are languages, learning their syntax and (more important) their semantics, learning the toolset (compilers, build tools, and so on), learning the frameworks and libraries from which you assemble software, learning good idioms, and learning how to problem solve. Eventually after turning out a lot of software of increasing complexity you can make it do anything you like.
This takes a lot of practice and dedication.
At this point you probably end up running a shop full of carpenters and get an ulcer dealing with recalcitrant wood suppliers and clients who don't know which floor their stairs should go to, but that's a story for another question.
The main thing to focus on is enjoying the problem solving aspect: thinking your way through problems is the piece least taught and most important to programming successfully. If you enjoy this, and are willing to put in the time, you will go far and enjoy making many things.