Friday, March 20, 2009

Entangled in Terminology

A glimpse into the somewhat enigmatic vocabulary of those creating software is enough to make your head swirl. Words keep popping up now and again – words that seem to ring a bell, but it is when you set the noble, if ambitious, linguistic goal of giving these terms a touch of terminological definiteness that you find yourself in a kind of no man’s land. How is software development different from software engineering, does the word programming serve as an umbrella term for both of those and, last but not least, how does computer science fit into the whole semantic system?
These are the questions that one is likely to find difficult to come to terms with when trying to muster the courage of plunging into the deep waters of IT. And, come to think of it, telling the difference between software development versus software engineering can turn out to be a good springboard for those who are just too obsessed with getting a definition for each and every word, which is exactly my case, those who need to deal with the IT guys and even those planning to get down to creating software (a roundabout term used here for the sake of convenience).
At this point, let me make it clear that in the present piece I’m sharing with you my idea of what might be the catch – an idea based on some observing and thematic reading, but still potentially subjective.
Now, there are a number of layers to investigate. On the one hand, to an average person out there, all the four terms might appear roughly synonymous, which in most cases can be just a piece of knowledge sufficient enough unless the average person needs to actually deal with these things. However, it could be noted here that people are mostly reluctant to expand their world outlooks, hence the fact that the terms programmer and software developer are mostly used interchangeably.
On the other hand, in the academic world, as well among those putting theories into practice, this kind of vagueness is not an option. Firstly, the computer science versus software engineering distinction seems to consist in distinguishing between theory and practice. Secondly, when defining software engineering one has to bear in mind the two components of the word: the engineering part implies that this particular term was at some point coined to emphasize an approach which treats the process of creating software just like any other engineering process, with all the inherent complexity, whereas the software part is there to point to the product’s underlying feature, i.e. its intangibility (in the definition by the Institute of Electrical and Electronics Engineers, software engineering is basically the application of engineering principles to creating software). Yet another aspect of the term can be traced from the programming versus software engineering distinction, i.e. the fact that programming is writing code, period, whereas software engineering incorporates management, coordination and design procedures, along with code-writing. And it is here that we arrive at the most challenging point: where does the borderline between software engineering and software development lie? It seems quite difficult to find any secure grounds to declare these as separate notions. However, the approach suggested by Prof. Gary Pollice in his article at http://www.ibm.com/developerworks/rational/library/dec05/pollice/index.html seems sensible enough. It boils down to the following: software development is the process of putting software engineering principles into practice. So here’s what I’ve settled for: software development is a less imposing, real-life word to denote the routine of organizing teamwork, creating specifications, writing code and, if you will, making software production more sustainable by relying on general practices commonly used in other engineering fields.