Notas sobre los trabajos finales de carrera en informática/computación

Notas sobre los trabajos finales de carrera en informática/computación

Durante este cuatrimestre he recibido varias consultas sobre trabajo finales de carrera tanto en FIUBA como en UNTREF.

En UNTreF los alumnos deben hacer un Trabajo final Integrador mientras en FIUBA los alumnos pueden optar por Trabajo Profesional o una Tesis. En este artículo quiero centrarme en el Trabajo Profesional de FIUBA que es equivalente al Trabajo Final Integrador de UNTreF. En otro post trataré el tema de la tesis.

Antes que nada aclaro: lo que escribo aquí no es información oficial de ninguna carrera. Esto es un resumen Es información que yo he recopilado a partir de charlas informales con otro

Algunas cuestiones generales sobre este TFI/TP son:

  • Puede hacerse en forma individual o grupal.
  • Se espera que insuma un esfuerzo aproximado de unas 200 horas por estudiante.
  • Es necesario un profesor que dirija el trabajo.
  • El estudiante debe presentar una propuesta formal con el aval de su director.
  • No existe una lista de temas para el trabajo, en ocasiones los profesores/directores tienen algunas propuestas.
  • Se espera que el trabajo integre los contenidos y habilidades adquiridas durante la carrera.
  • El trabajo no es un trabajo práctico de una materia, es un trabajo final de carrera con lo cual las complejidad y alcance deberían ser mayores a los de un trabajo práctico de una materia.
  • Típicamente el trabajo consiste en algún tipo de desarrollo. No es mandatorio que el desarrollo sea alto totalmente nuevo, la novedad o desafío puede estar en la forma de resolución, en las tecnologías utilizadas o algunas otra cuestión de índole ingenieril.
  • Una fuente interesante de ideas que suelo recomendar es el Technology Radar que publica periódicamente la gente de Thoughtworks

Espero estas líneas resulten de utilidad.

Trabajos finales en UNTreF Computación

Algunas carreras de grado requieren que los alumnos realicen un trabajo final para completar su formación. Dependiendo de la carrera y la institución ese trabajo final recibe distintos nombres: tesis, tesina, trabajo final integrador, etc, etc.

En la carrera de Ingeniería en Computación de UNTreF los alumnos tienen que hacer un trabajo final integrador. Como parte del plan de estudios hay una materia en la que se orienta/prepara al alumno para realizar dicho trabajo, pero la realización del trabajo no es parte de esta materia. En el mejor de los casos, al finalizar la materia los alumnos tienen planteada la propuesta formal para realizar el trabajo final. La realización del trabajo requiere de la dirección de un profesor. Una vez terminado el trabajo un jurado de 3 profesores evalúan lo realizado.

Tiempo atrás tuve el honor el de ser parte de jurado de la primera camada de egresados de la mencionada carrera de UNTreF. Recientemente recibí un par de consultas de alumnos por la posibilidad de ser su director. Ello me disparó la idea de escribir este post para compartir algunas generalidades de mi visión y estrategia para la realización de trabajos finales.

En primer lugar y en términos reglamentarios el trabajo final debe representar una carga de unas ~200 horas. Esto es equivalente a una materia intensa: (6 horas semanales de cursada + 6 horas de estudio extra-clase) * 16 semanas. Lo cual significa que trabajando de forma ordenada y constante, el trabajo puede completarse en 1 cuatrimestre. Al mismo tiempo para que esto sea factible, el trabajo debería ser planteado en términos de esfuerzo/calendario fijo, dejando el alcance con cierto grado de variabilidad.

Se espera que en el desarrollo de este trabajo el alumno aplique de forma integral los conocimientos obtenidos durante la carrera. El tema debe ser acordado entre el alumno y el director. Yo personalmente tengo ciertas restricciones de temas, o sea, no dirijo trabajos de cualquier temática y al mismo tiempo siempre algunas ideas de posibles temas que me gustaría dirigir.

Adicionalmente, espero que los alumnos que hagan su trabajo final bajo mi dirección lo presenten en una conferencia académica como JAIIO-EST o CONAIISI.

Sobre los trabajos finales de carrera

Reciente algunos alumnos vinieron a consultarme para que los dirija en la realización de sus trabajos finales de carrera. Luego de repetir los mismo por tercera vez decidí ponerlo por escrito.

Mi condición para dirigir un trabajo es que el desarrollo del mismo se haga bajo las siguientes condiciones:

  • El trabajo se plantea como un proyecto de alcance variable, esfuerzo fijo y calendario ajustable (pero no mucho). El esfuerzo está dado por lo que determina el reglamento de la institución. Respecto del calendario, la institución suele poner un tiempo límite pero en general es mucho mayor del necesario. Adicionalmente mi idea de calendario es que el trabajo esté listo en un plazo máximo de medio año.
  • No dirijo trabajos de alumnos que no hayan sido alumnos en alguna de mis materias. El trabajo final es un proyecto “one-shot”, y la dupla alumno-director es en cierto modo como un equipo.  Resultaría muy arriesgado para un proyecto one-shot formar equipo con gente que no se conoce previamente.
  • Desde el punto de vista metodológico trabajamos a lo XP con iteraciones semanales.
  • A partir del momento que se inicia el desarrollo, se trabaja a un ritmo constante durante un período de ~16 semanas (un cuatrimestre).
  • Previo al comienzo de desarrollo hay un fase de setup/envisioning de aproximadamente 1 mes (a esfuerzo variable)
  • Una vez completado el desarrollo, hay un período de ~1 mes para terminar de redondear las cuestiones formales para la presentación del trabajo.

Para empezar recomiendo a los alumnos crear un GoogleDoc y empezar a escribir la propuesta de trabajo, no toda la propuesta pero si la parte de lo que sería la visión de proyecto.

Trabajos finales de carrera: como plantearlos

Muchas carreras de informática tienen como parte del plan de estudios la realización un trabajo final. En FIUBA se le llama Trabajo Profesional, mientras que en UNQ se le llama Trabajo de Inserción Profesional.
En general este trabajo final (por usar un nombre genérico) consiste en realizar lo que podria ser un trabajo de campo acorde al perfil del futuro egresado. He conocido muchos casos en los que la realización de este trabajo se estira en el tiempo mucho más de lo que debiera. Es por ello que he decido escribir este artículo para compartir algunas recomendaciones.
El trabajo final es un proyecto y como todo proyecto tiene 3 variables:
  • Esfuerzo: cantidad de horas que vas a trabajar
  • Calendario: cuanto tiempo calendario lleva desde el comienzo hasta que se termina
  • Alcance: el tamaño de lo que vas a hacer
En todo proyecto, el cliente fija una variable, el equipo de desarrollo fija otra y finalmente la tercera se va regulando. En ocasiones la gente quiere fijar las 3 variables y las cosas terminan generalmente mal.
Para el caso del trabajo final tenemos:
  • Esfuerzo: ya viene preestablecido por la Universidad, para el caso de UNQ/TPI son entre 100 y 180 horas.
  • Calendario: para el caso de UNQ/TPI, suena razonable un calendario de entre 4 y 6 meses.
  • Alcance: aquí está la clave, si fijas el alcance, diciendo: Quiero hacer un sistema X que tenga las funcionalidades a,b,c,,etc. sonaste, porque no sabes a ciencia cierta cuanto esfuerzo va a requerir y mucho peor si es un tema que no conoces o una tecnologia nueva. Entonces para mi la clave es definir el trabajo final de manera que el alcance sea variable. Esto requiere una atención especial al manejo de prioridades, pues aunque el alcance sea variable, uno debe asegurarse de hacer algo que entregue valor. Esta es una forma de trabajo muy utilizada en los proyectos con métodos ágiles y en general la cuestión camina bastante bien. Yo ya he dirigido trabajos en UBA usando esta estrategia y doy fe que camina.
Hagamos ahora algunas cuentas para bajar a tierra. Supongamos que yo quiero hacer mi trabajo en 6 meses, entonces, tendría:
180 horas de esfuerzo (máximo determinado por el reglamento) / 6 meses = 30 horas al mes
Lo cual si lo paso a semanas, estamos hablando de trabajar 7,5 horas por semana ¿bastante razonable no?
Algunas aclaraciones importantes:
  • Ojo #1: estas horas son horas tipo Pomodoro, nada de telefonito, mensajitos, facebook, etc, etc. Son horas que me siento a laburar y laburo. (quien cursaron Ing. de soft saben a qué me refiero)
  • Ojo #2: no todos los temas permiten definir un proyecto de alcance variable. Cuando el tema es investigar XXX, puede resultar más dificil. Pero si el tema es construir un software que haga ZZZ, entonces es muuuuyyyy factible poder trabajar con alcance variable.
  • Ojo #3: encarar un proyecto de esta forma, puede resultar un poco más demandante, dado que para cumplir con la fecha y esfuerzo planteado, es necesario tener un ritmo de trabajo constante, lo cual también requiere un involucramiento docente constante.
Estos dos mis dos centavos de aporte al tema.

Trabajos finales de carrera: mi enfoque de dirección

Como docente universitario en ocasiones me han ofrecido dirigir  o co-dirigir trabajos finales de carrera. El hecho de aceptar o no siempre está sujeto a dos cuestiones: que el tema del trabajo me resulte interesante y que los alumnos se comprometan a trabajar de acuerdo a ciertas normas entre las cuales destaco:

  1. El trabajo debe desarrollarse de forma iterativa e incremental
  2. El desarrollo debe hacerse utilizando integración continua
  3. El producto debe contar con pruebas automatizadas tanto unitarias como funcionales que provean una cobertura superior al 80%
  4. El código debe respetar los estándares de desarrollo de la tecnología utilizada
  5. El código resultante debe ser open source.
  6. A lo largo de todo el proyecto haremos reuniones (presenciales o virtuales) de seguimiento del proyecto

Estas cuestiones tienen que ver con asegurar la calidad del trabajo resultante, una cuestión que a mi parecer es una de las responsabilidades más importantes del director. Sin duda puede que haya otras técnicas/estrategias para asegurar la calidad del trabajo resultante, pero las aquí mencionadas son las que yo personalmente considero más efectivas.

Al mismo tiempo, puede que el tema del trabajo no justifique el uso de las técnicas aquí mencionadas, pero ocurre que justamente, los temas que me suelen interesar son los que sí requieren/justifican las cuestiones aquí mencionadas.

Obviamente que cada trabajo requiere una revisión de esto items, pues puede que en el contexto específico de un trabajo algunos de los ítems mencionados no tenga sentido o que al contrario, sea necesario incluir algunos ítems adicionales.

Presentación formal del sistema de corrección: SEAL

El viernes pasado Aníbal y Martín realizaron la presentación formal del sistema de corrección de trabajos de programación y con ello completaron sus estudios para el graduarse de ingenieros en informática.

El nombre formal del sistema es SEAL: Sistema de Entregas Automatizadas Libre, un nombre apropiado en el sentido que representa lo que hace el sistema, pero desde el punto de vista comercial no tiene mucha onda (ya estamos trabajando en buscar un mejor nombre).

Como suele suceder en la presentación de los trabajos finales de carrera, la mayor parte de la audiencia son familiares de los alumnos que presentan y por lo tanto es poco lo que entienden de lo que se presenta. Siendo conscientes de esto, Aníbal y Martín prepararon una presentación muy didáctica para explicar su trabajo. Básicamente utilizaron la metáfora de un viaje a la luna para explicar el desafio que para ellos representaba hacer este trabajo de fin de carrera. Personalmente me gusto mucho la presentación, respeto los tiempo, resultó entretenida y expuso de forma adecuada el trabajo realizado.

Ha sido un gusto para mi trabajar con Aníbal y Martín, espero haberles aportado al menos un granito para su formación profesional. Al mismo tiempo les agradezco por haber confiado en mi para guiarlos en el trabajo.

¡Mi felicitaciones a los flamantes ingenieros!

presentacion_seal

El material utilizado en la presentación está disponible aquí.

Sobre los trabajos finales de carrera en FIUBA

Para recibirse de ingeniero en informática en la UBA es necesario realizar un trabajo final, el cual puede ser una tesis o un trabajo profesional.

La tesis es un trabajo de investigación de caracter individual, que se realiza bajo la dirección de un profesor y que es evaluado por tres jurados entendidos en el tema de la tesis. Esta tesis es una tesis de grado y como tal no require extender la frontera de conocimiento, o sea no es necesario un aporte de transcedental a la materia en cuestión. En algunos casos este tipo de tesis suele denominarse tesina. Un esquema típico de una tesis de este nivel en un área de ingeniería podría consistir en:

  1. Caraterizar un problema
  2. Analizar las soluciones actuales (estado del arte)
  3. Proponer una solución distinta (por ejemplo utilizando una tecnologia de reciente aparición)
  4. Analizar pros y contras del nuevo enfoque propuesto.

Una particularidad de las tesis en Fiuba es que requieren que se implemente algo, o sea: hay que codear.

El trabajo profesional es la realización de un “trabajo de la vida real”.  El mismo se puede realizar de a dos alumnos y requiere la supervisión de un profesor el cual también se encarga de la evaluación del trabajo. En ocasiones los alumnos aprovechan el auspicio de sus empleadores para realizar su trabajo profesional en el contexto de su actividad laboral y de esa forma “matar dos pájaros de un tiro”.

En ambos casos es necesario presentar un anteproyecto y a partir de la fecha de aprobación del mismo, los alumnos cuentan con un periodo de un año para presentación del trabajo/tesis. Generalmente este anteproyecto suele presentarse cuando el trabajo ya cuenta con cierto grado de avance. Tradicionalmente (y en la actualidad la cuestión sigue igual) la mayoría de los alumnos opta por la realización de trabajo profesional en lugar de tesis, tal vez sea porque a simple vista genera menos incertidumbre que la realización de una tesis. O sea, la tesis es un trabajo de investigación y la carrera no nos prepara para realizar trabajo de investigación. En general al llegar al final de la carrera todo alumno tiene experiencia investigando como utilizar una herramienta o como resolver un problema técnico, pero ello es bastante distinto al trabajo requerido para realizar una tesis.

En está página se listan las tesis realizadas por los ingenieros en informática de la UBA hasta el día de hoy.

En mi caso, yo elegí hacer una tesis, pues tuve la suerte de por esas casualidades de la vida cruzarme con un tema que me inquietó y que me motivó a realizar un trabajo de investigación que luego se convirtió en mi tema de tesis (en su momento escribí al respecto).

Continuará…