I would not suggest a career in programming. I'm a programmer, and have seen the field dramatically polarize. Either you'll need to be a PHD working at Microsoft, or a low-wage employee working at a giant outsourcing company.
This is very much true.
If I were starting over today, I'd look at networking (routers, servers, cabling), since that is fast growing and will transition to optical soon.
Networking, although sounds very promising, has a high barrier to entry. You will be required more training then as a programmer, and the networking training does not stop.
Once you learn a programming language, then master it, there is not much more to "learn" (yes, there is always new algorithms, methodologies, etc.), but the language itself is stable.
Networking is just the opposite. The development is non-stop and there is always new things an individual needs to learn, or face extinction.
Does anyone remember ARCNet, how about Token Ring, LANtastic, Novell, Vines (and these are the big names)? Those were hot items in networking "recently". We had to know it inside and out. Today you will be hard pressed to find someone who can identify half of these past technologies.
The point is, you might not have to learn the historical technologies in networking, but I guarantee you that if you want to keep your job in networking, and make a decent living, you better be prepaired to pick up at least two or three new technology related knowledge a year.
On the other hand, small town, local "computer handy-man" has a market: someone who can install a new DVD drive, show you how to use eBay, and remove all the spyware you dumped on your system.
This is very true. Such niche can be had, and potentially gain local business contracts. Expanding into web development and such would further enhance your local guru status.