Whilst there are lots of people's impressions of perfect ways to learn programming, progressing from one language to another in a way that forges a perfect programmer, I think what a lot of people ignore is that, when someone is trying something new, they want to see results or they quickly get disheartened.
For example: sure, you might get a better grasp of how computers work, and improve the quality of your later code---appreciating what the compiler does to it---if you start by learning Assembly, but I think most newbies would give up in a fit of frustration after a couple of minutes---I know I would were I just starting! For that reason, I think any good quality languages that facilitate rapid GUI development are the best choice for beginners, and amongst those your best two options are (in my opinion, of course) Java and C# (or any other .NET language, I suppose).
Each has their zealots (and I should state for fairness that I fall into the C# camp), but both are excellent languages and both have the backing of excellent libraries. There is enough pre-written code in both that you shouldn't have to delve into developing low-level things unless you want to (there are lots of existing data structures, for example), they're both fast (fast enough---let's not get into the "Java is slow!" debate), they're both portable (although Java much more so), they're both very easy to get the hang of.
I believe Eclipse is the environment of choice in the Java world; for C#, Visual Studio is what you want. Microsoft offer cut-down, single-language versions of Visual Studio called "Express Editions" that you can get for free; you can get Visual C# Express
here.
I don't know of any good resources for learning Java---not having learned it myself---but for C#, there are literally bazillions of websites devoted to tutorials, such as
Code Project, and if you want to spend a bit of cash then you can't go wrong with
Learning C#, a book by Jesse Liberty that teaches you both how to program and how to program with C#.
Phew!