Conferencia de Directores y Decanos de Ingeniería Informática

J. Daniel García: «La capacidad más importante para un programador es tener habilidades sociales»

«La capacidad más importante para un programador es disponer de habilidades sociales». Así se expresa J. Daniel García, profesor titular de Arquitectura y Tecnología de Computadores en el departamento de Informática de la Universidad Carlos III de Madrid (UC3M), en una entrevista publicada en la web de la universidad, en la que habla del lenguaje C++ y aborda otros aspectos de informática.

J. Daniel García. Fuente: UC3M.

García es el representante español en el comité ISO para la normalización del lenguaje de programación C++. El pasado 28 de octubre celebró una jornada en la Escuela Politécnica Superior de la UC3M, para explicar a alumnos y profesionales del sector el potencial de C++, que él ha usado en los últimos 25 años en sistemas de control en tiempo real, software de ingeniería civil, equipamiento de imagen médica, simulación por computador, software en el sector aeroespacial y computación científica de altas prestaciones.

Su principal interés, señala el entrevistador, es hacer la vida de los desarrolladores más fácil, tratando de llegar a un buen equilibrio entre la mantenibilidad del software y el rendimiento de las aplicaciones. «En resumen, conseguir un lenguaje de programación más fácil de leer, más rápido en ejecutar y que consuma menos recursos».

El lenguaje C++

«C++ es un lenguaje de programación de propósito general que combina distintos paradigmas o modelos de programación», señala García. «Nació en los ochenta en los laboratorios Bell de AT&T. Inicialmente conocido como “C con clases”, empezó a ganar popularidad muy rápido y a principios de los 90 comenzó su proceso de normalización. En 1998 se publicó el primer estándar ISO/IEC 14882, que ha sido revisado en 2003, 2011 (esta vez aquí en Madrid) y en 2014».

El comité de estandarización de C++ tiene más de cien miembros que asisten entre dos y tres veces al año a reuniones que tienen una duración de seis días completos. Actualmente se está trabajando en la siguiente versión del lenguaje, prevista para 2017, así como en un conjunto bastante amplio de especificaciones técnicas de características algo más experimentales.

C++, recuerda García, «es uno de los lenguajes más usados. Según las estimaciones realizadas por la consultora IDC, el número de desarrolladores que usan C++ está por encima de los 3 millones. Especialmente desde 2010 hay un interés renovado por el lenguaje, puesto que tanto en las aplicaciones móviles como en los grandes centros de datos el rendimiento por vatio (cantidad de cálculos realizados por cada vatio de energía consumido) se ha convertido en una métrica fundamental».

No existen muchas más alternativas para escribir software complejo si se desea obtener un buen rendimiento, resalta García. «Esto hace que el lenguaje sea usado desde en aplicaciones de simulación financieras hasta en sistemas de control de vehículos. Como curiosidad, una parte relevante del software que controla la sonda Mars Rover está escrita en C++».

C++ se usa en algunos productos de ofimática (Microsoft Office, OpenOffice), muchas bases de datos (Oracle, MySQL, Micorosft SQL Server), la mayoría de los navegadores de Internet (Internet Explorer, Mozilla Firefox, Safari, Google Chrome, Opera) o software de navegadores GPS como TomTom, Hertz NeverLost o Garmin. C++ también está detrás de servicios de Internet, como el motor de búsquedas de Google, o servicios de PayPal, Amadeus, Amazon, Facebook o DropBox.

Una gran cantidad de videojuegos se escriben en C++, así como mucho software de animación. Además, también en emplea en software financiero. Por ejemplo, Bloomberg desarrolla gran parte de su software de información financiera en tiempo real en C++. Otro área donde se utiliza es en grandes proyectos científicos, como los llevados a cabo por el CERN en física de altas energías o la NASA en exploración espacial. También se usa C++ en software de telecomunicaciones desarrollados para la gestión de la infraestructura de comunicaciones por empresas como AT&T o Ericsson.

El futuro de la programación

García considera que el desarrollo de software «es un sector en crecimiento. Cada vez más servicios que usamos todos los días dependen del software que los gestionan y existen varios retos que debemos resolver para seguir avanzando. Por una parte, desde 2005 la velocidad de cómputo de los procesadores está esencialmente estancada. Es por esto que los fabricantes han optado por construir procesadores con múltiples unidades de procesamiento (los multi-core)».

Sin embargo, matiza, «para aprovechar al máximo estos dispositivos, necesitamos escribir los programas especificando qué tareas se pueden ejecutar simultáneamente (programación paralela) y para conseguirlo es necesario un adecuado soporte por los lenguajes de programación. Además, existe una tendencia cada vez mayor a la combinación de múltiples dispositivos (como tarjetas gráficas, hardware reconfigurable o procesadores digitales de señal) para construir computadores que los combinan. Y los lenguajes también necesitan un mejor soporte para estas aproximaciones».

Otro problema, añade, «es que al construir software cada vez más complejo, se hace necesario poner más énfasis en garantizar que el software construido es correcto y está, en la medida de lo posible, libre de errores. Así mismo, se requieren mecanismos para permitir reaccionar de forma adecuada a circunstancias no esperadas, incluyendo averías de componentes. Por último, a medida que el software se hace más complejo, la modificación de aplicaciones existentes para adaptarlas a nuevas necesidades también se hace más difícil, por lo que dominar la propia complejidad inherente al software se hace esencial. Algunos de estos retos se están estudiando con detalle en el proyecto Repara, financiado por el Séptimo Programa Marco de la Unión Europea y del que soy el coordinador».

Límites de las aplicaciones

Sobre los límites de las aplicaciones, García señala que, por una parte, «existen límites derivados de las propias capacidades de los dispositivos. Actualmente construimos cada vez dispositivos que tienen más procesadores. Aunque al añadir más dispositivos de cómputo se aumenta, al menos en teoría, la capacidad de cómputo, esto no siempre se puede traducir en una mayor rapidez. Es necesario diseñar (o rediseñar) los programas para que puedan aprovechar estas capacidades de los dispositivos. Dependiendo de la aplicación, esto puede ser más fácil o difícil. En algunos casos, puede incluso resultar imposible».

¿Cómo se puede conseguir que una aplicación consuma menos energía? «La respuesta más corta sería: haciendo que tarde menos tiempo. Aunque existen más técnicas, el consumo de energía es muy dependiente del tiempo que tarda en realizarse una tarea: si se consigue reducir este tiempo, se consigue una reducción en el consumo de energía. Desde el punto de vista de los lenguajes de programación, lo que tiene más impacto es que el lenguaje permita escribir programas que hagan un uso lo más efectivo posible de los recursos disponibles en la máquina. En este sentido, C++ es un lenguaje muy adecuado».

El programador

García prefiere hablar, «más que de programadores, de desarrolladores de software». A su juicio, «la capacidad más importante para un programador es, en contra de lo que muchos puedan pensar, disponer de adecuadas habilidades sociales. El desarrollo de software es un trabajo que siempre se realiza en equipo y disponer de unas buenas habilidades interpersonales es fundamental».

Además, «un desarrollador necesita comprender bien las necesidades de los clientes y usuarios de los productos que está construyendo para resolver los problemas que éstos tienen realmente».

«También es muy importante conocer las bases teóricas de la computación y comprender de forma integrada distintas disciplinas que tienden a verse como cajas estancas y sin relación. Por ejemplo, un buen programador necesita un conocimiento actualizado de las capacidades de los procesadores y su organización interna, de las optimizaciones que realizan los compiladores (que traducen el lenguaje de programación a los códigos binarios usados por el procesador) o de las interacciones con el sistema operativo concreto».

Otra habilidad esencial, añade, es el conocimiento de múltiples tecnologías. «El pensamiento único se lleva muy mal con la ingeniería y es necesario disponer de múltiples puntos de vista para evaluar las ventajas e inconvenientes de cada una de ellas. Es necesario que el desarrollador conozca múltiples lenguajes de programación y sea capaz de decidir cuál es más adecuado dependiendo del problema que esté tratando de resolver. Por esta razón, soy muy crítico con las universidades que utilizan un único lenguaje de programación como herramienta vehicular a lo largo de todo el programa formativo. Los estudiantes deberían ser expuestos a distintos modelos y paradigmas de programación para poder conocer las ventajas e inconvenientes. Sin embargo, en muchos lugares se hace justo lo contrario».