¡Que buen libro (pero no entendí el final)!

Puede que alguna vez me haya pasado con una pelicula, pero definitivamente nunca me habia pasado con un libro.

El libro en cuestión se llama Acerca de Roederer y su autor es Guillermo Martinez, un matemático argentino también autor de la excelente novela Crímenes imperceptibles (llevada al cine por Alex de la Iglesia bajo el título Los crímines de Oxford).

Hacia ya más de un año que me habian regalado este libro y yo ni siquiera lo había puesto en mi lista de prioridades de lectura, pero justo se dió que terminé de leer Hechicero y no tenia otro libro de dimensiones portables para seguir leyendo, asi que lo agarré. Las primeras 20 páginas no me resultaron atrapantes (el libro tiene en total 117 páginas), pero de a poco me fue atrapando y cuando habia llegado ese punto de adicción que suelen desperta los buenos libros, ¡chan! se acabó. Era obvio que el final estaba cerca pues faltaban pocas páginas, pero dado el desarrollo de la historia, yo no divisa un final. Tal vez sea por eso que el final me desconcertó. Me pareció un final muy abierto, o tal vez sea que me faltó atar algunos cabos para verdaderamente entenderlo. En fin, más allá de este curioso detalle el libro me gustó.

Aventura gráfica made in Argentina (ex-FIUBAs)

La semana pasada me llego un mail de compañero de Francisco Saenz contandome del lanzamiento de Reversion, una aventura gráfica desarrollada por un conjunto de alumnos de Fiuba: Francisco (mi compañero), Fernando y Facundo.

Estos tres muchachos se conocieron en su época de estudiantes en Fiuba, luego de un par de años fundaron la empresa 3F Soluciones en el contexto de la cual desarrollaron este juego. El año pasado, Francisco y Fernando estuvieron de invitados en mi materia en UNQ donde contaron sobre el surgimiento de la empresa, su forma de trabajo y el proceso de desarrollo de este juego. Todos quedamos facinados con la presentación y muy expectantes al lanzamiento del juego que se llamaria Reversion.

Bien, finalmente el momento llegó, desde hace unos está disponible para descarga el primer capítulo de Reversion. Tal vez lo más llamativo del juego es que está ambientado en Argentina y pueden reconocerse en las distintas pantallas escenas inconfundibles de pasajes de Buenos Aires.

Dado que los juegos no son mi fuerte, les dejo el link al anuncio escrito por los creadores y para quienes les interes el backstage, les recomiendo ver el blog que escribe el equipo de desarrollo.

Mis felicitaciones al equipo de 3F y ojala les vaya muy bien con esta iniciativa, chau, ¡ me voy a jugar!

Primer cuatrimestre 2012: ¡largamos!

Asi es, largamos y casualmente en esta ocasión el cuatrimestre comenzó al mismo tiempo en FIUBA y en UNQ. Curiosamente la mi mátricula de alumnos se invirtió respecto del cuatrimestre pasado: mientras que en Ing. de Software (UNQ) tengo menos alumnos (pasé de 15 a 7) en Algo3 (FIUBA) tenemos alrededor de 50 alumnos (casi el doble que el cuatrimestre anterior).

El comienzo fue bastante movido, de hecho las clases comenzaron la semana pasada y recien ahora me pude hacer un tiempo para escribir un par de líneas. Algo interesante es que en ambas materias noto una mejora respecto del cuatrimestre anterior:

  • En Algo3, a pesar de tener más alumnos, las cantidad de consultas sobre el TP0 se redujeron notablemente. Lo cual a mi entender tiene que ver con 2 cuestiones: el enunciado del TP fue menos ambiguo y al mismo tiempo las explicaciones en clase previas a la entrega del TP0 fueron lo muy claras.
  • En Ing. de software, me asignaron un aula ¡excelente!: pizarra blanca enorme, mesas altas con ruenas y banquetas. Por otro lado tengo un alumno del  cuatrimestre pasado que me va a estar dando una mano como colaborador, lo cual espero nos permita tener un mejor seguimiento de los alumnos.

Si bien las materias tratan sobre distintos tópicos, en ambos casos estamos poniendo un importante énfasis en las pruebas: TDD, BDD, etc.

Otro punto común es que en ambos casos vamos a estar utilizando como herramienta de apoyo la plataforma Moodle.

¿Alguna vez te preguntaste como está hecho Google Docs?

Yo me lo he preguntado en varias ocasiones y particularmente una de las cosas que más me cautiva en la edición en simultáneo en tiempo real. A ciencia cierta desconozco como lo hace Google, pero durante las últimas semanas un par de compañeros de Southworks liderados por MatiasW estan trabajando en una herramienta que también cuenta con esta capacidad.

Se trata de MarkdownR, un editor colaborativo en tiempo real de markdown desarrollado con share.js. En verdad vale la pena tomarse unos minutos para darle una mirada, pueden accederlo aquí: http://markdownr.cloudapp.net/.

Y para los curiosos, el código está disponible en GitHub: https://github.com/southworksinc/markdownR/.

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!

Build Server Gratuito en la nube: TravisCI

Ayer descubrí TravisCI, un build server gratuito y open souce para proyectos open source. Si bien no tiene en principio todos los features de Jenkins (en cuanto a reportes, notificaciones, etc, etc) cumple bien su trabajo de build server.

Trabaja integrado con GitHub y para disparar los build utiliza un hook the Github. Ofrece soporte para los siguientes lenguajes: Clojure, Erlang, Groovy, Java, Node.js, Perl, PHP, Python, Ruby y Scala.

Lo probé con mi proyecto SWTFederation y la verdad que me sorprendió lo simple que fue la configuración.

Espero les resulte útil.

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.