Los lenguajes de programación. Diez tecnologías que cambiaron el mundo (V)

29 comentarios

Los lenguajes de programación. Diez tecnologías que cambiaron el mundo (V)
Hay avances en la historia de la humanidad que resultan más evidentes que otros y que tienen su sitio en los grandes y generalistas libros de historia. Sin embargo, hay otros que son más parecidos a pequeños engranajes que impulsan dichos avances importantes. Hoy, en nuestro repaso por las diez tecnologías que cambiaron el mundo, vamos a hablar de uno de esos engranajes: los lenguajes de programación.

Meterse a examinar la historia de los lenguajes de programación es algo que nos termina desembocando en un enorme laberinto de influencias e influenciadores. Ya desde los primeros días, las innovaciones de unos eran modificadas por otros y aplicadas en un desarrollo completamente nuevo. Pero si empezamos a seguir sus raíces nos daremos cuenta de que ha habido ciertos desarrollos que han contribuido en mayor medida a su avance.

Para entender bien el avance que significó la aparición y evolución de los distintos lenguajes de programación, debemos comenzar por comprender que un ordenador sólo entiende dos cosas: encendido y apagado; es decir, el 0 y el 1, o código máquina.

Los niveles de los lenguajes

Los niveles de los lenguajes

La manera más directa de comunicarle órdenes a un ordenador es hablarle en su idioma. Sin embargo, eso no significa que sea la manera más práctica ni la más rápida para un ser humano; por lo tanto, pronto se empezaron a desarrollar lenguajes que permitieran comunicarse con la máquina de una manera más rápida y eficiente. El primer paso en este sentido fue el lenguaje ensamblador, un lenguaje cuya estructura es muy parecida a la del código máquina sólo que con letras y palabras. Tanto el ensamblador como el código máquina son denominados lenguajes de bajo nivel.

Los lenguajes de bajo nivel son muy simples, pero con ellos resulta muy complicado y laborioso estructurar programas. Por eso se crearon los lenguajes de alto nivel, que es prácticamente a los que nos referimos actualmente al hablar de “lenguajes de programación”. En resumidas cuentas, se tratan de lenguajes pensados para ser entendidos con más facilidad por humanos.

Cuando se elabora un programa en un lenguaje de alto nivel, para poder hacerlo funcionar debemos traducirlo al código máquina; es decir, a unos y ceros. A este proceso se le conoce como compilación.

Los primeros lenguajes

Los primeros lenguajes de programación

Básicamente, los lenguajes nacen y evolucionan por dos razones: para aprovechar los avances tecnológicos y para facilitar el trabajo de los programadores.

El que se considera en la práctica como el primer lenguaje de alto nivel es Fortran, creado por el equipo de John W. Backus en IBM. Vio la luz a mediados de 1954 y aunque se recibió con escepticismo entre la comunidad de desarrolladores de entonces (que preferían seguir utilizando ensamblador), pronto probó su utilidad y su adopción se extendió ampliamente.

Otros lenguajes como LISP y COBOL vinieron después. Pero lo que tenían todos en común es que estaban principalmente orientados a unas ciertas tareas específicas y su uso estaba restringido a científicos y matemáticos

Sin embargo, con la reducción del tamaño y coste de las máquinas, los ordenadores se empezaron a popularizar en las empresas. Esto hizo surgir la necesidad de elaborar lenguajes que fueran más sencillos y que permitiesen el aprovechamiento de los ordenadores para tareas más generales.

El primero en aparecer con estas características fue BASIC, creado en 1964 por John George Kemeny y Thomas Eugene Kurtz con el propósito de ser un lenguaje fácil de usar y que pudiera utilizarse para cualquier cosa. Desde su creación, surgieron multitud de variantes que se siguen utilizando hasta la actualidad.

BASIC tenía en parte una cierta orientación educativa, como también lo tuvo el lenguaje que apareció seis años más tarde: PASCAL, que fue desarrollado principalmente para enseñar programación y luego creció hasta convertirse en una herramienta comercial. Su creador fue Niklaus Wirth que lo publicó en 1970. Por cierto, fue el lenguaje de alto nivel principal que se usó para el desarrollo del Apple Lisa.

C fue un lenguaje que imactó cuando hizo su aparición

Sin embargo, el lenguaje que sin duda más impactó no sólo en esta época sino en las siguientes fue uno con un nombre mucho más simple que todos los anteriores: C. Desarrollado entre 1969 y 1973 por el recientemente fallecido Dennis Ritchie, es considerado como uno de los lenguajes más influyentes en la historia de la informática. A su vez, fue por medio de él que Ritchie y Ken Thompson escribieron uno de los sistemas operativos también más influyentes en su campo: Unix. En realidad, C no es considerado como un lenguaje de alto nivel, sino de medio nivel, pues tiene algunas parte de ensamblador.

La evolución

Los años ochenta son una época en las que se consolidan ideas ya existentes y se toman elementos e ideas de las décadas anteriores como bases para construir nuevos lenguajes. En 1980 se crea uno de los lenguajes más utilizados desde entonces: C++, una modificación de C hecha por Bjarne Stroustrup. Se le considera el lenguaje de programación más popular de la historia y muchos de los programas más conocidos y usados están escritos en él, como por ejemplo MS Office o Firefox. De entre los lenguajes aparecidos en esta década, también cabe destacar la creación por parte de Larry Wall de Perl en 1987, el cual coge características de otros lenguajes como C o Lisp.

En los noventa hacen su aparición también un buen número de lenguajes que son muy utilizados en la actualidad, como Python (1991), Ruby (1993) o Java (1995). Éste último llamó mucho la atención por ser capaz de correr en diferentes equipos y sistemas operativos a través de su máquina virtual, encargada de ejecutar el bytecode resultante de compilar el código Java.

Aunque con la entrada en el nuevo siglo (y milenio) la aparición de nuevos lenguajes se ha visto reducida, eso no quiere decir que no se haya producido. Por ejemplo, tenemos C# y Visual Basic .NET (ambos de Microsoft) o, más recientemente (en el 2009), Go, desarrollado por Google.

Addendum: los nombres

El origen de algunos nombres de lenguajes

No quisiera finalizar este artículo sin hacer mención de un aspecto bastante curioso de los lenguajes de programación: sus nombres. Y es que bautizar una creación no siempre es una tarea fácil. Muchas veces simplemente se optó por un acrónimo más o menos sonoro, o unas siglas que sonasen bien a las que luego poner un significado. Pero en otros casos, las decisiones son tomadas… de otra manera.

De los mencionados en este texto, podemos encontrarnos con que Fortran es una contracción de The IBM Mathematical Formula Translating System, quedándose tan sólo con el For de Formula y el tran de Translating. Por su parte, COBOL es el acrónimo de COmmon Business-Oriented Language, debido a que estaba orientado a negocios, finanzas e instituciones gubernamentales.

C sin duda es el epítome de la simplicidad. ¿El por qué de su nombre? Porque muchas de sus características provenían de un lenguaje anterior llamado… Sí: B. Pura lógica.

Nombres prácticos, que reflejan lo nombrado. Pero… ¿Lo hacen también otros como Python? Pues sí: Python proviene de Monty Python, el conocido grupo de humoristas británicos. ¿Y que tienen que ver estos con un lenguaje para programar? Fácil: los desarrolladores del lenguaje tenían como objetivo que usar este lenguaje fuese divertido.

En el caso de Perl, su creador quería un nombre de connotaciones positivas, por lo tanto lo sacó de la parábola de la perla, del evangelio de San Mateo, que dice: “El Reino de los Cielos es semejante a un mercader que busca perlas preciosas. Cuando encuentra una de gran valor, va, vende todo lo que tiene y la compra”. Pero resultó que ya había un lenguaje llamado PEARL, así que ni corto ni perezoso simplemente alteró el nombre y terminó con el que conocemos: Perl, que no significa absolutamente nada (por muchos acrónimos que le achaquen después).

Amplía información

Este artículo apenas es tan sólo un breve esbozo divulgativo acerca de la historia de los lenguajes de programación. Se han quedado muchas cosas fuera y, en el caso de querer profundizar un poco más, nada mejor que daros una vuelta por Genbeta Dev, donde, por ejemplo, podréis conocer más acerca de algunas de las personalidades que han influido en el mundo de la programación o sobre los paradigmas de programación, algo que os puede ayudar a diferenciar entre los diferentes lenguajes y conocer más sobre este fascinante mundillo.

Muy recomendable también es el póster creado por la editorial O’Really hace ya un tiempo y que contiene una línea de tiempo con más de 50 lenguajes y su relación entre ellos. También resulta interesante una infografía creada por Rackspace que resume bastante la evolución de los lenguajes y que también podéis encontrar en español. Por último, recomendaros también este listado de lenguajes de programación en orden alfabético (en inglés) bastante completo.

En Genbeta | Especial Diez tecnologías que cambiaron el mundo
Imágenes | Peter Hamer | Gabriel Saldana | Josuka Díaz Labrador





Ahora es tu turno de cambiar el mundo con Imagine Cup. La competición de Diseño de Software de Imagine Cup 2012 se basa en el desarrollo de aplicaciones y soluciones que puedan lograr convertir el mundo en un lugar mejor. La final mundial que se celebrará a principios de Julio en Sidney, Australia.


Anunciate aquí
Anunciate aquí
Anunciate aquí

¿Quieres saber más?

Artículos

Artículos relacionados que probablemente también te interesen

Ver más

Respuestas

Preguntas sobre este tema que ha contestado la comunidad

+ Deja tu comentario

Comentarios

  • 1

    Avatar de hereldar !

    Conocía el origen de todos los nombres excepto el de Perl, nunca se me hubiera ocurrido, la verdad.

  • Respondiendo a #1:
  • 2

    !
    | 3 estrellas

    Pues yo tampoco lo conocía y precisamente ayer leí uno de esos acrónimos y hoy me entero que no es correcto. Nunca te acostarás sin saber nada nuevo. :)

  • 3

    Avatar de gabrielon !

    "Otros lenguajes como LISP y COBOL vinieron después. Pero lo que tenían todos en común es que estaban principalmente orientados a unas ciertas tareas específicas y su uso estaba restringido a científicos y matemáticos"

    Supongo que estará simplemente mal redactado, pero puedo asegurar y aseguro que COBOL no esta restringido a usos científicos y matemáticos :)

  • Respondiendo a #3:
  • 7

    !
    | 3 estrellas

    De hecho se usa mucho en entidades bancarias.

  • Respondiendo a #3:
  • 10

    Avatar de Eagle !

    No dice que "esta restringido a usos científicos y matemáticos" sino que los usaban solo científicos y matemáticos (por la complejidad de entenderlo, se supone). Hay que tener en cuenta el contexto de la época, claro.

  • Respondiendo a #3:
  • 20

    Avatar de chavodelocho !

    Efectivamente el fuerte de COBOL era el manejo de archivos, otros del mismo estilo son dBase y Fox. Digo era no porque ya no lo sea, sino porque ahora el uso de los DBMS hacen innecesario escribir rutinas para el manejo de archivos.

    El conocimiento en COBOL es muy bien remunerado actualmente en los estados unidos, ya que como comenta gabrielon, hay muchos grandes sistemas financieros en COBOL que todavía siguen en uso y muy poca gente que les de mantenimiento.

  • Respondiendo a #7:
  • 29

    Avatar de Antonio !

    Tal vez por el consabido "si funciona, no lo toques"

  • 4

    Avatar de alfmen !

    El artículo tiene algunas afirmaciones inexactas y alguna que otra barbaridad ("En realidad, C no es considerado como un lenguaje de alto nivel, sino de medio nivel, pues tiene algunas parte de ensamblador.")

    Aún así, me parece bastante didáctico y válido como culturilla general para las personas que no estén familiarizadas con los lenguajes de programación.

  • Respondiendo a #4:
  • 5

    Avatar de lechuzo !

    hombre, tampoco creo que haya que ser tan despectivo con lo de "culturilla". Te doy la razón en que ha sido bastante didactico para los profanos y no-iniciados, yo entre ellos.

  • Respondiendo a #5:
  • 8

    Avatar de alfmen !

    Vaya, lo siento, no pretendía ser despectivo con la palabra "culturilla". En mi entorno la expresión "culturilla general" no se utiliza con ninguna connotación negativa...

  • Respondiendo a #5:
  • 9

    !
    | 3 estrellas

    Lo de culturilla no tiene significado despectivo, si no todo lo contrario. Es bueno, tener culturilla general, quiere decir que sabes un poco de todo, sin ser un experto en todas las ramas porque es imposible, pero que al menos sabes de qué va.

    Y lo de partes de ensamblador tampoco sé de qué va. Supongo que porque puedes incrustar código en ensamblador pero si es por eso no considero que tenga partes en ensamblador. Yo sé más de C++ y menos de C y por lo tanto no sé si se refiere a otra cosa, pero si es por eso no estoy de acuerdo.

    Aún así es un buen artículo. :)

  • Respondiendo a #9:
  • 11

    Avatar de alfmen !

    Creo que el motivo por el que el lenguaje C sea considerado de medio nivel es que está débilmente tipificado y que tiene características de lenguajes de bajo nivel que hacen sencillo acceder directamente al hardware, como la memoria o los periféricos.

    Supongo que el artículo quiere decir que hay extensiones del lenguaje que permiten añadir código ensamblador a nuestro código C, aunque no solo es esta característica lo que lo define como lenguaje de medio nivel ya que se puede hacer también con muchos lenguajes de alto nivel.

  • Respondiendo a #9:
  • 12

    Avatar de lechuzo !

    Te agradezco a ti y a alfmen por la explicación. En mi lado del charco, todo lo que acabe en *illa suele tener connotación un poco despectiva. La riqueza del idioma castellano :-)

  • Respondiendo a #11:
  • 14

    !
    | 3 estrellas

    Sí, y coincido que es de medio nivel pero a causa de lo que tú comentas no de poder incrustar ensamblador. De hecho en su hermano C++ también se puede.

  • Respondiendo a #12:
  • 15

    !
    | 3 estrellas

    Me he imaginado que iba por ahí la cosa, por eso la aclaración. ;)

  • Respondiendo a #14:
  • 16

    Avatar de apolon !

    Y si no recuerdo mal en Pascal también :P

    (oops, corrijo, en esto me refería más que todo a lo de incrustar assembler, de lo otro si que tengo más dudas del recuerdo).

    -- editado por última vez a las 17:15

  • Respondiendo a #4:
  • 21

    Avatar de chavodelocho !

    Así es, si C se considera de nivel medio no es por el ensamblador, es porque el manejo de la memoria es en gran parte responsabilidad del programador al utilizar C.

  • 6

    Avatar de chelo703 !

    muy bien resumido y explicado, te felicito.

  • 13

    Avatar de juanjp !
    juanjp | 1 estrellas

    A todo esto, hay un lenguaje nuevo que data del 2006, Vala, está muy interesante.

  • 17

    Avatar de driverop !
    Éste último [Java] llamó mucho la atención por ser capaz de correr en diferentes equipos y sistemas operativos a través de su máquina virtual, encargada de ejecutar el bytecode resultante de compilar el código Java.

    Eso lo ya lo hacía COBOL 30 años antes, y sigue haciéndolo...

    Pascal también puede usar código assembler igual que la mayoría de los lenguajes de propósito general.

    Qué obsesión que tienen con darle a C características extraordinarias. Lo único extraordinario que tiene C es el lastre que significó para el avance de la tecnología informática. Que sea un lenguaje de "nivel medio" no es ningún mérito.

  • Respondiendo a #17:
  • 18

    Avatar de wisemaster !

    Más bien creo que la cosa con Java, fue que a diferencia de los lenguajes comunes en áquella época, Java se basaba en la programación orientada a objetos (aunque, muchos no consideramos Java un lenguaje 100% orientado a objetos). A diferencia de C/C++, Pascal y COBOL.

    Respecto a C, pues, no comparto la opinión y creo que C fue un lenguaje que nos dio a muchos la posibilidad de hacer las cosas más simples. En mi caso muy personal, con C hacía las cosas más rápido que con Pascal.

    =============================

    Ahora, recomendación al post:

    Considero que se omitieron lenguajes muy relevantes, en los 70s-80s creo que se debe mencionar Objective-C (y este que ha tomado un momentum con lo que viene siendo Mac/iOS). Uno muchísimo muy importante y que influyó a muchos lenguajes fue Smalltalk.

    También falta hablar de las máquinas virtuales...Cómo .NET y Java, las cuales nos dan la capacidad de ejecutar lenguajes que a día de hoy se usan mucho en la industria, cómo lo son Scala (usado por Twitter) y Groovy. Y que, gracias a las máquinas virtuales, puedo ejecutar librerías codificadas en otros lenguajes.

    Otro lenguaje (que aunque a éste yo no le hago el feo, pero si el horrible) que ha marcado mucho y que es muy popular, PHP.

    También creo que se debe incluir al menospreciado JavaScript...Es un lenguaje con mucho más potencial del que se le considera.

    Algo que a mi parecer debió haber sido incluido son los dialectos de algunos lenguajes, por ejemplo Clojure, que es un dialecto más actual de LISP.

    Para finalizar este largo comentario, quiero mencionar dos lenguajes, que pocos conocen y todavía más pocos usan, pero que han influido, estos son: Haskell y Prolog.

  • Respondiendo a #17:
  • 19

    !
    | 1 estrellas

    Toda la razón del mundo, sobre todo por que tu ya programabas hace varios siglos, prueba de ello es: "El honorable sistema del servidor - Miércoles, 10 de Octubre de 1582" 

    http://www.driverop.com.ar/img (Parte inferior).

    La multitraducción muy currada y sobre todo el error 404 super significativo.

    -- editado por última vez a las 18:48

  • Respondiendo a #18:
  • 22

    !
    | 3 estrellas

    Una puntualización, C no es orientado a objetos para nada y C++ no lo es tanto como java. Me parece que de los pocos, si no el único, 100% orientado a objetos es el smalltalk.

  • Respondiendo a #19:
  • 23

    Avatar de driverop !

    Pedro

    El error que señalas es aparente ;). Solo una mente curiosa y motivada puede desenmarañar ese misterio.

    Para los despistados: la fecha que aparece allí es a propósito

  • Respondiendo a #18:
  • 24

    Avatar de driverop !
    Más bien creo que la cosa con Java, fue que a diferencia de los lenguajes comunes en áquella época, Java se basaba en la programación orientada a objetos (aunque, muchos no consideramos Java un lenguaje 100% orientado a objetos). A diferencia de C/C++, Pascal y COBOL.

    Pues en el artículo dice explícitamente que Java llamó la atención por otras cosas que no son su orientación a objeto

    En mi caso muy personal, con C hacía las cosas más rápido que con Pascal.

    Bien. Yo no.

  • Respondiendo a #18:
  • 25

    Avatar de alfmen !

    Java es importante por muchas cosas, pero la principal es la del concepto de máquina virtual.

    Aunque el artículo no lo menciona, la principal clasificación principal entre lenguajes de programación es la de compilados vs interpretados.

    Los lenguajes compilados son mucho más eficientes que los interpretados, pero tienen un problema. Al menos cuando yo estudié, me dijeron que desarrollar un compilador para un procesador dado requería entre 1,5 y 2 años, independientemente de la gente que pusieras en el equipo de desarrollo o del dinero que invirtieras. O sea, un compilador es algo difícil de desarrollar. En cambio un intérprete de un lenguaje se puede desarrollar sin problemas en 2 o 3 meses.

    Java era un lenguaje nuevo cuyo principal objetivo era funcionar en la mayor cantidad de dispositivos posibles. Por lo tanto un tiempo de desarrollo de 2 años para cada dispositivo posible era inaceptable.

    Por ello, la gente de Java desarrolló el concepto de máquina virtual que es un ordenador virtual que es igual para todos los dispositivos en los que se ejecuta.

    Para cada plataforma, el código Java se compila para que sea ejecutable por esta máquina virtual. Como la compilación es la misma para todos los dispositivos, con hacer un solo compilador es suficiente. El compilador se hace una sola vez, se ajusta un poco para cada plataforma y ya funciona.

    A diferencia del compilador, la máquina virtual es diferente para cada plataforma en la que se ejecuta, pero no es un compilador sino un intérprete por lo que es fácil y rápida de desarrollar. Cuando aparece un dispositivo nuevo la máquina virtual para este dispositivo está disponible en un par de meses.

    Por supuesto, Java es orientado a objetos. Pero por lo que creo que es importante en la historia de la informática es por desarrollar hasta el máximo el concepto de máquina virtual.

    -- editado por última vez a las 15:47

  • Respondiendo a #22:
  • 26

    Avatar de wisemaster !

    Y eso es lo que digo...La diferencia de Java fue que usó cómo paradigma principal el orientado a objetos, a diferencia de C/C++, PASCAL, COBOL.

    Y lenguajes 100% orientados a objetos, pues si hay además de Smalltalk, un ejemplo es Ruby, en Ruby todo viene de una clase, incluso las clases son objetos... Se pudiera aplicar ese mismo concepto a Scala, pero, Scala es más bien híbrido, ya que usa la OOP para atraer programadores, pero su potencial real radica en poder usar objetos con programación funcional.

  • Respondiendo a #25:
  • 27

    Avatar de wisemaster !
    Java es importante por muchas cosas, pero la principal es la del concepto de máquina virtual.

    +1

    Los lenguajes compilados son mucho más eficientes que los interpretados

    Depende. ¿Seguro que es más eficiente un desarrollo web con Java, en lugar de por ejemplo Ruby o Python?...Yo lo he visto de primera mano, y, aunque me gustan más los lenguajes compilados, el tiempo de desarrollo en un lenguaje interpretado es menor...aunque bueno, ya nos contarás si en tiempo de corrección es menor (lo que no pasó por comprobración, lo tienes que ver hasta el tiempo de ejecución).


    Al menos cuando yo estudié, me dijeron que desarrollar un compilador para un procesador dado requería entre 1,5 y 2 años, independientemente de la gente que pusieras en el equipo de desarrollo o del dinero que invirtieras. O sea, un compilador es algo difícil de desarrollar. En cambio un intérprete de un lenguaje se puede desarrollar sin problemas en 2 o 3 meses.


    No sé cuanto tiempo se tarde uno, pero lo que si sé es que no es una tarea trivial. Sin embargo, pues, la verdad no creo que aplique para todos los casos, ya vemos que para Android todavía no existe una versión estable y que puedas poner una aplicación a producción con por ejemplo, Perl o Python.

    Por ello, la gente de Java desarrolló el concepto de máquina virtual que es un ordenador virtual que es igual para todos los dispositivos en los que se ejecuta.

    Para cada plataforma, el código Java se compila para que sea ejecutable por esta máquina virtual. Como la compilación es la misma para todos los dispositivos, con hacer un solo compilador es suficiente. El compilador se hace una sola vez, se ajusta un poco para cada plataforma y ya funciona.

    Bien, pues yo creo que aquí difiero un poco. Dado que por ejemplo para Java, existe la JVM, ésta no puede correr completa en un dispositivo móvil. Incluso para Android tuvieron que hacer otra máquina virtual. Por el simple hecho de haber distintas implementaciones para ciertos casos de uso, quiere decir que la portabilidad es entre mismas máquinas virtuales...Lo que me queda en claro es que usando Java puedes ejecutar programas en Linux, Mac OS y Windows; pero en TODO tipo de dispositivos, no. Incluso Blackberry por muy JavaME que sea, necesitas librerías propias de Blackberry que no funcionan en otros dispositivos.

    A diferencia del compilador, la máquina virtual es diferente para cada plataforma en la que se ejecuta, pero no es un compilador sino un intérprete por lo que es fácil y rápida de desarrollar. Cuando aparece un dispositivo nuevo la máquina virtual para este dispositivo está disponible en un par de meses.

    >Muchas personas dicen que Java no es compilado, sino que es interpretado. Habemos gente que diferimos de ello, y si mal no recuerdo, Java si compila código fuente, de ahí lo pasa a bytecode y el JIT se encarga de interpretarlo. Por lo que podemos decir que Java cómo lenguaje es compilado, y la máquina virtual es un compilador y un intérprete.

    Por supuesto, Java es orientado a objetos. Pero por lo que creo que es importante en la historia de la informática es por desarrollar hasta el máximo el concepto de máquina virtual.

    La verdad no lo sé y me queda claro del todo, pero tenía entendido que las máquinas virtuales venían de hace tiempo antes de Java, pero, con Java dieron "el pelotazo".

    -- editado por última vez a las 18:18

  • Respondiendo a #26:
  • 28

    !
    | 3 estrellas

    Uff... Mi comprensión lectora está por los suelos. Te he releído y ahora sí que lo veo. ;)

Escribir un comentario

Para hacer un comentario es necesario que te identifiques: ENTRA o conéctate con Facebook Connect

Anunciate aquí

WSL Weblogs SL