Ignore anyone who claims that some language like C, Java or something similar is a good starting point.
Those languages are far from being well suited for beginners; sure, some people might still manage to successfully learn them as their first language, but the danger of failing frustratedly is way too high.
Peter Norvig, who is director of research at Google, years ago wrote a great article on learning programming. It has the somewhat disillusioning title "Teach yourself programming in 10 years" - a sarcastic reference to the popular "... for dummies" / "teach yourself ... in 21 days" books, but it's full of honest and valueable tips and recommendations:
http://norvig.com/21-days.html
I really recommend you read the entire article, as disillusioning as it might first be, but here's a few very true and good tips from the "Appendix: Language Choice" section of the article, about choosing a good first programming language:
- Use your friends (if you have friends who can program, it's a good idea to start with a language that they are familiar with)
- Keep it simple. I quote "Programming languages such as C++ and Java are designed for professional development by large teams of experienced programmers who are concerned about the run-time efficiency of their code. As a result, these languages have complicated parts designed for these circumstances. You're concerned with learning to program. You don't need that complication. You want a language that was designed to be easy to learn and remember by a single new programmer."
- "Play", or in other words: Start with a language that has an interactive shell. This might be the best tip of all, as it is one of the mayor reasons why people who successfully learned programming almost always started with a programming language offering an interactive shell - be it Basic, Python, Javascript or whatever.
Based on these tips, here's what Peter Norvig recommends as possible candidates as a reasonable first programming language for people who are sufficiently old: Python, Scheme, Javascript (especially for it's popularity).
A language he doesn't mention, but that I was quite impressed by, was the free software "DrRacket". It's basically a dialect of Scheme/Lisp with builtin support for images (as a kind of data type), and there's a free accompanying book from MIT online called "How to design programs".
The "prologue" of this book is the best introduction into programming I've ever witnessed - in just a few pages, they do a terrific job of teaching you to program the animation of a launching rocket:
http://www.ccs.neu.edu/home/matthias/HtDP2e/part_prologue.html
For DrScheme, there's also the free book "How to design worlds", that focuses on teaching the basics of programming games/"worlds":
Unfortunately, DrRacket might be a great language for learning to program, but it's not a popular, widespread language; you probably won't program a commercially successful application with it.
But that is something I'd strongly recommend to you anyway: Do NOT do the mistake of trying to start with a language that appears to be the commercially most useful choice. Do not start with Java, just because commerical Android apps are usually written in Java, for example. Or C, for similar reasons. I know, it's extremely tempting and seems like the most straighforward choice, but it's usually the straight way into failure.
If languages like Scheme, Lisp etc. are too academic for you, and you definetely want to start with something popular, "real world relevant", choose Python or Javascript/HTML. Choose a language that allows you early have satifactory feelings of success, without going though an extremely steep and frustrating learning curve first.







