A few co-workers and I lately have been having this conversation. The following hypothetical argument illustrates the con of the argument:
How can we be engineers if we can’t agree on what we’re building? Do engineers have conversations like this: Engineer 1: “It’s a bridge.” Engineer 2: “No, it’s a span.” Engineer 1: “Die, heretic!”
How can we be engineers if we can’t agree on what we’re building? Do engineers have conversations like this:
Engineer 1: “It’s a bridge.”
Engineer 2: “No, it’s a span.”
Engineer 1: “Die, heretic!”
My co-worker Scott came up with the above example. He has also posted a short blurb on his blog about this. How true is that example though. We have the above types of conversations/argument all the time when it comes to defining a software solution.
Initially I was on the pro side of this argument, believing that we were indeed Software Engineers. After some thought and reflection, I have since switched my position to agree with Scott. Here are some of the reasons for my decision:
Edit: I have received some comments pertaining to reason #3. What I am trying to imply here is that mistakes in physical engineering usually result in more relative cost than mistakes made in software development. While this reason alone is not enough to make the point, I think that it has to be a factor in the decision. I also think that there are cases where software developers could be considered engineers. The discussion that I am trying to have is whether we can apply the blanket label of "Software Engineers" to developers as has recently seemed to be the case in our community.
I like to think of us a more akin to chefs (who could even be called culinary engineers). We can take many different approaches to reach the same solution. Some designs might be better than others, but that is of constant debate. If you put 10 developers in a room and give them a proposal, you will likely have 10 different approaches to achieving the resulting solution. And the 10 developers will argue their individual approach to the end, each believing that their implementation is more correct than another's. And in the end, each result might even meet the requirements. But it is the lack of specific design laws that persuades me to believe that we are not engineers in the true sense of the word.
I am interested to hear what others have to say on the topic, so feel free to flame me or post your reasons for believing one way or the other.
Edit: Another take on the argument: http://savvyduck.blogspot.com/2009/02/its-job-title.html