In my opinion it doesn't really matter which language you start with. Learning the various concepts of programming is by far the most important part.
I would however suggest an OOP language. Java or C# if you want to look at something a bit more complex.
I would absolutely NOT suggest a language that doesn't have strongly typed variables to learn on. I know lots of people start with languages like python or javascript or one of the other scripting languages, but working in a strongly typed environment is less error prone and easier when you are debugging because it takes a large chunk of complexity out.
Another thing you should take into account is find a language that has a good IDE and good documentation. Again, java and C# both fit these criteria (though C# can be frustrating at times).
If you are interested in looking into a .NET language, microsoft offers free basic IDE's for all the major languages and you can even play around with the XNA if you want to do game development.
Here's a link to a decent set of tutorials on Game development using XNA in C#:
http://www.riemers.net/eng/Tutorials/XNA/Csharp/series1.php
Things I would stay away from at first no matter the language:
-Memory allocation and pointers (if the language supports that stuff)
-Threading of any sort (except for a main UI thread and a worker thread if you're doing some sort of UI app)
-Other stuff I can't think of right now. Anything that makes your head swim just reading it is probably good to stay away from at first
Things I'd try and jump into ASAP no matter the language:
-Object Oriented Design: Some of the languages are strictly OOP like Java and C#
-Modularity: Try and stay away from writing one big program all in the same source file
-Proper naming conventions: It sounds silly, but getting used to a standard naming convention for Class names, -Method names(Functions/Procedures) and Member names(variables) will make your life a lot easier in the long run. There are all sorts of documents on how you should name things and the theories behind them
-Documentation: This is an absolute must. I know its something everyone hates doing, and I was horrible at it in school, but it again will make your life so much simpler in the long run. Document all your methods so you know what they're supposed to do. Document complex chunks of code. Don't (please) DON'T bother documenting every line of code. The goal is to clarify whats going on, not double or triple how long your source files are with unnecessary code like "Here we add one to our counter..."
-Proper error detection (Exception handling): This again is a big deal. For an average commercial application, there's probably 25% real code and 75% error detection and exception handling. Try and get good at remembering this stuff because its important.
-Understand what you are doing: A few people said this already, but if you just parrot out algorithms you find on the internet, you'll never improve. Copying code isn't a big deal, but understand what its doing. If you don't understand, research everything you don't know. This is where IDE's come into play. Most of them have very good attached help. Click on a class name and hit F1 and they'll bring you to a help section (if its built into the language). If its code you found on the net, make sure it includes documentation or else get rid of it. If someone doesn't document well, its likely to be crappy code anyway.
There's tons more to say, but you'll find it all over the net anyway. THE MOST IMPORTANT THING TO REMEMBER...programming is fun! Don't approach it like a job, approach it as if you're learning a new spoken language or learning a musical instrument. Software development is just as much a form of art as painting or performing music. Anyone can hack out Ode to Joy, but the people who practice and understand the music can make it beautiful.







