COMPUTING SCIENCE 220
Software Engineering and Human-Computer Interfaces
Computing Science and Software Engineering: Definitions
Computing Science: The Short Definition
The discipline of computing is the systematic study of algorithmic processes that describe and transform information:
their theory, analysis, design, efficiency, implementation, and application.
The fundamental question underlying all of computing is, "What can be (efficiently) automated?"
Computing and Engineering
The Task Force on the Core of Computer Science (whose definition of the discipline of computing is quoted above) identified three major paradigms or cultural styles by which computing practitioners approach their work:
- Theory is rooted in mathematics; four steps are followed in developing a theory:
- characterize objects of study (definition)
- hypothesize possible relationships among them (theorem)
- determine whether the relationships are true (proof)
- interpret results
Theory is the bedrock of the mathematical sciences: applied mathematicians share the notion
that science advances only on a foundation of sound mathematics.
- Abstraction (modelling, experimentation) is rooted in the experimental scientific method;
four steps are followed in the investigation of a phenomenon:
- form a hypothesis
- construct a model and make a prediction
- design an experiment and collect data
- analyze results
Abstraction (modeling) is the bedrock of the natural sciences: scientists share the notion that scientific progress
is achieved primarily by formulating hypotheses and systematically following the modeling process to verify
and validate them.
- Design is rooted in engineering; four steps are followed in the construction of a system or
device to solve a given problem:
- state requirements
- state specifications
- design and implement the system
- test the system
Design is the bedrock of engineering: engineers share the notion that
progress is achieved by posing problems and systematically following the design process
to construct systems that solve them.
The Task Force concluded:
Computing sits at the crossroads among the central processes of applied mathematics, science, and engineering.
The three processes are of equal -- and fundamental -- importance in the discipline, which is a unique blend of interaction
among theory, abstraction, and design. The binding forces are a common interest in experimentation and design as
information transformers, a common interest in computational support of the stages of those processes, and a common
interest in efficiency. 
Software Engineering: A Definition
Software engineering is: 
- a modelling activity -- software engineers deal with complexity through modelling, by
focusing at any one time on only the relevant details and ignoring everything else.
- model -- an abstraction of reality
- analysis -- constructing a model of the problem domain
- design -- constructing a model of the solution domain
- In OO methods, the solution domain model is an extension of the
problem domain model, so that the structure of the software reflects that of the problem.
- a problem-solving activity -- models are used to search for an acceptable solution
- driven by experimentation
- reuses pattern solutions
- incremental evolution of the system toward one acceptable to the client
- revised in response to change
- a knowledge acquisition activity -- in modelling the application and solution domain,
software engineers collect data, organize it into information, and formalize it into knowledge.
- nonlinear -- new information may invalidate previous knowledge
- risk-based development -- identify high-risk components to avoid late surprises
- issue-based development -- execute development activities in parallel, organizing
according to issues which still need resolution
- iterative development -- design and implement the high-risk (difficult) parts first
- a rationale-driven activity -- software engineers need to capture the context in which
decisions were made and the rationale behind these decisions in order to understand the implications
of a proposed change when revisiting a decision.
- assists in dealing with changing systems
- useful in the maintenance phase
Wasserman  identifies eight fundamental notions that form the basis for an
effective discipline of software engineering:
- Abstraction -- a description of the problem at some level of generalization that allows us to
concentrate on the key aspects of the problem without getting mired in the details
- Analysis and Design Methods and Notations -- when you work as a team, you must
communicate with many other participants in the development process, and therefore need a
common notation for communication and documentation
- Prototyping -- building a small version of a system, usually with limited functionality, helps the
user to identify the key requirements of a system and demonstrates the feasibility of a design
or approach; commonly used to design a good user interface
- Software Architecture -- the description of a system in terms of a set of architectural units,
and a map of how the units relate to one another
- Software Process -- the organization and discipline in the activities of the process of
developing software (as well as to the products that result) contribute to the quality of the
software and the speed with which it is developed
- Reuse -- taking advantage of the commonalities across applications by reusing items
from previous development
- Measurement -- quantitative descriptions of improvements to processes, resources, and
methods permit us to compare progress across disparate projects and support analysis
- Tools and Integrated Environment -- computer-aided software engineering (CASE) tools
are designed to enhance software development, but rarely address the entire software
development life cycle
Engineering: A New Definition
What is needed for the engineer of the future is a new definition -- one that includes the art
and skill of problem-solving in broader socio-technologic issues and, as a need that will be with us forever,
the art and skill of change management. In this context, no other career -- with the possible exception of
medicine -- offers so much potential for personal reward, self esteem and enduring value to [humankind].
 Task Force on the Core of Computer Science, Computing as a Discipline,
CACM 32/1 (Jan. 1989), p. 12.
 Computing as a Discipline, p. 11.
 Bruegge and Dutoit, Object-Oriented Software Engineering
(Prentice Hall, 2000), p. 5.
 Martin Fowler, Analysis Patterns (Addison Wesley, 1997), p. 1.
 Anthony I. Wasserman, "Toward a discipline of software engineering",
IEEE Software 13/6:23-31,
cited in Shari Lawrence Pfleeger,
Software Engineering: Theory and Practice (Prentice Hall, 1998), pp. 29-35.
 Irwin Mendelson