In my opinion there are five basic personas that an effective programmer can utilize to do his/her job efficiently, and they can be combined in ways that might make them more inclined to certain "roles" in their development team. Which one (or ones) are you?
This is the persona we assume when we are actively writing code and solving problems on a low level. The Coder is working on other small problems at the same time he is coding, but generally is focusing on a specific task rather than the overall architecture. If a non-IT person asks you what you do for a living, and you tell them you're a programmer, this is what they imagine you do all day.
This is the persona we assume when we want to understand how a system needs to work. The Investigator just can't let things remain unexplained; s/he has an innate desire to understand how things work and why things behave in certain manners. This built-in need to understand how the code works makes the Investigator an excellent bug hunter.
This is the persona we assume when we are thinking in abstractions and working on non-tangible problems. The Theorist is adept at breaking down abstract problems into concrete solutions, and at designing how systems should be structured, even if s/he is not very good at actually implementing these solutions and structures using code.
This is the persona that allows us to think critically and logically about problems. The Logician is the most analytical of the personas, and can think about why this code behaves in a certain way in addition to how it behaves. S/he is able to consider all possible solutions with equal weight, and make a decision based on impartial factors while not allowing his/her unproven opinion to sway their judgement.
This is the persona that allows us to communicate and explain complex problems to other people. The Communicator can take difficult technical ideas and strategies and spell them out to both technical and non-technical people. S/he is effective at communicating in many ways, whether in writing (e.g. comments or documentation) or by spoken word (e.g. "What does this button do?" asked by his/her manager).
At any given time, any programmer has access to all five personas, and can switch between them at will. It seems to me, however, that a person who can utilize all five personas to their maximum extent is rather rare, and that most of us instead have one or two innate personas that we find fit us the best.
For example, you might be someone who is an excellent Logician but a poor Communicator, and because of this you may be able to determine how a piece of code can be optimized but may have difficulty explaining why it is important to do so to your boss. Alternately, you might be someone who is an superb Coder but a terrible Theorist, and therefore you need to have a given problem explained in more detail before you can go write code to solve it. There are many possible combinations, and some are more effective than others.
When can combining the basic personas into more complex roles. Perhaps you've seen one or more people playing these roles in your career. Do you have any of these people on your team? Are you one of these people?
Coder + Logician + Theorist = Optimizer
The Optimizer is the person who can improve code quickly and efficiently, whether or not s/he wrote it in the first place. They are experts at seeing where performance problems lie or might arise from, because they're superb coders who have probably implemented a similar solution in one framework or another. When performance issues arise, we call on the Optimizer to help us fix them.
Coder + Investigator + Communicator = Problem Solver
The Problem Solver is the person you go to when you need help on specific issues. She is very good at taking a given problem and breaking it down into its component pieces so that they are easier to research independently. The Problem Solver is the go-to person for helping you fix your bugs and refactor your code.
Theorist + Logician + Communicator = Architect
The Architect is responsible for designing a system to fulfill its stated requirements. In order to do this, she is able to think abstractly and compare several different solutions to one another to find the most optimal one. She also needs to be able to explain her architecture to the programmers who will actually be implementing it.
The roles above result from combining a few of the personas. We might also see some ineffective combinations which often result from a person forgetting to use one or more of the personas:
Theorist + Coder + Communicator - Logician = Architecture Astronaut
The Architecture Astronaut is a person that designs an architecture for a solution while forgetting that his team will be using code to actually write said solution. He can't see his design from afar or analyze it impartially, and as such his "perfect" designs, once written, often end up an unmaintainable mess.
Coder + Logician - Communicator = Ivory Tower Developer
The Ivory Tower Developer is great at writing code only he understands. He will take a problem and lock himself away in an ivory tower, only emerge when he has "perfected" his solution, and never document his code. He may be brilliant, but he cannot (or will not) communicate his brilliance to anyone, and his code will be very difficult to understand and maintain.
Coder + Theorist - Investigator - Logician = "Never My Fault" Developer
The "Never My Fault" Developer is unable or unwilling to critically analyze her own code because she is absolutely sure it is perfect without testing it or researching it. The bug cannot ever be in her code, therefore it must always be someone else's fault.
These are just some combinations I've encountered during my career. I've seen each of the five personas on various levels, and the combinations of them to produce roles fascinate me. What persona combinations have you seen? Are there personas out there that I've missed and could be added to the list? Let me know in the comments!