Comienzo de clases en Fiuba

Esta semana comenzamos en segundo cuatrimestre. Como siempre voy a estar dictando Algo3 y también como suele ocurrir los segundos cuatrimestres, voy a dictar Teoría de algoritmos (TDA). Habiendo transcurrido la primer semana de clase, tengo algunas curiosidades para compartir.

Curiosidad 1: es la primera vez que tenemos más alumnos en TDA que en la práctica 1 de Algo 3.  En TDA tenemos anotadas unas 45 personas, que en caso que todas cursen efectivamente la materia, va a hacer durísima la corrección de trabajos prácticos. Por otro lado en la algo3 tenemos alrededor de 20 alumnos y somos 4 docentes, lo cual es excelente, pues vamos a poder hacer un trabajo mucho más personalizado.

Curiosidad 2: en TDA tenemos dos alumnos de intercambio provenientes de Francia y según comentó DiegoF, en la práctica 2 de algo3 hay una alumna en la misma condición.

Curiosidad 3: bueno, en realidad no es una curiosidad sino una mejora, apenas comenzamos el cuatrimestre y ya tenemos definidos los 3 trabajos prácticos. Sinceramente no recuerdo que hayamos tenido una situación así previamente y es justamente esa la curiosidad.

Respecto de este último punto, como de costumbre en Algo3, procuramos que los trabajos prácticos sean juegos y este cuatrimestre no es la excepción. Los trabajos 1 y 2 son juegos, mientras que el trabajo 0, consiste en la implementación de ciertas leyes de mecánica clásica (velocidad, fuerza, etc, etc) que son necesarias para los trabajos 1 y 2.  Otro punto positivo respecto a esto, es que en esta ocasión resolvimos el TP antes de entregarselo a los alumnos, para validar el alcance y la dificultad del mismo (resolvimos dijo el mosquito, en realidad yo solo sugerí que deberiamos hacerlo y fue Eugenio quien finalmente lo hizo).

Fin.

Planificación 2011-2 algo3@fiuba

Ayer durante la última fecha de examen integrador, realizamos una reunión de cátedra para planificar el próximo cuatrimestre.
Durante la reunión tratamos algunos de los puntos a mejorar detectados durante las retrospectivas del cuatrimestre anterior.
Puntualmente sacamos en concreto la definición de los 3 trabajos prácticos que vamos a dar y también definimos algunos puntos sobre la implementación de mejoras al titiritero.
Personalmente estoy muy contento con los trabajos definidos pues me parecen muy apropiados ya que van a permitir a los alumnos integrar conocimientos de otras materias y modelar problemas en distintos dominios.

¡Hey! ¿que te pasa Piñera?

Esta semana como sociedad latinoamericana hemos sufrido una terrible herida que representa un retroceso de 30 años.  En el vecino pais Chileno, el presidente Piñera prohibio una manifestación de docentes y estudiantes en defensa de la educación pública. Cuando lo escuché no lo podía creer ¿prohibir una manifestación en el siglo XXI? ¿que clase de régimen es ese?. Como era de esperar los manifestantes hicieron oídos sordos de la prohibición y realizaron su movilización ante lo cual el gobierno ordenó la represión. ¡Increíble! ¡Docentes y alumnos secundarios y universitarios, manifestándose por la educación pública y siendo reprimidos por orden del gobierno! Mientras escribo estas línea no dejo de asombrarme. El hecho es doblemente grave, por un la la violación de la libertad del pueblo y por otro el ataque la educación pública que fue lo que dio origen a la manifestación. Este video cuenta brevemente el hecho.

Esperemos que el actual gobierno chileno (y la sociedad que lo eligió) reflexionen y cambien el rumbo de los acontecimientos.

Elementos de Ingeniería de Software

(parte 3 de la serie: Ingeniería de Software en UNQ)

Este es el nombre formal de la materia que voy a dictar el próximo cuatrimestre en UNQ. La materia está en el contexto de la Tecnicatura en Programación Informática, una carrera de pre-grado de 6 cuatrimestres de duración cuyo objetivo es:

Formar técnicos/as capaces de elucidar e implementar soluciones en un amplio espectro de problemas asociados a las tareas de diseño/programación dentro del desarrollo de software, en un alcance razonable para un egresado/a pre-universitario, siendo capaces de aprovechar los conceptos aprehendidos en la carrera para pensar y resolver situaciones concretas, y basados en una amplia experiencia práctica obtenida durante el recorrido de la carrera.

He resaltado con negritas algunos puntos importantes que se reflejan claramente en el dictado de las materias, según me he hablado com docentes y alumnos.

Si bien en la UNQ no existen correlatividades, en el plan sugerido de cursada, la materia está ubicada en el 4 to cuatrimestre de la carrera. Al mismo tiempo, la inscripción en la materias se realiza personalmente con un docente tutor, quien tiene la posibilidad de no anotar al alumno en un materia, si considera que el alumno no está en condiciones de cursarla. El punto es que en general, los alumnos que llegan a cursar esta materia, vienen con sólidos conocimientos de  en lo que respecta a programación orientada a objetos, patrones, algoritmia y base de datos, pero sin conocimientos en cuanto a requerimientos, arquitectura, gestión de proyectos y demás cuestiones «blandas» de la ingeniería de software. Otro punto a considerar es que en el resto de las materias de la carrera, los alumnos siguen aprendiendo cuestiones técnicas como programación concurrente, construcción de interfaces de usuario y tienen una materia llamada Desarrollo de aplicaciones que auspicia en cierto modo como materia integradora. Esto hace que Elementos de Ingeniería de Software sea la única materia en la que ven cuestiones generales de ingeniería de software que no son de índole técnica.

Luego de haber analizado todas estas cuestiones y  haber consultado con varios profesores, ya tengo una idea como encarar la materia. Como libros de texto voy a utilizar Software Engineering de Pressman y The Art of Agile Development de Shore. Dado el contexto de la materia, no voy enfocarme en cuestiones de management (aunque si las vamos a ver) si no más bien en cuestiones de self-management que todo programador tiene que poder hacer:

  • Entender el contexto de su trabajo
  • Entender los requerimientos e incluso poder modelarlos y transmitirlos.
  • Organizar su trabajo y estimarlo.
  • Comunicar su trabajo: progreso, dudas, impedimientos y siguientes pasos.
  • Identificar potenciales inconvenientes relacionados a su trabajo.

Para todos estos puntos voy a tomar como referencia complementaria el Personal Software Process de Humphrey. Tengo la intención de que estos temas no queden solo en la teoría y para ello planeo hacer un par de coding dojos/katas y algunas otras actividades de índole práctica para poner justamente en práctica cada uno de los temas que vayamos viendo.

Por otro lado, también voy a dar algunas cuestiones un poco más técnicas relacionadas a arquitectura, atributos de calidad y diseño de alto nivel, principalmente porque no hay ninguna otra materia en la que se vean.

Finalmente hay una serie de temas complementarios que quiero dar como ser:

  • Modelos de calidad (CMMI, ISO, etc)
  • Administración de servicios de sofware
  • Emprendedurismo
  • Desarrollo Open source

Para todos estos temas complentarios y también para algunos de los temas principales, pienso convocar a algunos profesores invitados. En particular quiero invitar a gente de la industria a contar como llevan a la práctica las cuestiones que vamos a estudiar en la materia. Y para esto mi idea es traer representantes de empresas de distintos tamaños:

  • Un pequeño emprendimiento (entre 3 y 8 personas)
  • Un empresa mediadiana (unos 200 empleados)
  • Una empresa grande/multinacional (más de 500 empleados)

Bien, creo que esto es todo por el momento. A medida que se me vayan ocurriendo más cosas las iré publicando.

Software, Hardware y Peopleware

(parte 2 de la serie: Ingeniería de Software en UNQ)

Como ya mencioné en una entrada anterior, durante la segunda mitad de este año voy a dictar ingeniería de software en UNQ. Esto me ha llevado a plantearme explícitamente mi visión de esta disciplina.

Estoy absolutamente convencido que la ingeniería de software es una disciplina con un gran contenido social/humano más allá del contenido técnico. Si bien seguramente haya gente desarrollando software en «forma aislada», creo que no es lo más común, en general el software se desarrolla en equipos de personas. En forma más o menos directa el software es utilizado por personas. Y aunque no suene muy lindo, podríamos decir que la materia prima del software son las ideas/experiencias de las personas que participan en el proceso de construcción.

Del párrafo anterior se desprenden algunos corolarios.

El trabajo en equipo requiere de ciertas habilidades «blandas» que en determinados contextos pasan a ser incluso más relevantes que las habilidades «duras o técnicas».

Puede que las personas sean más importantes de lo que parece a simple vista. Y ya que hablamos de las personas no puedo dejar de recomendar este sorprendente video sobre motivación.

No estoy solo en esta posición, pues de hecho no la «invité» yo sino que la «escuche» de Tom De Marco y Fred Brooks y he tenido la posibilidad de confirmarla día a día en los años que llevo trabajando tanto en la industria.

Por último repito la frase que puse en mi página personal

Estoy absolutamente convencido de que el principal factor para el éxito de los proyectos no es ni el software ni el hardware, sino el peopleware, y es por eso que adhiero fervientemente al manifiesto ágil.

continuará…

Cambio de materia

(parte 1 de la serie: Ingeniería de Software en UNQ)

A comienzos de este año comencé a dar clases en la Universidad Nacional de Quilmes (UNQ). Por diferentes razones, me tocó sumarme a la materia Objetos 1, en la cual se enseña Programación Orientada a Objetos. Fue una experiencia muy interesante que ya contaré en otra entrada. El tema ahora es que con el comienzo del segundo cuatrimestre hubo una re asignación de profesores y como consecuencia de ello, el próximo cuatrimestre voy a dictar Ingeniería de Software :-).

En realidad el nombre formal de la materia es Elementos Ingeniería de Software y hasta el momento la venia dictando Gabi Arévalo quien tubo la amabilidad de pasarme el material que ella venia utilizando para el dictado de la materia. Por lo que vi de este material y lo que hablé con Gabi, la materia está basada en los clásicos libros de Pressman y Sommerville, con algunos agregados adicionales.

Esta nueva responsabilidad (con gusto asumida ya que yo mismo sugerí el cambio) me llevo a plantearme como encarar la materia. Después de revisar el material que me pasó Gabi, comencé revisando los objetivos de carrera, el perfil de los egresados y el plan de estudio. Luego me planteé explícitamente cual es mi visión de la ingeniería de software, cosa que nunca había hecho formalmente o si lo había hecho nunca lo había escrito. Finalmente me reuní con los profesores de la materias que dictan las material relacionadas. Es a partir de todo esto que comencé a diseñar la materia. En próximas entradas voy ir compartiendo lo que vaya generando.

continuará…

Grado y posgrado

La semana pasado asistí a tercera clase presencial del maestría en educación que estoy cursando en la UNLP.  La clase fue sin duda la mejor de las 3 que presencie hasta el momento en la cursada. Como parte de la clase realizamos una actividad grupal que me hizo reflexionar sobre los diferentes perfiles de los alumnos en las carreras de posgrado. Esto me llevo a plantear hipótesis que comparto a continuación.

En una carrera de grado, los alumnos provienen de una formacion media que si bien puede tener distintas orientaciones y distinta profundidad, a mi entender no suele ser tan divergente para una carrera dada. O sea, es comun esperar que alguien que piensa en estudiar  derecho tenga una formacion media orientada a humanidades, mientras que alguien estudiando ingenieria es mas posible que tenga una formacion media tecnica. Al mismo una finalizada la carrera de grado y ya entrando en la vida profesional la gran mayoria de los egresado de una carrera se desempenan en un campo con cierta amplitud pero bastante alineado.

En el caso de los posgrados, creo que la situación es distinta. En primer lugar la gente que ingresa puede venir con formaciones radicalmente distintas. En el caso particular del posgrado que estoy haciendo, hay informáticos, gente de ciencias de la educación, médicos, músicos y profesores de ingles y de educacion fisica. Al mismo tiempo, una vez finalizado el posgrado campo de trabajo es muchisimo mas variado. Esto hace que mas alla de los conocimientos que forman parte de la currícula propia del posgrado, uno se enriquezca mucho a partir del intercambio interdisciplinario.

El problema es que funciona

Estabamos en Algo1, tomando recuperatorio, un alumno entrega su exámen y yo lo tomo para corregirlo. Termino de corregirlo y no estaba seguro de que nota ponerle, entonces lo hablo con el equipo docente. Un miembro del equipo pregunta: ¿cual es el problema? a lo que respondo: «El problema es que funciona». Resulta que el alumno habia planteado un algoritmo que resolvia la consigna, pero… ¿como decirlo?…mmmm.  Digamos que la solución era «demasiado rústica». Si la solución no funcionara, no habria dudas, el alumno estaria reprobado sin más vueltas. Pero justamente el problema radicaba en que la solución funcionaba lo cual sumaba la complejidad de explicar al alumno que a pesar que su solución funcionaba, no cumplia con los estándares de calidad de la cátedra.

Justamente esta es una de las diferencias entre ir universidad y no hacerlo*: en la universidad no basta con que funcione, también debe cumplir con algunas otras características. Dichas características dependen del foco de la materia. El hecho de un programa funcione es una condición necesaria, pero está lejos de ser suficiente.

*en realidad es lo que deberia ocurrir, pero no puedo asegurar que siempre sea asi.

Retrospectiva 2011-1 (con video)

El jueves pasado hicimos la restrospectiva de fin de cuatrimestre en algo3. Utilizamos la misma dinámica que en los últimos cuatrimestres. Entre los positivos puntos destacados se destacaron:

  • El dinamísmo de las clases y en particular el de la clase de repaso
  • El uso de Smalltalk y también otros lenguajes
En los puntos negativos destacaron:
  • El alcance del TP1
  • El poco tiempo para hacer los parciales
Si bien a mi parecer el TP1 no era muy extenso, creo que tenia un complejidad importante a pesar de que dimos dos semanas para desarrollarlo, con lo cual sin duda es algo que tendremos que reveer.
En cuanto al tiempo de los parciales es algo que tendremos que hablar con Carlos.
Adicionalmente a esto hubo algunas sugerencias interesantes por parte de los alumnos:
  • Tener más clases en el laboratorio
  • Hacer una clase de repaso previa al segundo parcial
Más allá de todos estos puntos, mi evaluación personal del cuatrimestre es positiva ya que comparando con los resultados de años anteriores, veo que muchas cosas las hemos ajustado convenientemente. Es de destacar que un solo alumno hizo mención negativa respecto de las lecturas, tema que en cuatrimestre anteriores fue muy polémico.
Por último, un detalle adicional a mencionar es que hemos grabado algunos fragmentos de la actividad. Pueden ver el video resultante en: http://www.youtube.com/algo3fiuba#p/a/u/0/W-Z7joZjNyQ.