Ciencias Agrarias, de la Ingeniería y de Materiales

La ciencia detrás de los programas

Un investigador del CONICET explica en qué consiste el arte de diseñar y construir software.


En el celular, en la computadora, en un marcapasos o manejando los equipos de una industria, todo está controlado por software, el eje de la 39º Conferencia Mundial de Ingeniería de Software (ICSE 2017, por su sigla en inglés), que se realizará por primera vez en Buenos Aires del 20 al 28 de mayo.

Sebastián Uchitel, investigador principal del CONICET y director del Instituto de Ciencias de la Computación (ICC, CONICET-UBA) es el responsable de su organización. En esta entrevista expone cuáles son los desafíos, avances y tendencias de esta disciplina.

 

¿Qué es la ingeniería de software?

Trata de la construcción sistemática de software. Una de las actividades principales que incluye es la programación, los programas se crean escribiendo en algo parecido a los procesadores de palabras. Pero de la misma manera que construir un edificio no es solo apilar ladrillos, programar no es lo único que se hace cuando se construye un sistema de software. Para edificios, hay todo un proceso que tiene que ver con diseños, planos, pruebas estructurales, test de terreno, decoración y planificación de flujo de personas, entre otros aspectos. Para construir software además de la parte de programación hay muchas otras cosas: diseño, testeo, verificación, planificación de grupos de trabajo, etc.

 

¿Qué se investiga en ingeniería de software?

La ingeniería civil tiene miles de años literalmente, la de software tiene muy pocos años de experiencia. Lo que hacemos es repensar qué aspecto tiene que tener el plano de un software, qué tipo de pruebas matemáticas y estructurales hay que hacer sobre ese plano para asegurarse que no va a fallar, cómo podemos hacer para que se equivoquen menos los programadores o para que desarrollen más rápido. Esas preguntas nos hacemos los investigadores en ingeniería de software.

 

¿Por qué se producen errores en el software?

Programar es una actividad intelectual muy compleja. Cuando escribís una carta te podes equivocar, pero cuando lo recibe una persona inteligente a veces puede decodificar lo que escribiste, la entiende a pesar de los errores. A veces la carta no tiene el contexto, pero el receptor a veces puede completarla con algo que le dijiste otro día por teléfono o que leyó en el diario, y te entiende. Las computadoras son ‘bobas’, van a hacer exactamente lo que dice el programa y no lo que intentó decir el programador, no puede compensar por los errores de sintácticos o semánticos que se cometieron. La disciplina es muy amplia y puede abarcar desde lo cognitivo, como piensa y porqué se equivoca un programador, a lo formal: Pensemos un programa como una teoría matemática, se puede probar matemáticamente que no tiene errores? Otra pregunta difícil: ¿cómo hacés para pensar si el software va a ser fácil de usar?

 

¿Cómo se hace?

No tenemos una buena respuesta para esa pregunta todavía. El concepto de usabilidad está muy lejos de la matemática. La visión de la sociedad es que la computación es muy fría y que el programador solo trabaja de noche. Pero eso es una pequeña pieza dentro de un mundo social, todos interactuamos todo el tiempo con software y necesariamente para hacerlo bien hay que tener en cuenta a los usuarios y a los equipos enormes que lo desarrollan. Hoy en día una organización que desarrolla software quizá tiene un equipo en Argentina, uno en India y uno en EE. UU., y entonces interactuar con un grupo de trabajo globalizado es socialmente muy desafiante. Hay aspectos sociales en el uso y en la producción de software.

 

¿Cómo se clasifica el software?

Hay una distinción muy importante entre software crítico y de soporte. Del primero dependen vidas humanas o la misión crítica de una organización, por ejemplo, una empresa que fabrica caños de acero y la maquinaria está controlada por software que hace que el horno funcione a cierta temperatura o se muevan piezas, y que si funciona mal la fábrica no produce. En cambio si se para por un día un programa que maneja la emisión de facturas es grave pero solucionable. Otra distinción es entre reactivo o interactivo, es distinto el software que está ejecutando todo el tiempo y uno pregunta, responde y hay interacción continua como todo lo que tenemos en el teléfono al software más tradicional que yo le digo “calculame esto” y te dice “la respuesta es 34”. Distintos estilos de software que tienen distintos desafíos.

 

¿Cuál es la situación de esta ingeniería en el país?

El panorama en Argentina es mixto. Tiene el problema de que hay distintos niveles de maduración de profesionales, se puede estudiar dos años y programar aplicaciones web, estudiar mucho más y tener la capacidad de desarrollar software de sistemas críticos. Tenemos muy buenos profesionales, pero otro lado nos nos falta de todo. No tenemos una gran población, no vamos a tener nunca un enorme volumen de programadores o diseñadores y entonces tenemos que apuntar a tener muy gente muy buena que puedan hacer la diferencia. Uno de los desafíos que tiene la industria es el de generar valor agregado, tenemos que lograr que sea un sector que innove más, que sea más productivo y eso significa gente mejor formada y con mejores herramientas.

 

¿Por qué es importante invertir en desarrollar software en Argentina?

Todo lo que hacemos, a nivel individual, sociedad y en el sector productivo, está apoyado de una manera u otra en software, por eso es importante tener experticia en cómo diseñarla y construirla. Como estrategia de desarrollo para el país, tener conocimientos sobre eso es fundamental para pensar a la Argentina industrializada. Es importante que la Argentina tenga un grupo de personas que se desarrollan más plenamente en la disciplina para poder ser líder en la materia. Claro que depende de hacia adonde vamos como país, el software va a jugar un rol más o menos importante. Por eso es clave el rol del Estado en su capacidad de desarrollar proyectos tecnológicos y traccionar la industria del software.

 

¿Qué temáticas se van a tratar durante la Conferencia Mundial de Ingeniería de Software?

Hay disertantes sobre software libre. Hay una charla plenaria de un profesor de EE.UU. que va a hablar de la revolución SAT que es un tema tecnológico que viene avanzando muy rápido y tiene que ver con la resolución de problemas automáticamente. En Argentina el 50 por ciento del tiempo que dedicamos a construir software en realidad corregimos errores que los programadores metemos. El proceso de testear si el software funciona lleva la mitad del tiempo, cualquier cosa que podamos hacer para solucionarlos o encontrarlos más rápido es una ventaja. Otro de los temas de la conferencia es el del big data. En informática si hay un error y lo documentamos, lo corregimos y queda documentado también cómo se corrigió. Tenemos bases de datos enormes que podríamos tratar de analizar para intentar responder preguntas de porqué se equivocan los programadores. Es un problema de big data porque hay que procesar una enorme cantidad de datos para responder preguntas. Es un congreso enorme, en los tres días principales son 7 sesiones en paralelo con 40 charlas por sesión de 30’ cada una, hay muchos temas.

Por Cecilia Leone.