Monday, December 29, 2008

Passion: An Important Software Development Trait

I have blogged previously on the importance of confidence as a characteristic of a successful software developer. Another important characteristic that I have found to be indicative of a good software developer is passion. One could argue that anyone in any field does a better job when he or she is passionate about what he or she does. I don't argue with that and, in fact, agree with that. However, in talking with associates, friends, and family members in various careers, it seems to me that engineers in general and software engineers/programmers/developers specifically tend to be more passionate about what they do than many folks in other industries.

There are some other areas that have this similar high-level of passion across the industry: education comes to mind. However, it is difficult to think of any industry that is more prone than ours to have people go home for the day and continue doing at home on their own time the same general type of things they have just finished doing during the day. I'm not saying that we all love our day jobs; those can certainly be boring to us if we are not allowed to code or not allowed to do things we'd like to do. What I am saying is that many of us do work at a day job to make a living whether we really enjoy the job or not, but then many of us go home and work on at least remotely similar stuff for the fun of it. This is what I think generally distinguishes our industry from many (but not all) others.

Of course, not every software developer/engineer has the same high level of passion for what they do. While our industry has what I think is an above-average level of participants who do have such a passion for what they do that they spend inordinate amounts of time on those areas, I have known many good developers who really do treat their job as a 9-to-5 thing. Many of them do good work and are solid team members; very few of them, however, are ever considered the "best" or indispensable or are sought after regularly for their expertise.


Jeff Atwood on Programming Passion

Jeff Atwood's post Programming: Love it Or Leave It articulates many of my observations and thoughts on this subject. Atwood references a Joel Spolsky comment in a forum thread Thinking Of Leaving the Industry and adds his own statement:

"Joel implied that good programmers love programming so much they'd do it for no pay at all. I won't go quite that far, but I will note that the best programmers I've known have all had a lifelong passion for what they do. There's no way a minor economic blip would ever convince them they should do anything else. No way. No how." (Jeff Atwood, referencing Joel Spolsky).

I couldn't agree more with the above statement. I agree with both Atwood and Spolsky regarding the sentiment that "good programmers love programming so much they'd do it for no pay at all." I agree with Atwood that most of us probably wouldn't do our day job without monetary compensation. After all, most of us have to do something that earns monetary compensation to pay the mortgage, to purchase food and clothing, and even to splurge a little on some tech toy. Also, if we weren't being compensated for our day job, we'd be more likely to spend that same time working on our own programming project.

I also agree with Spolsky in the sense that many of us do program for no monetary compensation on our own time. This is the distinction between our industry and many others; many of us do want to do the same general type of work (programming) on our own time that we do on the boss's time. Unlike the aspiring actor or actress with a typical day job (such as being a waiter/waitress) that is far removed from what they really want do do, for most of us the day job is much, much closer to our dream job. At times, they can even be the same thing given the correct project, correct customer, correct management, and correct team.

So with all that stated, what about the developers who are not as passionate? Many can still be valuable contributors, but it is less likely that they'll distinguish themselves from their colleagues. Soon Hui's blog posting Programming is All About Passion does a nice job of articulating the natural advantages the highly passionate programmer has over those who just do it for a job.


Manifestations of Software Development Passion

Before going on, I wish to point out that, despite what I write next in this posting, software development passion can be manifest in several different ways. Going home and feverishly programming more, often in a different language or with a different framework, is only one manifestation of this developer passion. I have several colleagues who demonstrate their passion when they say to me things like, "As I was driving home last night, I realized that we need to do this ..." or "While I was in the shower today, I figured out how to solve this problem we've been fighting."

There are many other examples of the passionate software developer. I have worked with many good developers who may not show any obvious passion to outsiders, but it becomes evident as soon as one tries to get them to take on a management role or do a non-development task. They have an obvious passion and preference for developing software as opposed to "any other ordinary job." On the other hand, I have known a relatively small number of developers who could take it or leave it when it comes to software development. All else being equal, it is difficult for the latter person to be as effective at development as the other developers who strongly prefer development.


The Passionate Software Developer: First Example

I will use a friend of mine as an example of a highly passionate and not surprisingly highly successful software developer. Michael Martin is a well-respected software developer that almost instantly becomes one of the first choices for fellow developers to go when seeking answers to questions. He and I have collaborated on several projects, including on the Oracle Technology Network (OTN) article Visualize Your Oracle Database Data with JFreeChart. I use Michael as an example because he is one of the better developers I have worked with AND because the evidence of his passion is easily demonstrated. To see an example of Michael's passion, visit the December 2008 blog posts for Michael as well as his November and October postings. For fun and with little or no direct benefit to his day job, Michael has played with OpenSolaris and different flavors of Linux and recorded his observations. He did this and continues to do this for fun and over his holiday break!

There are many passionate software developers out there who never write a blog entry, never write an article, never write a book, and never speak at a conference, but spend as much time or more time as any of these authors or presenters learning and playing with technology. In any job, the person with passion for the work will have an advantage over the person who lacks passion for the work. I see this even in my own career; I believe that I do a better job at the things I enjoy than at the things I don't enjoy as much. The problem with lacking passion about the work in our industry is that so many of our colleagues do have this passion.


Additional Examples of the Passion in Software Development Industry

For additional evidence of the high degree of passion among many software developers, I'll cite a few anecdotal pieces of evidence:

* I have had more than one manager in my career who could not understand why I turned down a possible managerial position or position of greater responsibility. I don't normally admit this in technical forums where it is likely to lead to various catcalls and innuendos, but I did earn an MBA several years ago. I did learn several interesting and useful principles in that program, but I also realized that I prefer software development.

* I am not aware of an industry that has as many silly holy wars as ours. I think this is evidence both of our collective arrogance confidence and of the high degree of passion we possess. If one removes oneself from most of these software-oriented holy wars and tries to look at them with a little objectivity, it often becomes clear that they are really not a big deal. The long list of software development-oriented holy wars includes vi versus emacs, PC versus Mac, NetBeans versus Eclipse versus JDeveloper versus IntelliJ IDEA, static versus dynamic, Java versus Ruby versus Python versus PHP versus Scala versus Erlang versus Groovy versus JRuby, Flex versus OpenLaszlo versus Google Web Toolkit versus Struts versus JavaServer Faces versus Tapestry, Ant versus Maven, Java versus .NET, a plethora of issues surrounding coding standards and conventions such as curly brace placement or no curly brackets at all, Spring versus EJB3, Spring versus Guice, XML versus JSON, XML versus annotations, and the list goes on and one and on. We fight these (often silly) battles for several reasons including confidence issues, but also because we truly believe that our favorite is the best and we want to "help" others see that.

* The Open Source movement is another piece of evidence that I put forth to support my position that software developers have an unusually high degree of passion for their work on a per-person basis. The amount of open source software that has been started and even maintained by individuals who do not make a dime doing so is staggering. Even many of the open source projects in which developers do earn compensation, it is often less compensation than they'd get for the same work effort and accomplishment in other venues. I think the reasons for developers giving so much are wide and varied, but certainly the confidence I discussed previously (I can do this better than anything that already exists out there) and the passion I cover in this posting (I want to try this out to see if I can and to learn something) are key components.


Why Confidence + Passion is Desirable

While I have found that every highly successful software developer I have encountered is extremely confident, confidence itself does not always imply a great developer. This is partly due to the Dunning-Kruger Effect (also see here and here). This effect is documented in the article Unskilled and Unaware of It: How Difficulties in Recognizing One's Own Incompetence Lead to Inflated Self-Assessments. This article displays some insightful graphs comparing study participants' self-assessments against actual measured results in areas such as humor, logical reasoning, and grammar. There are many interesting observations from these studies cited in this article, but I have always found it particularly interesting that the least competent often overrated their own skill, the average performers estimated about right, and the top performers underrated their own skill.

It is obvious from these study results that confidence alone is not a sure indicator of the competencies of individuals. As I stated earlier, it has been proven to me repeatedly that confidence is a common characteristic of the most successful developers I have worked with. Unfortunately, I have worked with a few individuals who had as much hubris about their skills as anyone I know, but did not really have the skills to back up their arrogance.


I have observed that the most successful software developers I know possess passion for software development as well as confidence. This is not surprising because passion will lead to developers spending more time learning, more time thinking about what they're working on, and so forth. We're often better at doing the things we enjoy or, conversely, we do things more often because we're good at them. Like confidence, passion in a software developer can not only lead that software developer to put in extra time and/or effort, but it can also be an indicator that the software developer is a successful one. He or she particularly enjoys software development because he or she is good at it.


Why Shouldn't We Be Passionate About What We Do?

As Joel Spolsky pointed out in Thinking of Leaving the Industry, we really do have it pretty good in the software development industry. While the most highly compensated individuals with four-year degrees in some industries may be more highly compensated than the most highly compensated individuals in our industry, it seems to me that the "average" person in our industry starts at a higher salary than average counterparts with four-year degrees in other industries. Similarly, software development and IT is often cited as one of the best careers requiring only a bachelors degree. What tops it all off for me, however, is that I get to do what I love (or something related to what I love) AND be paid for it. The next time you hear someone complaining about a professional athlete being paid too much just to play a game they (or we) would play anyway, consider that the same might be said of us.

We might not get paid anywhere in the same league as these players and others outside of our industry might not be interested in doing what we're doing, but it is certainly true for most us that we are paid to do what we love. That is certainly not true of many industries where the only motivator is the compensation. I can only think of a handful of industries where many of its practitioners go home and willingly and freely continue the same types of tasks for their own satisfaction. For many software developers, this occupation allows us to get both monetary compensation and to do what we truly love at the same time. From my observations, this combination is more common among the engineering disciplines than in most other disciplines.


Conclusion

Because so many in our industry are passionate about what they do, a software developer has a better chance of being highly effective when he or she shares this passion. Perhaps even more importantly, we should all do what we love because we end up doing it for such large portions of our life. I am grateful that I am doing what I love to do and that I even get paid for some of it.


Related Blog Postings

There are several good blog postings that demonstrate the importance of passion in software development, the prevalence of passion in software development, and the advantages of being passionate about software development. These include Programming: Love It or Leave It (previously referenced), Programming is All About Passion (focuses on competitive advantages of being passionate about software development), Passion for Software Development: To Have or Have Not? (divides developers into three categories related to level of passion about software development), Passion - Do You Have It? And for What? (nice treatment of how "passion" can be misused or misapplied), and When Passion Becomes Dogma Is It Elitism? (looks at bad side effects of passion turning into dogma, but also considers some positive advancements due to dogmatic insistence).

UPDATE (31 December 2008): Another related resource that has since appeared is Are Programmer's Spoiled? The author's last couple of emphasized sentences summarize thoughts fairly similar to those proposed in this blog posting.

3 comments:

edburns said...

Hello, and thanks for the excellent post. I'd like to mention my book that explores passion and other traits of successful software developers through a collection of interviews with some of today's top programmers. It's called "Secrets of the Rock Star Programmers". Yes, it's a silly title. Anyhow, you can find more at http://ridingthecrest.com/.

@DustinMarx said...

The post Process kills developer passion provides a provocative (notice the number and length of feedback comments) look at the relationship of process to software developer passion. While most developers seem to agree with the post's general premise, the degree of agreement seems reduced when developers find their particular favorite process approach singled out.

Unknown said...

So true. You really have to have these traits in order to be come a good programmer/developer and in order also to produce a good software development project along with your team. Nice article!