The job of a manager is/should:
- To assemble the best team of programmers possible.
- To point them all in the right direction.
- To keep them all pointed in the right direction (by clarifying requirements, supplying new ones, generally tracking performance). This is a continuing process and is probably the most important duty of a manager.
- To give them the tools so they can finish the job.
- To get the hell out of the way.
The best managers are one of the team. They are doing a different job from the programmers but their contribution is palpable and their presence is appreciated.
Bad managers are resented. They seem to spend all their time getting in the way. They are, and they hire, dead weight. If you get stuck with one of these and you can't train it, then get the hell out of Dodge, you're doing yourself no favours.