>>1
Yes, Python and Haskell are the answer to all! J/k. Read:
1. At least have a clue about maths. You don't directly need Maths (unless working with, say, geometry), but maths and programming have two very important skill requirements in common: logic and abstraction.
2. If you come from a maths background, read SICP. Then you can come here and say "I've read SICP" in various ways. If not, but you still consider yourself somewhat hardcore, start with K&R. If you're scared, start with Pascal (simpler than C, not shitty like VB), but DON'T learn much of it, just the basics.
3. Now you have a tool to play around. Practice. Reading others' code is easy, and implementing algorithms is mostly easy. What you may have trouble with is coming up with an algorithm to do something. Be sure you can more or less solve any problem you're presented, all on your own, without copypasting or looking up others' code.
4. Learn Python or Ruby, discover dynamic languages and their advantages. Discover OO using these languages object models, which are decent. DON'T learn Java or C++ or you'll be spoiled with their shittyness.
5. If you haven't read SICP, read SICP.
6. Now you're set. You can go and learn Java if you want to hate programming but get a job for sure (though an ugly one), you can go and learn C++ if you want to waste your time (though there are some job positions for this one as well), or keep learning Python/Ruby/Haskell/Lisp and achieve satori.