Un algoritmo es una secuencia de pasos para completar una tarea. La creación de un programa de ordenador requiere la descripción del algoritmo que manipula la entrada y los datos para producir un resultado determinado. Al escribir un algoritmo, el programador polariza sus acciones hacia el futuro. Sólo en el futuro la secuencia de instrucciones se ejecutará sobre una entrada dada para producir un resultado. Si pensamos en un programa simple como un algoritmo para ordenar un conjunto de números, el programador tiene que pensar de forma abstracta en el formato de los datos y definir cada instrucción en consecuencia considerando cada opción posible. Si falla en un posible curso de acción, el programa puede fallar. Puede haber diferentes programas para hacer las mismas tareas de cálculo ya que muchos problemas pueden ser resueltos de diferentes maneras y los programadores pueden crear más de un algoritmo para hacerlo.
procedure bubbleSort(A : list of sortable items)
n := length(A)
repeat
swapped := false
for i := 1 to n-1 inclusive do
/* if this pair is out of order */
if A[i-1] > A[i] then
/* swap them and remember something changed */
swap(A[i-1], A[i])
swapped := true
end if
end for
until not swapped
end procedure
Presentation 1: Bubble sort which is an example of sorting algorithm (from https://en.wikipedia.org/wiki/Bubble_sort).
Un programa o algoritmo, cuando se ejecuta, representa siempre una polarización hacia el pasado. Las instrucciones previamente definidas, y sólo esas, son las acciones que son ejecutadas por la computadora. Si ejecutamos el algoritmo de clasificación, lo único que podemos cambiar es la entrada. La forma en que cada número individual será manipulado para producir una lista ordenada de números no se cambia durante la ejecución. Sostenemos que este es el caso de todos los programas informáticos, incluso para las aplicaciones interactivas que requieren la entrada del usuario. Para estos, los desarrolladores tienen que elegir el conjunto de interacciones que se permiten. Estas se llaman características o funcionalidades. Luego los desarrolladores tienen que diseñar y programar cada funcionalidad. Los programas también pueden ser actualizados. Pero las actualizaciones significan un nuevo conjunto de características que, cuando se ejecutan, están todas polarizadas con el pasado. La actualización es una polarización hacia el futuro sólo durante el proceso de creación y hasta el momento en que se programa y se prueba. Cuando se despliega, siempre se polariza hacia el pasado.
Podemos argumentar que esta es una de las razones por las que las computadoras no son capaces de generar números aleatorios. Elegir un número aleatorio es una completa polarización del libre albedrío hacia el futuro. Pero cuando se ejecuta un programa sólo puede polarizarse hacia el pasado, por lo que no hay forma de generar un acto aleatorio basado en acciones pasadas. Todas las instrucciones que consideren todos los casos tienen que ser completamente definidas sin ambigüedades de antemano. El programa puede ser, en el mejor de los casos, pseudo-aleatorio usando una semilla arbitraria para calcular algo que pretende ser aleatorio. Esta es también la razón por la que los ordenadores tienen tremendos problemas cuando se trata de tareas creativas como escribir o crear música, ya que los actos vitales presentan altos grados de polarización hacia el futuro. Las acciones que pueden ser descritas algorítmicamente de una manera simple son propensas a ser polarizadas hacia el pasado. Por ejemplo, cuando se definen reglas de razonamiento lógico, su aplicación a las proposiciones lógicas futuras siempre se polariza hacia el pasado. Por eso las computadoras son buenas para razonar con reglas. Lo mismo ocurre con otros aspectos de las actividades humanas que son altamente procesales como la burocracia o la ley. Una ley es un sistema de reglas para regular la conducta. La creación de estas reglas es una polarización hacia el futuro. La aplicación de la ley es una polarización hacia el pasado de las acciones presentes. Por el contrario, las acciones que son difíciles de describir algorítmicamente están en su mayoría polarizadas hacia el futuro. Muchas tareas que son difíciles de programar en una computadora, como el reconocimiento de imágenes, probablemente implican un alto grado de polarización hacia el futuro.