The first thing to realise when thinking about computer programming is that NOTHING in computing works without programs. Frequently programming comes in disguise: scripting particulars about network connections, recording macros in an application, integrating interactive elements into a web page - all these are essentially programming tasks. Programs are not limited to PCs either: car electronics such as motor management systems, embedded electronics in household appliances such as dishwashers and refrigerators and mobile phones all rely on computer programs. In fact most "computers" these days are not PCs or laptops but hidden away in all kind of devices: televisions need to decode compressed digital signals, cameras do the opposite, multi-function wrist watches, MP3 players - virtually everything that requires electricity to run works under the control of programming code.
As a consequence the job opportunities for programmers are endless. Companies in all markets need programmers for designing and maintaining their products, running and securing their networks and building bespoke in-house applications. In most countries of the world there are, even in times of recession, more job opportunities than there are programmers (also called developers). The reason for this is, apart from the obvious fact of being able to program, programmers share a higher-level skill that can be applied to all business tasks: the skill of logically and systematically analysing a problem and to design a step-by-step solution to this problem. This is why many programmers eventually move up the company hierarchy and find themselves in a management position. For a programmer it is easier to add business skills to the personal portfolio than for someone with an MBA to learn programming.
For an up-to-date overview of the job market, salaries, job demand figures etc. see www.itjobwatch.co.uk.
Don't be fooled by the image of the programmer usually portrayed in the media: the lonely nerd in front of a computer screen is not a programmer; it is a user of programs - games usually. Ok, there are a number of programmers who do spend a lot of time in front of the screen stringing code together, especially the younger ones. Most programming, however, is done off-screen: interviewing clients to understand their needs, analysing and formulating requirement specifications, algorithmic developments, designing and implementing, testing and evaluating and controlling progress against plans, etc. All this is part of the day to day job. Programming is also a team effort since most programming tasks are much too big to be implemented by a single person.
At its core programming is an extremely creative job. Very few other jobs provide as many opportunities to do something new and exciting every day. In contrast to many other jobs it never gets boring - there is always something new around the corner.
There are about 10 major programming languages, about 50 less frequently used ones and probably several 100 rarely used and highly special ones. Some have a rather weird vocabulary and grammar other look much simpler. So - which one to start with?
The answer, as usual, is: it depends. Have a look at the graph below. It shows the ranking of programming languages according to how often they appear as a requirement in a job advertisement.
Java and C lead the field with C# increasing year after year. Both are in the beginning quite difficult languages to master - in contrast to Visual Basic, for example. The benefit of starting with one of the more difficult languages comes later when the discipline enforced by these more strictly typed languages produces cleaner code with fewer errors that, due to its systematic structure, is easier to maintain and to re-use. If looking for a course, choose one that is close to what the job market wants (bearing in mind that over the duration of your course this may change - try to interpolate the trends). Also choose one that offers more the more strongly typed languages such as C++, C#, Java or even Ada. Students starting with an apparently simple language find that they have to un-learn a number of bad habits first before being able to progress. Finally consider the area in which you would like to work. If you are more an engineering type you will probably feel attracted more by embedded applications (car engine management systems, brake systems, plant control, mobile phones / smart phones) which tend to be programmed closer to the hardware for which C and C++ are usually employed as they allow direct access to the underlying electronics. If you are more interested in user applications on PCs or mobile phones consider the recent upstart Python or Java and C# which have very powerful libraries that allow you with a single line to do the most complex tasks. For quick and dirty solutions to small problems Visual Basic is ideal.
To start with one is enough. Look for a course that says in its description that it will teach you the underlying principles of sequence, iterations and conditionals, introduce you to object-oriented programming, data structures, functions other basic concepts. Try to steer clear of courses with titles such as "xxx language for yyy applications". They tend to be too specific and restrict you in your later development.
Once you have mastered a language to a certain degree, acquiring a new one is relatively simple. The first language may take you two years to learn (although you will be able to hack something together after the first few days already). After that you can translate the underlying concepts quickly so that the next one you can learn in half a year and every other you can then do in a matter of months or even weeks. A programmer with 10 years experience "speaks" usually about 3 languages "fluently" and a string of others well enough to understand the underlying direction of other people's code.
In principle: yes. In practice it attracts a certain kind of personality. People who like playing chess, solve puzzles, are not afraid of maths (you don't have to do it yourself - that's after all what the computer is good for, but you have to know how to tell the computer how to do it). It is important to remember that programs reflect the real world. Hence an underlying foundation in physics, chemistry or biology (if possible all of those) will always be helpful. People who enjoy discussions or long essays at school are usually not that attracted to programming. Having said that, there are computer artists and many people in the creative industries (animation films, computer games) who are also excellent programmers. The one thing programmers have in common is self discipline. Without that you will never be good at it - but that could be said of any other profession.