Every year managers are evaluating employees' performance which will be considered in the annual appraisal. Evaluation may be affected by several factors like the employee behavior, attitude, performance, commitment, accomplishments...etc.
But, For software developers... its a different story!
"Software developer is a person who develops stand-alone software (that is more than just a simple program) and got involved with all phases of the development (design and code)", wikipedia
There are several metrics used to evaluate "programmers" such as: Line of code (LOC), Number of defects, Algorithms used, Complexity, Simplicity and a lot more; but most of these metrics doesn't give you an accurate indicator, for example:
LOC, Complexity and Simplicity : Developer can write two different "code" that do the same job, but the first one has much lines of code but it can be understood by Juniors. or a little code but it's complex enough that he will forget why he did it in this way. Which one is good and which one is bad???
Also number of defects may be misleading; the defect reported by a Reviewer for coding standard, or best practices... and defects reported by Quality engineer are design defects or UI behavior and/or environmental.
I think the manager is responsible to encourage his team to collaborate instead of let them compete; learning and cooperation between team members are keys of success for most of software projects because they're all will share failure or success of the project.
Many people consider Software Development as a Creational or Invention work, Me too. So how are you going to evaluate something which is being developed and based on what!!!?