top of page
Foto del escritorBraulio Madrid

Taxonomía de los lenguajes de programación.

En dos post anteriores había prometido hacer una clasificación de varios lenguajes, precisamente en el blog que hablaba de "Los lenguajes interpretados vs compilados" y también en "los paradigmas dentro de los lenguajes de programación", la idea surgió de escoger el IDE de Geany, que es un IDE muy liviano y que soporta mas de 40 lenguajes distintos y al explorar todos los lenguajes que soportaba, empecé a preguntarme "qué lenguajes son buenos para aprender sin importar la época", pero mientras escribía e investigaba un poco los orígenes de los lenguajes, notaba patrones que se repetían, como el paradigma al que apuntan, de donde heredaban la sintaxis o de donde se inspiraban, al tiempo fui viendo que la cantidad de lenguajes es enorme y muchos ya han muerto o no valen la pena aprenderlo o siquiera investigarlos, pero como siguen residuales en el tiempo o se niegan a desaparecer por completo, aún rondan por ahí en el índice TIOBE, generando ruido y retrasando la publicación de este post.


Geany hace una clasificación de lenguajes en cuatro columnas, que pasaré a explicar a continuación:


#LenguajesDeProgramación: Son aquellos lenguajes que en general son #LenguajesCompilados, se tiene la idea que estos lenguajes están con el propósito de crear programas a gran escala, generalmente son lenguajes de tipado estático, declarando variables, controlando el uso de memoria.


#LenguajesScript: Son todos aquellos lenguajes que corren sobre alguna plataforma o programa, ejemplo puede ser JavaScript que corre sobre un navegador o PowerShell que corre sobre la consola de Windows. Estos lenguajes son de tipado dinámico, son #LenguajesInterpretados y no controlan el uso de memoria y por lo general el poder de cálculo se centra en librerías hechas en algún lenguaje compilado como C o C++.


#LenguajesDeEtiquetas: Generalmente estos lenguajes cumplen el oficio de documentar, como es el lenguaje LaTeX que lo usan las universidades para crear libros, informes y curriculums o el caso de Markdown que vemos muy frecuente en los archivos readme de github, algunos de estos lenguajes se puede convertir a HTML o PDF.


Varios: Aquí simplemente entra los lenguajes que no encajan y a veces ni siquiera son lenguajes, solo son archivos de texto en un formato fácil de leer para algún lenguaje de programación, sirven de transmisión y recepción de datos o de consulta como es el caso de SQL.

Programación

Script

Etiquetas

Varios

Arduino

Abaqus

Acsiidoc

ABC

Clojure

ActionScript

LaTeX

Conf

CUDA

CMake

Markdown

Diff

Cython

CoffeeScript

ReStructuredText

JSON

Caml

Ferite

Txt2Tags

SQL

Ada

Forth

Docbook

Po

ASM

JavaScript

HTML

YAML

C

Lisp

XML

C#

Lua

CSS

C++

Matlab

COBOL

Nsis

D

Perl

Erlang

PHP

F77

PowerShell

Fortran

Python

FreeBasic

R

GLSL

Ruby

Go

Tcl

Haskell

Graphviz

Haxe

MakeFile

Java

Batch

Objective C

Sh

Pascal

Rust

Por fuera de los lenguajes de programación se me quedaron Vala, Verilog, VHDL, Zephir, Genie, Scala, pero por la limitación de las listas del editor de WIX que no puedo superar las 100 celdas, no pude completar este cuadro y el siguiente.


La lista a continuación señalo el lenguaje, las extensiones y los paradigmas que maneja, en mi opinión casi todos los lenguajes son multi-paradigma, casi todos son imperativos, estructurados, funcionales y orientado a objetos, pero ya algunos son casos especiales al ser declarativos o concurrentes, también veo que cada lenguaje que he consultado en la Wikipedia para consultar el paradigma, cambian los nombres de estos o hay confusión en los conceptos, así que aunque haga un resumen de los lenguajes en esta tabla, cada quien debe definir sus propios conceptos y hacer su propia investigación, por lo pronto haré un resumen de los paradigmas y como los voy a tratar.


Imperativa: estilo de codificación que describe paso a paso lo que hará el programa de inicio a fin.


Estructurada: Que hace uso de flujos IF, ELSE, ELIF, SWITCH o similares para encausar el flujo del programa y el uso de ciclos FOR, FOREACH, WHILE y el uso de arrays o listas.


Funcional: Que hace uso de bloques de código cargados en memoria definidos como funciones y en lugar de hacer uso de ciclos, prefiere hacer uso de recursividad o funciones que se autoinvocan a sí mismas.


POO o programación orientada a objetos: Hace uso de Clases, abstractas o no y de técnicas de Herencia, Polimorfismo, Encapsulamiento etc.


Orientado a Eventos: Hace uso de mensajería para observar y escuchar lo que pasa con el código, un ejemplo puede ser los videojuegos, donde los eventos son producidos por pulsación de botones en el teclado o un joystick, o en una página web, al observar lo escrito en una caja de texto o un botón.


Reflexivo: Código que se evalúa a sí mismo o se canibaliza a sí mismo si se quiere, es código que tiene control sobre sí mismo.


Declarativo: Es lo contrario al paradigma imperativo, aquí nosotros le decimos al código que es lo que necesitamos y él nos arroja el resultado que pedimos sin necesidad que sepamos el paso a paso.


Concurrente: Enfoca los cálculos que sean multi-hilo, haciendo uso de todo el procesador.


Esta es mi definición personal de los paradigmas, bien puedes estar en desacuerdo y también te doy toda la razón, aun todo esto es un debate y el concepto es bastante abstracto, mi experiencia con Unity y C#, es que C# puede abarcar todos los paradigmas si desea, pues nada impide el uso de librerías que vuelva al lenguaje concurrente, las pruebas unitarias no deja de ser en mi opinión un enfoque reflexivo sobre el mismo código. C# también escucha eventos y en general con cualquier lenguaje es lo mismo.

Lenguaje

Extensiones

Imperativa

Estructurada

Funcional

POO

eventos

Reflexivo

Declarativo

Concurrente

C

.c .h

X

X

Objective C

.c .h .m .mm

X

C++

.h .hh .hpp .hxx .h++ .cc .cpp .cxx .c++

X

X

X

C#

.cs .csx .cshtml .razor

X

X

X

X

X

X

Go

.go

X

X

X

Rust

.rs

X

X

X

X

X

D

.d

X

X

PHP

.php .phtml .php3 .php4 .php5 .php7 .phps .php-s .pht .phar

X

X

X

X

Python

*.py *.pyc *.pyd *.pyo *.pyw *.pyz *.pyi

X

X

X

X

En el siguiente gráfico he separado un poco los lenguajes en décadas, no se puede considerar la posición de los rectángulos como nacimiento exacto del lenguaje, las líneas que los vincula hace referencia a su evolución directa si la línea es continua e indirecta o inspiración si es discontinua, hay mas enlaces por cada lenguaje, pero por cuestiones de legibilidad preferí omitir algunas relaciones, está el color de fondo en cada rectángulo, azul para el paradigma imperativo, verde para el orientado a objetos y amarillo para el funcional, por último está la forma de los rectángulos de bordes redondeados, son lenguajes de Script, de bordes duros son lenguajes de programación.

Los rectángulos con degradado de colores quiere decir según los colores los paradigmas que soporta dicho lenguaje.


He intentado hacer este gráfico a modo de resumen, aún faltan mas lenguajes, mas conexiones, corregir algunos paradigmas, en parte por desconocimiento del lenguaje, por otra parte por controversias de opinión según varios programadores.


Quizás la mejor forma de haber hecho este gráfico debió haber sido con un modelo en 3D que permitiera rotar visualmente los carteles o algo así, pero no sabría como hacerlo realmente.


De todos modos no espero ganar un nobel con este gráfico, pero espero que ayude a clarificar un poco como una manera de mapa mental resumido de como ubicar estos lenguajes. No siendo mas nos vemos en un próximo post.


Entradas recientes

Ver todo

Comentários


bottom of page