23 septiembre 2006

JavaScript

En octubre, Hernán va a dar una charla en la UTN sobre lenguajes con prototipos (y en particular va a dar algunos ejemplos en Self). Yo voy a participar de esa charla, hablando a lo ultimo sobre JavaScript, para mostrar a una audiencia que en general esta acostumbrada a pensar que programar en objetos es definir clases, que los lenguajes orientados a prototipos no son una cosa bizarra, y que en realidad cuando navegan en Internet utilizan programas basados en prototipos todo el tiempo.

Hace mucho que no hacia nada en JavaScript, y en este "flashback" de ponerme a programar para un browser encontré un par de cosas:

  • Mientras programaba me acordaba de lo que a veces decía Máximo en sus charlas en Mercap: una vez que uno realmente aprende a trabajar con objetos, la forma de pensar los programas cambia, ya no importa que el lenguaje que uno utilice no sea de objetos “all way down” como Smalltalk. Uno se acostumbra a pensar los problemas en términos de objetos. Esto lo note a la hora de escribir el programa, la verdad es que me resultaba muy engorroso pensar en "funciones" sueltas y cierta funcionalidad que empece a escribir en "funciones" termino en objetos.

  • JavaScript es un lenguaje que permite hacer muchas "chanchadas": tiene una sintaxis que fomenta más los pequeños "hacks" que un modelado con objetos. Sin embargo permite cierto grado de flexibilidad que facilita la escritura de algunas cosas que en Java serían muy, pero muy engorrosas: por ejemplo tiene la posibilidad de crear "clausuras", las funciones son objetos y uno puede agregar ó quitar métodos de cualquier objeto incluso de los supuesta mente "primitivos".

  • Cuando hace ya casi 4 años atrás ó más (oops me estoy volviendo viejo) hice cosas en JavaScript, lo que había en Internet eran todos pequeños hacks para hacer algún que otro efecto en el browser: rollovers, menús desplegables y algunos más "avanzados" escribían juegos que nunca funcionaban bien. Hoy hay un montón de aplicaciones, lo cual siendo un lenguaje con limitaciones de performance y modularización habla de la necesidad que existe de tener aplicaciones más "pesadas" que sean muy fáciles de acceder en Internet.(no olvidemos que AJAX pese a todo el hype que tiene alrededor no es más que un sucio hack, para resolver con una conexión HTTP cosas que podían implementarse mejor con una aplicación X hace mucho tiempo atrás). En este sentido creo que el framework de WPF de M$ va a sacudir un poco las cosas. No por que sea una tecnología novedosa, como siempre M$ copia cosas existentes. Si no por que M$ tiene una gran poder a su favor: no solo mueve una gran cantidad de usuarios, si no que tiene la facilidad para crear todo un mercado, por ejemplo ya anunciaron una edición del New York Times en versión WFP.

En fin, lo que hice este finde fue un "workspace" (ala Smalltalk) para evaluar código JavaScript en el browser e inspeccionar los objetos (pueden usarlo haciendo click acá). Pienso utilizar este workspace para mostrar los ejemplos en la charla.

17 septiembre 2006

Code Katas

Este sitio, contiene bajo el nombre "cool" de CodeKatas, una serie de ejercicios de programación (parece que la gente de Ruby tienen gran facilidad para crear nombres marketineros). En las artes marciales las formas (katas) son utilizadas para practicar y perfeccionar la tecnica. La intención de un "code kata" es similar: hacer pequeños ejercicios de diferentes maneras, de forma de adquirir práctica en la programación. (suena comico) Al mirar los problemas que plantea la página me lleve una desilusión: solo dos de los katas (KataOne y KataEigth) me parecieron interesantes, el resto me parecieron problemas de algoritmos que no aportan nada. Por eso me gustaría plantear "katas" similares, pero más orientados al diseño con objetos. En futuros posts ire agregando distintos problemas (y si tienen alguna idea escucho comentarios).