From the trivial to the complex, programs (the formal representations of algorithms) have the potential to make almost any digital task easier. Nevertheless, even the simplest concepts to explain in plain English can be more convoluted in coding than you might initially think. Consider the example of looking up a telephone number. In explicitly detailed steps, how, precisely, do you do that? If you translate that to a coding language, the challenge becomes greater than you might anticipate.
Now, consider the task of automating program testing.
Do you think it is easier to write a correct program (e.g., like the telephone lookup example), or
write a program that correctly checks whether another program is correct (e.g., checks to see of the telephone lookup found the right number)?
Analyse the properties of an algorithm.
Analyse the ambiguity in algorithms.
Compare the programming/algorithms required for writing a correct program and writing a program that correctly checks whether another program is correct.
Explain if your answer would be the same or different if the problem was given using formal specifications.
Explain if your answer would be the same or different if a series of known test cases were developed.
Fully state and justify any choices, assumptions or claims that you make using the suggested resources for this week and/or your own research.