Computer science

Computer Science is the traditional degree path for programmers. A bachelor's degree in Computer Science is a four-year degree, although relatively few people actually finish it in four years. Computer Science is math-intensive, and at many universities, a Computer Science major will automatically earn a Mathematics minor. At least at the University of Missouri-Rolla, Computer Science requires an additional 3 hour math course beyond that required for Mechanical Engineering. (Calculus I-III, Differential Equations, and Discretr Math) This emphasis in math comes from computing's roots in Information Theory. (See Alan Turing, von Neuman, and History of Hacking for more information on these roots.)

Although basic programming skills are taught, the main focus of the degree is on more abstract theories of programming. Some of the higher math applies to such theory, at the very least, it weeds out some students. Like all certifications, a degree in Computer Science might not prove that a programmer knows what they are doing, but it does provide a minimum criteria.

Are You Thinking About a Career in Programming?
If you are a high schooler who is thinking about a career in programming, either degree path will work. A Computer Science degree will make you a member of a relatively elite group, but you will have to sweat to get it. A two-year degree in programming will (with luck) get you a code monkey position, but such work might not be rewarding. But on the other hand, once you get a toehold in the programming business, you can work your way up.

Whichever path you decide to take (and there are more options than just those two), you would be well advised to not wait until college to learn basic programming skills. Learning Linux is a good first step. It was designed by programmers for programmers, and comes with many programming tools that you will need, such as editors, compilers, and interpreters. Also, bash scripting and, to a certain extent, webpage creation will give you an introduction in how to think like a programmer. C and Java are both good beginner's languages. It might be a good idea to learn C first. Most modern languages are based on it, so what you learn in C will transfer to other languages. Also, it lacks a few features that more modern languages have, so you might want to learn it before other languages spoil you.

Learning basic programming skills while still in high school will let you focus on higher concepts if/when you decide to take formal education in programming. Also, it is a bit easier to learn new skills in your teens than it is in your mid-twenties.

Once you get basic skills down, you might want to work on an open source project, or create your own. This will let you build up a portfolio of your work that you can later show prospective employers, as well as get some feedback from your peers.