Learning programming is not only learning how to code, but how to think like a coder. You're engineering a solution, not a program which is the end in itself.
Basics
learn what types are.
you can only learn this properly when you use a language which has strong typing.
It's easier to write properly typed code in a strongly typed language.
Learn how bits work
logical AND, OR, XOR, NAND and NOR are basic operations you should know about
it's basically "undo after you already hit save" in the beginning.
Intermediate
Do a lot of coding.
Look around. If you have a hammer (the programming basics), everything is a nail.
Make your code readable
Use a consistent coding style, naming scheme and language.
Write proper comments. Only comment on complicated things.
Write long commit messages explaining your changes in detail. Don't only tell the reader what has changed, but why you changed it and where you can learn more about the changes you've made.
Let other people read your code.
Leverage pair programming.
Contribute to FOSS.
Professional
Start a business which involves you solving software engineering problems.
You don't really have to code yourself if you can pay programming monkeys like you once were and tell them what to do.