Técnicas para enseñar programación

Hace ya un largo tiempo que vengo leyendo sobre algunas dinámicas interactivas de programación como los coding dojos, pero recien hace un par de semanas tuve la oportunidad de particitar en uno. Dicha actividad se desarrolló en el contexto de los encuentros mensuales de la comunidad ágil de Buenos Aires y estuvo coordinado por Adrian Eidelman (pueden ver el video en code&&beyond). La actividad me resultó muy amena y me ayudó a confirmar una sospecha que tenia: definitivamente este tipo de dinámicas son una excelente herramienta para a enseñar a programar. Es por esto que voy a intentar incoporarlas a las materias que voy a dictar este cuatrimestre.

La técnica del dojo viene del mundo de las artes marciales, donde los practicantes suelen realizar ejercicios/movimientos en forma repetiva para dominar plenamente una técnica. Esta situación es fácilmente extrapolable a cualquier otra disciplina deportiva: todo deportista profesional mejora en base al entrenamiento. ¿cómo podríamos entonces llevar esta idea al ámbito del software? Si lo pensamos con detenimiento en general los programadores nos entrenamos dentro de los proyectos, es como si un futbolista no entrenara durante la semana y fuera directamente al partido el domingo . Alguien podría argumentar que en realidad los programadores nos entrenamos cuando estudiamos, pero en realidad eso seria como la etapa en la que un futbolista aprende las reglas del deporte y la técnica básica para patear un balón o en el caso de un arquero como armar la barrera para un tiro libre.

Un coding dojo es una reunión en la que programadores se juntan para trabajar en un desafio de programación, en cierto modo podria decirse que es un equivalente al entrenamiento de un deportista. Existen diversas variaciones en la dinámica, una llamada randori, consiste en trabajar  con una única computadora y un proyector, la solución es implementada  por pares de programadores que van rotando por la máquina según algún criterio predefinido (porque ejemplo cada 7 minutos).

Otra variante del dojo es la denominada  kata, en la cual un programador toma la máquina conectada al proyector y resuelve el desafio mientras los otro programadores lo observan atentamente  preguntando cualquier detalle que no les quede claro. Una vez finalizado, una programador de la audiencia toma la máquina y repitiendo los pasos previamente observados resuelve nuevamente el desafio comenzando desde cero.

Este post de Code&Beyond tiene varios recursos al respecto de esta técnica y explica la idea con más profundidad. También pueden leer este post de Dave Thomas, uno de los principales responsable de la popularización de esta dinámica.

Espero lo disfruten y prometo en un futuro compatir los resultados de la aplicación de esto en mi ámbito académico.

Anuncios

Eventos Argentina 2011

El año recién está comenzando y ya tengo agendados algunos eventos que se van a desarrollar en Argentina a los que planeo asistir.

Agile Open Tour: en el contexto de la comunidad ágil argentina, por tercer año consecutivo vamos ejecutar este tour afrontando el desafio de agregar más estaciones al tour. A las ya clásicas estaciones (BsAs, La Plata, Tandil, Bahía Blanca, Rosario, Mar del Plata y Córdoba) queremos agregar algunas nuevas como San Luis, Mendoza, Tucuman y Resistencia. Como siempre la información relacionada a estos eventos la iremos publicando en http://www.agiles.org/agile-open-tour.

JAIIO 40: está nueva edición de las Jornadas Argentinas de Informática organizadas conjuntamente por Sadio y la UTN-Córdoba se llevarán a cabo entre el 29 de agosto de y 2 de septiembre. Ya está abierta la convocatoria para la presentación de trabajo y con Ariel hemos dedido que vamos a presentar un paper. Más información en: http://www.40jaiio.org.ar/.

Copa América: se jugará en Argentina entre el 1 y el 24 de Julio. Las sedes elegidas son: Jujuy, Salta, Córdoba, Santa Fé, San Juan, Mendoza, Buenos Aires y La Plata. El partido inagural será en el estadio único de La Plata y se disputará entre las selecciones de Argentina y Bolivia. Más información en http://www.ca2011.com.

FIBA Americas: esta competencia que otorga 2 plazas para los juegos olimpicos del año próximo se desarrollará en Mar del Plata entre el 30 de agosto y el 11 de septiembre. Un condimento adicional de esta competencia es que seguramente será una de las últimas competencias para varios de los jugadores de la denominada generación dorada. Será una gran ocasión para disfrutar del juego del enorme Liufa Scola, el afilado Lancha Delfino, el eterno Leo Gutierrez y el rústico pivote Román Gonzalez. Ah! y posiblemente también esten Ginobili y Nocioni, pero por las dudas a no hacerse muchas ilusiones ya que en ocasiones anteriores nos dejaron con las ganas. Más información el FibaAmericas.

Agiles 2011: la cuarta edición Jornadas Latinoamericanas de Metodologias Agiles, se llevará a cabo en Buenos Aires del 11 al 13 de octubre. Más información en: http://agiles2011.agiles.org/

Por útlimo algunos otros eventos a los que me gustaría asistir pero de los que aún no tengo certeza de su realización son: Smalltalks, PyCon y CodeCamp.

Game development, episode #2: some more concepts

Before drilling down into technological stuff I want to share some basic concepts.

Collision detection is a very common concern in games. It consists on determining whether two objects have come into contact with one another. In games, this is necessary in order to make decisions, for example, in games like Mario Bros., it is important to know whether a Mario has collide with a tortoise or a coin. In order to detect collisions, each object  has a bounding box, that is an approximation of  the object’s surface.

sprite is a a small bitmap image (or set of images) used to visually represent . Another kind of bitmap is a tile, which is usually used for background maps.

During the drawing process all the sprites and tiles are drawn incrementally into a buffer and then this buffer is dump at once into the low level buffer that will impact on the screen. This technique es called double buffering.

To be continue…

Sobre la plataforma para materias de programación: nuestra implementación

Hace un tiempo publiqué en este mismo blog una propuesta de trabajo profesional sobre una plataforma para materias de programación. A próposito de la misma me contactaron varias personas, no con la intención de hacer un trabajo profesional sobre esa temática (lo cual era mi intención al publicar el post) sino con la intención de ayudarme a resolver la problemática planteada. Por suerte en el caso de algo3 tenemos resulta casi toda la problemática, de todas formas agradezco a todos aquellos que me contactaron y voy a intentar reunirme con cada uno de ellos para compartir experiencias y ver de enriquecer la plataforma.

Bien, hechas las aclaraciones preliminares, en las siguientes líneas voy a describir sintéticamente como es que hemos resuelto la problemática planteada en el post original.

  • Website: está hosteado en Fiuba. Es un sitio estático, nada de scripts server-side, solo html+js+css. Las actualizaciones las realizamos manualmente vía FTP. Recientemente agregamos un control jquery que muestra las publicaciones de nuestra cuenta de twitter (@algo3fiuba).
  • Listas de correo: este servicio también es provisto por Fiuba.
  • Repositorio: este componente lo tenemos implementado con uno de los tantos servicios disponibles en la actualidad en internet. En particular lo que tiene ver con el framework que proveemos a los alumnos (titiritero) está hosteado en Google Code, que adicionalmente al SVN brinda un issue tracker y una wiki. Para el uso interno de la cátedra (acceso privado) usamos Assembla. En cuanto a los alumnos, para el desarrollo de sus trabajos les recomendamos el uso de GoogleCode o similar.
  • En cuanto al listado de alumnos y su seguimento a lo largo de la cursada, usamos una hoja de cálculo.
  • En cuanto al build server, la herramienta que utilizamos en la actualidad es TeamCity. Inicialmente hosteado en un servidor personal y desde hace aproximadamente un mes, hosteado por los amigos de CodeBetter que brindan el servicio gratuitamente para proyectos open source.

Desde el punto de vista de los alumnos creo que esta plataforma está excelente. Desde el punto de vista del equipo docente, la principal falencia es la falta de integración entre los distintos componentes de la plataforma: para cada una de uno de estos componentes tenemos credenciales de acceso distintas.