Time to learn Smalltalk: big opportunity

A while ago Stef and his troop started working on a MOOC (massive online open course) about Pharo Smalltalk.

The course is finally live and its formal name is Live Object Programming in Pharo.  The course content is very interesting because it goes far beyond Pharo Smalltalk. Of course it covers Pharo/Smalltalk syntax but it also covers OOP foundations and how OOP mechanisms are implemented in Pharo.

I think this course is a great opportunity for all those programmers who are not familiar with Smalltalk and specially those that are only familiar with static-type languages (like java and c#), believe me: Smalltalk will blow your mind!

The course started last week, but don’t worry it is seven weeks long so you are on time to join, just register here.

pharo_mooc

 

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.

(FIUBA + Pharo)++

El próximo lunes 19 de diciembre a las 17 hs. en el Laboratorio «E» del 4to. piso, el estudiante Diego Kogan presentará su Trabajo Profesional titulado “Herramienta de integración continua para sistemas desarrollados en Pharo”, que desarrollara  bajo la dirección del Ing. Guillermo Pantaleo.

El trabajo consiste en el desarrollo de una herramienta que da soporte a la práctica de integración continua para sistemas desarrollados en Pharo. Dicha herramienta esta desarrollada íntegramente en Pharo. La herramienta permite ejecutar un conjunto de tareas de verificación  de software sobre un proyecto Pharo, entre ellas:

  • Test.
  • Cobertura de Tests.
  • Inspecciones de Código.
  • Reportes de Builds.
  • Integración con Monticello (SCM para squeak/pharo).

En verdad suena interesante, porque si bien la práctica de integración contínua es común en Pharo, en general suele utilizarse Jenkins. Espero poder hacer un rato para asistir.

Pharo Sprint en Quilmes

Aprovachando la movida de la Smalltalks 2011, el miércoles 2 de noviembre de las 14:00 a las 20:00, el día previo a la conferencia vamos a estar llevando a cabo un Pharo Sprint.Para explicar lo que es un Pharo Sprint voy a utilizar la explicación que puso Guille Polito en el mail de difusión.

¿Qué es un Pharo Sprint?
Básicamente es una reunión de gente  que se junta gente  a programar en Smalltalk, en particular para Pharo.

¿Y qué programamos?
Y… programamos cosas locas.  Nos metemos adentro de Pharo a arreglar errores, o algunos tienen sus propios «modulos» dentro de Pharo y algunos otros simplemente vamos a aprender.

¿Y qué necesito?
¡Ganas!  El resto se consigue fácil, lo charlamos si te anotas.

¿Quién puede venir?
Todo el mundo.  La idea no es que estes solo, si no que nos sentemos de a pares así todos aprendemos un poquito, no solo del código, si no del que esta al lado…

¿Y si apenas se objetos? Me asusta esa cosa!!
Pegate una vuelta, mira la onda y si te cabe te quedas.

¿Y si ese día curso? ¿Si no puedo ir todo el rato?
Venite cuando y cuanto puedas!  No hace falta estar las 6 horas… Eso es para los limados como yo, no se preocupen.

¿Por qué habría de ir?
Uff..
– es divertido.  Vamos a codear :D.
– vas a conocer otras personas que sean igual de nerds (o no)
– se aprende banda
– podes sumar un poquito a la comunidad open source de Pharo

Me convenciste ¿Dónde me anoto?
https://spreadsheets.google.com/spreadsheet/viewform?formkey=dHlKdUdvYnF3c3VsMHB6Ny1oamJiTkE6MQ

Por último les digo que yo participé una sola vez de un Pharo Sprint y fue una gran experiencia :-).

Nos vemos.

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í!

Pharo: cortito y al pie

Desde hace dos semanas que vengo con días muy intensos y la cuestión no va a aflojar por al menos dos semanas más: corrección de trabajos prácticos y parciales de facultad, Agiles 2011, Codecamp y eventos familiares entre otras cosas. Pero a pesar de todo esto no quería dejar compartir un post que hizo Sven Van Caekenberghe en la lista de distribución de Pharo motivado por este otro post de  Marcus Kazmierczak.

El titulo del post fue «One Liners to Impress Your Friends» y estos son los items que me parecieron más copados de los que incluyó Sven.


"---  multiplicar cada item de una lista por 2 ---"

(1 to: 10) collect: [ :each | each * 2 ]

"--- Sumar una lista de numeros: 4 opciones distintas  ---"

(1 to: 1000) inject: 0 into: [ :sum :each | sum + each ]

(1 to: 1000) sum.

"--- Leer un archivo ---"

(FileStream fileNamed: 'data.txt') contentsOfEntireFile

"--- Feliz cumpleaños ---"

1 to: 4 do: [ :each | Transcript crShow: 'Happy Birthday ', (each = 3 ifTrue: [ 'dear Mr. President' ] ifFalse: [ 'to You' ]) ]

"--- Filtrar una lista de numero: 2 opciones ---"

#(49 58 76 82 88 90) groupedBy: [ :each | each > 60 ]

"---  Consumir un servicio XML o JSON ---"

XMLDOMParser parse: (ZnNeoClient new get: '<a href="http://search.twitter.com/search.atom?&q=pharoproject" target="_blank">http://search.twitter.com/<wbr>search.atom?&q=pharoproject</wbr></a>')

JSJsonParser parse: (ZnNeoClient new get: '<a href="http://search.twitter.com/search.json?&q=pharoproject" target="_blank">http://search.twitter.com/<wbr>search.json?&q=pharoproject</wbr></a>')

"---  Encontrar el mínimo/máximo en una lista ---"

#(14 35 -7 46 98) min

#(14 35 -7 46 98) max

That’s all folks.

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)

 

 

 

«Mis» libros (¡aramos dijo el mosquito!)

Hace unos dias me cruzé en la facultad con Juan Gabardini a quien le comenté que en Algoritmos 1 estabamos enseñando programación usando Python y con un libro que la propia cátedra escribio: Algoritmos y Programación 1 con Python. Quedé en pasarle el link, ya que el libro está publicado en la web en formato .pdf bajo licencia Creative Commons. El libro fue escrito por varios integrantes de la cátedra e impulsado principalmente por Marga. En lo que a mi respecta, mi aporte pasó por redactar el capítulo de excepciones, un tema que siempre me interesó, pues muchos programadores utilizan mal las excepciones.

Otro libro en el que hice mi aporte fue en Programación Orientada a Objetos: Diseño y programación, de Carlos Fontela. Resulta que Carlos fue uno de los revisores de mi tesis sobre programación orientada a aspectos y al escribir su libro le parecío interesante incluir un capítulo sobre aspectos. Asi que luego de hablarlo conmigo, Carlos basó su capitulo de aspectos en mi tesis y tuvo la gentileza de mencionar mi trabajo. Al mismo tiempo yo me encargué de revisar el capítulo y validar algunos ejemplos de código.

Por último, actualmente me encuentro participando en la traducción a castellano del libro Pharo By Example. La traducción está en curso y esperamos tener un primer borrador de la obra completa hacia mitad de año. En este momento tenemos 3 capítulos completamente traducidos, en estos dias voy a intentar publicarlos.

That’s all folks.