At least in the defense industry, the title Program Manager is pretty codified, and very senior, but the jobs described by Joel are covered by several different roles, and not all of them are so senior.
Here's the defense industry/enormous corporation take on the work and the roles:
- Program Manager (PM) - a very senior upper management person. He and his deputy are the legal representative of the contract or project. They interface with customers (who are generally not users) and make sure that the project is legally, financially, and ethically in the clear. They direct the high level work of the team, and make sure that the really big issues are covered. They have a hand in deciding on features, and the final authority when groups can't agree. They have 1 foot in engineering and 1 in business. -
- Systems Engineering - In my experience, this is a defense-only term, but other big companies have a role like this. Systems engineers are engineers with the big picture. They are the customer representatives who have done the most interaction with users and the user's systems. They know all the parts that touch upon the system being developed, and they have enough technical savy across disciplines to prevent issues between the typical engineering discipline groups (software, hardware, manufacturing, etc). They may or may not design user interfaces
- Human Interface Experts - they may be an outside consulting firm, or they may be an internal group in the company. They may be able to code enough to tell you what types of interfaces are supported by what major products (ie, what HTML can do, vs. what a thick app with an API can do), but they are not code whizzes. Instead they have a better than your average engineer knowledge of psychology, user interface design, and how to study and promote user feedback. They generally coordinate with the GUI/UI/HMI design team to vet the work and double check with actual users.
How to get there
Program Manager (PM) - Rules for promotion vary from company to company, but in a really big corporation, I would not expect someone with less than 10 years of experience to be in these positions. In my company, people come up through the ranks of engineering and prove their capabilities at lower levels of management to move into this role. IMO, it's not just the proper degree of gravitas, but also the fact that this person is in a position where not seeing a risk or making a bad decision could cost the company millions or billions of dollars. It takes a while to trust someone that much.
Systems Engineering - Usually 5 year + engineers who transition in from a different discipline. But, it can be a college grad, if the college grad has that "systems flavor". When I interview for this role, I look for people who happily bubble up to a high level, and consider the big picture ramifications and then deep dive into the details. They are often jacks of all trades, and very happy with that. Over time, systems engineers are expected to become experts in the customer's domain, rather than any particular technology domain.
Human Interface Experts - this is a discipline that colleges actually offer courses for. Taking some specialty courses in your CS program and supplementing with psych classes would help a great deal. Also, anything you can do to show your ability to get things done with non-technical users - like help desks, mentoring, tutoring, etc. When interviewing, target positions in a HMI group, or in a product with a big user interface component.
All three of these roles rely on stronger communication skills than your average programmer is expected to posess. Systems engineers are often a bit quirky (or at least the normal level of quirky), but a bit component of the job is written documents - white papers, requirements, specs, and test plans. HMI people are usually the nicest, least judgemental poeple you'll ever meet and they constantly give the impression that it's all about what you want. PMs have that typical boss quality.