Are Software Developers Really Engineers?

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!”

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:

  1. I think that we like to apply the term “engineer” to ourselves because we think that it makes our job sound important.  The term historically implies skill, design, construction and creation.   My problem with this is that lately, the term “engineer” has been applied to all kinds of job positions to make them sound more prestigious than they really are.  Over time this term has been devalued.  Now there are positions like garbage engineers (trash collector), administrative engineer (resource manager), and sales engineer (salesman).  Now, I am not trying to imply that these jobs are meaningless or simplistic, but rather that the term “engineer" has recently been used to apply a more prestigious name to the position. 
  2. In my opinion, true engineers operate under specific rules and natural laws.  With software development, we are Gods in our own little world.  Sure we are constrained by certain rules, but those limitations are not as clearly defined as they are with physical engineering.  We don’t have to worry about gravity, weather, or thermodynamics.  Most of our rules are not even exposed to us at the level that we develop, but rather they are abstracted away by the compiler and hardware that we are running on.  Within our development environment, we can do just about anything that we want to.
  3. Mistakes in physical engineering typically result in injury or death.  Mistakes in software design typically only result in inconvenience.  Sure, there are the cases where a bad software design can lead to physical loss, but these are the exception.  For example, consider the Zune leap year bug.  If a nuclear engineer made the same mistake the results could be devastating.  Risk management is much more of a priority for the physical engineering practices than it is for software development (in most cases). 

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: