  Computer programs do not always work as expected. In fact, ominous warnings
about the desperate state of the software industry continue to be released with
almost ritualistic regularity. In this paper, we look at the 60 years history
of programming and at the different practical methods that software community
developed to live with programming errors. We do so by observing a class of
students discussing different approaches to programming errors. While learning
about the different methods for dealing with errors, we uncover basic
assumptions that proponents of different paradigms follow. We learn about the
mathematical attempt to eliminate errors through formal methods, scientific
method based on testing, a way of building reliable systems through engineering
methods, as well as an artistic approach to live coding that accepts errors as
a creative inspiration. This way, we can explore the differences and
similarities among the different paradigms. By inviting proponents of different
methods into a single discussion, we hope to open potential for new thinking
about errors. When should we use which of the approaches? And what can software
development learn from mathematics, science, engineering and art? When
programming or studying programming, we are often enclosed in small communities
and we take our basic assumptions for granted. Through the discussion in this
paper, we attempt to map the large and rich space of programming ideas and
provide reference points for exploring, perhaps foreign, ideas that can
challenge some of our assumptions.
