Cierre de cuatrimestre 2023-2 en MeMo2 @ FIUBA

Terminamos el cuatrimestre y me alegra tener la sensación de que seguimos mejorando. Continuamos con el horario matutino de 8 a 11, excelente. Y mantuvimos el mismo porcentaje de clases presenciales/virtuales.

Como siempre hicimos un par de ajustes respecto del cuatrimestre anterior, algunos de ellos basados en el feedback de los alumnos y otros surgidos del equipo docente.

  • Uno de los ajustes más importantes fue ser más explícitos sobre la «programación colaborativa» (mob y pair programming), por momentos pedimos explícitamente que no programen en solitario. Esto generó cierta «incomodidad» entre algunos alumnos por verse obligados a coordinar horarios con sus compañeros para hacer algunas tareas. Pero creemos que el resultado fue muy positivo ya que percibimos que se trabaron menos con cuestiones técnicas lo que les permitió terminar las tareas en menos tiempo y con menos grado de «frustración».
  • Una novedad fue que para los trabajos grupales, agregamos un facilitador «externo» para las retrospectivas al final de cada iteración iteración. O sea: cada grupo ya tenia un docente en el rol de Product Owner y a eso agregamos un segundo docente que solo se sumaba para facilitar las retrospectivas.
  • Otro de los ajustes, no tan visible para los alumnos, tuvo que ver con la infraestructura que utilizamos para el trabajo final debido a algunos cambios en Okteto. Básicamente dejamos de utilizar Okteto y directamente pusimos (casi) todo a correr en nuestro propio cluster Kubernetes en Digital Ocean.
  • También pusimos un poco más de foco en las cuestiones relacionadas a la operación o mejor dicho lo que suele llamarse «build for operations»
  • Finalmente, estrenamos un nuevo trabajo final que nos trajo renovados desafíos para el equipo docente.

Tanto en la retrospectiva final como en la encuesta de cierre, tuvimos feedback muy positivo de los alumnos. Comparto algunos números de la encuesta:

  • La encuesta fue contestada por la totalidad de los alumnos que completaron el curso (11)
  • La evaluación general de la materia (en promedio) dio 9.0, lo cual es mayor que el cuatrimestre anterior (8,8).
  • Respecto del porcentaje de clases presenciales/virtuales, 10 alumnos lo consideraron apropiado mientras que solo 1 hubiera preferido más virtualidad.
  • Las otras dimensiones de evaluación de la materia también resultaron muy positivas: claridad de los docentes: 4,7/5; Conocimientos de los docentes: 5 /5; Dinámica de las clase: 4,6/5; Materiales de estudio: 4/5.
  • La dedicación semanal a la materia extra clase dio un promedio de 8,7 lo cual me parece puede estar un poco distorsionado por la últimas semanas en las que los alumnos trabajaron en el trabajo final.
  • El NPS nos dio 63 (esta es una métrica que puede tomar valores en el rango -100 +100)

Algunos otros números del cuatrimestre:

  • Comenzamos la materia con 13 alumnos dos de los cuales abandonaron aproximadamente a mitad de cuatrimestre. Finalmente completaron la cursada 11 alumnos. Luego todos aprobaron el final.
  • Tuvimos 40 tareas individuales que incluyeron: lecturas, videos, cuestionarios y ejercicios de programación
  • Tuvimos 1 tarea para trabajar en parejas y dos trabajos grupales con grupos 3 o 4 alumnos
  • La calificación promedio de aprobación fue 7,1

Resulta curioso que si bien los números de la encuesta dieron mejor que el cuatrimestre anterior, la calificaciones fueron más bajas, un fenómeno para analizar.

Respecto de la dedicación, el análisis de la información reportada por los alumnos nos indica que:

  • La dedicación promedio extra-clase por persona sin considerar los trabajos grupales fue de 65 horas
  • La dedicación promedio extra-clase por persona para los trabajos grupales fue tp1: 6 horas y tp2: 14 horas
  • En términos generales la dedicación extra-clase promedio por persona a lo largo de toda la materia fue de 7,7 horas semanales.

Diplomatura en Ingeniería de Software Continua, largamos

El miércoles pasado comenzamos el dictado de la Diplomatura en Ingeniería de Software Continua en la Universidad Nacional de Tres de Febrero. Un importante paso de una idea que para que comenzó a gestarse hace ya varios años.

Esta primera cohorte tiene 13 participantes, un muy buen número para la propuesta didáctica queremos implementar en la toda la carrera. Entre los participantes tenemos un extranjero residente en Costa Rica y gente de diversos lugares de Argentina: La Plata, Bariloche, Mendoza, Córdoba y San Martín de los Andes entre otros.

En este primer cuatrimestre comenzamos con el dictado de dos materias: Ingeniería de Software Moderna (a cargo de Carlos Fontela) y Diseño y Evolución de Arquitecturas de Software (a cargo de Andrés Pace y Diego Fontdevila).

Dado que las 4 materias del diploma están armadas de forma autocontenida y no tiene correlatividades entre ellas, en marzo del año próximo volveremos abrir la inscripción para quienes quieran empezar a cursar las otras dos materias que se comenzarán a dictar en abril: Entrega Continua (a mi cargo) y Operación y Gestión de Servicios de Software con DevOps (a cargo de Fede Casuscelli).

Quienes quieran saber más sobre esta propuesta educativa aquí hay un documento formal con detalles de objetivos, contenidos y bibliografía.

Carrera de Postgrado en Ingeniería de Software Continua

Luego de varios años dando vueltas sobre este tema, tenemos una carrera. Estoy tentando de decir que tenemos 3 carreras (una diplomatura, una especialización y una maestría) pero en términos formales y por el momento solo tenemos la diplomatura, las otras dos están aún «in-progress».

El detalle interesante es que estas tres titulaciones están armadas en manera incremental. En forma simplificada tenemos nueve materias, cuatro de ellas constituyen el diploma. Luego la especialización agrega cinco materias más y finalmente la maestría agrega una materia más y una tesis. Hay algunos detalles de «articulación» que aún nos falta definir pero la parte interesante es que la diplomatura ya está lista y la empezaremos a dictar el mes próximo: Septiembre 2023.

La diplomatura consta de las siguientes 4 materias:

  • Software Delivery: esta materia es la que vengo dictando desde hace 4 años bajo el nombre de «Seminario de Software Delivery». En el contexto de la diplomatura seguirá a mi cargo.
  • Operación y Gestión de Servicios de Software con DevOps: a cargo de Federico Casuscelli
  • Ingeniería de Software Moderna: a cargo de mi estimado Carlos Fontela
  • Diseño y Evolución de Arquitecturas de Software: a cargo de los doctores Diego Fontdevila y Andrés Diaz Pace.

La diplomatura se dicta en modalidad virtual, dos materias por cuatrimestre. A su vez cada materia consta de 6 encuentros online que se realizan cada dos semanas. Finalmente en términos de calendario, las materias que se dictan en el mismo cuatrimestre, se encuentran «defasadas» en una semana. De esta forma el alumno cursa durante 12 semanas consecutivas, una clase por semana, las semanas pares cursa una materia y las semanas impares cursa la otra materia.

En particular, este segundo cuatrimestre de 2023 comenzaremos con el dictado de Ingeniería de Software Moderna y Diseño y Evolución de Arquitecturas. La cursada comenzará a mediados de septiembre. Estamos planificando una charla de presentación para la tercer semana de Agosto.

Respecto del costo, es algo que me excede pero según lineamientos institucionales, creo que serán algo así como 10 cuotas de ~ $40.000 (cuarenta mil pesos argentinos)

Pueden encontrar más detalles sobre las materias y la diplomatura en general en el folleto de difusión.

Los interesados en cursar pueden completar el formulario de pre-inscripción y recibirán más detalles.

Finalmente por cualquier duda pueden escribir a ingenieriadesoftware@untref.edu.ar y con gusto contestaremos todas sus inquietudes.

Sobre mi experiencia en Ingeniería de Software Continua @ UBA-Exactas

Ayer terminé la materia Ingeniería de Software Continua que dicté en calidad de Profesor Invitado en la Facultad de Ciencias Exactas y Naturales de la UBA. La materia estuvo en el contexto de la carrera de Ciencias de la Computación, una carrera con un foco muy científico/algoritmico y bastante distinta a las carreras de FIUBA.

Tal como lo había adelantado, la materia fue en gran medida un recorte de MeMo2.

Inicialmente tuve unos 12 inscriptos, pero solo asistieron 9 a la primera clase y finalmente fueron 8 los que cursaron la materia entera. Solo 7 aprobaron la materia (el octavo asistió a todas las clases pero desaprobó varias tareas). Fueron 8 clases (una por semana) de 3 horas cada una , más una fecha de final. El final fue en parte un oral tradicional y en parte una dinámica colectiva en línea con mi idea de la evaluación como espacio de aprendizaje.

Al igual que en MeMo2, utilicé una estrategia de aula invertida y extendida, con soporte de Canvas, GitLab y GoogleGroups.

Durante la cursada tuvimos 31 tareas que incluyeron principalmente lecturas, videos y desarrollo. Fueron tareas 28 individuales, 2 en parejas y 1 en equipos de 4. Respecto de la dedicación extra clase y según lo reportado por los propios alumnos en sus tableros personales (cada alumno tenia un tablero de tareas al estilo Trello), representó en promedio unas ~49 horas repartidas a lo largo de 8 semanas. Un total de ~6 horas semanales.

Como de costumbre en mis cursos, hice una encuesta anónima al finalizar, comparto algunos números de dicha encuesta:

  • Evaluación general de la materia: 9 / 10
  • Claridad del docente: 4,8 / 5
  • Dinámica de clases: 5 / 5
  • Materiales de estudio: 4,8 / 5
  • Net Promoter Score: 83 (esta es una métrica que puede tomar valores en el rango -100 +100, con lo cual un 83 es muy bueno)

Mención aparte para la infraestructura. El pabellón «0+infinito» es fantástico. Además de ser moderno es super luminoso (lo cual es un contraste fuerte para los que venimos de FIUBA donde nuestros edificios tienen tanta luz como una baticueva). Hay aulas de distinto tipo, algunas tipo auditorio, otras con pupitres individuales y otras con mesas y sillas móviles. Precisamente una de estas últimas pedí explícitamente para dictar la materia de forma de poder facilitar las actividades de trabajo en grupo durante la clase.

Todas las aulas tienen proyector incorporado con pantallas retráctiles para proyección. Pero curiosamente la conexión a los proyectores no es vía cable sino vía wifi. Esto me resultó un poco incómodo.

Finalmente los pizarrones son los clásicos de madera para escribir con tiza, esto me resultó incomodo pues venia acostumbrado a las pizzaras blancas para escribir con marcador.

De todas formas mis incomodidades fueron mínimas, el aula luminosa, amplia y con mesas móviles que enamoraron.

Personalmente quedé muy contento con la experiencia, fue interesante tener contacto con una audiencia distinta y «vivir un poquito» en otra institución.

Quiero cerrar este post con agradecimientos:

  • A Ricardo Rodríguez, profesor de Exactas, que me ayudo con todas las cuestiones administrativas/operativas.
  • A Juan Pablo Galeotti, Director del departamento de Computación quien me hizo la invitación formal para postularme como Profesor Invitado
  • A Sebastián Uchitel, profesor de Exactas, que fue quien tuvo la idea inicial de que diera clases allí.
  • A los alumnos que se «arriesgaron» a anotarse en una materia desconocida con un profesor externo a la institución.

Guía Oficial de Scrum, ¡chau!

En mis materias vengo utilizando la Guía Oficial de Scrum pero a partir de dos charlas distintas que tuve con colegas en la última semana he decidido dejar de usarla.

Resulta que una de las modificaciones «recientes» de la guía oficial de Scrum es que elimina los roles. En realidad no elimina los roles conceptualmente, sino que elimina el término «rol» y en su lugar habla de responsabilidades (accountabilities), o sea: «Scrum Master» es un conjunto de responsabilidades, «Product Owner» es un conjunto de responsabilidades, etc. Según me comentaban mis colegas expertos en Scrum (cosa que yo no soy) es para evitar la usual creencia de que las responsabilidades de Scrum Master deben ser tomadas por una única persona y que esa persona debe dedicarse de forma exclusiva a ello. Pero precisamente eso es un rol, «un conjunto de responsabilidades». Entonces si conceptualmente hablamos de roles pero no queremos usar el término roles, creo que lo que se está haciendo es una «precarización» del vocabulario y al mismo tiempo se genera ruido y confusión para aquellos que sabemos lo que es un rol.

Por otro lado tengo la sensación que la guía cada vez tiene menos cuestiones relacionadas al desarrollo de software, posiblemente consecuencia del uso de Agile/Scrum fuera de contexto de IT. Pero dado que lo que estudiamos en mi materias es desarrollo de software, estas nuevas versiones de la Guía de Scrum, me resultan cada vez menos útiles.

Es por esto que de ahora en más ya no usaré la guía oficial de Scrum como material de estudio sino (algunos de) los siguientes materiales:

  • El artículo «Scrum Development Process» de Ken Schwaber de los años 90
  • El libro «Scrum and XP from the treches» de Henrik Kniberg
  • El resumen de Scrum de mi libro «Construcción de Software»

¿Qué es la Ingeniería de Software Continua?

La ingeniería de Software «tradicional» de la que venimos hablando desde los años 60′, que está descripta en los libros clásicos de la disciplina (Presmann, Sommervielle, etc), incluso la descripta en el cuerpo de conocimiento (SWEBoK) no trata las cuestiones relacionadas a la puesta en producción y la operación. Estas cuestiones, que en los últimos 15 años han tomado cada vez más relevancia debido al rol protagónico que ha tomado en software en el negocio, han sido resueltas en los contextos industriales con un conjunto de prácticas que se han englobado bajo lo conocido DevOps y SRE.

La Ingeniería de Software Continua es el nombre «formal» que se le ha dado en la academia a la inclusión de las prácticas DevOps y SRE en la Ingeniería de Software

Dicho de otra forma y de manera simplificada podría decir:

Ingeniería de Software continua = Ingeniería de Software (tradicional) + DevOps/SRE

Materia itinerante: Ingeniería de Software Continua

ingeniería de software continua

Ya voy por la tercera semana del curso de Ingeniería de Software Continua en Exactas y estoy convencido que la experiencia es complemente replicable en otras instituciones. Paso a explicar.

Esta materia la estoy dictando en calidad de Profesor Invitado, la facultad me contrata por tres meses para el dictado de la materia por única vez. La materia es ofrecida a lo alumnos como una materia optativa. El principal desafió que veía en el dictado de la materia estaba dado por el hecho de «venir de afuera» a dictar una materia sin saber el conocimiento con el que los alumnos llegarían a cursar la materia. Obviamente pude poner una restricción de correlatividades para mitigar la situación, pero esa correlatividad la determiné a partir de leer el plan de estudios. Pero muchas veces hay un gap entre lo que dice el plan en teoría y lo que encontramos en la realidad. No porque no se enseñe lo que dice el plan, sino porque en ocasiones no todo lo que el docente pretende enseñar termina siendo aprendido. A su vez los planes de estudio solo mencionan una lista de contenidos mínimos y queda a criterio de cada docente el tiempo y profundidad dedicado a cada tema.

Mi descubrimiento al cabo de estas 3 semanas de clase es que logré estructurar el curso de forma tal de bajar la dependencia con materias anteriores. Esto me lleva a intentar replicar esta experiencia de Profesor invitado en otras instituciones. A partir de esto estoy en la búsqueda de instituciones que quieran tenerme como profesor invitado para dictar el curso de Ingeniería de Software Continua. Más aún, podría dictar la materia en conjunto con un profesor de la institución de forma tal que ese profesor pueda seguir dictando la materia luego de mi visita. Mi motivación para hacer esto pasa por validar los materiales y metodología de enseñanza en diversos contextos.

Dicho todo esto, invito a aquellas instituciones que estén interesadas en hacer esta experiencia a que me contacten por aquí para ver si podemos trabajar en conjunto (y pueden ser instituciones de cualquier provincia/país). Aquí pueden ver el programa de la materia.

Preparando Ingeniería de Software Continua @ UBA-Exactas

Hace un tiempo comenté de esta materia que voy a estar dictando en carácter de Profesor Invitado. Pues bien, estoy empezando a ultimar detalles.

En primer lugar la materia la estaré dictando los días miércoles en el horario de 15 a 18. Será en principalmente en modalidad presencial pero con un esquema de aula extendida y algunas clases en modalidad online.En segundo lugar, Francia (perdón, sé que esto me quita seriedad pero no pude contenerme, jajajaja).

El próximo miércoles 19 de Abril a las 16:00 hs. estaré haciendo una charla de presentación de la materia para potenciales estudiantes interesad@s en cursarla. El objetivo de esta charla es básicamente setear expectativas tanto de quienes vayan a cursar la materia como también del equipo docente. O sea, me parece importante que los alumnos sepan antes de anotarse los temas que vamos a estudiar, la propuesta didáctica, mecanismo de evaluación y dedicación requerida. si bien toda esta información podría compartirla en texto, me parece importante poder la dar la chance de hablarlo en vivo y atender inquietudes de los interesados. Al mismo tiempo, como docente, quiero saber la cantidad aproximada de estudiantes que cursarán la materia pues ello podría llevarme a cambiar algunas cuestiones (no es lo mismo un curso para 6 estudiantes que uno para 20). De hecho, si hubiera muy pocos inscriptos (menos de 5) debido al horario de cursada, podría ver de analizar alguna alternativa horaria.

Temas centrales de la enseñanza de la Ingeniería de Software

La facultad de Ingeniería de Universidad de Buenos ofrece dos carreras en el área de sistemas: Ingeniería en Informática y Licenciatura en Análisis de Sistemas. Son dos carreras distintas en el sentido que la licenciatura no es un paso intermedio de la ingeniería. Pero obviamente hay ciertas materias que son «compartidas» por ambas carreras, típicamente las materias de algoritmia, estructura de datos, sistemas operativos y algunas materias de ciencia básica.

En mí época de alumno (allá por comienzos del siglo) ambas carreras compartían dos materias de ingeniería de software que se llamaban: Análisis de Información y Técnicas de Diseño. Tal como los nombres lo sugieren, una estaba centrada en cuestiones de requisitos y la otra en cuestiones de diseño y ambas se cursaban secuencialmente. En el año 2015 la licenciatura modificó su plan de estudio y entre otras cuestiones cambio estas materias reemplazándolas por Métodos y Modelos de la Ingeniería de Software 1 y 2 (comúnmente conocidas como MeMo1 y MeMo2). Por su parte la ingeniería continua aún hoy en día con las mismas dos materias que cursé yo hace 20 años.

Las dos nuevas materias introducidas por la licenciatura están pensadas en línea con la forma en que se desarrolla el software actualmente: de manera iterativa e incremental. Esto implica que en ambas materias se estudia «lo mismo» con distinto pero con distinto foco/profundidad. Ambas materias cubren las distintas actividades del desarrollo de software (requisitos, análisis, diseño, gestión, programación, prueba, etc, etc).

La primera materia (MeMo1) tiene más foco en las primeras actividades del proceso de desarrollo pero cubriendo también cuestiones de diseño, programación y despliegue. La segunda materia (MeMo2) tiene más foco en las cuestiones «del tramo final» incluyendo programación testing, gestión de ambientes y despliegues. Obviamente que hay cierta superposición teórica de temas y es intencional: cuestiones que en una materia tal vez se ven en solo teoría en la otra se ven en la práctica.

A partir de la iniciativa de la Facultad de Ingeniería de rehacer los planes de estudio de todas las carreras, junto a Carlos Fontela y Sergio Villagra comenzamos a trabajar en un propuesta para la enseñanza de la Ingeniería de Software de cara a determinar una estrategia unificada para las 2 carreras. Dado que ambas carreras tienen un perfil distinto, el desafío estaba en determinar el núcleo mínimo común para ambas carreras permitiendo que luego cada carrera acorde a su perfil pueda profundizar contenidos/materias adicionales según considere necesario. En lo que resta de este artículo voy a compartir algunos de los puntos que me parecen más importantes de la propuesta en la que trabajamos.

Antes de hablar de potenciales materias y sus contenidos, hay 2 premisas que tomamos como puntos de partida:

  1. Hay contenidos de ingeniería de software que deben ser abordados en forma temprana y transversalmente en todo el plan de estudio. Ejemplos de esto son prueba unitaria automatizada y versionado.
  2. La ingeniería de software debe cubrir todo el proceso de desarrollo, desde la formulación de la idea hasta la puesta en producción. Lo primero es algo muy aceptado y muy presente en la bibliografía, podríamos incluso llamarlo Ingeniería de Requisitos. Lo segundo es algo un poco más polémico y menos habitual en la academia pues incluye cuestiones como despliegues, ambientes, infraestructura y hasta algunas cuestiones operación, lo que comúnmente se engloba bajo el término «DevOps».

Continuará….

Libro: Modern Software Engineering

Hace un par de semanas terminé de leer este libro escribo por David Farley. Me gustó. Mucho. Ofrece fundamentos acompañados con ejemplos concretos, teoría y práctica muy bien combinada. Industria y academia complementadas en la medida justa.

Por momentos el libro se torna bastante filosófico y a continuación baja el nivel de abstracción a cuestiones muy concretas. Son muy pocos los libros que visto haciendo oscilación. Al compararlo con otro libros que llevan el término «software engineering» como los clásicos de Pressman (o Sommerville), siento que algunos de los dos tiene un título incorrecto.

Tal vez el hecho de que el libro me haya gustado tanto esté levemente influenciado porque describe las cuestiones que intento transmitir en mis materias, ¡ja!

Sin embargo, no es un libro que utilizaría para una materia introductoria de Ingeniería de Software, creo que para poder sacarle buen provecho y poder seguir algunos los argumentos es necesario ya tener asimiladas ciertas cuestiones fundamentales de la disciplina.