Friday, July 13, 2012
Theme: The Ontology of Algorithms
The theme that I have chosen for Fall 2012 is "The Ontology of Algorithms." We can try to figure out the nature of the algorithm and what distinguishes it as a concept, what attributes algorithms might have, and what other questions might bear on the subject. We can start with the idea of computations, as grasped formally and informally, and consider each of the elements input, process, and output. We can consider such notions as whether nature executes algorithms.
This will produce some questions for student discussion:
Will we require an algorithm to take input? Will we require an algorithm to have output? Are there different algorithms for the same function? (Of course.) Are there different functions for the same algorithm? Hmm... that would require interpreting the actions of an algorithm as producing more than one set of ordered pairs. Are there different programs for the same algorithm? (Of course.) Are there different algorithms for the same program? That depends on the answer to the question whether there are different functions for a single algorithm. Shall we detach the notion of algorithm from its theoretical base, the computation of a function? Suppose we see systems all around us that do nothing; should we consider that the same as computing the identity function or the null result?
Based on the question above about nature: Does an algorithm have to be executed? Does a seed embody an algorithm? Is an algorithm a static program or a dynamic process, or both?
A good place to start might be some questions embedded in daily life:
Do we ourselves follow algorithms as we know them? In the non-digital domain, do we practice or experience transmission protocols, LIFO versus FIFO processing sequences, semaphores, public keys, dangling pointers, caching...? Is there a human analogue to algorithmic self-reference? What about static data structures: Can we name a foundational set of data structures, provide identity conditions, and find analogues in human life? Or are data structures inextricably integrated with algorithms? What about a foundational set, and human analogues, of algorithmic errors?
Some of these can become assignments, in some form. As with all teaching, the challenge will be capture these topics in solid pedagogical elements such as student work, purposeful discussion, and meaningful assessments.