Path: utzoo!attcan!uunet!aplcen!samsung!usc!ucsd!swrinde!zaphod.mps.ohio-state.edu!sdd.hp.com!hplabs!hpfcso!hpfcmgw!gt From: gt@hpfcmgw.HP.COM (George Tatge) Newsgroups: comp.software-eng Subject: Re: Development vs Engineering Message-ID: <2450009@hpfcmgw.HP.COM> Date: 11 Oct 90 18:30:37 GMT References: <27696@bellcore.bellcore.com> Organization: HP Fort Collins, CO Lines: 64 > > What methods, tools, practices do you feel must/should be > employed in the creation of software for the process of > creation to be called software _engineering_ as opposed > to software _development_? That is, are their activities > or technologies that you feel, if lacking, would prevent > you from considering development activity (even very > conscientiously carried out otherwise) to deserve the > label _engineering_? > Even though you asked for e-mail, I think this is a great question and would like to see some interactive discussion... Since the focus is on "engineering" this is one case where it is clearly reasonable to look at other, older engineering disciplines to see what has been accomplished. It is probably fair to say that first civil and then mechanical engineers defined the role. Without going through a long history from the pyramid engineers to Henry Ford, lets just jump to a few conclusions. A. Engineers are optimizers. A1. They design/test to reduce costs. A2. They design/test to reduce weight. A3. They design/test to improve safety. A4. They design/test to improve reliability. A5... etc. B. Engineers are innovators. Often, the solution to the above problems lies in a clever new design or manufacturing technique. Rarely, but significantly, an entirely different approach is taken to the problem instead of further refinements to known and trusted solutions. Examples include such things as trusses, air bags and velcro. By and large though, engineering involves optimizing and incremently improving existing, known solutions. In other words, engineering is an evolutionary based discipline. Applying these ideas to the original question, a few things emerge. 1. Since there can be no engineering without testing to insure that the product is safe and reliable, a software engineer must have access to test equipment and tools. Obviously, everyone would like these to be as automated as possible (eg. the robot arm that opens and closes the door a few trillion times to test reliability) because testing can become boring very quickly. 2. Since cost optimization is a key role of engineering, there must be a reliable means of measuring cost. This has, thus far, completely evaded the software community at large. If a mechanical engineer proposes a newly designed water pump, he can make very accurate estimates about the manufacturing costs and the warranty costs of his design. When a software engineer proposes a new bottom level sort routine, nobody really has much of an idea as to what "cost" might mean in this context. The problem only gets worse on the macro scale when we talk of adding "major new features" to existing software. 3. I've saved the most important for last. My experience is that most software people cringe at the idea of becomming engineers. If it is truly the goal of someone or some group to turn software development into an engineering discipline then I suggest that it is at least a thirty year process and will require a radical change in the educational philosophies espoused at the universities where software people are indoctrinated. George Tatge