¿Qué diablos son los paradigmas de programación?

Comencemos por las palabras separadas, la palabra paradigma significa: ejemplo o modelo de algo, es decir, un paradigma es una base con la cual puedes partir para obtener una respuesta a algo.

Comencemos por las palabras separadas, la palabra paradigma significa: ejemplo o modelo de algo, es decir, un paradigma es una base con la cual puedes partir para obtener una respuesta a algo.

Ahora, combinándolo con el concepto de programación tenemos que un paradigma de programación es un modelo para crear programación, y ¿Qué es lo que hace la programación? Pues resolver problemas, creando soluciones.

Entonces tenemos que un paradigma de programación son modelos para partir en la creación de estas soluciones, y aquí es donde, ya entendiendo lo que es un paradigma, ya podemos entender lo siguiente: en la programación hay distintos modelos con los cuales podemos llegar a crear soluciones, por ejemplo tenemos el paradigma funcional, el paradigma orientado a objetos, el paradigma lógico y algunos otros más, y aquí vamos a darle una revisión a algunos.

Paradigma orientado a objetos

Este paradigma se centra en caracterizar el universo en el que vivimos, si observamos nuestro entorno, todo está compuesto por objetos, objetos que interactúan con otros objetos, objetos que son parte de otros objetos, todo es un objeto, pero para diferenciar un objeto de otro tenemos propiedades y acciones que hacen estos objetos.

Por ejemplo, sabemos que una cerveza es una cerveza porque tiene ciertas características y propósito: es líquido, tiene alcohol, tiene un porcentaje de malta, lúpulo y algunas otras cosas, estas cosas las llamaremos atributos o propiedades, y juntas hacen que una cerveza sea un objeto el cual podemos identificar por las mismas propiedades.

Pero una cerveza no solo tiene propiedades, también tiene un propósito o funcionalidad, y su funcionalidad es que se puede beber, y aquí lo bonito del ejemplo ¿Quién se bebe la cerveza? Pues un humano como yo, que viene siendo otro objeto con sus características y funcionalidades propias.

En este paradigma nos basamos en el mundo real para representar la problemática a resolver, como estos objetos interaccionan unos con otro, y gracias al concepto de Clase podemos crear estos objetos.

La clase en este paradigma es un molde que sirve para crear los objetos, como el molde para crear un auto por ejemplo, un molde que sabe que debe tener puertas, llantas, motor, ventanas y un proceso secuencial para crearlo, eso es una clase.

Este paradigma tiene más características de las cuales hablare en una entrada propia para adentrarnos de lleno.

Si deseas aprender programación orientada a objetos te recomiendo esta lista de videos.

Paradigma funcional

Cuando escuchamos hablar de este paradigma, creemos que es algo nuevo, que es el siguiente paso de la programación, y bueno, en realidad este paradigma es mucho más viejo que el paradigma orientado a objetos.

Este paradigma se basa en el concepto matemático de cálculo lambda, un sistema formal que fue creado en la década de 1930 gracias a Alonzo Church, este paradigma se basa en funciones que invocan otras funciones las cuales invocan a otras funciones.

Con funciones podemos hacer lo mismo que con la programación imperativa (programación que se basa en cómo hacerlo), en este paradigma nos preocupamos más en el ¿Qué vamos a hacer?, una forma de resolver los problemas de manera más humana.

Hay que resaltar que el paradigma funcional puede convivir con el paradigma orientado a objetos, es algo que estamos viendo últimamente en los lenguajes de programación más utilizados, pero también el paradigma funcional no solo es la creación de funciones, sino también llevar ciertas prácticas para cumplir con este objetivo

No me adentrare mucho, solo te mencionare que una función en este paradigma debería siempre regresar el mismo resultado si siempre es invocado con los mismos parámetros, por ejemplo una función suma que recibe 1 y 2 siempre debe devolver 3, y no depender de efectos colaterales, esto nos ayuda a que podamos remplazar suma por otra función que haga lo mismo sin que afecte a otras partes de nuestro sistema.

Si quieres darte una idea de este paradigma ya a nivel práctico te recomiendo este video.

Paradigma lógico

El paradigma funciona y el paradigma lógico son parte de la programación declarativa, aquella que se centra en que vamos a hacer, y no el cómo vamos a hacerlo.

El paradigma lógico se centra en el concepto de lógica matemática, todo son predicados y hechos.

Teniendo una base de hechos como “Todos los que toman cerveza son borrachos” y consultando ¿Quiénes son borrachos? Este paradigma nos regresaría “Todos los que toman cerveza”.

Este paradigma resulta útil en sistemas expertos gracias a su naturalidad de hechos y predicados, imaginar lo siguiente, cuando uno va al doctor, va con un experto en una rama, este experto tiene una base de hechos en su experiencia, y dependiendo de nuestras preguntas el utilizara sus predicados para darnos una respuesta, tal cual funciona este paradigma.

También es utilizado para el reconocimiento del lenguaje natural y demostración de teoremas.

En este video te explico el lenguaje lógico prolog por si deseas darte una idea de a que va este paradigma.

Paradigma reactivo

Este paradigma es lo de moda de hoy en día, pero en realidad tiene ya sus años de existir.

El paradigma reactivo se centra en los flujos de datos y como entrelazarlo con objetos.

Por ejemplo, todos hemos utilizado Excel, sabemos que Excel se compone de celdas (los observadores), y sabemos que en Excel podemos hacer formulas, como una fórmula que sume un conjunto de celdas, la celda donde aparecerá el total será un observador de algo, este algo es la sumatoria de el conjunto de celdas que representan la suma, por lo cual si una de las celdas dentro de la formula tiene un cambio, la celda que observadora representara este cambio de manera automática, esto es el paradigma reactivo.

Tenemos muchas ventajas con este paradigma que se basa en un conjunto de patrones de diseño, sobre todo en el patrón observador, el cual es muy sencillo de explicar: teniendo un sujeto, siendo el sujeto cualquier cosa que tenga información, existirá una colección de observadores interesados cada que cambie el sujeto sus valores, estos observadores estarán a la espera de cuando el sujeto cambie algo y serán notificados de ese cambio, cada sujeto sabrá que hacer dependiendo ese cambio, esto en pocas palabras es el patrón observador.

En el siguiente video te muestro como puedes programar el patrón observador en javascript

Conclusión

Como te diste cuenta hay distintas formas de crear programación (hay más paradigmas no mencionados), y un punto que quiero plantear aquí, es que con cualquiera de las formas anteriores mencionadas puedes llegar al mismo resultado, la diferencia radica que unas serán mas aptas que otras para cierta problemática.

Los paradigmas no son enemigos, últimamente los lenguajes de programación más utilizados son multiparadigma, esto con el propósito de darnos flexibilidad de poder trabajar con un estilo de programación dependiendo la circunstancia.

Así que ya sabes que es un paradigma, y espero esta entrada te haya dado su propósito, gracias por llegar hasta aquí.

Te dejo una charla que tuve con Nicolás Schürmann  del canal HolaMundo sobre paradigmas de programación.

Los 8 personajes más importantes en la computación

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

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 ¿?)

Al_Khwarizmi

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)

pascal

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)

church

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 decimo problema 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)

john_von_neumann

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.

Konrad Zuse (1910 – 1995)

konrad

Ingeniero civil alemán, con grandes sueños desde pequeño, y culminándolos en la una idea grandiosa cuando cursaba la universidad. Zuse aburrido de realizar siempre procedimientos rutinarios a mano ideo una maquina la cual pudiera hacer cálculos. Más tarde logro su primer intento, una maquina llamada la Z1, la cual funcionaba por medio de tarjetas perforadas, pero nunca funciono bien, hasta que logro hacer mejoras y llego a la culminación de la primera computadora controlada por programas con el nombre de Z3.
Cabe destacar que Zuse fue el creador del primer lenguaje de programación de nombre Plankalkül entre los años 1943 y 1946, aunque el lenguaje solo fue propuesto teóricamente por Zuse.

Dennis Ritchie (1941 – 2011)

dennis


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.