Este artículo explora un concepto fundamental en el desarrollo de software: los "ur-lenguajes" (lenguajes ancestrales). La idea central es que, aunque existen miles de lenguajes de programación, muchos comparten patrones básicos de construcción y organización, agrupándose en familias o "ur-lenguajes". Esto explica por qué aprender un nuevo lenguaje dentro de la misma familia es relativamente sencillo, mientras que pasar a un ur-lenguaje completamente diferente requiere un esfuerzo considerable, ya que implica aprender nuevas formas de pensar y programar.
El autor identifica siete ur-lenguajes principales: ALGOL, Lisp, ML, Self, Forth, APL y Prolog. Cada uno se caracteriza por un conjunto distintivo de patrones y paradigmas. ALGOL, el más antiguo, es la base de la mayoría de los lenguajes modernos como C, Java, Python, JavaScript, etc., y se caracteriza por secuencias de asignaciones, condicionales y bucles organizados en funciones. Lisp, el segundo más antiguo, destaca por su sintaxis inusual basada en paréntesis y su potente sistema de macros, que permite a los programadores redefinir la propia estructura del lenguaje. ML se centra en la programación funcional, con funciones como valores de primera clase y un sistema de tipos robusto. Self introduce la programación orientada a objetos de una manera radical, donde todo el comportamiento se implementa a través de mensajes entre objetos. Forth es conocido por su enfoque minimalista y su capacidad para construir lenguajes específicos del dominio. APL utiliza una notación concisa basada en símbolos para expresar operaciones matemáticas complejas. Finalmente, Prolog es un lenguaje de programación lógica.
La elección de un ur-lenguaje como "tipo especimen" es análoga a la paleontología, donde un fósil define una especie. Por ejemplo, el lenguaje Scheme es un tipo especimen para la familia Lisp. El artículo también explica cómo los ur-lenguajes han influido entre sí a lo largo del tiempo. Por ejemplo, las clases y el polimorfismo, originalmente conceptos de Self, se han incorporado a muchos lenguajes derivados de ALGOL. Del mismo modo, ideas de ML están apareciendo en lenguajes más recientes.
En resumen, comprender los ur-lenguajes proporciona una perspectiva más profunda sobre la evolución de los lenguajes de programación y ayuda a los desarrolladores a apreciar las conexiones subyacentes entre ellos. En lugar de preguntarse cuál es el mejor lenguaje para aprender, el artículo sugiere que es más útil comprender los fundamentos comunes que comparten muchos de ellos.
