La algoritmia consiste en resolver familias de problemas cuyas características están compuestas por variables concretas, sin embargo, en computación clásica aprender a programar consiste en transformar la definición de un problema (requerimiento) a una definición que se acomode a la arquitectura física de una computadora y que se resuelva manipulando directamente los valores en memoria mediante la CPU (elementos de la arquitectura, lo que constituye una dificultad mayor para un ser humano que no piensa en términos de manipulaciones de memoria ni operaciones básicas de una CPU.

Acudiendo a la historia, la resolución de problemas no se inventó con las computadoras, se inventó con las matemáticas. Los algoritmos tienen su origen en la sistematización de problemas matemáticos como hallar la raíz cuadrada de un número arbitrario. A partir de algoritmos simples como el anterior, se desarrollan soluciones a problemas más complejos combinando las operaciones definidas.

En las matemáticas se ha desarrollado todo un marco para definir problemas complejos en términos variables, por ejemplo, qué se necesita para hallar el área de un disco de radio arbitrario. Este problema define una variable, el radio y a partir de una función matemática se resuelven todos los problemas que consisten en hallar el área de un disco que tiene un radio dado, por ejemplo, 2mts. Para terminar el ejemplo, matemáticamente hablando, el problema del área de un círculo se expresa mediante una función que podríamos nombrar area(radio) que efectúa la operación pi*radio2. Note que la definición más general de una función es una relación entre los valores que se necesitan y el resultado que se espera, en el ejemplo anterior, el valor que se necesita es el radio y el resultado esperado es ese número al cuadrado multiplicado por pi. En otras palabras, una función relaciona los valores de entrada con los valores de salida mediante alguna fórmula u operación compleja.

Las matemáticas no sólo expresan sus soluciones mediante cálculos, sino que desarrollan todo un lenguaje para condicionar el contexto en el cual se puede aplicar una solución y desarrolla la idea fundamental de construir soluciones complejas mediante la combinación de soluciones a problemas más simples cuya definición ya se ha dado. Por ejemplo, para hallar las raíces de una expresión cuadrática x2+bx+c, podemos considerar si existen dos números x1 y x2 tales que la suma de ellos dé b y la multiplicación dé c, para éste problema, aunque resolver una ecuación cuadrática puede ser complejo, se resuelve sabiendo multiplicar y sumar, dos cosas que sabemos muy bien cómo se hacen y de las que conocemos muy bien todas sus condiciones y propiedades.

La programación funcional busca acercar el desarrollo de programas al lenguaje humano, tomando el paradigma con el que se ha desarrollado la matemática como un lenguaje natural para desarrollar cómputos complejos. La programación funcional entonces, consiste en definir problemas en términos de las funciones que se necesitarían para resolver tal problema y luego componer una función que construya la solución a partir de las otras.

Por otro lado, el paradigma funcional es tan poderoso como han sido las matemáticas, casi cualquier problema imaginable se puede resolver mediante un modelo matemático. Los modelos matemáticos no están compuestos de modelos cuantitativos que llegan a cálculos numéricos, existen modelos de otras naturalezas que establecen las relaciones entre los elementos y hacen una clasificación de lo que puede existir y ocurrir en un dominio específico. Por ejemplo, la cibernética da cuenta de una clasificación de los sistemas (de cualquier naturaleza) y de las operaciones que pueden ocurrir entre ellos, dado cierto conjunto de subsistemas y relaciones entre ellos, ¿qué sucede con todo el sistema cuando uno de sus subsistemas es excitado con cierto impulso?, para una tarea tan extraña y difícil existen modelos matemáticos expresables mediante funciones matemáticas que no dependen sólo de números.

Una intersante introducción al la programación funcional y los paradigmas de programación está disponible en una interesante lectura en el blog de la materia Lenguajes y paradigmas de programación de la Universidad de Alicante.