>>1
If you use your mind, you'll find your own way in the world of programming, or perhaps even realize you like something better than programming. That's okay, deviation from expectations at this stage is a good thing.
If not, however, you'll just do what everyone else does and settle for mediocrity.
Start now, but please eschew formal education that isn't provided by a decent university. Computer Science education can be useful if you focus on theoretical courses. The "practical" courses are almost always dogshit.
That being said, you need a starting point. First time programmers seem to like Python. After you get the basics of imperative programming down, you can do one of two things:
Take the functional/mathematical route and read SICP/Little Schemer/Seasoned Schemer. Learn Scheme, Haskell. Branch out into things like the Lambda Calculus and Category Theory as they come up (I've found the latter to be more useful than the former in practice, but both are worth a look). You can use functional programming to solve
real problems in languages like Haskell, Scheme and Common Lisp, despite what some simian C retards will tell you.
Take the machine-level route and learn C and assembly. Read K&R. There's a book called "Hacking: The Art of Exploitation" that gives an overview of some of the basic security problems that arise when writing C, and how they work on the level of assembly. It might be worth a skim.
You should do both of these at some point, but I find that usually a person initially prefers one over the other. Some people just learn a bit of Python/Java/VB/PHP and stay there. Don't do that. Stagnation is death at this point. Those languages are okay when you have to do something in the "real
ly boring world", but are crutches for a beginner.
That's it. It's up for you to start now and put things into context as you go.