Tuesday, October 10, 2006

What Makes a Good Software Developer?

An article I read recently at Hacknot, titled "Developers are from Mars, Programmers are from Venus” about what it means to be a developer vs. a programmer, raised some interesting discussion points.

The article was rather critical of programmers, who, according to the article, only want to write code, play with new technologies and languages, and consider everything else, an annoying detail that is best avoided as much as possible. Computer programmers, so the article claims, are arrogant, look down on users and intentionally use technical jargon they know will not be understood when they talk to users. Furthermore, they often waste their company’s time and money by engineering overly complex solutions to problems or using non-ideal technologies to solve problems, for no reason other than that it gives them a chance to play with a new language, or technology, or write more complex and interesting code. Developers, on the other hand, care about users and try to explain things to them in terms they can understand, using as little technical jargon as possible, take the time to learn about the problem domain they are working in (accounting, insurance, or whatever), and use the simplest possible solution, even if that solution might not be cool or trendy. In a nutshell, the article claims, "programmers play, developers work”, and goes on to say "it is the developers that you want working in your organization. Programmers are a dime a dozen, but developers can bring real value to a business.”

Whoa. Hold on a second there. First of all, I think it is a huge mistake to try to classify programmers and developers so differently to say that one is from Mars and the other from Venus. In fact, if you talk 20 other developers or programmers, you will probably get 20 different definitions of what the difference is between a developer and a programmer. Why is it so hard to establish a clear distinction? Because in reality, most of us are both developers and programmers.

Many of us started out as programmers. We were interested in programming as an intellectually stimulating pursuit in its own right. What domain we were working in didn’t really matter to us, as long as we were solving problems by writing code. We became developers later on when we got out into the work environment and found out that this kind of work in a typical business environment involved a lot more than just writing code. But in becoming developers, we never abandoned our programmer roots. We still enjoy programming as an intellectual challenge in its own right and enjoy learning new technologies and languages simply because they are something new to learn.

On the other hand, many of us started out as developers. We had a domain specific problem that we needed to solve, and we couldn’t find any existing software to do it, nor could we hire someone else to do it (possibly financial constraints). So we decided we would try to solve it ourselves. We went down to the local bookstore, and picked up a couple of books on programming, and we learned as we went. We were much like any other "do-it-yourselfer” in this respect. Learning programming was a means to an end in order to solve a domain specific problem we needed to solve. However, eventually, we became programmers as well as developers, because we developed a genuine interest in programming as an enjoyable and intellectually stimulating pursuit in its own right. Those of us who didn’t probably didn't become professional software developers. Why? Because software development would not have been an enjoyable activity for us unless we were working on a domain specific problem for which we had a very strong interest. For example, unless we happened to have a passion for the insurance business, we would not have enjoyed working as a software developer for an insurance company, unless we enjoyed the act of programming as an activity in its own right.

So are developers and programmers really that different? Is one from Mars and the other from Venus? I say not at all. And qualities of both developers and programmers are required in order for someone to be good at the task of software development. Is it better to use simpler solutions, even if they are not "cool”? In general, yes. But at the same time, we must be careful that software development does not change from an enjoyable and challenging activity, into a monotonous and tedious task that involves nothing more than dragging and dropping prefabricated pieces onto a canvas to create "plug and play” software. People who enjoy their work are more productive than those who do not. Because of this a pure developer, who is forced to work in problem domains he or she is not particularly interested in, using only the simplest possible solutions which require the least effort to implement, may actually be less productive than a programmer who implements a more complex solution, but enjoys programming as a challenging activity in its own right, even if they are not particularly interested in the problem domain.

I am reminded of a quote from one of the prominent pioneers in our field:
"I think that it's extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don't think we are. I think we're responsible for stretching them, setting them off in new directions, and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all, I hope we don't become missionaries. Don't feel as if you're Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don't feel as if the key to successful computing is only in your hands. What's in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.” -- Alan Jay Perlis (April 1, 1922 - February 7, 1990)

Kind Regards,
Mike Urban
murban@javalobby.org

No comments: