¿Qué relación tiene javascript con scheme, self y java?

Para poder entender su relación, tenemos que entender un poco de la historia del lenguaje. A mediados de los 60’s los lenguajes de programación más usados eran:

  1. FORTRAN
  2. LISP
  3. COBOL
  4. ALGOL

ALGOL (Algorithmic Language) introdujo la utilización de bloques utilizando las palabras reservadas begin y end. Actualmente en Javascript, C, Java, entre otros, se utiliza las llaves `{}` para definir bloques de código.

A partir de ALGOL se creó Simula, Simula fue el primer lenguaje de programación orientado a objetos, básicamente le agregó clases y objetos a ALGOL.

Poco tiempo después se creó el primer lenguaje de Programación orientada a objetos (POO) moderno, lo llamaron Smalltalk, a cargo de este proyecto estaba Alan Kay, smalltalk fue diseñado para niños y se tomó 8 años para publicar su primer versión.

Se empezaron a crear los modernos lenguajes de programación orientados a objetos, todos basados en ideas de Smalltalk, C evolucionó a Objective C, C++ y Eiffel, de los cuales surgieron otros lenguajes de programación como Java, C# y Ruby.

Smalltalk permitió también la creación de Self, creado en Xerox Parc y luego migrado a Sun Labs. En este lenguaje de programación se introdujo la idea de prototipos, eliminando la utilización de clases para crear objetos, es decir, en lugar de tener clases que definen las instancias, utiliza los objetos mismos para permitir que un objeto herede de otro objeto. Self tomó esta decisión para hacer el lenguaje más rápido y en general se le conoce por su gran rendimiento, self hizo un buen trabajo en sistemas de recolección de basura (Garbage collections systems, el cual se utiliza para la gestión de memoria).

La maquina virtual Java HotSpotse pudo crear gracias a Self, debido a Self tenemos hoy en día el motor de Javascript V8, el cual lo utiliza node.js y Google Chrome. Así que Self ha sido una gran influencia en rendimiento.

Al parecer Self tomo una de las recomendaciones del libro Design Patterns: Elements of Reusable Object-Oriented Software de los autores Gang of Four, dice algo como esto:

Mejor composición de objetos a herencia de clases.

Smalltalk usa el “El Modelo Actor”, el cual es utilizado ampliamente en la POO el cual dice que los actores se comunican entre ellos a través de mensajes. Por otro lado tenemos a LISP, el cual tiene un “Modelo despachador de funciones” que actualmente le llamamos lenguaje funcional, estos modelos son idénticos, porque las funciones y métodos lo que hacen es enviar mensajes entre actores. Un ejemplo de esto es cuando una función llama a otra función o cuando se invoca el método de un objeto, lo que sucede es que existen actores y se comunican entre ellos a través de mensajes. Entonces podemos deducir que la idea principal de la POO es el envío de mensajes. Y aquí es importante remarcar lo que dijo Alan Kay Co-creador de SmallTalk:

Lamento que hace tiempo haya acuñado el termino Objetos para la programación porque hizo que las personas se enfocaran en la parte menos importante. La gran idea es “Envío de mensajes“.

Mi ingles es malo así que pueden revisar el texto original aquí.

Tomando estos dos modelos idénticos, se refinaron, y se creó Scheme. Scheme tiene la bondad de usar Tail recursiony closure para obtener un lenguaje funcional, closure permite tener acceso a las variables de una función externa aun cuando esta ya haya regresado algún valor.

Por otro lado tenemos a NLS (oN-Line System), fue un sistema de colaboración entre computadoras diseñado por Douglas Engelbart e implementado por la ARC (Augment Research Center) en el Instituto de investigación de Stanford SRI, fue el primer sistema en usar enlaces de hipertexto, mouse, monitores de video ( Monitores de tubos de rayos catodicos), Información organizada por relevancia, GUI (Interfaces gráficas de usuario), programa para presentaciones (Ancestro de Power Point) y otros conceptos modernos de computación.

Después cuando Steve Jobs se le ocurrió la idea de crear la computadora personal Macintosh (esta idea venía concebida desde NLS), los programadores tenían que usar lenguaje ensamblador para crear programas, y era muy difícil conseguir programadores que lo hicieran, debido a esta dificultad, Bill Atkinson que ya había creado MacPainty QuickDraw, se le ocurrió crear una interesante aplicación que le permitiera a personas que no se dedicaran a la programación, crear fácilmente programas, a esta aplicación le agregó un lenguaje de scripting, y se le llamó HyperCard.

HyperCard fue muy exitoso y las personas pensaban que iba a ser el futuro del software. Creó que un poco de esto está pasando en la actualidad con Javascript.

HyperCard, tenía botones, enlaces y muchas cosas que actualmente se tienen en el desarrollo web, en la web misma y en los navegadores modernos, HyperCard se utilizaba como un IDE (Entorno de desarrollo integrado) en el cual tu pulsabas Cmd + B y se abría un cuadro de diálogo para crear el botón y tenía las opciones de configuración que se ven en la imagen, poner icono, algún efecto y hasta agregarle funcionalidad a través de un script.

Una gran ventaja y que se utiliza en el desarrollo web es que si tú creabas un componente como un botón y te lo llevabas a otra parte, otra tarjeta (otra página), el botón seguía teniendo toda la configuración, incluyendo el script. Esto es un predecesor de los componentes web actuales. Su lenguaje de script se llamaba HyperTalk y era así:

Se puede notar el parecido con la funcionalidad mouseup de los navegadores actuales.

A partir de NLS de Engelbart, se empezó un proyecto llamado Xanadu el cual utilizaba el concepto de hipertexto, con el fin de concebir un documento global y único que cubra todo lo escrito en el mundo mediante una gran cantidad de ordenadores interconectados que contenga todo el conocimiento existente, o mejor dicho, información en forma de hipertexto. Este proyecto nunca llegó a terminarse.

Y para ya no hacerles largo el cuento, Tim Berne’s Lee creó la WWW o World Wide web, luego vinieron los navegadores web como Mosaic, el cual se dividió en Netscape y SpyGlass, luego Spyglass fue comprado por Microsoft para poder concebir al navegador más odiado por los desarrolladores web, Internet Explorer.

Netscape necesitaba un lenguaje de scripting para su navegador, así que contrató a Brendan Eich, quien tomó la sintaxis de java, el modelo funcional de Scheme, y la programación orientado a objetos basada en prototipos de Self. Por estas buenas características, Javascript es un lenguaje de programación muy flexible, multiparadigma, dinámico y con un gran potencial, es por eso que lo encontramos actualmente en diferentes áreas, por mencionar algunas:

  • En la web, navegadores web como Firefox, Google Chrome, Opera, Safari.
  • Aplicaciones móviles, un ejemplo es Cordova y Ionic
  • En Node.js para crear sevidores http, ftp y cualquier tipo de tecnología de red de una forma escalable, otro ejemplo es de ejecutar scripts en tu sistema operativo para automatizar tareas.
  • Bases de datos como MongoDB.
  • Aplicaciones de escritorio, un ejemplo es Electron, los editores Atom y Visual Studio Code están hechos con electron.
  • Programación de Robots e IoT (Internet de las cosas), por ejemplo Arduino y johnny-five.

Referencias:

https://www.youtube.com/watch?v=JxAXlJEmNMg
http://wiki.c2.com/?AlanKayOnMessaging
https://www.youtube.com/watch?v=yvx4ObDBGZs

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.