Sunday, March 22, 2009

Are You The Best Developer You Know?

Are you the best software developer you know? If you are, you might want to consider changing the situation.

I have found my most satisfying jobs to be those in which I work with people who I learn from on a daily basis. Although learning can be done by reading books, blogs, and articles, the best type of learning for me is that done as part of my everyday work. The reasons for this are that I spend a lot of my life on work (40+ hours per week), I learn best by doing, and I learn best when I learn a new technique in conjunction with trying to solve the problem it addresses. I am most likely to be exposed to new ideas, approaches, and perspectives during my daily job if I am working with and around people who are talented and experienced.

It is certainly true that one can (and I often do) learn from developers of all experience levels, but there is no question that the ratio of new things learned to time spent working is much higher when working with talented and experienced developers. One of the reasons it is nice to work with people with significant experience is that no one can know all things. I have found that when I work with highly talented and experienced developers, they are able to fill in gaps in my knowledge and I learn much from them in the areas where I am weakest.

A common belief is that it is best (financially at least) to purchase the most modest home in a nice neighborhood so that the house's resale value will be higher simply because it is in such a nice neighborhood. In other words, the perceived value of the neighborhood drags up the perceived value of the modest house. In many ways, a software developer can learn most by working with and around more experienced software developers and will, almost without any extra effort, be benefited in terms of his or her own skill set and experience.

Another analogy applies here as well. We often hear of individual athletes and even teams of athletes playing to the level of the competition. In other words, a team plays better against an equally good or better team and does not play as well against an inferior team. Likewise, I believe that one can achieve more as a software developer when he or she works with people of equal or greater skills because of a similar effect.

Besides the benefits one gains from working alongside highly experienced and talented developers, there is another reason to hope that I never think of myself as the best software developer I know. There is, of course, an issue of arrogance and overconfidence and an inability to learn when one thinks he or she already knows everything, but it also could be a symptom of anosognosia-like incompetence described in Kruger's and Dunning's 1999 classic Unskilled and Unaware of It: How Difficulties in Recognizing Own's Own Incompetence Lead to Inflated Self-Assessments. I have found that the more I learn, the more I realize how much more I still have to learn.

I love being a software developer most when I am learning new things. This is a trait I have observed in many software developers which partially explains our tendency to succumb to (mis)behavior motivations like resume-driven development, the Magpie Effect, and other borderline dysfunctional behavior motivators (see here also). The desire to learn new things can often be best satisfied without resorting to the negative results of the resume-driven development and the like by simply doing what is best for our customers while working with people from whom we can learn.

It is not easy admitting that we may not be as bright or as experienced (at least in a particular area) as the next developer. One of the downsides of having the modest house in the upscale neighborhood is the envy and keeping up with the Joneses. Just as one must remember the financial reason for having the modest home in the nicer neighborhood to bear these burdens, one can also think about the career benefits of working with and around more experienced developers.

I personally know at least one person (and often more than one and sometimes many more than one) who knows more than me in just about any area that I can think of. It is not the same person in all cases, but there almost always is someone who I look up to and wish to learn more from in any given subject or topic.

When you add more famous authors, bloggers, and others I don't know on a personal level to the mix, there are even more people for me to learn from. However, as I stated earlier, I find I learn most efficiently from working with people rather than just reading what others have written. I still learn from the latter, but I don't learn as comprehensively from reading as I do from doing.

I am a software developer who believes strongly in the concept of software craftsmanship (see also Manifesto for Software Craftsmanship). To transition from an apprentice to a craftsman requires years of hard-earned experience along with guidance from those who have already achieved craftsmanship. However, even when one thinks he or she has reached the status of craftsman, I believe one can still learn much from fellow craftsmen about improving his or her craft. I hope to continue improving my software development skills and craft, but I also hope that I never get to the point where I think I have nothing to learn from others.


Navya said...

Wow! Interesting topic. Thanks for sharing..

mooware said...

Great Insight! I've never viewed it that way.

GKB said...

Another good post Dustin. Sadly I'm not even in the top 100 best developers I know. On the other hand, just think of the upside I have!

@DustinMarx said...

A recent related post is Unlearn, young programmer.