JavaScript: El patito feo…

Este es el primer post de una serie que escribiré acerca del lenguaje de programación ECMAScript, más conocido por JavaScript, que al igual que el cuento de Hans Christian Andersen, comenzó siendo el más feo de los lenguajes de programación de la nueva era y está convirtiendose en el cisne de la laguna, lenguaje de facto en la Web.

Comenzaremos la serie haciendo una traducción burda del excelente articulo de Douglas Crockford (Arquitecto JavaScript de Yahoo!) originalmente llamado “The World’s Most Misunderstood Programming Language Has Become the World’s Most Popular Programming Language” (el original puedes encontrarlo haciendo clic sobre el nombre).

Continuaremos con posts relacionados con la sintaxis del lenguaje, su implementación de la orientación a objetos, formas de herencia,  y terminarmos con técnicas de su uso en la web, como Unobtrusive JavaScript, y Ajax.

El Lenguaje de Programación menos entendido del mundo se ha convertido en el Lenguaje de Programación Más Popular del mundo

Jean Sammet escribió “Computer Languages: History and Fundamentals” in 1969. Fue la examinación de 120 lenguajes de programación, algunos a niveles de detalles considerables. El libro de Sammet habló de lenguajes que fueron diseñados antes de la revolución de la programación estructurada y el posterior desarrollo de la orientación a objetos. La portada del libro mostraba una imagen de la Torre de Babel, donde en la mayoria de los ladrillos de la torre estaban escritos los nombres de los diferentes lenguajes.

La Torre de Babel se refiere a Genesis [11:1-9] donde ingenieria de alto nivel fue aplicada a la tarea de construir una torre capaz de unificar al mundo y alcanzar el cielo.

…Sin embargo, el LORD descendió para ver la ciudad y la torre que los hombres estaban levantando y dijo: “He aquí que todos forman un solo pueblo y todos hablan una misma lengua, siendo este el principio de sus empresas. Nada les impedirá que lleven a cabo todo lo que se propongan. Pues bien, descendamos y allí mismo confundamos su lenguaje de modo que no se entiendan los unos con los otros. Así, el LORD los dispersó de allí sobre toda la faz de la Tierra y cesaron en la construcción de la ciudad. Por ello se la llamó Babel, porque allí confundió el LORD la lengua de todos los habitantes de la Tierra y los dispersó por toda la superficie…

A veces esto esto es entendido como una advertencia sobre el orgullo y la arrogancia. A veces es entendido como una historia que cuenta porque en el mundo hablamos diferentes lenguas. El LORD creó el problema del I18N para prevenir que la humanidad alcanzara su potencial. Pero pienso que su real interpretación es una metáfora a los diseños de los lenguajes de programación. El principal problema en programación es el manejo de la complejidad. Si un lenguaje no nos ayuda a manejar sistemas de alta complejidad a la hora de cambiar los requerimientos, entonces todo resulta en confusión y luego sigue el fracaso.

Porque hay tantos lenguajes de programación?. Al conjunto de Sammet se han agregado muchos lenguajes y dialectos nuevos desarrollados en los ultimos 40 años. Hemos programado a niveles altos desde hace mucho tiempo. Hemos logrado ya hacer las cosas en la forma correcta?. Hay obvios beneficios que podriamos haber alcanzado del diseño y adopción de un solo y perfecto lenguaje. Podriamos enfocar nuestros recursos mas optimamente en la capacitación y el desarrollo de herramientas. Sin embargo porque no hemos logrado eso?

Lo hemos intentado. Hay varios intentos de construir lenguajes masivos y universales, no obstante todos han fallado. Así como el diseño del lenguaje crece, crece su aplicabilidad, este se hace más y más complejo. Diseñadores que hacen sus lenguajes más complejos lo hacen mas confuso, como diria el LORD.

Asi es que lo que tenemos es en realidad es un número grande de lenguajes más especializados. Un lenguaje especializado es muy efectivo para algún rango de tareas, y eso es suficiente. Para personas que necesiten cumplir con esas tareas, tener el lenguaje correcto puede ser una suerte.

Un lenguaje de programación resuelve un modelo computacional con algún conjunto de sintaxis expresiva. La mayoría de los lenguajes tiene un conjunto de valores útiles como números y textos (que son llamados extrañamente strings) y operaciones que mutan y sintetizan valores en alguna forma de repetición, y alguna forma de operaciones empaquetadas en más idiomas. Las variaciones que son posibles son interminables, al igual que las variaciones posibles en la preparación de una fina sinfonia musical. El arte en el diseño de lenguajes está en conocer que dejar fuera del mismo (que no incluir en el lenguaje). Las caracteristicas de un buen lenguaje trabajan juntas en forma armoniosa. Un buen lenguaje nos ayuda a entender mejor un problema y a encontrar la mejor forma de solucionarlo.

Un buen lenguaje esta compuesto por un conjunto limitado de características. Pero existe poco entendimiento en cuales características son las mejores. Los programadores pueden argumentar sin parar acerca de las características y de si hacen de un lenguaje ser mejor que otro. Esto no significa que las caracteristicas no importan. Importan mucho. Somos nosotros quienes no entendemos aún en que forma importan.

El diseño de lenguajes tiene que ver más con la moda que con la tecnología. Puede parecer extraño que la moda sea un factor importante en el arte de los estudiosos, pero es cierto. Por ejemplo un lenguaje con una sintaxis radical y diferente no tiene esperanza de encontrar una aceptación amplia entre los desarrolladores, independientemente de lo espectacular de su diseño. Esto tiende a limitar el como dicho lenguaje evoluciona.

Como en la música y en la comida, los lenguajes de programación pueden ser un producto de su tiempo (de su era). El problema más profundo en los diseños de los lenguajes no es tecnologico, es psicológico. Un lenguaje de programación debe equiparnos con estructuras que nos ayuden a razonar en forma más efectiva.

Los lenguajes de programación son como las cerámicas. Es más fácil comprar una cerámica nueva que una rota que este pegada. La mayoría de los lenguajes existosos han sido reemplazado por nuevos. Lenguajes remodelados raramente encuentran la gloria de su original. Fortran fue una vez el REY de los lengiajes. Ha sido revisado muchas veces sobre los años, pero sus modernizados dialectos experimentaron solo una fracción del prestigio del Fortran IV. De forma similiar, Pascal fue un lenguaje de programación estrucutrada popular, pero ninguno de sus dialectos orientados a objetos lo llevaron nunca a alcanzar la gloria. Por el contrario, los lenguajes tienden a ser remplazados.

Los lenguajes especializados son entretenidos de implementar, lo cual explica en parte el porque hay tantos. Si un lenguaje no se torna demasiado grande, entonces puede ser controlado por un solo diseñador. La mayoría de los lenguajes puede ser identificado por un solo diseñador. Pascal: Wirth. C: Ritchie. C++: Stroustrup. Java: Gosling. C#: Hejlsberg. Rebol: Sassenrath. Python: van Rossum. PHP: Lerdorf. Perl: Wall. Ruby: Matsumoto. Lua: Ierusalimschy. E: Miller. JavaScript: Eich.

La mayoría de los lenguajes muere en la obscuridad. Solo unos pocos son capaces de continuar tras ser un proyecto solitario o una compañia. Y solo un pequeño número de lenguajes se vuelven importantes.

Exiten dos formas para que un lenguaje se vuelva importante. La primera es ser una fuente para ideas importantes, este es el caso de lenguajes como Smalltalk y Scheme. Estos lenguajes no son ampliamente usados pero son generalmente conocidos como brillantes, y que aunque pasados de moda, tienen una gran influencia en los diseñadores de lenguajes.

La segunda forma para que un lenguaje se vuelva importante es haciendose popular.

Hay muchos cosas que un programador considera cuando selecciona un lenguaje a menos que este escribiendo un programa para un Web Browser donde la única opción que tiene actualmente es JavaScript.

JavaScript es un lenguaje sorprendente, en el peor sentido de la palabra. Su naturaleza maravillosa lo conduce a su mala reputación. JavaScript esta además relacionado con la api DOM, una API horrorosa. Exite mucha confusión acerca de donde termina JavaScript y donde comienza DOM. Hay muchas charlas acerca de mejorar JavaScript, pero estas por si solas harían muy poco por mejorar las vidas de los desarrolladores web. El lenguaje esta cargado con muchas caracteristicas, incluyendo muchas que interactuan mal o fueron pobremente diseñadas. Como diría el Emperador Joseph a Amadeus Mozart : “Tu trabajo es ingenioso, Es un trabajo de excelente calidad, solo que simplemente colocaste demasiadas notas, eso es todo, solo quita algunas y será perfecto.” Es el lenguaje que tiene demasiadas notas.

Entonces?, como un lenguage con tan obvias deficiencias se convirtio en el lenguaje de programación de la Web?

Brendan Eich convencio a su jefe en Netscape que el Browser “Navigator” debería tener su propio lenguaje de scripts, y que solo podría ser un lenguaje nuevo, un lenguaje diseñado e implementado de forma apurada, y que ninguno de los lenguajes exitentes podrían ser considerados para cumplir este role. El equipo de Internet Explorer de Microsoft quería capturar el mercado de Netscape, por lo tanto hicieron ingenieria inversa con el lenguaje de Netscape. Los otros fabricantes de Browsers siguieron a Microsoft. No exiten ningún estándar que diga que un browser deba implementar JavaScript, sin embargo JavaScript es el único lenguaje implementado en todos los browser populares . No hubo una revisión cuidadosa del lenguaje o sus problemas de dominio. No hubo una revision de su adaptabilidad o calidad de su diseño. Esto fue hachacado a Netscape y entonces copiado en todos lados. Dado el proceso de crear JavaScript y peor hacerlo un estándar de facto, mereciamos algo mucho peor.

Pero incluso en los defectos de JavaScript, profundizando en su interior, encontramos cosas buenas, cuando sacas el polvo, allí hay un lenguaje de programación poderoso y muy expresivo. Un lenguaje que esta siendo usado bien en muchas librerías Ajax para manipular y aumentar el modelo DOM, produciendo una plataforma para aplicaciones interactivas entregadas como páginas web. De hecho, Ajax se ha hecho popular porque JavaScript funciona, y funciona sorprendentemnte bien.

JavaScript fue el lenguaje de programación menos entendido en el mundo. Sus defectos obvios, su modelo de programación poco atractivo, su intensionada mala reputación e introducción y su ridiculo nombre causaron que fuera rechazado por la mayoría de los programadores talentosos. No obstante Ajax llegó y le dio a JavaScript un segundo chance.

Porque JavaScript es el lenguaje de los browsers web, y porque los browsers web se han convertido en la aplicación principal para ejecutar sistemas y porque JavaScript en el fondo no es tan malo, ahora JavaScript se ha convertido en el Lenguaje de Programación Más Popular del Mundo. Su popularidad sigue creciendo. Esta siendo embebido en otros contextos y aplicaciones.

JavaScript se ha vuelto importante !

A veces es mejor tener suerte que ser listo !!!

Un comentario en “JavaScript: El patito feo…

  1. gel

    Bueno muy Bueno, en lo personal a mi me ha costado mucho comprender un poco del Js dado que no he recibido muchas clases sobre programación, pero para mi ha sido muy gratificante eso de las funciones. callback, el DOM, BOM,prototype y closures ha… como me dieron, (“y dan”), lata, comencé con el html, luego el css y madre mia! me tope con javascript….y si primero le vi lo feo y ahora ya con mas experiencia y ver como el Js se fusiona con las tecnológicas emergentes y no tan emergentes ,(html5,node.js, ajax, comet,etc), ya lo miro como un cisne hermoso….. Saludos.

    Responder

Agregar un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *