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
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.
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.
The notes for this session are available as a presentation (in pdf format) - lecture notes for session 1