martes, 26 de agosto de 2008

Smalltalk está muerto! Larga vida a Smalltalk! Bienvenido Smalltalks 2008

Transcribo a continuación un artículo que salió publicado en el Journal del Lifia acerca de Smalltalks, espero que lo disfruten!
-------
A mediados de Septiembre de 2007, a cuatro locos se nos ocurrió organizar un congreso de un lenguaje de programación al que la mayoría de la gente lo da por muerto o cree que sólo sirve para enseñar: Smalltalk. ¿A quién se le ocurre utilizar ese lenguaje hoy en día? ¿Hay gente en el mundo o más aún, en Argentina que lo utilice?
Aquellos que conocen Smalltalk y las comunidad que existe alrededor de él, sabrán que sí, que hay gente en el mundo y más aún, en Argentina que usa este lenguaje. Pero además saben que aquellos que formamos parte de esta comunidad tenemos características especiales que compartimos con muchas comunidades de otros lenguajes de programación: amor por desarrollar software de calidad y pasión por el lenguaje que utilizamos, en este caso un lenguaje de programación que tiene ya casi treinta años.
Es por eso que cuando se nos ocurrió hacer este evento (ver http://www.dc.uba.ar/smalltalks2007) nuestras expectativas de convocatoria rondaban las 40, 50 personas como mucho. No pretendíamos hacer una conferencia de más de un día y tampoco pensábamos desplegar una logística complicada. Por ejemplo, los anotados debían enviar un mail a una casilla de correo creado para tal fin, la conferencia no tendría costo, etc. El congreso se realizaría en un aula común de la Facultad de Ciencias Exactas y Naturales de la UBA, a principio de Diciembre; y como se decidió hacerlo muy sobre la fecha, no había mucho tiempo para esperar grandes presentaciones, por lo que el único requisito que se pedía era un abstract de no más de una carilla.
Luego de enviar el mail de convocatoria empezamos a recibir inscripciones a un ritmo inesperado. Imaginamos al principio que el ritmo decaería con el acercamiento de la fecha del congreso, pero sucedió todo lo contrario. Cuando superamos los 40 inscriptos tuvimos que empezar a buscar un aula más grande pero al mes superamos los 100! y luego los 150, y luego los 200! A esa altura sólo quedaba como opción utilizar el Aula Magna del Pabellón I, la cual puede albergar cerca de 450 persona. Teníamos miedo. ¿Qué pasaría si de todos estos inscriptos solo venía la mitad o menos? El congreso era gratis, por lo tanto esto podría suceder. No sería agradable ver el aula Magna con 100 personas, sería verla vacía. Pero nos arriesgamos y decidimos utilizarla, decisión que nos alegra haber tomado porque la cantidad de inscriptos llegó a ser 300!, un número impensable para una congreso técnico en Argentina y menos todavía para un lenguaje que se suponía muerto o en el mejor de los casos fuera de moda!
Pero la sorpresa no terminó en la cantidad de gente anotada, siguió con la cantidad de trabajos presentados. Esperábamos recibir propuestas para presentar 6 u 8 trabajos, pero recibimos 30! Indudablemente un día no alcanzaba para presentar todo. Ni siquiera dos días alcanzaban sin que hubiese superposición de presentaciones. Además de las presentaciones argentinas, GemStone ofreció gracias a la publicidad y gran convocatoria que tuvo el congreso, realizar un Workshop sobre GLASS (http://seaside.gemstone.com), un ambiente de desarrollo web que utiliza Seaside (http://www.seaside.st) como framework web y GemStone (http://www.gemstone.com) como mecanismo de persistencia.
Finalmente el cronograma del congreso pasó de ser de un día con sólo 6 u 8 presentaciones nacionales a tres días, con 30 presentaciones, un workshop de un día entero y gente del exterior participando y presentando. ¡¡Totalmente inesperado!! Este evento superó todas nuestras expectativas, consumió todo nuestro tiempo libre (y no libre :-) ), nos volvió locos, "pero ¡la pucha que vale la pena estar vivo!" y este evento nos dio vida a todos, eso lo puedo asegurar.
Y las sorpresas no terminaron en la "cantidad" sino que también tuvimos sorpresas relacionado a la "calidad", característica que se notó en las presentaciones realizadas. Hubo presentaciones de una calidad técnica inesperada, con una claridad de conceptos e ideas que nos sorprendieron. Esto terminó de mostrarnos lo fuerte e importante que es la comunidad Smalltalk en Argentina. Un ejemplo demostrativo de esta importancia es la participación en los premios que ESUG otorga a los sistemas realizados en Smalltalk, que este año de 22 candidatos 6 son trabajos argentinos, el 25% (y me consta que hay aún más trabajos argentinos que se podrían presentar).
Las presentaciones realizadas abarcaron un espectro de temas muy completo. Las empresas locales presentaron sus sistemas y varias herramientas que usan para poder trabajar mejor, los grupos de investigación nos desasnaron sobre temas actuales y novedosos y hubo también exposiciones de los distintos grupos de enseñanza de objetos de diversas universidades.
En el congreso participó gente que vino de Luján, Mar del Plata, Concepción de Uruguay, Córdoba, Rosario, Rafaela, Resistencia, Formosa y varios lugares más del país. De los inscriptos, el 56% provino de la industria del software y el 44% restante de universidades (un balance muy interesante). De las universidades la que llevó más gente fue la UTN con el 36% (una gran sorpresa para todos nosotros), seguida por la Universidad de la Plata con un 31% y luego la UBA con un 21%. ¡Hasta hubo gente que catalogó el evento como "la conferencia de Smalltalk más importante de los últimos años"! (http://doesnotunderstand.free.fr/?p=459)
Trabajamos muchísimo para realizar esta conferencia y no lo habríamos logrado sin la ayuda desinteresada de varias empresas argentinas (Mercap SRL, InfoOil, Snoop, etc.) e internacionales (CaesarSystems, Cincom, Instantiations, GemStone, etc.), así como otras organizaciones como ESUG, LIFIA, STIC y la UBA, que por medio del Departamento de Computación de la Facultad de Ciencias Exactas, nos dió todo el soporte e infraestructura necesaria para que este evento fuera posible. Gracias a ellos pudimos cubrir cosas como el café y las medias lunas, las tazas y remeras referentes al evento, los cronogramas, DVDs y libros sorteados, así como un descuento del 50% a todos los participantes del congreso para asistir a Smalltalk Solutions 2008 en Reno, Estados Unidos (http://www.stic.st/stic?content=sts2008).
Un hecho interesante del evento fueron los videos que recolectamos de personalidades representativas de la comunidad Smalltalk de distintos lugares del mundo, como aquel de ViewPoint Reasearch Institute (liderado por Alan Kay) o de Dan Ingalls quien declaró sus ganas de venir este año a tomar unas cervezas con nosotros (¿quién dice no?).
En conclusión, fueron todas sorpresas y alegrías muy gratas. Valió la pena invertir el tiempo que se dedicó a este evento y los participantes han quedado más que satisfechos, pidiéndonos repetirlo para este año, lo cual estamos haciendo.
Por supuesto que no va a ser fácil igualar o superar el evento del año pasado. No sabemos si se generará más, menos o igual expectativa, no sabemos si vendrá más o menos gente, pero de algo sí estamos seguros: será un congreso excepcional por varios motivos. Uno de ellos es que como nos propusimos, será realizado en otra universidad, la UAI, quienes con la ayuda de Gonzalo Zabala nos abrieron sus puertas para este evento. Nuestra idea es hacer el congreso en una universidad distinta cada año. También estamos trabajando para que el track de investigación y educación tenga más importancia y podamos imprimir los trabajos presentados. Es nuestro objetivo a corto plazo publicar los trabajos en revistas de investigación de reconocimiento mundial, pero no es sencillo coordinarlo. Se está organizando un "coding contest" muy interesante y al cual están todos invitados. El evento será no sólo para gente de la comunidad Smalltalk sino también para todos aquellos programadores que "amen" su trabajo. Traeremos también personalidades bien conocidas de la comunidad Smalltalk internacional para que nos ofrezcan todo su conocimiento. Por lo tanto, no se olviden de agendar estas fechas: 13, 14 y 15 de Noviembre, y si tienen ganas de participar, tanto realizando una presentación como asistiendo a éstas, no dejen de visitar nuestro sitio para anotarse: http://neuquina.lifia.info.unlp.edu.ar:8001/Smalltalks-2008
Los que usamos Smalltalk somos muy pasionales, no hay porque ocultarlo. Esta actitud tiene su lado positivo pero también su lado negativo, puesto que al ser mal utilizada genera rechazo por parte de otros grupos, algo que ha sucedido en algunos casos. Luego de varios años de maduración y de varías "caídas", el grupo de gente que utiliza Smalltalk ha aprendido a sobrellevar su fanatismo de una manera más "social", menos pedante y más amistosa y estos eventos son el resultado de estos cambios. Es por eso que el evento está abierto a todas aquellas personas a las que les guste desarrollar software cada vez mejor y comparta esa pasión por hacerlo correctamente y con calidad.
Espero haberles transmitido en esta nota las energías, el empuje, el entusiasmo que tuvimos y tenemos para la organización de estos congresos. Tenemos muchas ganas y mucha pasión por hacer algo interesante, educativo, atractivo, con libertad y con calidad. No un congreso más, no un congreso dirigido por temas de modas, no un congreso donde nos digan como tenemos que trabajar, sino un congreso donde podamos compartir cómo nos gusta trabajar y podamos demostrar que es posible hacerlo como queremos.

viernes, 15 de agosto de 2008

Natural Language Programming

A partir de un artículo en la última Communications de la ACM, escrito por Mark Guzdiel llegué a unos papers muy interesantes sobre lo que se denomina "Natural Language Programming" o "Natural Programming". La idea es tener lenguajes de programación que estén hechos para los seres humanos y no para las computadoras.
Una de las observaciones que hacen es que los lenguajes de programación actuales están hechos para ser entendidos por computadoras y que por eso son tan detallados los programas y es tan difícil programar. Lo que proponen es hacer que los lenguajes de programación se asemejen más al lenguaje natural y que se pueda de esa manera entender mejor los programas que se escriben.
Más allá de las limitaciones y dificultades que esto tiene, la idea me parece muy interesante porque cambia completamente el ángulo de importancia. Va de acorde con lo vengo diciendo hace rato y que fue motivo de la charla de la ECI y es lograr que "la computadora haga más y el programador menos".
Una sorpresa que me llevé, que ya a esta altura está empezando a dejar de ser sorpresa, es que es un tema de investigación "antiguo", de hecho los papers fundadores de este movimiento son del '70! La verdad que cada vez más me doy cuenta que hay que ir a buscar en nuestra historia para descubrir los buenos trabajos (será que me estoy volviendo viejo? :-) )
En fin, les paso algunos nombres porque se los pueden bajar de internet sin problema:
* Natural Language programming: Styles, strategies, and contrasts, L.A. Miller (1970)
* Studying the Language ad Structure in Non-Programmers' solutions to programming problems, J. F. Pane et. al
* The influence of the Psychology Of programming on a Language Design: Project Status Report, J.F. Pane et. al.

Espero los disfruten!

jueves, 14 de agosto de 2008

Smalltalks 2008 - Registración y CFP

Ya está habilitado en el sitio web de Smalltalks 2008 la opción para registrarse al evento y la de sumitir papers de investigación (dentro de poco estará la opción de presentaciones de industria y workshops).
¡No dejen de anotarse! ¡Este año tenemos que romper el record del año pasado!

viernes, 8 de agosto de 2008

Los IFs no ofrecen información Meta

Hay un comentario de Gabriel (gaboto) en el post de la conferencia de la ECI donde me pide aclarar un comentario que hice en la presentación relacionado a los IFs. El comentario tenía que ver con el hecho de que los IFs no tienen información "meta". Lo voy a tratar de explicar con el ejemplo de la presentación.
En dicho ejemplo, una de los cambios de diseño que mostré fue reemplazar una serie de IFs por objetos que se encargan de "tipificar" un objeto. Al haberlo hecho hay mucha información que se está poniendo en el código que antes no estaba. Ahora para tipificar un objeto no se utiliza una construcción tan genérica como el IF sino una más concreta que se encarga justamente de "tipificar" objetos. En pocas palabras, a partir de ese momento cuando un programador lee el código se dará cuenta que se está tipificando un objeto simplemente por ver qué objeto (clase en este caso) se está usando.
Algo similar sucede con los patrones; cuando se ve un "state" se entiende para qué está, su función, etc. Si en vez de un "state" hubiese un conjunto de IFs o CASEs, habría que leer lo que está escrito, interpretarlo, etc. para llegar a la conclusión de que se está programando un "state" (a menos que exista un comentario que diga eso, pero así y todo, no se puede deducir información automáticamente de un comentario, solo lo puede interpretar un ser humano).
Un IFs, lo único que indica es que se está tomando una decisión, pero no da indicios sobre qué decisión, por qué, etc., para obtener esa información alguien tiene que "interpretar" el IFs, y solo los seres humanos lo pueden hacer (al menos por ahora... :-) ) De la otra manera no solo le resulta directa la interpretación al ser humano sino que también se puede utilizar esa información de manera automática. Por ejemplo, si se quiere ver todas aquellas clases cuyas instancias son tipificadas, se busca las referencias a la clase que implementa esa responsabilidad y listo. Si se quisiese hacer estadísticas sobre la cantidad de tipos que existen, se puede a partir de estas referencias ver la jerarquía de tipos sobre las que trabajan y obtener todas las subclases de la clase raíz de cada jerarquía y obtendríamos dicha información, etc.
En pocos palabra, no es que el IFs no indique nada sobre lo que se está haciendo, sino que al ser tan genérico se pierde información, información que luego debe ser reconstruida por el programador cada vez que lo lee. De la otra manera, al utilizar un objeto más específico existe información que puede ser interpretada más fácilmente y de manera automática. A esto me refiero con información "meta". Estos objetos que reemplazan al IFs no solo hacen lo que tienen que hacer sino que ofrecen información "más allá de lo que hacen", información sobre el código en el cual están siendo utilizados, o sea, meta-información sobre el programa.
Bueno, espero haber logrado explicar mi idea. Cualquier duda chiflen!

martes, 5 de agosto de 2008

La Imagen de Smalltalk

Muchas veces se discute si es bueno que Smalltalk tenga un imagen, es más, recientemente hubo una discusión al respecto en la lista de Squeak-Dev.
El problema que se le achaca a la imagen es que es difícil de "integrar" con el resto del ambiente. La verdad que si hay algo que no me gustaría perder de Smalltalk es el concepto de imagen y es más, me parece que es una característica que todo lenguaje tendrá que incluir en su evolución.
De la misma manera que hace 10 años la gente discutía sobre si era bueno tener un VM o Garbage Collection hasta que salió Java y empezó a verse sus ventajas, me parece que lo mismo pasará con la imagen. Seguramente salga en algunos años algún lenguaje que tenga una imagen y como será un lenguaje nuevo todos usarán porque estará "copado" y de ahí en más no se discutirá sobre la conveniencia o no de tener una imagen.
De hecho, la "imagen" existe en los ambientes de desarrollo actuales pero en una forma más cavernícola. En Eclipse por ejemplo, la "imagen" está compuesta por todos los archivos .java, las configuraciones, etc. Lo que sucede que esa "imagen" no está compuesta por objetos sino por elementos más antiguos como archivos, texto, etc. y que hacen por lo tanto que el ambiente sea más arcaico y menos manipulable.
Para mí la imagen "siempre existió", pero con otras características y con menos capacidades como aún vemos en varios ambientes de desarrollo. Es por eso que creo que la evolución inevitable de todo "lenguaje" debe ir hacia una "imagen" más estilo Smalltalk.
En conclusión, me parece que antes de que la imagen desaparezca, la imagen aparecerá con más fuerza en algunos años.... veremos si me equivoco.

Visitors en la presentación de la ECI

Hay varios que me preguntaron sobre el test de los visitors que mostré en la presentación de la ECI. En otro post de este blog ya había hablado del tema, el link es: http://objectmodels.blogspot.com/2007/10/cmo-asegurar-la-evolucin-de-un-sistema.html

En si, el código del test es el siguiente:

testVisitorsImplementVisitorProtocol

| acceptingVisitorsRoots visitorProtocols visitorImplementors invalidVisitorImplementors |

acceptingVisitorsRoots := MCPAcceptingVisitorRootFinder allAcceptingVisitorRoots.

visitorProtocols := acceptingVisitorsRoots collect: [ :anAcceptingVisitorRoot |
MCPVisitorProtocol for: anAcceptingVisitorRoot ].

visitorImplementors := visitorProtocols
inject: OrderedCollection new
into: [ :implementors :aVisitorProtocol |
implementors addAll: aVisitorProtocol implementors; yourself ].

invalidVisitorImplementors := visitorImplementors reject: [ :aVisitorImplementor |
aVisitorImplementor isValid ].

self assert: invalidVisitorImplementors isEmpty

Instancias de MCPAcceptingVisitorRootFinder se encargan de buscar la raíz de una jerarquía de clases que acepta visitors. Para ello busca las clases que implementan #accept: y dada un jerarquía devuelve la clase que más arriba se encuentre en la misma.
MCPVisitorProtocol modela el protocolo que debe implementar un visitor. Lo deduce a partir de todos los mensajes que se envían en el método #accept: de una jerarquía de clases. Dado un VisitorProtocol se puede obtener todas las clases que lo implementan. Las implementaciones de un protocolo de visitor está modelado con la clase MCPVisitorImplementor que entre otras responsabilidades sabe responder si es una implementación válida de ese visitor.
Bueno, si desean más detalles de la implementación pregunten!

lunes, 4 de agosto de 2008

Presentación de ECI 2008

El viernes di la presentación de técnicas y herramientas que usamos en Mercap en el marco de la ECI. Creo que salió muy bien, por lo menos me fui contento. Lástima no haber tenido más tiempo y haber cometido un par de equivocaciones con la imagen que había que usar (por estar apurado levanté otra imagen...)
Para aquellos que estén interesados, la presentación está disponible acá: http://www.mercapsoftware.com/ECI2008.pdf