12 diciembre 2006
Fin de año
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
22 agosto 2006
Programming as theory building (2)
In a program modification an existing programmed solution has to be changed so as to cater for a change in the real world activity it has to match. What is needed in a modification, first of all, is a confrontation of the existing solution with the demands called for the desired modification.Esto significa que para poder hacer una modificación es necesario que el programador entienda la teoría detrás de la solución existente, de forma tal de poder confrontarla con los nuevos requerimientos. Por lo tanto puede ocurrir que la modificación "encaje" con la teoría existente, o bien sea inconsistente con ella y termine siendo un parche desconectado del resto del programa. Pretender que cualquier programador puede fácilmente cambiar la funcionalidad existente viene de pensar en los programas como si fuesen solo texto: "Parte de esa funcionalidad esta hecha en el sistema, simplemente habría que agregarle un par de cosas, debería ser muy sencillo" (total que tan difícil puede ser agregar una líneas de texto). Documentar no es suficiente.
The problem of education of new programmers in an existing theory of a program is quite similar to that the educational problem of other activities (...). The most important educational activity is the student's doing the relevant things under suitable supervision and guidance. In the case of programming the activity should include discussions of the relation between the program and the relevant aspects and activities of the real world, and of the limits set on the real world matters deal with by the program.Es decir para poder entender un programa existente, es necesario comprender la teoría detrás del mismo. Esta compresión plantea el mismo problema que en otras areas de la educación. Cierto tipo de documentación ayuda, pero la transferencia persona a persona y la "práctica" guiada (pair programming por ejemplo) son más importantes que la documentación. (es como si uno quisiese aprender Análisis Matemático solo leyendo un libro, sin ayuda y sin hacer ejercicios) No hay un método de programación que sea el correcto.
As to the use of particular kinds of notation or formalization, again this can only be a secondary issue since the primary item, the theory, is not, and cannot be, expressed, and so no question of the form of its expression arises. It follows that on Theory Building View, for the primary activity of the programming there can be no right method.Esto no invalida la aplicación de métodos, lo que indica es que solo son prácticas complementarias. Es decir pretender que uno puede crear buen software siguiendo al pie de la letra un método de desarrollo es erróneo, por que la actividad principal en la creación de software según este punto de vista es la elaboración de la teoría, es decir la adquisición de conocimiento que depende mucho de la persona y del "problema" a enfrentar. Luego en lugar de adoptar un método para la construcción del programa en si, es mejor centrarse en prácticas que ayuden a la construcción de teorías:
the quality of the theory built by the programmer will depend to a large extent on the programmer's familirity with model solutions of typical problems, with techniques of description and verification, and with principles of structuring systems consisting of many parts in complicated interactions.Por ejemplo design patterns, test driven development y modularización. Cambio en el "status" del programador. Quizás este sea para algunos el punto más controversial, ya que para muchas prácticas de ingeniería de software se asume que la programación es similar a la producción industrial, donde el programador es un componente más de la cadena de producción.
On the Theory Building View the primary result of the programming activity is the theory held by the programmers. Since this theory by its very nature is part of the mental possession of each programmer, it follows that the notion of the programmer as an easily replaceable component in the program production activity has to be abandonedEsto también plantea un desafío para la educación de los programadores, ya que si bien es importante conocer los aspectos técnicos, se debería poner énfasis en la formación de teorías.
21 agosto 2006
Programming as theory building (1)
- La programación vista como una construcción de teorias
- Cuales son las consecuencias de ver a la programación como una construcción de teorias.
What characterizes intellectual activity over and beyond activity that is merely intelligent, is the person's building and having a theory, where theory is understood as the knowledge a person must have in order not only to do certain things intelligently but also to explain them...¿Y cuales son las consecuencias de ver la programación de esta forma?.... eso queda para el proximo post ;)
19 agosto 2006
Posmodernidad
18 agosto 2006
The Learning Edge
- Ansiedad: La tarea es demasiado dificil para el desarrollador, lo que genera una ansiedad de no conocer la tarea que tiene que realizar. (si a esto se le suman ciertas situaciones donde la capacidad del desarrollador es puesta en duda este estado puede causar mucho estres).
- Confort: El desarrollador es perfectamente competente para la tarea a realizar.
- Aburrimiento: La tarea es muy simple para el desarrollador por lo que se torna rutinaria.