I'd start by learning programming concepts overall and adapting yourself into programmatic thinking. To start I'd say look into coding via Python and then move onto Java. Slowly move onto more advanced programming concepts (Interfaces, low level programming etc.) whilst learning C/C#.
After learning the fundamentals and getting a good grasp in programming, I would look into reverse engineering wether its from IDA/x64dbg or Ghidra. I'd look into getting a grasp into those tools and understanding how low-level programming works and how a program is compiled. This because you said you want to learn to crack programs yourself.
Writing programs, depending on what you want to write is straight forward to an extent. Cracking programs, is where you will need to have a solid fundamentals in programming.