
Ah, formatting . . . Let's try this again.
Joel's advice seems mostly geared toward what works best for getting a job and then what works best for growing one's career. Everyone has an opinion, and no opinion is going to be 100% correct for everyone, so I thought I'd give my perspective.
My background is one of having done a lot of programming (both in school and out) in a variety of technical areas (scientific, finance, biotech), having built a 10-person software-development department for a company, including doing the hiring, and having managed that department. For getting the job, the following characteristics of applicants were most important to me. Level of experience -- this includes what the person has worked on, how much coding he has done in what languages and for how long, what he knows, etc. Positions held -- has the person held positions of responsibility similar to what he would be hired for? If not, it's a person growing into the role, which is OK, but might mean a lower starting salary than a person with more work experience. School -- where the person went and GPA are both important. Where the person went has a higher weighting in the mix. Personality and personal skills -- avoiding people who are a pain in the ass to work with takes priority over all else.
Personality and personal skills deserves special mention. I like to hire people who are self motivated, who are good at spotting which things need careful work and which should be done only adequately but quickly, who take on responsibility, and who can get things done solidly without me having to worry about whether or not it will get done well and in time. Also, people who can abide when the company makes a decision they don't agree with are valuable. If you can in such cases still get on productively and maintain enthusiasm, that is valuable. People who don't have that talent tend not to last, because not everything, every time, will go the way you think is best.
As for career advancement, in my experience it boils down to talented people with good people skills, adaptability, and enthusiasm. Especially, if you have the ability to take care of tasks in a way that instills confidence and reduces stress and workload for those around and above you in the organization, you will be a person people go to to get things done. If in addition, you are quick to learn, you will find that your realm of responsibility grows over time, and that translates into advancement.
USENET would be a better laboratory is there were more labor and less oratory. -- Elizabeth Haley