Ingenieria de software: ¿existe tal cosa?

¡Que pregunta! Se podrán imaginar que siendo profesor de una materia con este nombre mi respuesta es sí.

Pero no todo el mundo piensa lo mismo. Una de las personas que cuestiona la existencia de dicha disciplina no es más ni menos que David Parnas, quien el pasado octubre publicó un artículo titulado: «Software Engineering – Missing in Action: A Personal Perspective». En dicho artículo Parnas repasa brevemente el surgimiento del término ingeniería de software y expone ciertas razones por la cuales duda de que el desarrollo de software tenga el caracter de ingenieria. El artículo me resultó por demás interesante, ya que también toca a la pasada cuestiones como ingenieria vs. ciencia, la estructura de la profesión y la educación del profesional del software.

Sumando a este argumento, mi colega Gabriel Falcone me compartió hace un tiempo este video de la conferencia Scotland Ruby, donde disertante afirma:

«Software engineering as it is taught in universities simply does not work. It does not produce software systems of high quality, and it does not produce them for low cost. Sometimes, even when practiced rigorously, it does not produce systems at all. That is odd, because in every other field, the term engineering  is reserved for methods that work.»

¡uffff! Duro, pero bastante realista. En realidad si uno mira el video completo (unos 45 minutos), se encuentra que en realidad el punto de este individuo es que lo que realmente funciona para construir software son los métodos ágiles y que mucha gente tilda a los métodos ágiles como «anti-ingenieriles». A pesar de no compartir algunos de los puntos expuestos en este video, la sesión me gustó y la recomiendo (de hecho he sacado algunos bullets para mis clases).

Personalmente creo que existe la ingenieria de software como disciplina, pero con una concepción distinta a la que le dan muchas universidades (en general a nivel académico hay cierta «creencia» de que por llamarse ingenieria debe tener una fuerte carga de ciencia básica,cosa que no comparto). Al mismo tiempo creo que es aún una disciplina joven ya que las prácticas/métodos que aumentan la probalidad de éxito de los proyectos – y que por ende podrian poner a la ingenieria de software a la altura de las otras ingenierias- recien se han comenzado a popularizar en los últimos 5 años.

Planes de estudio de informática, RedUNCI y ConFeDI

Por estos dias me encuentro trabajando con miembros de las comisiones curriculares de las carreras de informática de FIUBA preparando una propuesta para ser presentada en el contexto de la iniciativa de unificación de las carreras de informática llevado adelante por RedUNCI y ConFeDI.

RedUNCI (es la Red de Universidad Nacionales con Carreras de Informática) y ConFeDI (Consejo Federal de Decanos de Ingeniería) son dos instituciones argentinas referentes en lo que hace a informática (la primera) e ingeniería (la segunda).

Resulta que en 2009, el Ministerio de Educación decidió «estandarizar» las carreras de informática para lo cual convocó a estas dos instituciones. El resultado fue la resolución 786/2009 la cual define 5 carreras en el área de informática:

  1. Licenciatura en ciencias de la computación
  2. Licenciatura en sistemas
  3. Licenciatura en informática
  4. Ingeniería en Informatica/sistemas
  5. Ingeniería en Computación
La mencionada resolución define las incumbencias y ciertos contenidos curriculares mínimos (y de bastante  alto nivel) de cada carrera. Para la definición de las licenciaturas se tomó como referencia la visión de la RedUNCI mientras que para las ingenierias se tomo como referencia ConFeDI. Esto llevó a que si bien en todos los casos estamos y hablando de carreras de «computación/informática/sistemas» (o pongan el nombre que les guste) hay hoy en dia diferencias incluso en los contenidos minimos. Las licenciaturas estan estructuradas en 6 áreas de conocimiento:
  1. Ciencias Básicas
  2. Teoría de la Computación
  3. Algoritmos y Lenguajes
  4. Arquitectura, Sistemas Operativos y Redes
  5. Ingeniería de Software, Bases de Datos y Sistemas de Información
  6. Aspectos Profesionales y Sociales
Al tiempo que las ingenierías están estructuradas siguiendo la filosofia del Confedi según la cual toda ingeniería se constituye de 4 áreas:
  1. Ciencias Básicas
  2. Tecnologías básicas
  3. Tecnologías aplicadas
  4. Complementaria
Esto plantea un inconveniente no menor a instituciones como FIUBA que dictan licenciatura e ingeniería.
Es en parte por ello que en la actualidad RedUNCI y ConFeDI estan liderando una iniciativa para identificar los contenidos mínimos comunes para todas las carreras de informática.
En linea con todo esto, FUIBA ha elaborado en los últimos años nuevos planes de estudio tanto para la licenciatura y la ingenieria. Estos nuevos planes de estudio (que aún no estan vigentes) fueron elaborados por las correspondientes comisiones curriculares en forma independiente.
A continuación les dejo los links a la resolución del ministerio y las propuestas de nuevos planes de informática de FIUBA.

Resolución  786/2009 del Ministerio de Educación.

Propuesta de Nuevo Plan de estudios Ingeniería Informática

Propuesta de Nuevo plan de estudios Licenciatura en Análisis de Sistemas

Particularidades de UNQ / TPI

La tecnicatura en programación de UNQ, cuenta con una lista de correo en la que están suscriptos todos los alumnos y docentes de la carrera. Esto no es gran cosa, pero lo que sí me parece una particularidad interesante es que todos los comienzos de cuatrimestre el director de la carrera (Pablo Martinez López, mejor conocido como Fidel)  manda un mail de bienvenida que siempre comienza una frase de una Pink Floyd

«Welcome, my son,  Welcome to the machine.», Welcome to the Machine – Wish You Were Here, Pink Floyd

Esta frase precede a la presentación del director y a una lista de consejos/explicaciones enfocadas en los ingresantes, pero que siempre vienen bien para todos recordar. Este cuatrimestre la citada frase resulta aún más apropiada dada visita de Roger Water. Al mismo tiempo este cuatrimestre Fidel decidió agregar una segunda frase al mail de bienvenida, la cual me parece excelente:

«A fool’s brain digests philosophy into folly, science into superstition, and art into pedantry. Hence University education.», George Bernard Shaw, Irish dramatist & socialist (1856 – 1950)

Lo cual en castellano sería algo como: «El cerebro de un tonto convierte filosofía en tonterías, la ciencia en superstición y el arte en pedantería. Por eso una educación universitaria.»

Say no more.

Relevamiento de la enseñanza de POO

Hace un par de dias comencé a trabajar en un artículo sobre la enseñanza de la programación orientada a objetos. En particular sobre la forma de encarar la primer materia de orientación a objetos, pues en la actualidad es común que dicho tema se trate en más de una materia, pero mi foco está en la primer materia, aquella que presenta los conceptosl s fundamentales de OO (polimorfisto, ocultamiento de information, etc, etc). Como parte de este trabajo he creado una encuesta para relevar como es este tema tratado en las distintas carreras. Lo ideal hubiera sido enviar la encuesta a profesores de distintas universidades/institutos, pero lamentablemente no tengo contacto en todas las universidades, con lo cual se me ocurrió hace una encuestas para ser llenada por los alumnos, contestando como fue que cada uno aprendio POO. Es cierto que de este modo seguramente obtenga varias respuestas sobre una misma institución, por eso es fundamental que quien complete la encuesta indique su institución para asi poder filtrar la información.

Por eso les pido a los lectores si pueden tomarse 2 minutos para completar las 6 preguntas de la encuesta y difundirla entre sus conocidos. Los links son:

Muchas gracias!

Planificando Ing. de Software 2012

En base a la experiencia del último cuatrimestre, el feedback de los alumnos y algunas ideas que vengo trabajando desde hace ya un tiempo, este primer cuatrimestre de 2012 viene con varios cambios.

En primer lugar voy a dar un enfoque más práctico, o sea, vamos a programar, aunque aún no decido si Java, Smalltalk o Ruby (creo que es algo que puedo dejar decidir a los alumnos).

En segundo lugar voy a hacer algunos cambios en la profundidad de los contenidos: más agile, más calidad/testing y menos UP. De hecho no quiero dedicar más de 3 clases a UP y posiblemente algún trabajo individual (un questionario posiblemente).

En tercer lugar, pero no por ello menos importante, voy a dictar la materia en forma iterativa. Esto es un tema que he hablado con colegas en reiteradas ocaciones: bien probado está que el desarrollo iterativo es una de las prácticas de ingeniería de software más aceptadas y utilizadas en la actualidad, pero sin embargo la ingeniería de software sigue enseñanadose en forma secuencial. Entonces mi idea es dividir la materia en iteraciones, entre 4 y 6. Cada una de ellas time-boxed, con un entregable concreto. En cada iteración veremos todas las actividades del proceso de desarrollo, profundizando un poco más en cada iteración, al final de cada iteración tendremos un entregable de valor.

La excepción será primer iteración, que será más corta y en la que nos centraremos (al igual que el cuatrimestre pasado) en entender las particularidades de la disciplina. El entregable de esta primer iteración será el setup del portfolio individual (en futuros post voy a desarrollar este punto).

Cada una de las siguientes iteraciones tendrá un ejecutable de código con sus correspondientes pruebas, algunas de las cuales serán especificadas como parte de la consigna y otras deberán ser diseñadas por los alumnos.

Adicionalmente a la entrega de final de iteración, tendremos también algunas entregas intermedias.

Otro de los cambios será la utilización de un build server para verificación de los entregables.

También tengo la intención de utilizar una plataforma virtual, la cual espero nos permita tener una mejor dinámica de intercambio en el curso. Ya realicé el pedido al departamento con lo cual solo me queda esperar que acepten la petición, pues en general la plataforma virtual está solo disponible para la materias de las carreras virtuales.

Otro agregado de color que pienso hacer el tema «ejercicio profesional». Con este nombre pretendo englobar varios consejos para el desempeño profesional como por ejemplo: como armar un CV, como prepararse para una entrevista laboral, etc, etc.

Al mismo tiempo quiero mantener varias de las prácticas del cuatrimestre anterior como por ejemplo el envio de mail de resumen después de cada clase, la planificación y estimación de las tareas por parte de los alumnos y visibilidad contínua sobre las asistencia a clase. Este última  práctica tiene que ver con que si un alumno piensa faltar a clase, debe comunicarlo previamente, el obejtivo de esto es que se acostumbren a dar visiblidad a su equipo. También voy a repetir la experiencia de invitar a profesionales de la industria a contar sus experiencias (para este cuatrimestre ya tengo el compromiso de Manuel Trejo de Kinetia)

Por último estoy evaluando distintas alternativas tecnológicas para intentar grabar las clases, pero no estoy seguro que pueda implementar esto.

Si algún futuro alumno lee esto puede que se pregunte ¿pero cuanto voy a tener que trabajar para aprobar esta materia? Recuerdo que una vez un profesor me dijo que para hacer una carrera univesitaria hay que dedicar al menos la misma cantidad de horas de estudio que la cantidad de horas de clase. Yo no creo que para esta materia sea necesario tanto. Considerando que tenemos entre aproximadamente 5 horas netas de clase, estimo que con dedicar unas 3 horas semanales extra clase, deberia ser suficiente. Pero ojo, hablo de 3 horas netas, podes parate para ir al baño, tomar un vaso de agua o preparar el mate, pero nada de mail, ni chat, ni SMS, ni facebook, son 3 horas estudio posta.

Las clases empiezan en dos semanas y tengo muchas expectativas. Ya les iré contando más a medida que avance.

Interesante curso de Ingenieria de Software

La semana pasada empecé un curso online ofrecido por la Universidad de Standford en forma gratuita. El nombre del curso es Software Engineering for Software as a Service. El mismo tiene una duración de 5 semanas y es dictado por dos profesores de Berkeley: Armando Fox y Dave Patterson. El curso tiene foco en métodos agiles y la parte técnica está basada en Ruby on Rails.

La dinámica del curso consiste en clases teóricas en formato de video de 10 minutos de duración en promedio.  Al mismo tiempo hay un libro (pago, cuesta unos 10 dólares) escrito por los profesores del curso. La plataforma onlien también cuenta varios foros de discusión. En cuanto al aspecto práctico, hay 4 tareas de programación con un timeframe de 1 semana y por otro lado tambien hay 3 Quiz a lo largo de todo el curso.Según los profesores, alumnos anteriores han reportado una carga de trabajo semanal de entre 5 y 10 horas para completar el curso.

Luego de completar la primer semana, estoy muy entusiasmado, hasta el momento nada nuevo para mi, pero a pesar de ello me gusta la forma en que estan presentados los temas.

No estoy seguro si aún es posible sumarse al curso, pero de todas formas los video son de acceso público.

Les dejo el link al curso: https://www.coursera.org/saas.

¡Que lo disfruten!

Acceso a ACM para gente Fiuba

ACM (Association for Computing Machinery) es una organización que nuclea profesionales y científicos de la computación y «colabora»* en la difusión de conocimiento en este área. En este sentido la ACM tiene una seria de publicaciones periódicas entre las que se destaca la revista Communications of ACM, que ha sido portadora de famosos artículos como GoTo Statement Considered Harmful de Dijkstra.

La buena noticia es que ahora los alumnos de fiuba pueden acceder a los recursos de ACM en forma totalmente gratuita. Para ello simplemente tienen que configurar sus exploradores para usar el proxy de revistas de fiuba**. Para conectar a este proxy es necesario contar con una cuenta de correo de fiuba (@fi.uba.ar).

¡Que lo disfruten!

* Colabora es una forma de decir, pues si bien ACM concentra muchas publicaciones en la denominada ACM Digital Library, el acceso a la misma es restringido.

** No publico la dirección del proxy por cuestiones de seguridad, los interesados pueden contactarme en privado o bien contactar directamente a soporte Fiuba.

Eventos (académicos) 2012

Durante el año pasado mientras estudiaba para las materias que cursé en la maestría de la UNLP, se me ocurrieron dos artículos que me gustaría desarrollar para presentar en algún congreso y casualmente recien empezado el año tengo tres posibles eventos donde presentarlos.

El primero es ArgenCon, organizado por la sección argentina de IEEE. El mismo se desarrollará del 9 al 13 de Junio  en Córdoba. La fecha límite para el envío de trabajos es el 15 de Marzo.

El segundo evento es la edición 41 de las JAIIO, este año organizadas en conjunto con la UNLP entre el 27 y 31 de Agosto. La convocatoria de trabajos trabajos esta abierta hasta el 30 de Abril.

Finalmente el tercer evento que tengo en el radar es Foro Mundial de Educación en Ingenieria (WEEF: World Engineering Education Forum). Sinceramente nunca había nunca había escuchado hablar de este evento (tal vez porque no siempre se realiza en Argentina). El mismo será organizado por UTN y se desarrollará en Buenos Aires del 15 al 18 de Octubre. La fecha límite para el envio de trabajo es el 2 de Marzo.

Volviendo a los trabajos que tengo en mente, el primero es sobre el enfoque que estoy utilizando en UNQ para dictar ingeniería de software. El otro es sobre algunas ideas que he venido madurando para la enseñanza de la programación en los cursos introductorios de programación.

Fin de mi primer cuatrimestre en Ingeniería de Software

Finalmente el lunes pasado cerramos la materia. Entregué las notas he hicimos una retrospectiva. Si bien la materia no salió exactamente como la había planeado, estoy conforme con el resultado. Creo que logré transmitir conceptos importantes y algunas herramientas concretas para el desarrollo profesional, la organización personal y el trabajo en equipo. Comencé el cuatrimestre con 15 alumnos y lo terminé con 12. Por lo que pude hablar con algunos alumnos, aquellos que dejaron la materia lo hicieron principalmente porque tenían otra expectativa respecto de la dedicación que la materia requería. Incluso los alumnos que completaron la materia, también coincidieron en este punto. Esto me parece totalmente entendible, pues hubo efectivamente un cambio de docente y con el ello también un cambio de dinámica. Varios alumnos venian con la expectativa de una materia más tradicional: asistir a clase, realizar un serie de trabajos prácticos y rendir un examen. En lugar de ello se encontraron con tareas semanales, muchas lecturas y varios entregables. Todo esto de forma constante a lo largo de todo el cuatrimestre. Y fue explícitamente así, pues a mi entender los proyectos se hacen día a día TODOS los días, de forma constante. Al mismo tiempo les pedí a los alumnos que dieran visibilidad constante y temprana, avisando cada vez que iban a faltar a clase o llegar tarde. Los alumnos que completaron la materia, comprendieron el objetivo de este pedido y reconocieron su importancia. La importancia no radica en avisar si faltan a la materia, sino en generar el hábito, hacer que los alumnos se acostumbren a dar visibilidad. En el contexto de toda actividad uno puede sufrir atrasos, imprevistos, etc, pero lo que NO puede hacer bajo ningún punto de vista es no dar visibilidad.

En fin, por ahora, esto es todo, más adelante comentaré algunas conclusiones de la retrospectiva.

Finalmente les dejo la foto de mi primera promoción de Ingeniería de Software, ¡felicitaciones estudiantes! (y gracias por aguantarme)

Los alumnos no dejan de sorprenderme

Al igual que todos los cuatrimestres, siempre hay algún alumno creativo que me sorprende en uno u otro sentido por sus ocurrencias. Esto me ha motivado a empezar a compartir esas situaciones tan llamativas,  aquí va la primera.

Comienzo con un poco de contexto. Resulta que en TDA1 el régimen de cursada para regularizar la materia es: aprobar los 3 trabajos prácticos grupales y defenderlos individualmente al final del cuatrimestre en un interrogatorio oral con la titular de la materia. Luego de aprobar el interrogatorio la materia queda regularizada y los alumnos pueden rendir el examen integrador. Durante la cursada no se toma ningún parcial y la asistencia a clase no es obligatoria, pero más allá de eso, los alumnos deben estar al tanto de los que se da en clase. El solo hecho de que la materia no tenga examen parcial, es un atractivo interesante para muchos alumnos, que se anotan en la materia, pero al mismo tiempo es un arma de doble filo, pues muchos no asisten a clase y luego no pueden resolver los TPs en tiempo y forma (o directamente hacen cualquier cosa) y terminan perdiendo la materia.

En este contexto, tres semanas antes de finalizar la cursada, un alumno enviá un mail diciendo (textual):

[…]desde hace un tiempo que se me complicó ir a las clases por problemas de trabajo. Aun tengo inteciones de rendir el examen y preparar algun tema para la monografia. El tema lo puedo proponer yo ? o hay alguna lista de opciones? […]

Si leyeron mi introducción con atención, seguramente ustedes estarán diciendo: «Pero en el régimen de cursada no mencionaste nada de una monografia», claro, porque no la hay. Resulta que este alumno, no entregó ninguno de los TPs, y hasta donde recuerdo no lo he visto en las clases prácticas. Pinta como que el alumno vino a alguna de las primeras clases, confirmó que no había parcial y asumió que había que hacer una monografía para regularizar la cursada. Sinceramente no lo sé, tal vez sea que el alumno se confundió de materia, en fin, una anécdota más de mi vida como docente.