Ahhh, the sweet scent of untested idealism ^_^
Luckily, there are a few things about programming that are so very attractive, to me at least. First, there will always be something new to learn. Second, learning about it can easily be done in your room, at your own pace, for free. And finally, since our whole world is virtual, all it takes to become a millionnaire is a good idea and talent.
For whatever it is worth, I am a professional software engineer who wants out of the industry over the long run. There are a few reasons for this, but I'll list some of the "nitty gritty" of the real world of software development.
The following are all stem from things that have happened to me in the last year.
1) Software Engineers are the bottom rung of the totem pole in most organizations. Non-technical managers--or even managers who are technical but lack perspective--are an enormous problem. Management will frequently treat software engineers as interchangeable.
2) You will write the software and then be told what the requirements are, when they bear only minimal relation to the software in its current form and are 100% tasked on another project.
3) A deadline will get moved up for political reasons and then your team will get blamed for not finishing in time.
4) Someone else will go in and modify code you originally developed without talking to you first in order to fix one bug or another or to scratch a personal itch and, in doing so, will break it, break whatever you are working on at the same time, change the contract, and/or do something that makes absolutely no sense whatsoever.
5) A bug will be filed (e.g., "component x doesn't respond to dust") and no information will be given on how component x should respond to dust. Attempts to gather this information will prove fruitless, and no one will believe your list of 20 citations indicating that it doesn't respond to dust.
6) A great deal of time is spent in archeology--trying to figure out undocumented or poorly documented code.
7) We were at one point told that the code would branch... at a point six weeks beforehand, and that we were expected to forward port "only the necessary changes" we had made in the last six weeks.
Etc. etc.
The project this comes from was one of the best organized that most people had ever worked on.
I'm not meaning to discourage or to belabor the point--the software industry has a lot going for it--but the advantages you list for going into it are exceptional cases at best. Many people get stuck maintaining the same piece of code for their entire time at a company, learning very frequently cannot be done for free and has to be done on a deadline, and becoming a millionaire takes a lot more than a good idea and talent. It takes good business sense, people skills, presentation skills, a healthy dose of luck, being somewhat closer to the top that most software engineers are, and for most people a massive amount of work.
On the other side, the software engineering world is filled with a lot of potential and exciting opportunities. It is consistently ranked as career choice that people are happy with, and your mileage on any given point will vary. By all means go into it, but its worth it to know what you can get yourself into.
I advocate starting with UML and test-driven development for a very simple reason: It helps correct bad habits that programmers get into early and that tend to stay with them for a long time. I suggest OOP because it is a common paradigm and it is conceptually easy. I suggest python or ruby because they are OO, allow for the developer to totally ignore that fact, and are good learning languages in general.