first things first:
I'm at a point now where I want to get into the desktop development area.
While i'm not a huge fan of all the web-based applications, you should keep in mind that the current trends seems to be more and more torwards web-based applications, so you need to consider this strongly. Of course the idea here is to build web-based software that you can also run on your desktop, but it does require a different mindset.
You've got a couple of questions you need to ask yourself which drastically alter your subsequent decisions. The most important question I think is this one:
"Do i want to learn serious programming skills mostly for the pleasure of learning it - or to make money?"
If it's mostly for fun, then you've got a whole different world that opens up to you and your decisions won't be so critical. If it's to make money selling software or getting a job as a programmer, then you have to be much more careful about your decisions.
I am a 20+ year c++ programmer.. I consider it my native language and I have much love for it. However I get mad at it and I view it as something that should die eventually and be replaced with a better thing. I'm still looking for that better thing and haven't quite found it yet, but I would caution people against embracing c++ as their main language.
I find a lot to like in C# from a programming language appreciation perspective. I'm a little concerned by microsoft's ownership of it and the .net runtime slow startup stuff bothers me but from a language perspective i like it. I'd like to see it get a little bit better cross-platform support (see
monow) before i embraced it, but i don't rule out doing more C# coding at some point. Right now i'm still undecided about whether something better will come along and so i've resisted.
The web-centric languages like
Ruby On Railsw are all the rage these days, and if you want to get involved in big web applications that might be the way to go. Things like AJAX and javascript and stuff are making some great web page functionality, but the truth is that it all feels to me like "hacks" and ive dont enough cursing with regard to cross-platform and cross-browser incompatibilities to want to work on such stuff.
As for books - there are tons online. App103 maintains a page she can point you too soon I'm sure. I'm actually a huge fan of the approach of finding a book that "speaks to you" and embracing that. I might just recommending going to a book store and see what strikes my fancy and go for that language. It's been my experience that most people fail to learn programming well because they lose motivation - so if you focus on motivating yourself with the right book and challenge that's 90% of the game.
You'll find in this section of the forum a "self-teaching" programming school as well where you can get assignments for langauges and try them once you pick something.
Another question you have to ask yourself is if you want to develop Windows-only stuff or if you want your programs to run on Mac, Linux, etc. That affects what you choose. I'm also a big booster for Object Oriented development, so if you are interested in the art of programming, i think that's a very important issue that will shape how you think about problems.