La programación funcional es un paradigma que ha tomado gran campo el el desarrollo del software.
La programación funcional es un paradigma que ha tomado gran campo el el desarrollo del software.
Se basa en el calculo lambda de Alonzo Church, y sigue ciertos lineamientos con los cuales puedes tener ventajas a la hora de programar programación concurrente, pruebas unitarias o simplemente para hacer código más rápido de escribir.
La programación funcional se basa en «qué es lo que desear resolver», más no en «como deseas resolverlo».
En el siguiente video te contare su origen, y con ejemplos de código algunos de sus principios que se deben seguir.
En el área de la programación nos encontramos con un problema al cual hay que encontrarle una solución por medio de los algoritmos representados con código.
En el área de la programación nos encontramos con un problema al cual hay que encontrarle una solución por medio de los algoritmos representados con código.
Pero no solo en esta parte radica hacer la solución, también nos encontramos en armar una arquitectura, un diseño de base de datos, o un balance de componentes de tecnologías distintas que convivan entre si y juntos sean la solución.
El entender que el realizar un software de una manera la cual funcione bien, es decir, que cumpla su trabajo, dando la solución y esta solución sea segura, balanceada, escalar y todas esas características de calidad, implica que es una de las tantas maneras de haber creado la solución, más no es ni la mejor, ni la peor, pero si una de tantas.
A inicios del siglo 20 por allá de 1900 se reunieron un grupo de matemáticos, una asamblea donde a uno de estos matemáticos llamado David Hilbert, se le ocurrió plantear algunos problemas a resolver (desde entonces nos gustaba complicarnos), uno de esos problemas es el llamado Entscheidungsproblem (problema de decisión) el cual propone lo siguiente:
¿Existe un algoritmo el cual pueda decirnos si un cálculo de primer orden es un teorema valido?
En palabras más simples, existe un algoritmo que pueda decirnos si un enunciado lógico es demostrable.
Es aquí un punto crítico en la historia de la computación, ya que gracias a este problema alguien llamado Alan Turing y alguien llamado Alonzo Church demostraron que era imposible tal algoritmo pero también demostraron que en la computación se puede encontrar una solución de distintas formas.
Alan Turing creo la máquina de Turing la base de la programación imperativa y por su parte Alonzo Church creo el cálculo lambda la base de la programación declarativa.
La programación imperativa se ha convertido en la base de paradigmas de programación como la programación Orientada a Objetos, en cambio, la programación declarativa lo vemos en paradigmas funcional o lógico (prolog), de hecho, hoy en día el combinar los paradigmas es el pan de cada día.
Al final, nosotros creamos algoritmos que darán con la solución a un problema, pero siempre hay formas distintas de hacerlo, con menor o mayor abstracción, con menos líneas o más líneas de código, como sea, siempre habrá maneras distintas de tener una solución.
El objetivo de este texto es entender que si estamos programando y no damos con la solución, es bueno comenzar de nuevo esa parte y pensar cómo se haría de una manera distinta, no cerrarnos al primer camino en el cual nos quedamos atorados, sino entender que siempre hay otra forma de hacerlo.
Esto aplica tanto para programar, para diseñar una base de datos, para la arquitectura de software, bueno, aplica para toda etapa en el desarrollo de sistemas.
Si has llegado hasta aquí te agradezco, puedes compartir el texto si ha sido de tu agrado.
En este video te enseñare como se programa recursivamente, te mostrare 3 ejemplos con los cuales comprenderás esta forma de programar rápidamente.
Código fuente
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Recursividad
{
class Program
{
static void Main(string[] args)
{
//ejemplo 1: recorrer un arreglo
int[] arregloDeEnteros = new int[] { 2,1,1,1,1,1,2};
Recorrer(arregloDeEnteros);
//ejemplo 2: sumar elementos de un arreglo
int total = Sumar(arregloDeEnteros);
//ejemplo 3: pintar un arbolito
Bitmap bmp = new Bitmap(100,100);
Pintar(bmp,bmp.Width/2,20);
string path = @"C:\Users\Bioxor\source\repos\Recursividad\Recursividad\arbolito.jpg";
bmp.Save(path,ImageFormat.Bmp);
}
static void Pintar(Bitmap bmp,int x, int n,int y=0)
{
if (y < n)
{
bmp.SetPixel(x, y, Color.Red);
Pintar(bmp,x+1,n,y+1);
Pintar(bmp,x-1,n,y+1);
}
}
static int Sumar(int []arreglo,int posicion=0)
{
if (posicion == arreglo.Length)
return 0;
return arreglo[posicion] + Sumar(arreglo, posicion+1);
}
static void Recorrer(int [] arreglo,int posicion=0)
{
if (posicion == arreglo.Length)
return;
Console.WriteLine(arreglo[posicion]);
Recorrer(arreglo,posicion+1);
}
}
}
En este podcast inaugural de esta sección de mi canal, hablare improvisadamente sobre cuál es el mejor lenguaje de programación, un poco de historia y rarezas.
Existen muchas personas que han aportado algo para conocer la ciencia de la computación como hoy en día la conocemos, pero hay quienes son pilares en el desarrollo de esta, veamos ocho de las personalidades que fueron pilares en el desarrollo de la computación.
Euclides (325-ca. 265 a. C.)
Euclides era un matemático griego, considerado el padre de la geometría, pero pocos saben que fue de los primeros en describir un algoritmo como tal (instrucciones o pasos a seguir para un fin, utilizados en computación). Su famoso algoritmo de Euclides descrito en su obra Elementos, sirve para encontrar el máximo común divisor de dos elementos (enlace para ver la descripción del algoritmo).
Abu Abdallah Muḥammad ibn Mūsā al-Jwārizmī (780 -850 ¿?)
El dueño de este nombre (mejor conocido como al-Juarismi) tan emblemático lo tiene el matemático persa del siglo IX, este matemático creo la palabra algoritmo derivada de algebra, palabra que nace en su obra de nombre “Kitab al jabr wa´l-muqabala” (de nombres bonitos, nacen cosas bonitas), esta obra se cree es la más antigua que habla sobre algebra, por lo cual se da el merito a Al-Juarismi de ser el padre de la misma. En este texto se expone por primera vez la resolución de ecuaciones de primer y segundo grado, y un conjunto de reglas que guían al lector para resolver problemas, dándole significado a lo que es un algoritmo, hoy utilizado en todas las computadoras del mundo.
Blaise Pascal (1623 – 1662)
Fue un matemático francés del siglo XVII, fue el creador de una de las calculadoras mecánicas más antiguas, la Pascalina. La maquina servía al inicio para sumar, pero más tarde Pascal agrego aditamentos para que permitiera restar.
Lo interesante de la Pascalina, es que es una maquina mecánica de engranes y ruedas, que permitían sumar o restar. La maquina tenía 8 ruedas (6 para los enteros y 2 para los decimales) cada una con el número del 0 al 9; la Pascalina al momento de sumar el 1 al 9, la rueda que contenía el 9 se convertía en un 0, y la rueda vecina a la izquierda se movía de la posición inicial 0 al 1, dando 10 nuestra suma.
Alonzo Church (1904 – 1995)
Matemático y Lógico norteamericano, esta persona es la responsable de crear el concepto de computación, ya que fue el primero que describió este concepto en su sistema de nombre “Calculo Lambda” (con ayuda de Stephen Kleene). El cálculo lambda nació para resolver el problema de Entscheidungsproblem (decimo problema de Hilbert). En el año de 1900, en el congreso Internacional de Matemáticos en Paris, el matemático David Hilbert planteo 23 problemas, en los cuales destaca el Entscheidungsproblem (o decimo problema de Hilbert). Hilbert buscaba un procedimiento algorítmico general para resolver un proceso matemático, y que este proceso nos dijera si la sentencia tenia solución o no. El sistema de cálculo lambda sirve para definir si una función es computable, es decir, si un problema por medio de pasos y reglas puede llegar a su solución. Se puede considerar el cálculo lambda como el más pequeño lenguaje de programación.
Alan Turing (1912 – 1954)
Mucho circula alrededor de este gran matemático, criptógrafo y experto en computación, que muchos lo recuerdan por su suicidio con la manzana envenenada con cianuro.
Se podrían escribir libros y libros sobre lo que aporto a la computación, pero existe algo que sobresale entre todo, es la famosa maquina de Turing.
Al igual que Church, Alan Turing (alumno del primero) creó su sistema para resolver el decimoproblema de Hilbert. Para resolver el problema concibió una maquina abstracta (objeto no físico), que tenía 3 elementos: una cinta de entrada, una cinta de salida y un procesador central (como los micros que tienes en tu computadora). La maquina funciona por medio de una tabla de reglas las cuales se aplican dependiendo el estado en que se encuentre la cinta, por ejemplo: si la cinta está en el estado 1 y hay una regla que nos dice que nos movamos al estado 3, la cinta se mueve y se vuelve a verificar la regla para ese estado, hasta llegar al estado final (lo cual nos diría que el problema fue resuelto). A partir de esta simple maquina hipotética, nació todo el manejo que realiza el CPU de las computadoras.
Jhon Von Neumann (1903 – 1957)
Matemático húngaro-estadounidense, es considerado uno de los más grandes matemáticos de la historia.
Su contribución en la computación radica en la Arquitectura de von Neumann. Esta arquitectura se basa principalmente en un la unidad aritmético-logica (ALU) que realiza los cálculos aritméticos, la unidad de control que se encarga de ir a la memoria principal por instrucciones para realizar, una memoria principal o memoria Ram que sirve para almacenar datos temporalmente, el sistemas de entrada/salida (un teclado de entrada o el monitor de salida por ejemplo) y el bus de datos que hace la comunicación de los datos en los distintos componentes. La mayoría de computadoras utilizan este modelo arquitectónico.
Ada Lovelace
Ada Lovelace fue la primera persona en crear un algoritmo en una maquina analítica. Por lo cual es considerada como la primer programadora y programador de la historia.
Utilizando la maquina analítica de Babbage pudo crear un algoritmo compatible con dicha maquina que resolviera los números de Bernoulli.
Dicho algoritmo escrito por Ada es también considerado el primer programa en la hitoria.
Dennis Ritchie (1941 – 2011)
Fue un científico de la computación, mejor conocido por crear junto a Ken Thompson el sistema operativo de nombre Unix, que hoy en día los hijos (directos o indirectos) que desencadeno este sistema operativo son utilizados por la mayoría de personas; ¿no me creen? algunos hijos directos o indirectos son Linux, Android, IOS y la lista de sistemas operativos llega a cuatro ceros o más. Pero antes de crear Unix,Dennis creo el lenguaje de programación más conocido en el mundo, el lenguaje C. Toda persona que se dedica a la informática, ha tenido un encuentro con este lenguaje, y algo que destaca mas (para mi claro) que haber creado el sistema operativo Unix, es que los lenguajes que utilizan los desarrolladores de software hoy en día, le deben mucho al lenguaje C, ya que fue gran influencia a lo que se utiliza en la época moderna para crear sistemas computacionales.
Estos fueron 8 personajes que sobresalen como pilares de la computación que conocemos hoy en día, no son los únicos claro, pero si son de los más relevantes. Después de las aportaciones estas personas (y algunas otras), ya conocemos todo lo demás, que gracias a ellos tenemos para nuestra comodidad en cuestión de computadoras.