La importancia de la Historia de la Informática

Se han ido Prince, Bowie, Lou Reed. Y algún día, mal que nos pese, lo harán los Coen, Springsteen, Jagger… ¿Os suenan? Este año también ha fallecido Wesley Clark, por ejemplo. ¿Os sonaba? 2011, un año fatídico para la historia de la informática, se recordará como el año en que falleció Steve Jobs. Pero también es el año de las muertes de John McCarthy, Jean Bartik, Dennis Ritchie o Paul Baran, por ejemplo. ¿Os suenan estos? Clark diseñó el primer ordenador personal. Bartik fue una de las programadoras originales del ENIAC. McCarthy fue el padre de la tan de moda inteligencia artificial. Ritchie, quizá el más conocido de este grupo, coinventó el lenguaje C y fue pieza clave del nacimiento de Unix. A Baran le debemos muchas de las innovaciones que nos dieron las redes informáticas. Y algún día se nos irán los Cerf, los Kay, los Metcalfe…. Nos acordamos de Jobs y todo el mundo conoce a Gates y a Zuckerberg, sí (como mínimo estos dos últimos programaron lo suyo en su momento, especialmente Gates, pero a pesar de su fama ninguno de ellos ha hecho ninguna gran aportación técnica a la historia de la informática). También es conocido Alan Turing (gracias a una película que, por cierto, es lamentable desde el punto de vista histórico, ya hablamos de ella por aquí en su momento). Pero el imaginario popular de la informática va muy poco más allá, desafortunadamente. De Claude Shannon (este año se celebra su centenario) o Grace Hopper (inventó el compilador, y también le hemos dedicado algún espacio en este blog) se acuerdan pocos, muy pocos....

Cultura

La “cultura” (cultura de empresa, cultura digital, cultura culinaria, cultura del dato, etc.) es una explicación de las cosas a la que acudimos cuando no se nos ocurre otra. “Culture is everything“, decía Lou Gerstner, que fue presidente de IBM. La cultura describe prácticas y comportamientos, pero no es causa de nada ni explica nada. Una cultura viciada es consecuencia de la falta de propósito de la dirección y de sistemas de gestión equivocados. Culpar a la “cultura” es una señal de pereza intelectual, gerencial, emocional. (También lo es condecorarla, como en la cosa de las culturas cool, guay.) Pero no es un asunto menor: la cultura, para Kotter, es lo que más tiempo se tarda en transformar y “anclar” dentro de cualquier proceso de cambio. GRAFICA: Cool corporate culture. Después de algunas primeras referencias en los 80 (entre ellas, el gran estudio de Hofstede sobre la cultura en IBM), el análisis de la cultura dentro del desarrollo de las organizaciones se consagra en la investigación de Edgar Schein, profesor del MIT, a principios de los 1990. La cultura se compone de “artefactos”, comportamientos, valores y asunciones, implícitos o explícitos, formales o informales. Cultura es la declaración de misión que hace la empresa, pero también cómo se declara la misión en la parte interior de la puerta del water. Cultura es la forma de la planta de la oficina o de la fábrica y cómo la gente se mueve. Cultura es “cómo hacemos las cosas aquí”, la relación con los clientes o los colegas. Cultura son los procedimientos y los horarios y la forma en la que nos comunicamos. Cultura...

Cómo verificar quién es Satoshi Nakamoto

Versió en català Una de las múltiples ventajas que tiene la criptografía es que permite minimizar la confianza que las diferentes partes de un protocolo tienen entre ellas cuando se ejecuta, asegurando, al mismo tiempo, que todo el mundo habrá actuado correctamente. En ocasiones, no sólo se consigue minimizar la confianza entre las partes sino que incluso se puede eliminar totalmente, creando sistemas en los que el correcto funcionamiento de los usuarios se garantiza gracias a que la confianza en el sistema no recae en puntos concretos (que podrían ser deshonestos) sino que queda distribuida entre todos los participantes del sistema. No es exagerado decir que el máximo exponente puesto en práctica de estos tipos de sistemas es el de la criptomoneda Bitcoin. Justamente, el carácter distribuido de su modelo de confianza es una de sus fortalezas puesto que no hace falta que sus usuarios confíen en ninguna entidad concreta para usarlos. Entender este hecho hace incomprensible que se continúe cayendo en el error de apoyarse en círculos reducidos de confianza para verificar la identidad de Satoshi Nakamoto, pseudónimo utilizado por el creador de los bitcoins. Esto es lo que le ha pasado a la BBC con la identificación de Craig Wright, identificación que se verificó bajo un secretismo que, paradójicamente, la criptografía en ningún caso justifica. Así pues, gracias al hecho que la identidad de Satoshi Nakamoto va ligada a una moneda que puede funcionar sin ninguna autoridad de confianza, parece obvio que la identidad de Satoshi también se tiene que poder verificar sin ninguna autoridad de confianza. Y evidentemente, así es. De todas maneras, antes de explicar...

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...