I think the anti-CS info in this thread is overblown.
Based on my experience (~20 years in professional software development) I have the following comments:
(1) There are a lot of good software development jobs around. I expect that to continue. IT is going to continue to become ever more central to every kind of business. One way or another, that's going to equal jobs. And not just for Indian programmers (the specter of outsourcing as always been exaggerated. It is not that easy to do successfully, and is often not actually that cheap, even in the short term.)
There are jobs for both new and experienced developers. There are advantages and disadvantages to both for employers. Depending on the employer, most should have some mix of both.
The most important thing you can do is to excel, both in school and in the jobs you will have. It comes through on your resume and in interviews if you are the type of person to do the minimum needed to get by, or you try to do the maximum possible in the time allowed. If you are the second type of person and have even basic aptitude for the work, then you will be able to get jobs.
You do need to be wary of tying your career down to one specific technology because they do come and go. But a great C++ programmer is also a great Java programmer and a great .NET developer... after they learn the syntax, conventions, and fundamental APIs of the new environment.
Most employers don't understand this and anyway they expect you to have experience with their development environment on day one. So it's important that once you have a job, take whatever opportunities arise to learn new technologies. Don't push to use inapprorpriate technologies, but keep an open mind and eye. When you're prototyping something else anyway, it's often a good time to try out a different language or tool, too.
(2) A degree is quite important. There was a time when that was much less true (in fact, people of my mother's generation didn't have CS degrees--because they did not really exist when she went to school!), but that day is past. As a young job candidate, you have very little chance to get past the resume evaluation stage of obtaining a job... unless maybe you want to move "offshore" to become one of those super talented $10/hr programmers I hear so much about
Also, whoever those people were that thought anyone could learn programming by just reading books has absolutely no idea what they are talking about. OP, rest assured that those people cannot give you any useful advice in this area. IMHO, you need both practical experience and an understanding of theory and principals to become a good software developer (plus a natural aptitude for analytical thinking, which I assume you have or you probably wouldn't even like programming). A good CS program will give you a great start on the theory and a little experience, too. If is very difficult to get the theory from just reading book and they give you no experience. What good book do is help you learn certain specific technologies.
(3) Don't go into "hardware" or the law or get an MBA if you are interested in software development. People fail as with law degrees MBAs, etc., just like they do in every other field. The #1 thing you can do to have a successful career is to excel at your work. You can't do that if you don't have an interest in it. I think you said in one post that your ideal job is to sit at a computer with three screens and program all day. That's a good sign, because that's exactly what you'll have to do all day every day to be successful. (Well, depending on what you're doing you may or may not need all three screens!)
Well, I could go on and on, but if this is what you are interested in, then this is what you should do.