Archive for June, 2011

Engineer, Developer, or Gardener?

Whats the difference between an engineer, a scientist, and a mathematician?  An engineer sees his equations as an approximation of reality.  A scientist sees reality as an approximation of his equations.  A mathematician just doesn’t care.

Cars driving over bridgeThere was discussion in a relatively recent Basement Coders podcast (ok, it went out mid May and its not even the most recent podcast they have released, that tells you how often I post to this blog) about whether or not Software Engineering is a good title for professionals writing software.  It was sparked by a blog post suggesting that a better title would be “Software Gardeners”.  Reading the blog post, I can’t agree with much that he says, and while I have never like the term “Software Engineering” (though less so recently, in fact the subtitle of this blog is “A blog exploring the world of software engineering”), but “Software Gardener” is much worse.  I don’t want to diminish what gardeners do, as it certainly does involve a lot of work.  But what gardening involves is mostly preparing the environment and letting the plants grow.  That might be a good metaphor for, say, management.  But not software development.  There you need to do the work to build the product.

Craig from the podcast, however, seems to disagree with the term “software engineering” as well, but for different reasons.  His argument is that writing software is not deterministic, while mechanical engineering (such as building a bridge or skyscraper) is.  I’ll have to disagree with that as well.  Software can be deterministic, it just usually isn’t.  And similarly, engineering in the physical world is rarely deterministic.  You can build a nuclear reactor that is safe from any imaginable disaster, only to have it meltdown after being hit by both a magnitude 9.0 earthquake and a resulting tsunami.  That kind of real world interference is not something we have to think much about in the world of software.

So why does software seem so indeterministic?  There are many reasons for this, but the biggest is that comparing the development of a web application for posting messages for friends and a bridge really does not work.  In the web application, you can sacrifice quality for speed to development, which you can’t do with the bridge since human safety is involved.  This results in more attention being spent on detail for the bridge, giving the impression that it is more deterministic.  If you spent as long as bridge engineers spend writing your web application, it will probably be very stable (but of course you will be the last one to the market).  Instead, compare something like developing the software behind a car vs engineering the car’s engine.  When your car breaks down, how often is it a software failure vs a problem with the physical engine.

So why do I have issues with the term software engineering, and generally prefer “software developer”?  I did graduate with a degree in engineering (though just barely, I started in Virginia Tech’s College of Arts and Sciences, but about a year before I graduated the Computer Science department got moved to the College of Engineering).  But I do still see a difference between developing software and the more physical engineering disciplines.  And that’s where the quote at the top of this post comes in (which I first read on VT’s Mathematics department webpage back when I was in school).  Based on that description, developing software is neither a science nor an engineering field.  Its a branch of mathematics.  We spend huge amounts of resources trying to distance our code from the real world of the computer electronics.  From assembly languages abstracting out the processor to the operating system abstracting out the assembly languages to the virtual machines abstracting out the OS, we’ve been moving further and further away from real world with each year.  We don’t see our programs as an approximation of the real world, nor do we see the real world as an approximation of our programs.  We simply do not care about the real world.

And to be honest, that’s why I love developing software.  I probably should update my blog subtitle though.

, ,