Etiquetado: smalltalk

Dia del programador 2012

El próximo martes 11 es el Día del Programador y el MUG organizó un evento del cual me invitaron a participar dando una sesión. El tema que elegí para presentar es Smalltalk, en particular voy hablar de Pharo y algo de Amber.

¿Por qué Smalltalk? En primer lugar porque me parece que va muy bien con la ocasión. Una incumbencia central de todo programador es el lenguaje de programación, para ser considerado programador es necesario saber programar y para ello es necesario un lenguaje. En la actualidad hay muchos lenguajes y entre los más usuados podemos sin duda mencionar: Java, Ruby, C# y PHP.  ¡Ups! no mencioné Smalltalk, pues nó, Smalltalk no está actualmente en la lista de lenguajes más usados, pero sin duda Smalltalk ha inspirado a muchos de estos lenguajes. Varias características que vemos en la actualidad en los lenguajes populares fueron introducidas/impulsadas por Smalltalk.

Pero no quiero quedarme solo con este  reconocimiento “histórico” a Smalltalk, quiero hablar del presente y del futuro de Smalltalk. Desde hace un par de años Smalltalk está tomando envión, han aparecido nuevas herramientas que lo han puesto a competir mano a mano con los lenguajes populares. Personalmente creo que Pharo es en gran medida responsable de la “ola renovadora” de Smalltalk y es por ello que mi presentación estará basada en Pharo.

El evento es totalmente gratuito y se llevará a cabo en el Salón Dorado de la Legislatura de la Ciudad de Buenos Aires, Perú 160. La agenda completa esta publicada aquí.

Sobre los primeros egresados de TPI

Como mencioné anteriormente, tuve el honor de ser invitado a formar parte del jurado de evaluación del trabajo de inserción profesional de Nahuel Garbezza, egresado de la primera promoción de la Tecnicatura en Programación Informática de UNQ. Los otros miembros del jurado fueron Nicolás Passerini  y Hernán Wilkinson.

Además de ser un gran honor, fue una experiencia interesante. El trabajo en cuestión consistió en desarrollar una herramienta de BDD para Pharo Smalltalk (algo así como un análogo a Cucumber). Una vez aceptada la propuesta de ser jurado recibí el trabajo y lo fuí leyendo a medida hacia algunas pruebas con la herramienta y revisaba el código. El trabajo estaba muy bien escrito, lo cual no me extraña, ya que la directora del trabajo fue Gabi Arévalo. Desde el punto de vista técnico la herramienta estaba muy bien, con un amplio set de pruebas automatizadas y una cobertura del modelo por encima del 70%.

La defensa del trabajo tuvo lugar el viernes pasado a continuación de la defensa de Federico Sawady, el otro egresado de esta primera camada de TPI.

El trabajo de Federico (dirigido por Fidel) consistió en la implementación de un sistema de tipos para el lenguaje Gobstones que es utilizado en las primeras materias de programación en TPI.

Las defensas consistieron en presentaciones de 45 minutos seguidas por preguntas/comentarios de los jurados y del público en general. Entre el público se encontraban profesores, alumnos, familiares, autoridades de la universidad y gente de la Fundación Sadosky.

Mis felicitaciones a los egresados y al equipo de dirección de TPI por el gran trabajo que estan haciendo.

Orientación a Obejtos Pura

Es común cuando se presenta Smalltalk mencionar que es un lenguaje orientado a objetos puro. También es común que la audiencia no logré captar el significado de esta afirmación inmediatamente. Yo mismo he analizado esta afirmación montones de veces, pensando que tal vez sea un poco extrema, pero esta semana, vi la luz y me dí cuenta de que es absolutamente acertada.

Resulta que por estos dias, me encuentro entrenando a un grupo de programadores en C#. Fue en este contexto que me encontré hablando de las diferencias y relaciones entre interfaces, clases, estructuras (structs) y enumerados, ¡recorcholis! 4 artefactos del lenguaje que NO son objetos. ¡Y aún no expliqué eventos, delegados, tipos primitivos y atributos (anotaciones)!. ¡Cuantas cosas que explicar!

¡Cuanto más fácil seria explicar Smalltalk!

Smalltalks 2011, we were there

The 5 th international conference on Smalltalk technologies, Smalltalks 2011 organized by FAST, was held during the first week of November. Among the keynote speakers were Ian Piumarta and Kim Rose (from Viewpoints Research Institute), Markus Denker (from Inria and founder of Pharo project) and a couple of guys from Gemstone (Dale Henricks and James Foster among others).

Out of the sessions I attended, I would have to say that the most interesting were those given by Marcus, Mariano Peck, Hernan Wilkinson and Dale Henrichs.

We held two sessions, Angel gave one on Smalltalk, C# and Javascript and I gave the other on Pharo Customization.

Se viene la Smalltalks 2011

A modo de previa, el GITI ha organizado un conjunto de charlas introductorias a Smalltalk a desarrollarse en la UTN-FRBA y en UNQ durante esta semana.

Por otro lado, ya está publicado el listado de sesiones. donde van a encontrar mi sesión “Customizing Pharo“. Muy relacionado al tema de mi sesion, habrá otra sesión de Mariano Peck quien hablará ya en términos más avanzados de generación de images utilizando Metacello.

Entre otras sesiones que han llamado mi atención y a las que intentaré asistir están: Bringing BDD ideas to Pharo y Monsters from the IT: what has IT done for education?What I learned from teaching and why I’m so happy with Smalltalk y Research at RMOD presentada por el super groso Marcus Denker.

El evento es gratuito pero requiere registración.

¡Nos vemos allí!

Variables de clase y de instancia en Smalltalk

Este tema incluye algunas particularidades que me parece en general no se le presta mucha atención y por ello hoy quiero dedicarle un par de líneas.

Analicemos la definición de clase CuentaBancaria:

Object subclass: #CuentaBancaria
	instanceVariableNames: 'numero saldo'
	classVariableNames: 'SiguienteNumero'
	poolDictionaries: ''
	category: 'algo3-ejemplos'

instanceVariableNames, indica las variables de instancia, también conocidas como atributos de instancia. En Smalltalk, estas variables tienen visibilidad protegida aunque en general se las trata como si fueran privadas. En este caso tenemos las variables de instancia numero y saldo. Un detalle interesante es que las variables son protegidas de las instancia, ¿que significa esto? supongamos que tengo dos instancias de la clase CuentaBancaria: cuenta1 y cuenta2, entonces cuenta1 no puede acceder al atributo numero de la cuenta cuenta2, pues si bien cuenta2 es una instancia del mismo tiempo, resulta que otra instancia y aqui la protección es a nivel de instancias.

classVariableNames, como su nombre sugiere son variables de clase, lo cual significa que son accesibles por el objeto clase, pero al mismo tiempo también son accesibles y compartidas por todas las instancias de la clase, o sea, si una instacia modifica el valor de dicha variable, dicho cambio afecta a todas las instancias. En este caso tenemos tenemos el siguienteNumeroDisponible como variable de clase, la cual es incrementada por cada instancia cada es inicializada.

initialize
	saldo := 0.
	numero := siguienteNumero.
	siguienteNumero := siguienteNumero + 1.

Un punto importante para considerar es que esta variable también es accesible por la clase CuentaBancanria.

Por otro lado, si vamos a la definición de la clase CuentaBancaria y vemos la parte de clase, veremos.

CuentaBancaria class
	instanceVariableNames: 'MaximoNumero'

instanceVariablesNames, en este caso representa las variables exclusivas del objeto clase y como tales son accesibles por la clase, pero no por las instancias de  la clase. Un detalle interesante respecto de estas variables es donde inicializarlas. Bien, en general se suele agregar un método de clase que se encarga de inicializarlas, pero ojo este seria un método de clase.

Bien, por último, si volvemos a la definición de la clase CuentaBancaria, veremos que aún nos queda por mencionar los poolDictionaries. Estas variables son variables compartidas por instancias de distintas clases.  Es algo relativamente raro (al menos a mi parecer) y por eso es que no se ocurre como utilizarlas en el ejemplo, pero prometo escribir otro post al respecto.

Para finalizar les ofrezco un gráfico para intentar resumir el ejemplo.

(gracias Mariano por la correción)

 

 

 

Buenas nuevas para la comunidad Pharo

En primer lugar tenemos el release de la versión 1.2.1, iupi!!!! La imagen core incluye 693 issues resueltos y entre los cambios mas relevantes se encuentran:

  • Agregado del nuevo framework de undo
  • Agregado del nuevo DummyUIManager para trabajar sin UI
  • Inclusión del preview de SimpleMorphic
  • Un nuevo finder
  • Integración con SUnit 4
  • Muchísimos cambios en la estructura de clases del sistemas que ofrecen mejor modularización

En particular este último punto me pone muy contento ya que colaboré en la detección e implementación de algunos de los cambios.

Por otro lado, Mariano finalmente se decidió a compartir su conocimiento escribiendo un blog. Como bien el propio Mariano indica en su post inicial, si sos un experto en Smalltalk, poco tal sea poco lo que puedas aprender. Pero si sos un simple usuario con ganas de aprender y compartir conocimiento, estoy seguro que el blog de Mariano te resultará muy entretenido. Para los interesados, el blog es: http://marianopeck.wordpress.com. Felicitaciones Mariano, ¡nos leemos!

Otro argumento por Pharo

Esta mañana estaba leyendo la lista de correo de Pharo y encontré un mail de Stef. Duccase sobre la visión de Pharo, transcribo algunos de los párrafos que me parecen importantes.

“Some days ago we were chatting with igor and he made an interesting remark about a kind of hidden philosophy
behind pharo: the idea that we systematically want to make the system better.
In fact I realized that what we are doing is to make a system nice, robust and powerful so that everybody can use
to realize their goals. But we want to have a system where not only smart guys can manage to do something with it but also less talented people…”

“…I want a system that let me learn from itself. I think that lot of things fall naturally in place from this vision (documentation, oo practices – not having car inheriting from wheel, tests comments, adequate abstractions, modularity). I want a system that everybody can nicely build his own software.
So in short I want pharo to be like a nice garden with greenhouses for building new garden with tools versus a jungle where only skilled adventurers can make it through.”

Totalmente de acuerdo. Y esto me lleva a pretuntarte: ¿sabes tu cual es la visión que tienen los createdores de tu lenguaje de desarrollo preferido?

¿Por qué Pharo?

A la hora de trabajar con Smalltalk uno debe elegir algún dialecto al igual que al trabajar con Java uno debe de elegir algún IDE. El tema con Smalltalk es que el dialecto es algo mucho más relevante que el IDE, pues en la mayoría de los casos el dialecto determina no solo el IDE a utilizar sino que además determina entre otras la máquina virtual en la cual se ejecutará nuestra aplicación. En la actualidad existe una interesente variedad de dialectos entre los que se destacan: VisualWorks, Visual Age, GNU-Smalltalk, Dolphin, Squeak y Pharo.

Mi elección personal es Pharo, y en los siguientes párrafos voy exponer mis motivos.

Licencia

Pharo es gratuito y de código abierto, en particular es desarrollado bajo licencia MIT, lo cual otorga una gran libertad.

Comunidad

Sin duda es una de las comunidades más activas y es definitivamente la más activa de las que participo. Por la lista del proyecto pasan más de 60 mails diarios. Para una herramienta de desarrollo (sea IDE, framework, compilador, etc) la comunidad es clave y más aún en el caso de iniciativas código abierto. Adicionalmente es una comunidad muy abierta, todo el mundo puede commitear fixes y todas la preguntas son contestadas en la lista de correo.

Experiencia de usuario

Comenzando por la super cool interface de usuario, el logo RE-copado y siguiendo por las infinitas posibilidades de personalización que ofrece, no conozco otro IDE tan “feliz para el programador” (es cierto, este argumento es muuyyyy subjetivo, pero no deja de ser un argumento).

¿y todo es color de rosa?

Bueno, casi. Hay algunas funcionalidades que por momentos se tornan un poquitin inestable, pero creo que se debe a todas las yerbas particulares que le he agregado a mi imagen.

¡¡¡Aguante Pharo!!!