martes, marzo 27, 2012

Tutorial de desarrollo web, Parte XXV: Introducción al JavaScript

Previously, on The CubeBlog...
Tutorial de desarrollo web, Parte XXIV: Muestra de HTML5. Editores de páginas

Empezamos nueva etapa en el tutorial en la que comenzamos por fin a hablar de programación. Pero, tal como hicimos cuando comenzamos con HTML y CSS, en esta primera entrega vamos a explicar exactamente lo que es el JavaScript, cual es su propósito y, en sí, qué es la programación. Y, para ello, vamos a tener que ver un poco de "historia" de la informática. Tranquilos, no voy a dar nombres ni fechas, sólo explicación de cómo hemos llegado hasta los lenguajes de programación más modernos.
El objetivo de cualquier lenguaje informático, ya se trate de lenguajes de programación, marcado, consulta, hojas de estilo o cualquier otro tipo de lenguaje, es darle una serie de instrucciones al ordenador para que estos nos generen una respuesta. Usamos este tipo de lenguajes porque, como supongo que todos sabemos, los ordenadores son incapaces de entender el lenguaje humano. ¿Pero entienden realmente los ordenadores los lenguajes de programación (o cualquier otro tipo de lenguaje informático)?
Contra todo pronóstico, la respuesta es no. Un ordenador, en su forma más básica, no entiende palabras, no entenderá a qué nos referimos cuando introducimos una etiqueta <html> o una instrucción text-align: center;. De por sí, el ordenador es incapaz completamente de entender cada uno de los caracteres que forman esas instrucciones, no saben lo que es una "h" o lo que es una "a". Y, contrario a la creencia popular, ni siquiera saben lo que es un 0 ni lo que es un 1. El ordenador es una máquina que sólo responde ante un estímulo: recibir corriente.
Así que para "hablar" con un ordenador lo que debemos hacer es introducir y dejar de introducir corriente. La suma de todos los microchips (miles, millones... probablemente incluso billones... no soy muy ducho en hardware) que reciben o dejan de recibir corriente en un momento determinado es lo que provoca que el ordenador pueda entender y procesar todas estas operaciones. Pero como es muy difícil llamar a este tipo de lenguaje "corriente" y "no corriente" los desarrolladores empezaron a llamar a la situación en que un microchip no está recibiendo corriente 0 y el momento en que sí lo está recibiendo 1. Así nació el lenguaje de programación más básico, el lenguaje máquina, basado en código binario.
El ordenador no entiende realmente el lenguaje máquina, sin embargo, existen técnicas para traducir ese lenguaje en lo que el ordenador realmente entiende. Sin embargo, el lenguaje máquina sigue siendo incomprensible para el ser humano. Sólo la cantidad de ristras de ceros y unos necesaria para mostrar una simple letra por pantalla es casi imposible de memorizar, ya no hablemos de intentar mostrar gráficos, hacer operaciones complejas o incluso crear un juego. Para este cometido se construyó un lenguaje algo "superior" al lenguaje máquina, uno cuyas instrucciones pudieran ser legibles por seres humanos: el lenguaje ensamblador.
Este lenguaje ya contiene palabras (en inglés, como la mayoría de los lenguajes de programación) entendibles por el ser humano, contando con un programa llamado "ensamblador" que se encarga de traducir las instrucciones de dicho lenguaje ensamblador en lenguaje máquina. Este lenguaje ensamblador, todavía complejo y con muchos requisitos de entendimiento de hardware para su uso, es el último de los lenguajes conocidos como "de bajo nivel", aquellos lenguajes que se relacionan directamente con la parte física del ordenador y que a día de hoy son usados para programar el funcionamiento de aparatos electrónicos (desde ordenadores a lavadoras o reproductores de DVD's) en sus funciones más básicas.
Sin embargo, el lenguaje ensamblador, siendo muy útil para programar estas operaciones "de bajo nivel", se hace muy engorroso cuando queremos desarrollar aplicaciones con estructuras de datos muy complejas, de manera que se dio otro paso por encima de este lenguaje, naciendo los llamados lenguajes de alto nivel. A este tipo de lenguajes pertenecen nombres tan populares como Java, C++, Ruby o Basic. Los lenguajes de alto nivel se caracterizan por usar programas que "traducen" sus instrucciones a instrucciones de lenguajes de bajo nivel para poder ser ejecutados. Su sintaxis es mucho más comprensible para los humanos, aunque, por supuesto, cada vez se encuentra más lejos de la comprensión de la máquina. Existen distintos tipos de lenguajes, depende de la época en que se hayan desarrollado y/o de su función: lenguajes estructurados, orientados a objetos, basados en prototipos, etcétera.
La distinción que más nos importa en este artículo es aquella que separa los "lenguajes compilados" y los "lenguajes interpretados". Esta distinción, un tanto ficticia, se decide según el tipo de programa que se use para "traducir" dichos lenguajes. Vamos paso por paso.
Los lenguajes compilados se caracterizan porque el desarrollador, una vez ha escrito el código de su programa, ejecutará un programa llamado "compilador" el cual, si el código está correctamente escrito, lo traducirá a lenguaje máquina, generando un nuevo archivo ejecutable independiente al código que, a partir de entonces, podrá ser ejecutado en cualquier otro ordenador, tenga o no este otro ordenador el código fuente original. De esta manera, puede darse la situación (y es muy habitual) en la que tengamos el programa ya compilado pero no su código, de modo que si quisiéramos hacer una modificación en el programa deberíamos acceder a su lenguaje máquina (algo que, por supuesto, es exageradamente difícil). También notar que al "compilar" un programa no es necesario ejecutarlo, al compilarlo se nos genera el archivo ejecutable, que podremos ejecutar en cualquier momento.
Por contra, en los lenguajes interpretados, el código nos seguirá siempre y es necesario para ejecutar la aplicación. Los lenguajes interpretados usan un programa llamado intérprete, el cual (habitualmente) es un programa ya compilado que se encarga de leer las instrucciones del código del lenguaje interpretado e ir ejecutándolas una a una siguiendo la programación interna del intérprete. Sin embargo, el intérprete no genera un nuevo archivo ejecutable, sino que él es el que recibe el código y lo ejecuta en el momento de recibirlo, por lo que para volver a ejecutar la misma aplicación seguiremos necesitando el intérprete y el código original.
La verdad es que, como dije, la distinción es bastante ficticia, ya que se pueden desarrollar intérpretes para lenguajes compilados (algo no tan raro) y compiladores para lenguajes interpretados (algo que sí que no se suele ver tanto), de modo que, como digo, esta distinción se decide por cual es el método más habitual de ejecutar programas del lenguaje en cuestión.
Ahora, tras todo esto, puedo explicarles que el JavaScript es un lenguaje de programación interpretado, ya que la mayoría de los navegadores webs cuentan con un intérprete de este lenguaje que lo lee de la misma manera que lee el código HTML y CSS (bueno, no de la misma manera, pero muy parecida).
Y tal vez os preguntéis, ¿cual es la diferencia entre un lenguaje de programación con otros lenguajes? Básicamente la siguiente: la programación consiste en una serie de instrucciones que el ordenador debe ir realizando la una tras la otra, sin poder saltarse ninguna y abortando su ejecución por completo en caso de darse un error irresoluble.
También supongo que saltarán las típicas dudas sobre qué software utilizaremos para este nuevo lenguaje. La verdad es que cualquier software que estemos usando para HTML y CSS es válido, aunque recomiendo usar el Komodo Edit del que hablé la semana pasada, sobre todo debido a las ayudas que presenta, considerando que a la hora de programar las ayudas son siempre muy útiles.

Y, bueno, eso es todo por hoy. La semana que viene empezaremos a escribir código por fin, repitiendo el "Hola mundo" que hicimos en la segunda entrega del tutorial, pero esta vez con JavaScript. ¡Hasta entonces!

2 comentarios:

Karinita dijo...

buena informacion, hoy en dia se utiliza mucho el javascript para un buen diseño y desarrollo web.

Creación de Páginas Web dijo...

Muy buen aporte. Los diseñadores web cuentan con innumerables oportunidades de trabajo a partir de la gran necesidad de las empresas de contar con un sitio para publicitar sus productos o servicios. Por este motivo capacitarse en esta área puede ser muy conveniente.