Help me learn how to program
This isn't an article teaching you the intricacies of C++, Visual C++, Lisp or the like. It's an article describing the best method to learn how to program. Programming in this article will be defined as logic programming and not formatting (HTML, CSS). Today's programming environment moves very fast, with different languages gaining prominance all the time. Being a good programmer involves being able to easily hop into another language and quickly become effective in coding. This involves not just knowing one language, but by knowing the principles and concepts that drive all languages. The syntax changes, but the principles stay the same.
There are a whole host of languages out there, you can go from assembler (writing microprocessor instructions) all the way to Visual Basic (a windows based programming language). But all languages have a common purpose in translating what you want to do into something a computer can understand. Therefore the vast majority of them contain very similar structures. For example, just about every language out there has an If Then Else type in their syntax. So once you learn one language it is not a huge leap to learn another.
(Here's a little asside, learning a language is one thing and learning the library or environment that you're programming in is another, for example the Visual C++ library is huge!)
A large number of the programming languages used today are based off of a language called C. A large number of operating systems are still currently programmed using the C language, and it is generally considered the fastest high level language around (though that is changing with todays compilers). Learning the C programming language will provide you with a good base of the syntax and structures used in a large number of programming languages used today. An excellent book to learn C from is called "C Programming, A Modern Approach" by K. N. King.
C provides an excellent base, but is still considered a lower level language by many. Low level languages are generally defined by being closer to machine code than higher level languages. Higher level languages are the opposite, more resembling how people think, with concepts, properties, objects, etc.
There are a large number of differences with how different languages implement higher level functionality. So learning one language won't let you hop over and use another very easily. But the concepts are the same. So learning a language that can implement all of the higher level functionality that todays languages use will provide a good basis for using other modern languages.
An excellent language for this purpose is C++. It contains the vast majority of higher level functionality that todays languages contain, and many that they don't.
Knowing how to program doesn't just mean knowing the syntax of the language that you're working in. It involves knowing the most effective method for solving problems. Methods of problem solving differ dramatically between lower and higher level languages. I definitly reccomend learning a higher level language like C++ as a first language as opposed to a lower level language like C. It will be a steeper learning curve, but you will learn excellent problem solving methods used in todays programming environment.
Programming also involves style. There may be 10 ways to solve the same problem, but only one that will really fit your situation. For learning programming style I highly reccomend reading a book like "Code Complete" which is now in it's second edition. It will prevent you from getting some of the bad habits that many beginning programmers make. It will also give you a style that other programmers will respect.
Good luck with your new hobby or carreer!