Ouracademy

Los lenguajes de programación más importantes de la historia

Una de las cosas que siempre me intriga es aprender la historía, saber de donde vienen esos conceptos de programación que cada dia usamos, conceptos como los objetos, clases, funciones, recursión. Si alguna vez te has preguntado de donde la idea de usar if/else, o pasar argumentos por referencia o valor... o cosas asi. Este post es para ti! 😄

Este post esta basado en uno de mis sitios favoritos, el wiki de Ward Cunningham, Ground Breaking Languages

Este post es realmente un listado de los lenguajes "innovadores" esos que influyeron en los lenguajes que hoy en dia usamos.

Algunos de los lenguajes que se muestran aca ya no se usan (y quiza nunca se vuelvan a usar), pero representaron en su epóca nuevas formas de ver e interactuar con las computadoras.

Cada uno de los lenguajes (junto a sus creadores) listados aquí, tuvo un insight que cambio la forma en como vemos la programación hoy.

Los lenguajes que dieron paso a nuevos idiomas e influenciaron en idiomas sucesores

Short code

La máquina solo leia 0s y 1s. Los programadores para escribir programas tenian que expresar todos las ordenes a la máquina de esa forma (o a traves de números hexadecimales) . Para mejorar la productividad es aquí donde entra el 1er lenguaje ensamblador 🙂

APL

Todos hemos usado alguna vez arrays o listas. Bueno de donde vino? De este lenguaje. Uno de los primeros lenguajes de programación orientada a colecciones. Tenia Vectores y Matrices como tipos de 1ra clase.

Aunque tambien este lenguaje era muy antiguo. Tan antiguo que requeria su propio teclado ⌨️ ?? Eran otros tiempos...

GraphicalProgramEditor

Si alguna vez haz usado UML como lenguaje de programación (que genera código que se puede ejecutar) o haz usado BPMN (con herramientas como Bizagi). Este lenguaje fue el 1er lenguaje gráfico, desarrollado por el hermano del famoso Ivan Sutherland, conocido por Sketchpad.


UML como lenguaje de programación
UML como lenguaje de programación

IPL - Information Processing Language (Allen Newell, Cliff Shaw an HerbertSimon, 1956)

Aquí uno de los 1ros lenguajes que tenia la mayoría de caracteristicas que usamos hoy, entre ellas: listas, asociaciones (aka, Maps, Diccionarios, arrays asociativos), tipos de datos, recursion, funciones como argumentos (cosas como someFunction(anotherFunction), generadores o streams (si en tu lenguaje has visto yield ), multitareas cooperativas.

Fortran

El 1er lenguaje ampliamente usado de alto nivel (alto nivel ...claro en comparación a ensamblador 😛). Aunque habia sistemas en esa epoca que te permitian escribir expresiones muy parecidas a Fortran, pero estaban atadas a la arquitectura del computador. FORTRAN fue el 1er lenguaje que dio compatibilidad en diferentes arquitecturas de computadoras. Además convencio a la comunidad de computación de lo práctico que podrían ser los lenguajes de alto nivel.

Cobol

COBOL fue el 1er lenguaje en soportar tipos record (algo así como el struct en otros lenguajes ).

    01  customer-record.
        05  cust-key            PIC X(10).
        05  cust-name.
            10  cust-first-name PIC X(30).
            10  cust-last-name  PIC X(30).
        05  cust-balance        PIC 9(7)V99.

Además fue el 1er lenguaje usado para aplicaciones comerciales, en ese tiempo no habia lenguajes para ello.

Algol

Fue el 1er lenguaje con una sintaxis formal y con

Lexical Scopes (variables dentro del contexto del bloque, no como `var` en Javascript 😝). La mayoría de los lenguajes imperativos se basaron en el.

Otro punto importante fue el concepto de plataforma independiente. La I/O (input/output) se le dejaba al que lo implementaba (algo asi como el famoso JDBC de Java, uno debe instalar el driver adecuado para su RDBMS).

LISP

Gracias a el tenemos las funciones de alto orden (HOF, o higher order functions por sus siglas en ingles), los Functors (map() ), los closures lexicos (en Javascript si has usado un arrow function probablemente sabes de lo que hablo), los poderosos Macros (define tu propio lenguaje!), Code as data (a traves de su Homoiconicity), base de los Sistemas expertos, if/else (antes solo tenian el goto ), Haz lo que hago (tambien conocido Transparencia Referencial), los famosos Mixins y otras cosas más avanzadas como... Protocolo de metaobjectos (algo parecido como el famoso Object pero 10 veces más potente), Combinación de Métodos Continuaciones, Multiple dispatch (no es sobrecarga de métodos!).

FP (Backus) El 1er lenguaje puramente funcional

Java

No por su JVM (Smalltalk tenia una VM), ni su Garbage collector, mucho menos por Orientación a Objetos...sino por ser el 1er lenguaje industrial en poner caracteristicas para la seguridad como los class loaders, los security managers, operaciones con privilegios) y bueno las InnerClasses (clases dentro de otras clases). como

class C {
    class D {
    }
}

Que en el fondo son una forma de lexical closures (otra vez Lisp ❤️, lo tuvo antes) Además salvo a muchos programadores de usar C++ en aplicaciones empresariales.

Pero salvara a los programadores de lo inadecuado de Java? - una broma del post original

Simula

El 1ro en Garbage Collection (no Java!) y más importante los objetos como los usamos hoy en día (tristemente no el OOP real 😢 de Alan Kay)

ObjLanguage OBJ el 1ro en programación parametrizada

PL/I

El 1er lenguaje con excepciones

Prolog El 1ro lenguaje de programación lógica

Smalltalk

Objetos vivos, Meta clases, Contextos, Metodos compilados, Ventanas que se solapan, la noción de bloques (mira el ejemplo). Gracias a que el lenguaje era altamente reflexivo su IDE (aunque no es parte del lenguaje en sí) permitia tener un "navegador como editor de clases" y un "debugger como editor de contextos".

  result := Dialog
  confirm: 'Are you sure you want to erase the *entire* hard drive?'
  onCancelDo: [^self].

Self

Por usar el paradigma orientado a prototipos en vez del más común orientado a clases (C++, Java, C#). Self además no hace distinciones entre llamar a un método o acceder a un miembro, algo como:

const person = {
  firstName: "Alejandro",
  lastName: "Magno",
  get name() {
    return this.firstName + " " + this.lastName;
  },
};
console.log(person.name);
console.log(person.firstName);

Donde acceder a un miembro (firstName) es muy similar a ejecutar el metodo (name). En Self tanto metodos, como acceder a miembros poseen una misma sintaxis. Facilitando refactorizaciones

VisiCalc

El 1er lenguaje bidimensional!! Quizá es el lenguaje más innovador. Cambio el mundo. Cada compañía lo quería. Porque? Porque hizo posible que existiera el lenguaje más popular de hoy: las hojas de cálculo. Si todos programamos, al menos los que hemos usado Excel 😅. Diras no eso no es un lenguaje, pero si tiene secuencias, puedes seleccionar datos e iterar; que más necesitas?

SGML

El 1er lenguaje de marcado. Predecesor de XML y HTML, en general de todos los lenguajes de marcado que apoyan a la programación orientada a documentos.

SGML

Aún hay muchos otros lenguajes que me faltaron describir...que estaban en el wiki del que me base. Entre ellos: SQL, SNOBOL, Python, Perl, Haskell, Basic, Ada. Ojala tenga tiempo de escribirlos, pero por el momento pueden ver el link original si desean saber más.

Si te fue útil este artículo, por favor compártelo. Apreciamos los comentarios y el aliento.
Compartelo por:

Quiza te pueda interesar...

Un ejemplo viendo el codigo de redux

¿Qué es Redux? Un contenedor de estado predecible para aplicaciones de JavaScript. ¿Pero.. Cómo funciona? Siempre quise entender como…

¿Existe tal cosa llamada análisis orientado a objetos?

que es analisis orientado a objetos (OOA) y cual es la diferencia con diseño orientado a objetos

Cuando crear un Tipo de dato?

string, float, date...pero por que no crear tu propio tipo de dato? traducido de Martin Fowler