At job interviews one of my standard questions is to ask a candidate where does (s)he sees him- or her-self in five years. It's a terrible cliche to ask such question, but the one that always sparks an insightful discussion and tells a lot about the candidate's motivations and career choices. Most of programmers have at least some idea what they want to become but very few make an explicit career choice and know what options they have as programmers. To make answering my question easier I ask them if they prefer to deal with technology, product, or people. Programmers who prefer technology make great coders. Usually they are less interested in the end user's problems and they generally hate meetings, but they also prefer solid technological solutions over quick fixes so they are especially suitable as back-end developers. Their careers are usually a bit slower, but straightforward and without much drama.
Programmers who prefer product and end user's problems make for the best product people. Steve Jobs or Samo Login are examples of such people. Their code might be a bit sloppy, but they are the darlings of top management since they create products that bring millions or billions of dollars of value.
Programmers who prefer dealing with people and process, are quickly given management responsibilities, first as tech leads and later as mid-level managers. Unfortunately, attending many meetings doesn't leave much time for programming and their coding abilities necessarily deteriorate. It is therefore essential for these programmers to acquire the required management skills, otherwise they'll become both, lousy managers and lousy developers.
No matter what's your preferred option, I would advise young programmers to spend the first few years of their career as programmers and not venture into product or people management too soon. It's tremendous advantage to have a great grasp of chisel and hammer first, before setting on to create masterpieces.