Computación cuántica (I): el fin de los ordenadores clásicos

Los ordenadores actuales son descendientes de la Máquina de Turing. Este modelo matemático fue creado por Alan Turing para dar respuesta al Entscheidungsproblem (en alemán, “problema de decisión”), una de las cuestiones centrales de la informática teórica. Las Máquinas de Turing utilizan como memoria una cinta con un número infinito de posiciones y un cursor que puede leer una posición de la cinta, modificar su contenido o desplazarse una posición a la izquierda o a la derecha. El “código” de la máquina de Turing es el conjunto de reglas predefinidas que indican qué acciones debe realizar el cursor según el contenido de la cinta, mientras que los “datos de entrada” sería el contenido inicial de la cinta. También es posible definir una Máquina de Turing Universal que recibe como entrada el código de una máquina de Turing y unos datos de entrada y simula la ejecución de dicha máquina de Turing. Esta Máquina de Turing Universal es uno de los antecesores del concepto de “programa almacenado”: pensar en el programa como un dato más que puede leerse (para ejecutarse) o incluso modificarse. Puede parecer un concepto evidente, pero hasta ese momento la mayoría de máquinas tenían un propósito específico (un problema, una herramienta). Esta idea de máquina “programable y de propósito general” se había utilizado en el campo de las máquinas de tejer (para coser patrones complejos definidos mediante una tarjeta perforada), pero aquí se aplicaba a la realización de cálculos. Aunque excelente como modelo teórico, la Máquina de Turing tiene una arquitectura poco útil desde un punto de vista práctico y existen formas de diseñar una máquina más...

El Congreso Español de Informática (CEDI)

Este septiembre de 2016 se ha celebrado en Salamanca el Congreso Español de Informática (CEDI), uno de los eventos científicos más importantes en el campo de la ingeniería informática en España. Se trata de un multi-congreso organizado por la Sociedad Científica de Informática de España (SCIE) que agrupa a los principales congresos, jornadas y simposios del ámbito informático que se celebran en España. CEDI pretende ser un punto de encuentro para toda la comunidad que desarrolla su actividad en el ámbito de la ingeniería informática, ya sea en investigación, desarrollo, innovación o enseñanza universitaria. Es fácil de imaginar que reunir en un mismo lugar a empresas e investigadores con tanta diversidad de ámbitos de especialidad puede dar lugar a muchas sinergias y oportunidades de colaboración. Muchos artículos, proyectos e iniciativas científicas relevantes han “nacido” o “crecido” durante las CEDI… Los antecedentes del CEDI se remontan a los Congresos Nacionales de Informática y Automática (1970-1985), organizados por la Asociación Española de Informática y Automática (AEIA). En su formato actual, CEDI se inicia en 2005 (Granada), y desde entonces se ha celebrado en 2007 (Zaragoza), 2010 (Valencia) y 2014 (Madrid). Algunos congresos de CEDI tienen una trayectoria muy prolongada, con más de 15 ediciones, y son un referente de la comunidad científica de su ámbito. Podemos citar como ejemplos los congresos sobre Inteligencia Artificial (CAEPIA), Computación Paralela (JP), Informática Gráfica (CEIG), Ingeniería del Software y Bases de Datos (JISBD), Informática Educativa (SIIE), Programación y Lenguajes (PROLE) e Interacción Persona-Ordenador (INTERACCIÓN). También hay otros eventos de temática más específica o bien con menor trayectoria, sobre áreas como lógica difusa (LODISCO), ingeniería de servicios (JCIS), minería de datos (TAMIDA) o sistemas de tiempo real (STR). Además...

Becas para los Másters en Ingeniería Informática y de Telecomunicación

Hace un tiempo escribí en este blog una recopilación de becas para estudiar Ingeniería Informática. Este listado no era tan largo como hubiera querido, ya que la oferta de becas no es muy amplia. Así pues, me alegra poder añadir una nueva incorporación a ese listado. La Caixa d’Enginyers y la UOC han firmado un convenio de colaboración para ofrecer un programa de becas a estudiantes del ámbito tecnológico. Concretamente, las becas se dirigen a estudiantes del Máster Universitario en Ingeniería Informática de la UOC y el Máster Universitario en Ingeniería de Telecomunicación de la UOC-URL. Se trata de 2 becas por un importe de 3.000€ para cubrir los gastos de matrícula. Ambos Másters oficiales ofrecen un enfoque profesionalizador que aporta conocimientos avanzados en su ámbito de especialidad, cubriendo las tecnologías y métodos más relevante para el ejercicio de la profesión. El plazo de inscripción a estas becas está abierto entre el 2 de junio y el 20 de julio. Los solicitantes deben cumplir una serie de requisitos: cumplir los requisitos de acceso al Máster que desean cursar; tener una nota media superior a 6 en su expediente académico; y comprometerse a finalizar sus estudios en un plazo de 3 semestres. Para valorar las solicitudes recibidas, se tendrán en cuenta criterios como el expediente académico, el currículum vitae y los argumentos expuestos en la carta de motivación. La información completa sobre el procedimiento, documentación, criterios de valoración y calendario está disponible en la web del programa de becas. Esta iniciativa forma parte de la estrategia de la Fundació Caixa d’Enginyers y la UOC para fomentar el desarrollo de la sociedad del conocimiento y la formación a...

Optimización de código: un código más eficiente

En los primeros tiempos de la informática, programar exigía utilizar lenguajes muy próximos a la plataforma de ejecución. El código máquina o el lenguaje ensamblador permiten un control muy fino del proceso de ejecución: cómo se asignan los registros del procesador, cómo se almacenan los datos y se accede a la memoria, … Así es posible exprimir la máxima eficiencia de una plataforma, aunque el precio a pagar es la falta de portabilidad y el mayor coste de desarrollo y mantenimiento del código. Afortunadamente, hoy en día podemos utilizar lenguajes de programación de alto nivel, que abstraen estos detalles de la plataforma y nos permiten ser más productivos resolviendo problemas más complejos en menos tiempo. Sin embargo, con esta transición hemos perdido algo de eficiencia… ¿o no? Quizás tampoco tanta, porque los compiladores incorporan técnicas que permiten mejorar el rendimiento del código generado. La optimización de código es el conjunto de fases de un compilador que transforman un fragmento de código en otro fragmento con un comportamiento equivalente y que se ejecuta de forma más eficiente, es decir, usando menos recursos de cálculo como memoria o tiempo de ejecución. Es importante destacar que: La condición de tener un “comportamiento equivalente” es bastante onerosa, ya que incluye también situaciones de error donde el comportamiento debe ser el mismo. Pongamos como ejemplo una instrucción como “x = y / y“. La tentación es substituir esta expresión por “x =1“, pero es necesario garantizar que la variable y no puede ser igual a 0, porque entonces el código podría tener un comportamiento diferente según el lenguaje (p.ej. división por cero). También es fundamental garantizar que el código no será menos eficiente...

Campeonatos interuniversitarios de eSports

Cada año se celebran los Campeonatos Universitarios de Catalunya (CCU), donde todos los miembros de la comunidad universitaria (estudiantes, personal docente e investigador y personal de administración) se enfrentan en competiciones deportivas individuales o por equipos. Precisamente este curso académico 2015/2016 los Campeonatos están organizados por la UOC. El objetivo de los Campeonatos es fomentar valores de esfuerzo, superación y espíritu deportivo, así como ofrecer un entorno lúdico y distendido donde relacionarse e implicarse en el mundo universitario. Cabe destacar que tienen una muy buena acogida: por ejemplo, este año la 2a edición de UNIRUN (una carrera universitaria de 6.779 metros) se celebró en Barcelona el 7 de marzo y contó con 3.200 participantes. Además de los típicos deportes de competición como el futbol, atletismo, artes marciales o natación, los Campeonatos también habían incluido históricamente otras actividades como el ajedrez (no entremos a discutir si el ajedrez es un deporte). Como novedad de este año, se ha incluido otra categoría de competición: los e-Sports. Ya pocos se sorprenden de la atención que reciben las competiciones de videojuegos: las previsiones del negocio alrededor de los e-Sports para 2016 se estiman en 500 millones de dólares, y ya existen programas en canales de televisión generalista e incluso canales temáticos dedicados íntegramente a los eSports (sin contar con la retransmisión por Internet, claro). Los videojuegos seleccionados en los Campeonatos han son sido dos de los más populares en la actualidad en la escena competitiva: Hearthstone y League of Legends. Hearthstone es un juego de cartas coleccionables (al estilo de Magic: The Gathering) que enfrenta a dos personas. Cada una construye una baraja de 30 cartas que representan las criaturas, armas y conjuros que puede usar en...