Historia de los lenguajes de programación

Desde 1954 hasta la actualidad se han documentado más de 2.500 lenguajes de programación (consultar en The Language List). Entre 1952 y 1972, la primera época de los lenguajes de programación, se desarrollaron alrededor de 200 lenguajes, de los que una decena fueron realmente significativos y tuvieron influencia en el desarrollo de lenguajes posteriores.

Una lista parcial de algunos de los lenguajes de programación más importantes, junto con su año de creación:

  • 1957 FORTRAN
  • 1958 ALGOL
  • 1960 Lisp
  • 1960 COBOL
  • 1962 APL
  • 1962 SIMULA
  • 1964 BASIC
  • 1964 PL/I
  • 1970 Prolog
  • 1972 C
  • 1975 Pascal
  • 1975 Scheme
  • 1975 Modula
  • 1983 Smalltalk-80
  • 1983 Objective-C
  • 1983 Ada
  • 1986 C++
  • 1986 Eiffel
  • 1987 Perl
  • 1988 Tcl/Tk
  • 1990 Haskell
  • 1991 Python
  • 1993 Ruby
  • 1995 Java
  • 1995 PHP
  • 2000 C#

 

Un diagrama de los lenguajes más importantes y sus dependencias:

Éric Lévénez ha hecho el esfuerzo de construir un árbol genealógico de los lenguajes de programación, que indica la fecha en la que cada lenguaje fue creado y la influencia que ha tenido en los lenguajes posteriores. Consultar el documento PDF y la web de Éric Lévénez.

La Torre de Babel, representa el gran número de lenguajes de programación. Esta imagen se usó en la portada de Programming Languages: History and Fundamentals, de J. E. Sauel, 1969, Prentice Hall.

Al principio, los lenguajes se diseñaban únicamente para poder ejecutar los programas eficientemente. Los ordenadores, carísimos, eran el recurso crítico, y los programadores eran bastante baratos. Un lenguaje de alto nivel tenía que ser competitivo con la ejecución de un código en ensamblador. A mediados de los años 60, cuando se habían diseñado FORTRAN, COBOL, LISP y ALGOL, John Backus (creador de FORTRAN) se dio cuenta que la programación estaba cambiando. Las máquinas eran menos caras, el coste de la programación estaba aumentando, aparecía la necesidad de mover o migrar los programas de unas estaciones a otras, y surgía la necesidad de llevar un buen mantenimiento de los programas resultantes. El objetivo de un lenguaje de alto nivel se transformó no sólo en en ejecutar los programas eficientemente, sino también en facilitar el desarrollo de programas para resolver problemas en determinadas áreas de aplicación.

La tecnología de los ordenadores maduró entre 1960 y 1970 y los lenguajes se centraron en resolver problemas específicos de un dominio. Los programas científicos generalmente se implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia artificial en LISP y las militares internas en Ada. Al igual que sucede con los lenguajes naturales, los lenguajes de programación a veces dejan de usarse. ALGOL no se utiliza desde los años 60, se reemplazó por Pascal, el cual se reemplazó a su vez por C++ y Java. COBOL, que se utilizaba para las aplicaciones mercantiles, se sustituyó también por C++.

Los primeros lenguajes que todavía se usan tienen revisiones periódicas para reflejar influencias de otras áreas de computación. Lenguajes como Java, C++ y ML reflejan una gran experiencia obtenida en el diseño y uso de los cientos de lenguajes antiguos. Algunas de esas influencias son:

  • Recursos del ordenador: la evolución de los ordenadores desde los años 50, junto con los modernos sistemas operativos, han influenciado las características de los lenguajes de alto nivel.
  • Aplicaciones: el uso de los ordenadores se ha extendido rápidamente desde las aplicaciones militares, científicas y de negocios a los juegos, los ordenadores personales, internet y cualquier aplicación cotidiana.
  • Métodos de programación: el diseño de los lenguajes tiene que reflejar los buenos métodos para implementar programas grandes y complejos.
  • Estudios teóricos: Gracias a la investigación durante más de 50 años en el diseño e implementación de lenguajes, se conocen los puntos fuertes y débiles de las características de los mismos, por lo que influye en el diseño de los nuevos lenguajes.
  • Estandarización: cada vez más existe la necesidad de que los programas sean portables de unos sistemas a otros.

La siguiente tabla (extraida del libro Programming Languages. Design and Implementation, de Terrence W. Pratt y Marvin V. Zelkowitz) muestra una pequeña lista de los lenguajes y las influencias que fueron importante a finales del siglo XX.

A pesar de la enorme lista de lenguajes de programación que han ido apareciendo, la mayor parte de los programadores sólo utilizan unos pocos lenguajes. Además, los programadores a menudo trabajan en empresas o instalaciones donde se trabaja con un único lenguaje en particular, como Java, C o Ada. Entonces, te preguntarás por qué es importante el estudio de diferentes lenguajes o paradigmas cuando al final sólo trabajarás con unos pocos. Hay muchas razones que justifican su estudio, entre las cuales las más importantes son:

  • Mejora el uso del lenguaje de programación: si se conoce cómo están implementadas las características en un lenguaje de programación, se mejorará la habilidad para escribir programas eficientes. Por ejemplo, si se conoce cómo crear y manipular listas o cadenas en un lenguaje, por ejemplo Scheme, utilizando recursión se conseguirá construir programas más eficientes.
  • Incrementa el vocabulario de los elementos de programación.
  • Permite una mejor elección del lenguaje de programación: El conocimiento de diversos lenguajes de programación facilitan la elección del lenguaje más adecuado para un proyecto determinado.
  • Mejora la habilidad para desarrollar programas efectivos y eficientes: Muchos lenguajes proporcionan características que, cuando se utilizan correctamente, aportan muchos beneficios a la programación pero, cuando se hace un uso incorrecto, pueden ocasionar un gran coste computacional. El ejemplo típico es la recursión, que permite una implementación elegante y eficiente de funciones. Pero cuando no se sabe utilizar, puede ocasionar un aumento exponencial del tiempo de ejecución.
  • Facilita el aprendizaje de un nuevo lenguaje de programación: Cuando se conocen las estructuras, técnicas de implementación y construcciones de un lenguaje, es mucho más sencillo aprender un nuevo lenguaje de programación que tenga estructuras similares.
  • Facilita el diseño de nuevos lenguajes de programación: Es posible que en un futuro tengais que diseñar vosotros un lenguaje que se adapte a vuestras necesidades. Cuantos más lenguajes y paradigmas se conozcan, más sencillo resultará el diseño y la implementación.

La historia de los lenguajes de programación es dinámica y se encuentra en continua expansión. El gran número de lenguajes de programación que han aparecido desde los años 60 hasta la actualidad no son ni mucho menos los únicos que aparecerán en un futuro.

A continuación tenemos una lista extraída de freshmeat donde se puede ver el número de proyectos activos basados en cada lenguaje de programación en la actualidad.

  • Ada (67 projects)
  • APL (3 projects)
  • ASP (47 projects)
  • Assembly (272 projects)
  • Awk (68 projects)
  • Basic (39 projects)
  • C (9296 projects)
  • C# (344 projects)
  • C++ (5207 projects)
  • Clipper (1 project)
  • Cold Fusion (25 projects)
  • Common Lisp (67 projects)
  • D (15 projects)
  • Delphi (80 projects)
  • Dylan (2 projects)
  • Eiffel (35 projects)
  • Emacs-Lisp (66 projects)
  • Erlang (39 projects)
  • Euler (1 project)
  • Euphoria (10 projects)
  • Forth (29 projects)
  • Fortran (94 projects)
  • Gambas (11 projects)
  • Groovy (42 projects)
  • Haskell (76 projects)
  • Java (6337 projects)
  • JavaScript (1260 projects)
  • Lisp (88 projects)
  • Logo (6 projects)
  • Lua (60 projects)
  • ML (33 projects)
  • Modula (8 projects)
  • Object Pascal (35 projects)
  • Objective C (390 projects)
  • OCaml (98 projects)
  • Other (310 projects)
  • Other Scripting Engines (173 projects)
  • Pascal (63 projects)
  • Perl (3816 projects)
  • PHP (4521 projects)
  • Pike (13 projects)
  • PL/SQL (95 projects)
  • Pliant (1 project)
  • PROGRESS (4 projects)
  • Prolog (24 projects)
  • Python (3323 projects)
  • REALbasic (14 projects)
  • Rebol (3 projects)
  • Rexx (11 projects)
  • Ruby (512 projects)
  • Scheme (151 projects)
  • Simula (1 project)
  • Smalltalk (24 projects)
  • SQL (565 projects)
  • Tcl (523 projects)
  • Unix Shell (1119 projects)
  • Visual Basic (49 projects)
  • XBasic (1 project)
  • YACC (32 projects)
  • Zope (48 projects)

En la siguiente web Timeline of Programming Languages tenemos una lista de los lenguajes que han aparecido cronológicamente desde los años 50. Es interesante ver los que han aparecido desde el año 2000 al 2007 (21 lenguajes).

Cuando los lenguajes de programación empezaron a aparecer, los creadores normalmente eran entidades o empresas. Hoy en día es diferente, cualquier informático puede crear un lenguaje nuevo en un momento dado que precise ciertas características en concreto. Por ejemplo, tenemos el caso de Ruby, un lenguaje de programación ideado en 1993 por un joven japonés llamado Yukihiro Matsumoto. Quiso crear un lenguaje donde la programación funcional y la imperativa estuviese balanceada. Necesitaba además que fuese un lenguaje de script más potente que Perl y más orientado a objetos que Phyton.

El nombre de Ruby se decidió entre Yukihiro y Keiju Ishitsuka en 1993 en una sesión online de chat, antes de que se hubiese implementado el código. Se propusieron dos nombres, Ruby y Coral, y al final decidieron Ruby porque era la piedra del zodiaco de uno de sus colegas.

La primera versión pública Ruby 0.95 se anunció en un grupo de noticias domésticas en Japón en diciembre de 1995. A continuación se lanzaron tres versiones más y se creó el grupo de noticias ruby-list. La versión Ruby 1.0 apareció en diciembre de 1996, la versión 1.3 en 1999 y la 1.8.7 en junio de 2008. La última versión que se ha lanzado Ruby 1.9.1 ha sido el 25 de Enero de 2009.

Ruby es un lenguaje orientado a objetos pero multiparadigma: esto quiere decir que en ruby cada tipo de dato es un objeto y cada función es un método, pero permite programación imperativa y funcional (multiparadigma).

Un ejemplo de programación en Ruby:

puts "Hello World!"

Otro ejemplo:

puts "What's your favorite number?"
number = gets.chomp
output_number = number.to_i + 1
puts output_number.to_s + ' is a bigger and better favorite number.'