This session will start with a very basic idea, the difference between programs and software, and examine it (a) from a historical perspective and (b) using some ideas from philosophy / mathematics.

We begin by using notions of closure and completeness from mathematical theory, to describe systems in one of four ways: Complete and Closed, Complete and Open, Incomplete and Closed and Incomplete and Open.

We review the history of early computers showing how the machines moved from 'manual' reprogramming to the use of mathematically based 'formal languages' which are used to describe both instructions for the machine (the program) and the data that those instructions manipulate. We then contrast what is needed to write a program with the demands of what is needed to write what came to be known as software. Two key problems emerge in the creation of software, those of Validation and Verification

- Validation - are we building the right product? Validation is concerned with demonstrating that the software description is based on the right assumptions

- Verification: are we building the product right? Verification is concerned with demonstrating the internal consistency of the software description

We return to the notions of closure and completeness discussed earlier and conclude that while program design methods are able to fulfill the assumptions of completeness and closure needed by formal languages, software design methods can not. Thus we see program descriptions as being special cases of the software descriptions where software designers need to test the assumption of closure through validation and completeness through verification.

- See any of the books from the SDM books section

This is the first session in the module there is no specific reading associated with it, however, you might like to browse the following web pages.

- Closure (mathematics) - a discussion of closure and some examples from Wikipedia
- Completeness - a discussion of different definitions of completeness from Wikipedia
- Historical development - The history of computing from Wikipedia
- The Modern History of Computing - Babbage to the 1950 from the Stanford Encyclopedia of Philosophy
- The Birth of the Modern Computer - The history of early computing at Manchester.
- Program and Software - two pages on programs and software from Wikipedia.

The notes for this session are available as a presentation (in pdf format) - lecture notes for session 1