It is commonly supposed that software engineering is—and should be—focused on technical and scientific issues, such as correctness, efficiency, reliability, testability, and maintainability. Within this constellation of important technological concerns, it might seem that design aesthetics should hold a secondary, marginal role, and that aesthetic considerations might enter the design process, if at all, only after the bulk of the engineering is done. This article discusses the important role that aesthetics can play in engineering, and in particular in software engineering, and how it can contribute to achieving engineering objectives.
Certainly, aesthetic considerations have not been completely absent from software engineering. For example, the development of structured programming ideas was accompanied with conventions for the textual layout of programs, which aimed for conceptual clarity, but also aesthetic appeal. (Even the older programming techniques relied on the aesthetic layout of flowcharts.) Knuth (1992) has advocated a practice of literate programming in which composites of programs and their documentation are treated as “works of literature.” Elegance has been discussed as a criterion of programming-language design since the 1960s (MacLennan, 1997, 1999). Furthermore, software engineers have tended to prefer elegant algorithms (Gelernter, 1998) where the criteria of elegance have been inherited primarily from mathematics and theoretical science, in which beauty is a widely acknowledged value (Curtin, 1982; Farmelo, 2002; Fischer, 1999; Heisenberg, 1975; King, 2006; McAllister, 1996; Tauber, 1997; Wechsler, 1988; Wickman, 2005). In these and similar cases, however, there has been little direct work on an aesthetic theory for software.
One exception to the relative lack of explicit work on software aesthetics is the research program in aesthetic computing pursued by, for example, Fishwick (2002) and Fishwick, Diehl, Lowgren, and Prophet (2003). He argues that traditional program representations (such as textual programs and graphs) do not engage our aesthetic senses, and that they are abstract and uninteresting. However, because software concepts are abstract, they do not have a natural sensuous representation, and so Fishwick argues that they should be represented metaphorically (e.g., by visual or sculptural metaphors), and that the “craft-worthy, artistic step” is the choice of metaphor and the expression of the algorithm in terms of it. This metaphorical work (not the textual program, which is secondary) is then the primary medium for the aesthetic expression and appreciation of software (Fishwick, 2002). Recent developments in aesthetic computing are collected in Fishwick (2006).
Software engineering is a new discipline, and so it does not have a long aesthetic tradition as do many of the other arts and engineering disciplines. Therefore, it is helpful to look at well-established disciplines that have significant similarities to software engineering. One of these is mathematics, in which we may include theoretical science, which has in common with software engineering the fact that formal considerations dominate material considerations (explained below). As is well known, aesthetic considerations are important in theoretical science and mathematics (Curtin, 1982; Farmelo, 2002; Fischer, 1999; King, 2006; McAllister, 1996; Tauber, 1997; Wechsler, 1988; Wickman, 2005), and we will find Heisenberg’s (1975) remarks on beauty in the exact sciences to be informative.
Key Terms in this Chapter
Visual Programming Language: Is a programming language in which programs are displayed in some nontextual form, such as a graph, tree, or nested assembly of tiles.
Sensorimotor Skills: Refers to those skills by which we interact fluently and competently with the world, integrating sensory perception and motor action.
Embodiment: Refers to the important role played by the human body, including the brain, in cognition, language, imagination, and other mental processes.
Ethical Dimension: The ethical dimension (or aspect) of a software design refers to the influence of the design on the behavior of the engineers working on it.
Elegance: Refers to beauty, grace, harmony, beautiful simplicity, restraint, clarity, and precision.
Normative: Provides norms or standards of behavior, practice, and so on.
Aesthetics: Aesthetics is a set of principles and practices pointing toward a particular notion of beauty; it is also the discipline that studies such principles and practices.
Execution Sequence: Is the sequence of instructions executed in a particular run of a program (i.e., when provided particular inputs).