The specific language you learn really doesn't matter in the beginning. It's much more important to learn good program design and good software engineering skills. Once you master that, learning new languages is mostly just learning new syntax and new features of the specific language.
Stanford's free online
CS106A class is a good place to start. The class uses Java but it's not intended to teach you Java so much as teaching you programming fundamentals and skills while using Java as the vehicle. They serve up everything you need to take the class except the actual textbook. You can cop Karel the Robot Learns Java (the book you use for the first week of class) from the CS106A class website
here. You can "acquire" the main textbook, The Art and Science of Java, from a variety of places if you feel you want to use it but it's really not necessary. Most of the lectures are just reviewing the material you just read in the book anyway so you'll get 90% of the same information. The instructor is entertaining and makes a lot of the dry and boring aspects of learning to program a little less dry and boring. I've watched some of the introduction to programming videos available from MIT through their open courseware program and was nearly bored to death. With all the "homework" and programming assignments available you can really treat it like a real university class to help keep you motivated. After you work your way through CS106A you can take the two other programming classes Stanford offers through the
Stanford Engineering Everywhere program.
If self-study through books is more your thing I can recommend
Programming Principles and Practices using C++ by Bjarne Stroustrup (the creator of C++). It's written to be used as a first year computer science textbook (or for self-study for people with zero programming experience) using C++ to, as the title suggest, teach programming principles and practices. It's fairly dry but not near as dry as many other self study programming books I've thumbed through.
Introduction to Java Programming
is another decent self-study introductory book but pretty much any first year comp sci or introduction to programming textbook will work. You
can learn just by using tutorials that you find scattered around the web but I then you're kind of left on your own to come up with ways to apply what you just learned. The great thing about textbooks designed to be used in a classroom environment is they're very structured, so you learn at a consistent pace and (usually) learn concepts in a logical order, and chocked full of exercises and drills at the end of each chapter for you to apply the concepts you learned and really cement that information in your brain.
If you decide software engineering is your thing, it's very unlikely that you'll only learn and use one language as you progress. The most important thing is to just start learning and writing code. Use whatever language your learning source uses and just dive in. Learning the actual concepts and how to program on a general level is 90% of the battle.
Edited by trls - 10/20/12 at 2:25am