Path: utzoo!mnetor!uunet!husc6!hao!ames!amdahl!nsc!joe From: joe@nsc.nsc.com (Joe Caporaletti) Newsgroups: comp.software-eng Subject: Re: Is it Art or is it Engineering Message-ID: <4975@nsc.nsc.com> Date: 19 Feb 88 21:13:59 GMT References: <6879@agate.BERKELEY.EDU> <4618@teddy.UUCP> <635@cresswell.quintus.UUCP> <4620@teddy.UUCP> <32637UH2@PSUVM> Reply-To: joe@nsc.UUCP (Joe Caporaletti) Organization: National Semiconductor, Sunnyvale Lines: 44 Virtually every engineering displine of the industrial revolution relies on the analytical concept of functional decomposition. A system is decomposed into processes with well defined input/output effects on other processes. This partitioning is the basic technique for handling complexity by allowing each processes to be understood separately. Software is distinguished from other engineering disciplines by the necessity to specify algorithms as a SEQUENCE of simple one word operations. This is necessary since there is only one central processing unit which can operate on the data in memory. Functional decomposition is used in software as an analytical tool (e.g. data flow diagrams). However, efficient implementation requires sequencing of operations. Therefore, the functionality is transformed to a sequenctial algorithm. There is no simple set of rules for doing this. Although there has been a lot of good research on program proving, there is yet no practical formalism for showing that a particular sequencing of operations is functionally correct. The complexity and unprovable nature of the of the transformation from functionality to sequential algorithmic implementation is unique to software. For example, although a hardware designer has many options for the implementation of some particular combinatorial logic function, the engineer must use standard mathematical techniques (e.g. Boolean Algebra) to prove that the choosen implementation matches the desired functionality. While software walk-throughs are a great idea, they are really a hand-waving substitute for a formal proof. In other engineering disciplines like mechanical or chemical engineering, a great deal of research goes into proving the reliability and repeatability of the basic processes and principles on which they rely. When software can apply the same kind of research to everyday problems, it too will be an engineering discipline. This is probably several years off and will require a sophisticated degree of automated assistance to the process of program transformation. Knuth knew exactly what he was doing when he named his series "The Art of Computer Programming." Joe Caporaletti Software Engineering and Tools Specialist National Semiconductor