Pick a language (good options are C, C++, C#, Java, JS, Ruby, Python, Haskell, Go, Rust, Crystal, Erlang – ya got me: I’m listing all of them).
There is no one language that will allow you to master programming; rather, to master programming, you must transcend language itself.
However, mastering at least one language is undoubtedly a great way to start. Ask yourself: What interests you more: the nitty-gritty, or getting the job done? Languages tend to favor one side or the other.
Once you’ve picked your language, get comfortable with it. Implement a few algorithms (sorting, search, ciphers). Familiarize yourself with your language’s standard library. Reimplement that standard library – the fun parts, at least.
You’ve gone this far. You have a grasp of at least one programming language. Now it’s time to learn another programming language, its internals, its libraries, how to write pretty, language-specific code…
You should be approaching the point where you’re thinking less about code and more about what code means. Understanding a program’s logic is really important.
Getting good at programming takes a lot of time. It will not be easy. I advocate the 10k hours rule (this is about 5 years of a full-time job).
Wanna be 1337?
If you want to be 1337, as @_py has suggested, then you must start at the bottom! You’ll need technical knowledge of your OS and how computers work.