Historia de los lenguajes de programación

La historia de los lenguajes de programación abarca desde la documentación de los primeros ordenadores mecánicos hasta las modernas herramientas para el desarrollo de software. Los primeros lenguajes de programación eran altamente especializados y se basaban en notación matemática y sintaxis igualmente oscura. A lo largo del siglo XX, la investigación en teoría de compiladores llevó a la creación de lenguajes de programación de alto nivel, que utilizan una sintaxis más accesible para comunicar instrucciones.

Los inicios de la historia

Durante los años 1842-1849, Ada Lovelace tradujo el memorándum del matemático italiano Luigi Menabrea sobre la nueva máquina propuesta por Charles Babbage: el Motor Analítico. Lovelace complementó el memorándum con notas que especificaban detalladamente un método para calcular los números de Bernoulli con la máquina, reconocido por la mayoría de los historiadores como el primer programa de computadora publicado en el mundo.

Los primeros códigos de computadora eran especializados para sus aplicaciones, por ejemplo, Alonzo Church pudo expresar el cálculo lambda de manera formalizada y la Máquina de Turing fue una abstracción de la operación de una máquina de marcar cintas.

Las telares Jacquard y la Máquina de Diferencia de Charles Babbage tenían lenguajes simples para describir las acciones que estas máquinas debían realizar, por lo que fueron los creadores de los primeros lenguajes de programación.

Primeros lenguajes de programación

En la década de 1940, se crearon los primeros ordenadores modernos alimentados eléctricamente. La velocidad y capacidad de memoria limitadas obligaron a los programadores a escribir programas en lenguaje ensamblador optimizado manualmente. Finalmente, se entendió que programar en lenguaje ensamblador requería un gran esfuerzo intelectual.

Una propuesta temprana para un lenguaje de programación de alto nivel fue Plankalkül, desarrollado por Konrad Zuse para su computadora Z1 entre 1942 y 1945, pero no se implementó en ese momento.

Los primeros lenguajes de programación funcionales para comunicar instrucciones a una computadora fueron escritos a principios de la década de 1950. Short Code de John Mauchly, propuesto en 1949, fue uno de los primeros lenguajes de alto nivel desarrollados para una computadora electrónica. A diferencia del código de máquina, las instrucciones de Short Code representaban expresiones matemáticas de forma comprensible. Sin embargo, el programa tenía que ser interpretado en código de máquina cada vez que se ejecutaba, lo que hacía que el proceso fuera mucho más lento que la ejecución del código de máquina equivalente.

A principios de la década de 1950, Alick Glennie desarrolló Autocode, posiblemente el primer lenguaje de programación compilado, en la Universidad de Manchester. En 1954, se desarrolló una segunda iteración del lenguaje, conocido como «Mark 1 Autocode», para Mark 1 por R. A. Brooker. Brooker, junto con la Universidad de Manchester, también desarrolló un autocode para Ferranti Mercury en la década de 1950. La versión para EDSAC 2 fue concebida por Douglas Hartree de la Universidad de Cambridge en 1961. Conocido como EDSAC 2 Autocode, fue un desarrollo directo de Mercury Autocode adaptado a las circunstancias locales y fue destacado por su optimización de código objeto y diagnósticos de lenguaje fuente, que eran avanzados para la época. Un hilo contemporáneo pero separado de desarrollo, Atlas Autocode, fue desarrollado para la máquina Atlas 1 de la Universidad de Manchester.

En 1954, se inventó FORTRAN en IBM por un equipo dirigido por John Backus. Fue el primer lenguaje de propósito general de alto nivel ampliamente utilizado que tenía una implementación funcional, en contraste con solo un diseño en papel. Cuando FORTRAN fue introducido por primera vez, fue visto con escepticismo debido a errores, retrasos en el desarrollo y la eficiencia comparativa de programas «codificados a mano» escritos en lenguaje ensamblador. Sin embargo, en un mercado de hardware que estaba evolucionando rápidamente, el lenguaje finalmente se conoció por su eficiencia. Todavía es un lenguaje popular para la informática de alto rendimiento y se utiliza para programas que clasifican y clasifican los 500 supercomputadoras más rápidas del mundo.

Otro lenguaje de programación temprano fue ideado por Grace Hopper en los Estados Unidos, llamado FLOW-MATIC. Fue desarrollado para UNIVAC I en Remington Rand durante el período de 1955 a 1959. Hopper encontró que los clientes de procesamiento de datos comerciales no se sentían cómodos con la notación matemática, y a principios de 1955, ella y su equipo escribieron una especificación para un lenguaje de programación en inglés e implementaron un prototipo. El compilador FLOW-MATIC se hizo público a principios de 1958 y estuvo sustancialmente completo en 1959. FLOW-MATIC fue una influencia importante en el diseño de COBOL, ya que solo ese y su descendiente directo AIMACO se usaban en ese momento.

Otros lenguajes que todavía se usan hoy en día incluyen LISP (1958), inventado por John McCarthy, y COBOL (1959), creado por el Comité de Alcance Corto. Otro hito a fines de la década de 1950 fue la publicación, por un comité de científicos de la computación estadounidenses y europeos, de «un nuevo lenguaje para algoritmos»; el Informe ALGOL 60 (lenguaje algorítmico). Este informe consolidó muchas ideas que circulaban en ese momento y presentó tres innovaciones clave en el lenguaje:

  1. Estructura de bloques anidados: secuencias de código y declaraciones asociadas podrían agruparse en bloques sin tener que convertirse en procedimientos separados explícitamente nombrados.
  2. Ámbito léxico: un bloque podría tener sus propias variables privadas, procedimientos y funciones, invisibles para el código fuera de ese bloque, es decir, ocultación de información.
  3. Otra innovación, relacionada con esto, fue la forma en que se describía el lenguaje: se utilizó una notación matemáticamente exacta, la forma Backus-Naur (BNF), para describir la sintaxis del lenguaje. Casi todos los lenguajes de programación posteriores han utilizado una variante de BNF para describir la parte libre de contexto de su sintaxis.

ALGOL 60 fue especialmente influyente en el diseño de lenguajes posteriores, algunos de los cuales se volvieron más populares pronto. Los sistemas grandes de Burroughs fueron diseñados para programarse en un subconjunto extendido de ALGOL.

Las ideas clave de ALGOL continuaron, produciendo ALGOL 68:

  1. La sintaxis y la semántica se volvieron aún más ortogonales, con rutinas anónimas, un sistema de tipificación recursiva con funciones de orden superior, etc.
  2. No solo la parte libre de contexto, sino la sintaxis y la semántica completas del lenguaje se definieron formalmente, en términos de la gramática de Van Wijngaarden, un formalismo diseñado específicamente para este propósito. ALGOL 68 tenía muchas características del lenguaje poco utilizadas (por ejemplo, bloques concurrentes y paralelos) y su sistema complejo de atajos sintácticos y conversiones automáticas de tipo lo hicieron impopular entre los implementadores y le dieron una reputación de ser difícil. Niklaus Wirth incluso abandonó el comité de diseño para crear el lenguaje más simple Pascal.

Durante este período se desarrollaron otros lenguajes notables, como:

  • 1951 – Ensamblador Regional
  • 1952 – Autocode
  • 1954 – IPL (predecesor de LISP)
  • 1955 – FLOW-MATIC (que dio lugar a COBOL)
  • 1957 – FORTRAN (primer compilador)
  • 1957 – COMTRAN (predecesor de COBOL)
  • 1958 – LISP
  • 1958 – ALGOL 58
  • 1959 – FACT (predecesor de COBOL)
  • 1959 – COBOL
  • 1959 – RPG
  • 1960 – ALGOL 60
  • 1962 – APL
  • 1962 – Simula
  • 1962 – SNOBOL
  • 1963 – CPL (predecesor de C)
  • 1964 – Speakeasy
  • 1964 – BASIC
  • 1964 – PL/I
  • 1966 – JOSS
  • 1966 – MUMPS
  • 1967 – BCPL (predecesor de C)
  • 1967 – Logo (un lenguaje educativo que luego influyó en Smalltalk y Scratch).

Establecimiento de paradigmas fundamentales

El período desde finales de la década de 1960 hasta finales de la década de 1970 trajo un importante florecimiento de los lenguajes de programación. La mayoría de los paradigmas principales de lenguajes que se utilizan actualmente se inventaron en este período:

  • Simula, inventado a fines de la década de 1960 por Nygaard y Dahl como un superconjunto de ALGOL 60, fue el primer lenguaje diseñado para admitir la programación orientada a objetos.
  • FORTH, el lenguaje de programación concatenativo más temprano, fue diseñado por Charles Moore en 1969 como un sistema de desarrollo personal mientras estaba en el National Radio Astronomy Observatory (NRAO).
  • C, un lenguaje de programación para sistemas, fue desarrollado por Dennis Ritchie y Ken Thompson en Bell Labs entre 1969 y 1973.
  • Smalltalk (mediados de la década de 1970) proporcionó un diseño completo de un lenguaje orientado a objetos desde cero.
  • Prolog, diseñado en 1972 por Alain Colmerauer, Phillipe Roussel y Robert Kowalski, fue el primer lenguaje de programación lógica.
  • ML construyó un sistema de tipos polimórficos (inventado por Robin Milner en 1973) en Lisp, pionero en lenguajes de programación funcional con tipificación estática. Cada uno de estos lenguajes generó toda una familia de descendientes y la mayoría de los lenguajes modernos cuentan con al menos uno de ellos en su ascendencia.

También durante los años 1960 y 1970 se produjo un importante debate sobre los méritos de la «programación estructurada», que básicamente significaba programar sin el uso de instrucciones GOTO. Una fracción significativa de los programadores creía que, incluso en los lenguajes que ofrecían GOTO, era una mala práctica de programación usarlo excepto en circunstancias excepcionales. Este debate estaba estrechamente relacionado con el diseño del lenguaje: algunos lenguajes no tenían GOTO, lo que forzaba el uso de programación estructurada.

Para proporcionar tiempos de compilación aún más rápidos, algunos lenguajes se estructuraron para «compiladores de un solo pase», que esperaban que las rutinas subordinadas se definieran primero, como en Pascal, donde la rutina principal, o función controladora, es la última sección de la lista del programa.

Algunos lenguajes notables que se desarrollaron en este período incluyen:

  • 1967 – BCPL (predecesor de B)
  • 1968 – Logo
  • 1969 – B (predecesor de C)
  • 1970 – Pascal
  • 1970 – Forth
  • 1972 – C
  • 1972 – Smalltalk
  • 1972 – Prolog
  • 1973 – ML
  • 1975 – Scheme
  • 1978 – SQL (un lenguaje de consulta, extendido más tarde) Década de 1980: consolidación, módulos, rendimiento

Los años 1980 fueron años de consolidación relativa en los lenguajes imperativos. En lugar de inventar nuevos paradigmas, todos estos movimientos ampliaron las ideas inventadas en la década anterior. C++ combinó la programación orientada a objetos y de sistemas. El gobierno de Estados Unidos estandarizó Ada, un lenguaje de programación de sistemas destinado a ser utilizado por contratistas de defensa. En Japón y en otros lugares se gastaron grandes sumas investigando los llamados lenguajes de programación de quinta generación que incorporaban constructos de programación lógica. La comunidad de lenguajes funcionales se trasladó a estandarizar ML y Lisp. La investigación en Miranda, un lenguaje funcional con evaluación perezosa, comenzó a afianzarse en esta década.

Una nueva tendencia importante en el diseño de lenguajes fue un mayor enfoque en la programación para sistemas a gran escala mediante el uso de módulos, o unidades organizativas a gran escala de código. Modula, Ada y ML desarrollaron sistemas de módulos notables en la década de 1980. Los sistemas de módulos a menudo se unieron a constructos de programación genérica: la genéricidad era, en esencia, módulos parametrizados (ver también el polimorfismo en la programación orientada a objetos).

Aunque no aparecieron nuevos paradigmas importantes para los lenguajes de programación imperativos, muchos investigadores ampliaron las ideas de los lenguajes anteriores y las adaptaron a nuevos contextos. Por ejemplo, los lenguajes de los sistemas Argus y Emerald adaptaron la programación orientada a objetos a los sistemas informáticos distribuidos.

Los años 1980 también trajeron avances en la implementación de lenguajes de programación. El movimiento de la arquitectura de computadora con conjunto de instrucciones reducido (RISC) postuló que el hardware debería diseñarse para los compiladores en lugar de para programadores de ensamblaje humanos. Ayudado por las mejoras en la velocidad de la unidad central de procesamiento (CPU) que permitieron métodos de compilación cada vez más agresivos, el movimiento RISC despertó un mayor interés en la tecnología de compiladores para lenguajes de alto nivel.

La tecnología de lenguajes continuó por esta línea hasta bien entrada la década de 1990.

Algunos lenguajes notables que se desarrollaron en este período incluyen:

  • 1980 – C++ (como C con clases, renombrado en 1983)
  • 1983 – Ada
  • 1984 – Common Lisp
  • 1984 – MATLAB
  • 1984 – dBase III, dBase III Plus (Clipper y FoxPro como FoxBASE)
  • 1985 – Eiffel
  • 1986 – Objective-C
  • 1986 – LabVIEW (lenguaje de programación visual)
  • 1986 – Erlang
  • 1987 – Perl
  • 1988 – PIC (lenguaje de marcado)
  • 1988 – Tcl
  • 1988 – Wolfram Language (como parte de Mathematica, solo recibió un nombre separado en junio de 2013)
  • 1989 – FL (Backus)

Década de 1990: Internet y la explosión de la web

A medida que avanzaban los años 1990, los lenguajes de programación se convirtieron en más amplios y diversas. Java se convirtió en un lenguaje importante para la programación basada en la web. Perl, Python y Ruby se destacaron como lenguajes de scripting de propósito general, y C++ y Java se consolidaron como lenguajes de sistemas y aplicaciones de amplia utilización. Alrededor de la misma época, los lenguajes de script comenzaron a ganar popularidad para escribir pequeños programas.

En la década de 1990 también se popularizaron los lenguajes de programación de secuencias de comandos del lado del cliente para crear interactividad en los sitios web, como JavaScript (a menudo considerado un lenguaje de programación), VBScript y Active Server Pages con Visual Basic Scripting Edition. Los lenguajes de programación de secuencias de comandos del lado del cliente se cargan en un navegador web y se ejecutan en el sistema del cliente, lo que permite la interacción del usuario sin comunicarse con el servidor. Hasta la fecha, estos lenguajes se han desplazado gradualmente hacia el lado del servidor, con el aumento de la potencia de procesamiento de los servidores, la mejora de la seguridad del navegador y el aumento de las restricciones de los lenguajes de programación de secuencias de comandos del lado del cliente, como la Política de seguridad del mismo origen.

Otros lenguajes notables que se desarrollaron en este período incluyen:

  • 1990 – Haskell
  • 1991 – Python
  • 1991 – Visual Basic para Aplicaciones (VBA)
  • 1991 – C99
  • 1993 – Lua
  • 1993 – R
  • 1993 – Ruby
  • 1993 – K (K and q, a 1993 array programming language for data analysis and statistical computing, predating R by 15 years)
  • 1993 – F#
  • 1994 – PHP
  • 1994 – CLOS
  • 1995 – Ada 95
  • 1995 – Delphi (Object Pascal)
  • 1995 – Java
  • 1995 – JavaScript
  • 1995 – PHP
  • 1995 – Python
  • 1995 – Ruby
  • 1995 – Tcl
  • 1997 – Rebol
  • 1999 – D

Década de 2000 y más allá: evolución continua

En los años 2000 y más allá, el desarrollo de nuevos lenguajes de programación ha continuado, aunque el ritmo de aparición de lenguajes revolucionarios ha disminuido. En cambio, la evolución se ha centrado en mejorar y extender lenguajes existentes, adaptándolos a nuevos contextos y desafíos. La necesidad de lenguajes de programación más seguros y confiables ha sido un enfoque importante en este período, con lenguajes como Rust, Go y Swift que se han destacado en ese aspecto. Además, ha habido una creciente adopción de lenguajes más especializados para campos como ciencia de datos y aprendizaje automático, como R y Julia.

Las tendencias actuales en el desarrollo de lenguajes de programación incluyen:

  • Lenguajes enfocados en concurrencia y paralelismo para aprovechar mejor las arquitecturas modernas con múltiples núcleos y procesadores.
  • Lenguajes que enfatizan la seguridad y la prevención de errores, mediante tipificación estática más sólida, verificación de contratos, verificación formal y técnicas similares.
  • Lenguajes diseñados específicamente para el desarrollo de aplicaciones web y móviles.
  • Lenguajes para la computación cuántica, ya que esta área de investigación y desarrollo avanza rápidamente.

En conclusión, la historia de los lenguajes de programación es una narrativa fascinante de creatividad humana y evolución tecnológica. Desde los primeros lenguajes de máquina hasta los modernos lenguajes de alto nivel, cada uno ha dejado su huella en el mundo de la informática y ha sido una herramienta para permitir el progreso en diversas áreas de la sociedad. La diversidad y evolución continua de los lenguajes de programación aseguran que la disciplina de la informática siga siendo emocionante y llena de posibilidades para el futuro.

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio
×