There are many blog entries, articles, forum threads, and other published items that list traits of a successful software developer. While I generally agree with most of these listed characteristics of a successful software developer, I think one trait may matter most of all. It matters most of all because it influences many of the other positive traits and/or is a manifestation of many of the other positive traits. In other words, if I'm only allowed to measure one trait when determining the quality of a particular software developer, then I'm going to look at that developer's confidence.
Confidence is NOT Arrogance
I view confidence as something very different than arrogance. I believe that most of us want to work with people who are confident, but generally want the least interaction with those who are arrogant. It makes it difficult for a software developer to provide as much value as he or she might otherwise provide if no one wants anything to do with them. On the other hand, a confident software developer can provide mentoring, guidance, and generally work well with others. In fact, the confidence will usually make others more optimistic and more willing to work toward a goal.
Perhaps the easiest way I have found to differentiate between the confident developer and the arrogant developer is based on their need to advertise their accomplishments. The confident developer knows that his or her work is good and will be appreciated. The arrogant developer needs to tell everyone and anyone who will listen how great his or her work is. I'm not talking about resumes, performance appraisals, or job interviews because all developers should brag in these forums. I'm instead talking about day-to-day communication with teammates. If one feels the constant need to directly remind others about his or her own greatness, that is a sign of arrogance rather than of confidence.
Confidence May Indicate Experience
It is difficult to differentiate between confidence making a developer better and a developer being better because he or she is confident. I think it goes both ways. For now, though, I am focusing on the idea that confidence often indicates hard-earned experience. A software developer who has seen the good, the bad, and the ugly will often be more confident about what to do or not to do in a similar situation. This is another area where I differentiate true earned confidence from unearned pride or arrogance. We have all known software developers who are inordinately proud of themselves; to me, this is arrogance rather than confidence.
Confidence Allows for Innovation and Trying New Things
It takes a certain level of confidence to dive in on one's own and learn a new programming language, a new framework, or other new skill. This is an example of how confidence in a developer can lead directly to another positive attribute in a developer. The confident developer more readily looks at new things and considers new possibilities. This learning improves the same developer's confidence and the cycle repeats.
Confidence Allows One to Be Open to New and Even Challenging Ideas
A truly confident software developer has enough self-confidence to be able to more freely admit that he or she does not know everything and might, at times, even be wrong about a thing or two. This again differentiates arrogance from confidence; the arrogant developer can almost never acknowledge any flaws or weaknesses while the confident developer can admit to mistakes, misgivings, concerns, weaknesses, and other flaws because he or she is confident enough in all the things he or she knows that it is not a problem to admit not knowing something.
Confidence Leads to More Expressed Opinions
Although it is a valuable skill to be able to learn and be open to new ideas as just discussed, a good software developer will also be a contributor in architecture, design, and other work. A confident developer is more likely to speak up in a meeting, less likely to be a yes man (or "yes woman"), and more likely to provide out of the box ideas. The confident developer is more likely to do these things because the confident developer is less worried about being wrong or suggesting something that turns out later to be a problem.
Confidence is a characteristic that many of us look for in people we associate with in all aspects of life, even if we don't always realize it. It should be no surprise, then, that this same trait is highly desirable among software developers. Confidence seems to be both a manifestation of a highly skilled and experienced developer as well as a trait that also directly encourages and motivates the developer to implement other positive practices.
Finally, confidence is not the same thing as arrogance. The distinction is significant because there is generally a world of difference between the overall (including effect on the team) productivity of the confident developer and that of the arrogant developer. Likewise, there is similar difference in overall productivity between the confident developer and the developer who lacks confidence.