Last week, I posted a short entry on my blog about “computer programmers”, “software developers”, and “software engineers”. One of my friends (and, myself, many years ago), thought “aren’t they the same thing?” [If you don’t like to read long winded articles, please skip this one].
Here is a quick generalization, with which you should take with a grain of salt, since the lines do blur, and these are only my interpretations:
A computer programmer is like the person working in house construction, whether they are the framer, the electrician, or the plumber. They all use a set of plans, created by the architect, to build their portion of the house. They rarely work closely with the architect (usually only on custom homes), but for the most part, they usually do not have any interaction with the architect for homes created by the bigger home builders, building several houses on a street at the same time. In the case of the computer programmer, they usually do NOT do any design work, again, they work from a set of plans, usually created by another person, such as a systems analyst, or business analyst (or in some companies, they are called, “planners”, or “designers”). Computer programmers do work closely with the systems analyst, etc. [Another different example is the person building a bridge (i.e., the Golden Gate), he isn’t the (licensed) engineer who designed that bridge, he’s just one of many people constructing it].
On the other hand, (and “extreme”), there is the software engineer. He is like the Architect who designs houses, and/or like the Mechanical Engineer who designs bridges. These are the guys who’ve taken “exams” to prove they know their stuff. You really don’t want a house or bridge to fall down. Examples software created by software engineers are:
Embedded software inside a pacemaker or x-ray machine, or software that makes a rocket go where it should go and not where it shouldn’t (like on your house, for example). These examples are where software MUST be ALWAYS designed correctly the FIRST time, and NOT EVER have any bugs (errors in logic). This isn’t to say these three examples have never had any bugs, since there are a couple of real life examples where a rocket with its satellite had to be blown up immediately after launch due to an error in logic that caused the rocket to veer off course, and there was an x-ray machine which gave much larger than normal doses of radiation due to the designer of the UI (user interface) not anticipating the x-ray technician entering in the various parameters in an unanticipated manner.
So, the Master’s program in Software Engineering at Saint Thomas, is trying to train/teach us programmers (and software developers) HOW to write/design critical software the right way, not by teaching us to “test it in every way possible”, but to design it such that there can be NO errors in the design – they can do that with bridge and house designs, we should be able to do it with software construction. [Of course, there is more to this Master’s program than just that].
Ok, so, now you’re asking, what, then, is a software developer? This is the person in between the computer programmer, and the software engineer – and again, this is blurry. They typically are a combination of programmer and system analyst. They create the design as well as build/construct the software. They should have a good understanding of the life cycle of software development (starting with requirements gathering, creating functional/design specifications which leave no ambiguity, and ending with…
Oops, we’ve run out of time – so, stay tuned for the next blog entry: A real life example of the development of a major new application. We’ll continue the comparison between a computer programmer and software developer. See you next time.