Compartilhar via


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: https://savvyduck.blogspot.com/2009/02/its-job-title.html

Comments

  • Anonymous
    February 07, 2009
    PingBack from http://www.clickandsolve.com/?p=4747

  • Anonymous
    February 09, 2009
    There are software engineers and there are software developers (programmers). A good developer can translate words and ideas into code. A good engineer creates those words and ideas.

  • Anonymous
    February 09, 2009
    Don't forget the case of the Therac-25 software bug.  This was no inconvenience, it caused several deaths. There are a number of other "significant" examples out there if you look for them.

  • Anonymous
    February 09, 2009
    The term Engineer implies you have an engineering degree. in Canada if you call yourself an engineer and you don't have the degree to back it up you will be taken to court as soon as the governing body (Engineers Canada) finds out. The main difference is Software/Computer engineers (as an engineering discipline) are a subset of 'software developers' we write the code that has to work, we don't really get to 'beta' our systems. we design things like control systems for power plants. firmware for long distance emergency radio networks etc. As a engineer you are designated a professional (in the same way a MD works for doctors or passing the BAR for lawyers), as a professional you are held responsible (legally) for your code. if your firmware for that long distance radio bugs out you can be held legally responsible for it, you can (and probably will) loose your engineering status, and probably end your career. in short, while and engineer and a software developer share a sub set of skills (in a similar way that an architect and a civil/structural engineer share a set of skills) if you don't have an engineering degree you are not an engineer. Cheers -Andy the compE student.

  • Anonymous
    February 09, 2009
    I prefer to think of myself as a computer scientist and have never really understood why computer scientists would think software engineer is a better title to have.

  • Anonymous
    February 09, 2009
    The comment has been removed

  • Anonymous
    February 09, 2009
    The comment has been removed

  • Anonymous
    February 09, 2009
    I think engineer is an inappropriate title because most software development involves some amount of research into the problem domain, while engineering is based on exploitation of previously known principles that the engineer is trained in.

  • Anonymous
    February 09, 2009
    As an Engineer you also have a better view of all the underlying system.  You can't write really optimised code without a good knowledge of the hardware, os, language/compiler, ... So Yes there is some field where engineering belong to "security" like in nuclear plant, airplane autopilot, and a lot of other places, but it could also belong to performance, energy saving, and much more not that harmfull for people.   Optimizing a code to have good performance on one server instead of a cluster of n machine could also be signifiant.  Handling security issue (like in HIPPA), network fiability, secure data storage could also belong to professionnals. There is a HUGE place in the software industry for designers, content writers, programmers, analysts and also for engineer. J-Luc

  • Anonymous
    February 09, 2009
    Jean-Luc,  Given your point, would a software engineer be the same as a software architect?  The examples you provided seem very fitting of what an architect does.

  • Anonymous
    February 09, 2009
    <i>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</i> That's better than if you had 10 economists, you would get 13 different approaches.

  • Anonymous
    February 09, 2009
    BlogReader,  Quite true.  And likely none of the 13 will actually work.  They might compile though.

  • Anonymous
    February 09, 2009
    I have both a EE and CS degree, but went into software when I graduated.  The two fields are extremely different, even though they share a focus on computers.  I wouldn't call software development engineering, though I could see a day when it matures to deserve the title.  The most common excuse I hear is that the IEEE says so - an organization that constantly asks for money - and somehow don't believe it was done to increase subscribers.  What I despise are those who call themselves scientist, as its nothing compared to what family members had to due to earn that title.  Political Science isn't a science either. Engineering requires extensive use of mathematics and working under the constraints of the real world (physics, chemistry, etc) to solve problems.  Product development is far slower and design choices aren't made half-hazardly - effort is made to evaluate alternatives (a week of hacking doesn't magically fix a bad product). I guess the simplest observation why software isn't a form of engineering is because almost none of its practitioners have ever read an academic paper.  In any engineering field with rapid changes, one must constantly read about new research and methods.  I do not find that blogs or "agile" books (e.g. Clean Code - its downright aweful) rise to the same quality.  Once software developers can no longer wing it, perhaps then they will learn what engineering is like.

  • Anonymous
    February 09, 2009
    The comment has been removed

  • Anonymous
    February 09, 2009
    the software that runs medical systems, aircraft, car, traffic lights, the software running nuclear power plants, tell the code monkey's that are programming these systems they aren't engineers.  Maybe its just you that aren't competent enough to be called an engineer.  You're fired!

  • Anonymous
    February 09, 2009
    cease,  Thanks for the comment.  However, I think that these are the exceptions rather than the rule.  And you are right, I am not competent enough to be called a Software Engineer, I will be the first to admit that.  The day I realized that I didn't know as much as I thought I did was the day I truly started learning.

  • Anonymous
    February 09, 2009
    It comes down to fundamentals: Software Development is the application of Computer Science which is founded on Discrete Mathematics (Logic, Automata Theory, Languages, etc.). Engineering disciplines are the application of various Engineering Curricula which are founded on Continuous Mathematics (Differential Equations, etc.). Software developers aren't engineers, we're closer to essayists.

  • Anonymous
    June 23, 2014
    In response to the con of the argument at the beginning of the post: there is more than way to solve a problem. Different engineers may apply different constructs or employ different methodologies when building their bridge.

  • Anonymous
    September 30, 2014
    I agree, software development is not an engineering field; manipulating one's and zero's qualifies for Wizardeer's. I worked designing and building factories of all types for 25 years before I went into software development. Both occupations have the necessity for creativity, but real engineering requires knowledge of the physical elements of the universe and the laws that govern them; force, gravity, weather,etc.