I taught myself. I started out in the 1980's with a VIC20 and never stopped enjoying writing code for fun. In the late 90's I was asked to create an application over the company intranet in Lotus and that was a hit which propelled me into other languages. I've created applications from scratch in most major coding languages and I've mastered how to optimize content and make it work efficiently with databases and such, it's been a terrific achievement for me and I'm 100% self taught.
I first learned BASIC in 7th grade on an Apple II. I was terrible at it. I thought that if you ever had a program that didn't run correctly, you had to retype the whole thing rather than just re typing the line were the error was. Needless to say, I did not finish any programs early on and struggled during the last few weeks of the class to get all of the work done once I realized how to correct errors in a program. At the very least, it taught me the concept of structure. From there, I went on to Pascal in high school and then on to Cobol and C++ in college and Web languages as a hobby while I was still in college.
I got my programing basics form high school computer science courses. The languages they taught us with are Turing and Java. After that I learn more advanced stuff in University. Basically there they teach us more theory wise stuff such as encryption, mutli-threading, and other languages C, C++, Python etc..
Recently I just learned C# and objective-c during work by reading online guides and trial and error with the code. I guess the best way is to learn the basics from some sort of course and then you can learn any languages by yourself by researching/reading online documents. =)
TheNewBoston on youtube is amazing. I used his videos for Java, and then after I finished then, I continued to learn Java through forums, and simply browsing source code and the Java API.
Youtube is an amazing resource for learning anything. Video tutorials are very easy to find and usually very informative. The best thing though? Everything is free. You can learn anything you want to for free. I've picked up a few programming languages from watching youtube tutorials and then exploring on my own.
I started with PHP tutorials from lynda just to get a basic idea about it. Later i just went and did as many tutorials as possible to broaden my knowledge. There is a huge amount of high quality tutorials on nettuts+ and other websites for most languages and frameworks. Also : Youtube
My personal journey was I started back in middle school with a programmable calculator, then the school offered programming courses in Visual Basic and Java, so I took those. I explored online and practiced a bunch on my own since it was a lot of fun. Then, in High School, it was HTML, Java, and Perl that was being taught, so I took those and decided I wanted to go into computers for a living. So I applied to Georgia Tech, got accepted, and majored in Computer Science, burning the candles on many nights for the torturous stream of programming projects with bad teammates in a few new languages (w3schools was a very handy websites for practice and tutorials). Then I did post-graduate work in IT while I took a job at a company to be a database engineer, where I pretty much had to self teach myself a lot of webmastering, scripting, networking and database languages and scripts.
I can say like learning any language, computer or cultural, its a labor of love, practice, and consistency.
I took a programming course on college but the truth is I didn't learn anything from it. I learned programming by reading many tutorials and books. The Internet has all the information we need to learn anything and programming isn't the exception.