# ¿Qué es la Informática? {-} ¿Qué es la informática? ¿Por qué algunos le llaman «Ciencias de la Computación»[^1]? ¿Por qué los programadores son incapaces hacer bien su trabajo tal y como los ingenieros civiles hacen con los puentes? Dada la ingente cantidad de computadoras a nuestro alrededor, se piensa que en la Informática como un campo muy avanzado de la tecnología, un campo que siempre está al filo del conocimiento humano. Se piensa que programar es una habilidad especializada, únicamente necesaria si se pretende seguir una carrera profesional concreta. Nada más lejos de la realidad. [^1]: Del inglés *Computer Science*. ## Un poco de historia En 1957, Karl Steinbuch[^karl-steinbuch] acuñó el término «*Informatik*» en su ensayo «*Informatik: Automatische Informationsverarbeitung*», *Informática: Procesado de información automático*. En marzo de 1962, Philippe Dreyfus[^philipe-dreyfus] utiliza por primera vez el término «*Informatique*» para denominar a su nueva compañía: *Société d’informatique appliquée*. El mismo mes Walter Bauer funda la empresa estadounidense «*Informatics Inc.*», registra su marca y toma medidas jurídicas contra las universidades que utilizan la palabra para referirse al nuevo campo de estudio, forzándolas a renombrarlo a «*Computer Science*», Ciencias de la Computación, a pesar de que la materia no se restringe a las computadoras y de que sus practicantes no usan necesariamente el método científico. Incluso la ACM[^acm] intenta conseguir permiso para utilizar el nombre pero la compañía rechaza la petición. Cabe destacar que, según Donald Knuth[^donald-knuth] la elección del término «*Computer Science*» por las universidades americanas no se debe a un problema de marca comercial sino a razones semánticas: Las computadoras tratan con *datos*, no con *información*. Por muy pragmático que esto pueda parecer, esta elección describe, de forma deliberada, únicamente el *cómo* de la informática sin prestar atención al *porqué*. Por supuesto, es cierto que los ordenadores tratan datos, pero nuestro objetivo con ellos es tratar información. [^karl-steinbuch]: **Dr. Karl W. Steinbuch** fue un científico informático alemán, cibernético, e ingeniero eléctrico. Es uno de los pioneros de la informática alemán, así como, con la Lernmatrix, uno de los pioneros de las redes neuronales artificiales. Steinbuch también escribió acerca de las implicaciones sociales de los medios de comunicación modernos. —*Karl Steinbuch^`W`^ [28-07-2019]* [^philipe-dreyfus]: **Philippe Dreyfus** es un pionero de la informática en Francia. Después de obtener su Licenciatura en Física en 1950, se convirtió en profesor en la facultad de Informática en la Universidad Harvard usando Mark I, el primer ordenador automatizado jamás construido. En 1958 fue nombrado director del Centro de Cálculo Bol. —*Philippe Dreyfus^`W`^ [28-07-2019]* [^acm]: **ACM** acrónimo de *Association for Computing Machinery* (Asociación de Maquinaria Computacional). Fue fundada en 1947 como la primera sociedad científica y educativa para educar acerca de la Computación. Publica varias revistas y periódicos científicos relacionados con la computación; patrocina conferencias en varias áreas del campo y otros eventos relacionados con las ciencias de la computación como por ejemplo el internacional Competición Internacional Universitaria ACM de Programación (ICPC). Publica una extensiva biblioteca digital y una referencia de la literatura de la computación. —*Association for Computing Machinery^`W`^ [30-07-2019]* [^donald-knuth]: **Donald Ervin Knuth** es uno de los más reconocidos expertos en ciencias de la computación por su fructífera investigación dentro del análisis de algoritmos y compiladores. Es Profesor Emérito de la Universidad de Stanford. —*Donald Knuth^`W`^ [30-07-2019]* ## Algunas definiciones A pesar de ser un campo erigido sobre valores binarios[^binary-values], la informática está llena de dicotomías interesantes. La fundamental, que suele ser ignorada, es la diferencia entre *datos* e *información*: > **Información**, del Latín *informo*, «Yo construyo dentro (de mí mismo)»: > Una idea, un constructo de la mente humana que puede ser compartida con > otros. > **Dato**, del Latín *datum*, «lo que se da»: > Una de las posibles representaciones de una pieza de información que puede > ser transferida e interpretada como información por humanos. La información sólo existe en la mente humana. No todas las construcciones de la mente humana son información, sólo aquellas que pueden ser transferidas a otro ser humano de forma precisa. Por ejemplo, las experiencias místicas no pueden ser consideradas información por la imposibilidad de transmitirlas. Sin embargo, la información es la pieza fundamental del conocimiento humano. En realidad, todo lo relacionado con el campo de las matemáticas[^mathematics] es información, hasta el punto que ninguna conjetura puede ser considerada válida hasta que otras personas puedan estar de acuerdo con ella tras leer la [descripción de la prueba][proof] formada en la mente del autor. Los datos, en cambio, son meras representaciones. Cualquier representación de información es un conjunto de datos. Las palabras que estás leyendo, ya sean impresas en un papel o proyectadas en una pantalla, representan el mensaje que trato de comunicar, una reflexión construida tras años de experiencia en el sector. Pero podría haber grabado un vídeo o un disco de vinilo. Todos esos soportes hubiesen representado la misma información, pero no serían equivalentes. [^binary-values]: El sistema binario es un sistema de numeración en el que los números se representan utilizando solamente dos cifras: cero y uno (0 y 1). A pesar de que existen máquinas que utilizan otros sistemas, el sistema binario es, por su sencillez el más usado en las máquinas de computación. [^mathematics]: «*Matemáticas*, del griego Μαθημα-τικὴ, «el arte de aprender». La matemática estudia la estructura de los constructos de la mente humana (conceptos, patrones, percepciones...) que pueden ser comunicados con precisión a través de un lenguaje. [...] - La matemática sólo trata de nuestra mente.» — Giacomo Tesio [Consultado 17-08-2019] [proof]: https://mathbabe.org/2012/08/06/what-is-a-proof/ ### Una relación complicada La información y los datos tienen una relación muy compleja. Escribiendo estas palabras estoy convirtiendo la información de mi mente en datos. Al leerlas, estás convirtiendo estos datos en información de nuevo. Ambas frases están expresadas en presente, pero ocurren en diferentes puntos del espacio y del tiempo. Los datos suelen acarrear más información que el mensaje que se pretende transmitir. Por ejemplo, este mismo texto aporta más información que su propio contenido: el lenguaje utilizado, su longitud, etc. Esta información se suele denominar, impropiamente, «*metadatos*[^metadata]». Pero incluso gran cantidad de información puede embeberse dentro de estos metadatos, como el estilo de mi escritura puede revelar. Si en lugar de un mensaje en forma de texto, esta información hubiese sido compartida mediante un vídeo la cantidad de información adicional compartida hubiese sido mucho mayor. Mi raza, mi género, mi edad, incluso algunas posibles enfermedades podrían haberse dejado entrever por el soporte elegido. Mi voz y mucho, mucho, más. Entonces, podemos ver que **la información puede convertirse en datos** y los **datos pueden convertirse de nuevo a información** por la mente humana, pero no existe ninguna función matemática que pueda describir esta relación: existe una pérdida y una ganancia de información en cada paso. Y las personas pueden malinterpretar los datos creando información completamente diferente a lo que quien creó el mensaje pretendía compartir. Aun así, los humanos somos tan buenos convirtiendo información en datos y datos en información que ni siquiera somos conscientes del proceso. Y esto nos ha llevado a montones de desafortunados y dramáticos[^lethal] malentendidos en la informática. [^metadata]: Los **metadatos** (del griego μετα, meta, 'después de, más allá de' y latín datum, 'lo que se da', «dato»), literalmente «sobre datos», son datos que describen otros datos. —*Metadatos^`W`^ [28-07-2019]* [^lethal]: El 9 de abril de 2019 «CNN Business» publica que tras los accidentes sufridos por el «Boeing 737 Max» en Etiopía, donde todos los pasajeros y la tripulación murieron, las ventas de este modelo han caído en picado hasta rozar la desaparición. [Consultado 16-08-2019] [`https://edition.cnn.com/2019/04/09/business/boeing-737-max-deliveries/ index.html`](https://edition.cnn.com/2019/04/09/business/boeing-737-max-deliveries/index.html) El 18 de abril de 2019 el IEEE-Spectrum publica que todo apunta a que un fallo de software ha provocado los accidentes. Según el artículo, los cambios del 737 que llevaron a la creación del 737 Max supusieron alteraciones en el modo de vuelo de los aviones, que dejaron de volar con la naturalidad a la que los pilotos estaban acostumbrados. Para solventar estas diferencias, en lugar de editar el diseño físico del 737 Max, lo que acarreaba unos costes de producción muy altos, Boeing produjo su sistema «Maneuvering Characteristics Augmentation System» o MCAS. Este sistema *software* facilita el pilotaje del 737 Max haciéndolo parecer un 737, corrigiendo la posición de la nariz del avión para suplir el desplazamiento provocado por tener unos motores de mayor tamaño. Este cambio de percepción reduce la capacidad para sentir la respuesta que el piloto obtiene del avión en tiempo real. El sistema MCAS se basa además en tomar datos de sensores con una propensión a fallos importante e, incluso con el piloto automático apagado, no permiten al piloto tener el control total del vuelo. El artículo propone que el MCAS, nacido como un sistema de seguridad para reducir costes acaba matando más gente (346 personas) que la que nunca habría salvado y añade que en lugar de añadir más complejidad de software sobre éste la solución parte de eliminarlo por completo. [Consultado 16-08-2019] [`https://spectrum.ieee.org/aerospace/aviation/how-the-boeing-737-max- disaster-looks-to-a-software-developer`](https://spectrum.ieee.org/aerospace/aviation/how-the-boeing-737-max-disaster-looks-to-a-software-developer) ## Entonces, ¿Qué es la informática? > **Informática**, del francés *informatique*, «information automatique»: > Campo del conocimiento humano que estudia cómo la información puede ser > transferida, almacenada, representada, interpretada y transformada, así como > el conjunto de herramientas que se relacionan con dicho conocimiento. La informática trata sobre información. Trata sobre humanos y no sobre máquinas. Las computadoras son meros reflejos de nuestra mente. Como ocurre habitualmente, esta perspectiva europea es diametralmente opuesta a la americana atribuida a Knuth. Incluso en un conocido ensayo[^knuth-essay] Knuth define la *Ciencia de la Computación* como el «estudio de los algoritmos» siendo estos tan ajenos a las computadoras que incluso llega a usar el clásico juego de las sillas para explicar el funcionamiento interno de una tabla hash[^hash-table] en ese mismo artículo. ![Juego de las sillas usado por Knuth en «Computer Science and Its Relation to Mathematics»][chairs] [chairs]: img/chairs.png El problema de la nomenclatura no es *sólo* filosófico: Tras miles de años de historia, sabemos que las palabras que usamos forjan nuestro entendimiento de la realidad. Centrándonos en las computadoras y lo que somos capaces de hacer con ellas, nos negamos la posibilidad de entender la amplitud del campo la informática. Los algoritmos son información en la mente de las personas que los conocen. Si la informática sólo tratara de algoritmos, la vida de los programadores sería mucho más fácil y aburrida. Desgraciadamente **los programas informáticos no son información sino datos**. Los programas no existen en la mente humana, sino en un soporte físico **reproducible** por una computadora, del mismo modo que un gramófono reproduce un disco de vinilo. [^knuth-essay]: Ciencias de la computación y su relación con las matemáticas («Computer Science and Its Relation to Mathematics») (Abril de 1974). [`http://www.maa.org/programs/maa-awards/writing-awards/computer-science- and-its-relation-to-mathematics`](http://www.maa.org/programs/maa-awards/writing-awards/computer-science-and-its-relation-to-mathematics) [^hash-table]: Una tabla hash [...] es una estructura de datos que asocia llaves o claves con valores. La operación principal que soporta de manera eficiente es la búsqueda: permite el acceso a los elementos (teléfono y dirección, por ejemplo) almacenados a partir de una clave generada (usando el nombre o número de cuenta, por ejemplo). Funciona transformando la clave [...] en un hash, un número que identifica la posición (casilla o cubeta) donde la tabla hash localiza el valor deseado. —*Tabla Hash^`W`^ [28-07-2019]* ### Los errores pertenecen al mundo real [Como datos que son][as-data], los programas informáticos pueden tener errores cuando tratan de representar un algoritmo correcto por la mera razón de que *errar es humano*[^errare-humanum-est]. Cada programa no es más que una de las posibles representaciones de un algoritmo y, junto con el propio algoritmo, acarrea gran cantidad de información añadida[^de-anonymizing-programmers]. Además, si el programador no conoce el algoritmo **completo** que pretende implementar con anterioridad, los errores son otro ejemplo más del concepto conocido como «Garbage In, Garbage Out[^garbage]». Los errores, conocidos como *bug* (bicho en inglés), son tan inherentes a la informática que los programadores han creado un amplísimo conjunto de herramientas y técnicas para cazarlos y eliminarlos[^tools-to-hunt-and-kill] sin demasiado éxito. Pero este fracaso absoluto desde la perspectiva de la ingeniería puede suponer un sustento sólido sobre el que construir la democracia. [as-data]: http://wiki.c2.com/?DataAndCodeAreTheSameThing [^errare-humanum-est]: Referencia a «Errare humanum est, sed perseverare diabolicum.», frase atribuida a Séneca que significa literalmente: *Errar es humano, perseverar [en el error] diabólico*. [^de-anonymizing-programmers]: Como muestra, investigadores de varias universidades junto con investigadores del laboratorio de investigación de la armada estadounidense publicaron el siguiente artículo, en el que se analizan métodos para de-anonimizar a los programadores. Esto es, conocer la identidad de programadores anónimos a través del estilo de programación de sus autores. El artículo muestra que los programadores más experimentados, que están capacitados para realizar tareas más complejas, son más fáciles de identificar que los novatos debido a que desarrollan un estilo personal que se ve reflejado en su código fuente. [^garbage]: En informática, el concepto **Garbage in, garbage out (GIGO)** describe que si se alimenta un proceso con datos absurdos o defectuosos los datos resultantes del proceso son también absurdos o «basura» (en inglés «garbage») —*Garbage in, garbage out^`W`^ [28-07-2019] (traducción propia)* [^tools-to-hunt-and-kill]: Existen herramientas de verificación de software, como Adacore o TLA+, técnicas, como la programación por pares y el desarrollo guiado por pruebas, cuya intención es prevenir la aparición de errores en el software. También se han desarrollado herramientas de corrección y análisis de éstos, conocidas como debuggers, como GDB (The GNU Debugger). A pesar de su existencia y de su amplio uso, el software sigue teniendo fallos. Además, la existencia de muchas herramientas para una misma labor suele ser una muestra de su falta de efectividad. ## Mucho más que computadoras Mientras que la matemática pertenece al dominio de la mente humana y es comunicable (o no es matemática aún) cualquier concepto que pertenece a ésta es información. Como tal, también pertenece al campo de la informática. Lo contrario no es cierto: los errores (*bugs*) están muy presentes en la informática mientras que no se dejan ver en el mundo de las matemáticas. Como consecuencia, **las matemáticas son parte de la informática**. Podría decirse que es al contrario o que son hermanas como la física y la matemática. Pero una mirada más minuciosa nos muestra que para que esta relación se cumpla es necesario descartar artificialmente la criptografía, la estadística y el diseño de interacción humana de la informática[^crypto-stats-ux]. Mientras que esta afirmación puede parecer una herejía al principio, no debería sorprendernos demasiado ya que podemos observar a la informática cambiar cada aspecto de la vida humana, desde la medicina hasta la agricultura, desde la reproducción a las finanzas, desde la ingeniería a la cocina, desde la democracia hasta la guerra. Y aunque ningún programa necesita medicina, muchos médicos usan programas. Y aunque ningún programa necesita matar, la mayoría de las guerras necesitan software. Y así, sucesivamente. Este fenómeno tiene una explicación sencilla: La informática transforma todos los aspectos de la vida humana porque **transforma la forma en la que los humanos piensan colectivamente**. La información pertenece al dominio de la mente humana y, al compartirse con otros miembros de la comunidad, construye la cultura de dicha comunidad. Y la cultura vuelve a la mente de los nuevos miembros de la comunidad a modo de información en un bucle infinito. La informática es hoy en día lo que la matemática en tiempo de Pitágoras[^pythagoras]. Es filosofía disfrazada. Filosofía aplicada, si lo prefieres. [^crypto-stats-ux]: El autor enlaza varios conceptos o técnicas de cada uno de los campos que menciona con el objetivo de probar su afirmación. En referencia a la criptografía menciona el concepto «Side-channel attack», ataque de canal lateral en español, cuyo fundamento es el de encontrar vulnerabilidades en la propia implementación física (electromagnetismo, consumo energético, acceso físico, acústico o visual al sistema, sincronización, etc.) de un sistema informático en lugar de tratar de atacar el algoritmo mismo. En referencia a la estadística, enlaza el concepto de «Machine Learning», aprendizaje automático en español, que implica que una máquina sea capaz, sin supervisión humana, de aprender. Esto es, que, de forma autónoma, su desempeño en una tarea mejore con su experiencia. El campo del aprendizaje autónomo está relacionado de forma muy directa con la estadística computacional y con la optimización matemática. En referencia al diseño de interacción humana, el autor menciona el campo de la interacción persona-computadora, «Human-computer interaction» en inglés, donde se estudia la relación entre las personas usuarias y los sistemas informáticos. Este campo de estudio se sitúa en la intersección de la informática con las ciencias del comportamiento, el diseño y las ciencias de la información, entre otros. [^pythagoras]: **Pitágoras de Samos** fue un filósofo y matemático griego del siglo `V`a.C. Famoso por el teorema que lleva su nombre. ## Un sector político Muchos practicantes negarían la descripción de la informática como una forma de filosofía moderna. Esto no se debe sólo a una falta de conocimiento sobre la propia filosofía (donde nace la lógica), se trata de un mal sentimiento acerca de esta conexión. Después de todo, analizando la historia, desde Confucio hasta Platón, desde Kant hasta Nietzshe, **los filósofos siempre han tenido el incómodo hábito de meterse en política** de una forma u otra. Esto es molesto. Los ingenieros de software intentan ser sólo ingenieros para poder dedicarse **únicamente** a la parte técnica del trabajo. Se sienten responsables de crear el artefacto que mejor cumpla el objetivo, pero no quieren responsabilizarse de la elección del objetivo en sí mismo. Ser filósofo implica posicionarse. Ser ingeniero, en cambio, implica simplemente crear cosas de modo que puedes justificar no estar de acuerdo con los valores de tu cliente mientras que sirves a sus propósitos. Los ingenieros pueden fingir ser «neutrales», los filósofos no. ### La tecnología es la persecución de la política por otros caminos Si miras a la historia, puedes ver cómo la tecnología es la mayor fuerza política en el mundo. Desde el fuego a la rueda, los barcos, los molinos: toda nueva tecnología crea nuevos modos de vida que permiten la aparición de nuevas organizaciones humanas. Uno puede preguntarse: ¿Cómo algo que trabaja con información puede alterar de forma tan profunda el mundo físico en el que vivimos? ¡La información no es más que pensamientos que podemos comunicar, al fin y al cabo! Mientras que se habla de que «el software se está adueñando del mundo», no se plantea **cómo** está ocurriendo. Resulta que la explicación es la maravilla de la electrónica: la computadora programable de uso general. Las computadoras de uso general no están diseñadas para resolver un problema concreto sino para ejecutar una serie de instrucciones entregadas por un programador en un formato binario. De esta forma, mientras que las computadoras reproducen el software, lo que ocurre es que un acto de mera imaginación expresado en un lenguaje concreto es invocado como una suerte de demonio[^daemon] que actúa en el mundo físico. Como ha pasado con anterioridad, cada progreso en la tecnología aporta una ventaja estratégica a quien tiene acceso al mismo. No necesitamos remontarnos a la edad de piedra para encontrar evidencias de esto, ni siquiera necesitamos conocer la máquina Enigma[^enigma]. Una Guerra Informática Mundial está teniendo lugar ahora mismo. Una guerra por la total dominación del ser humano mediante la tecnología. [^daemon]: Juego de palabras intraducible. En sistemas POSIX se utiliza el término «daemon», demonio en inglés, para referirse a programas que se ejecutan en segundo plano. En español el término no ha sido traducido y se usa el original en inglés. [^enigma]: Enigma era el nombre de una máquina de cifrado mecánico creada y comercializada a principios del siglo `XX`. Durante la Segunda Guerra mundial, el ejército alemán utilizó versiones alteradas de estas máquinas. El ejército aliado, a pesar de las alteraciones, fue capaz de descifrar las comunicaciones en cantidad de ocasiones, siendo ésta una gran fuente de inteligencia durante la guerra. ### La programación entrena la racionalidad En sí misma, una computadora de uso general es inútil. Pero los programas pueden especializarla para hacerla útil para una gran variedad de problemas específicos. Esta especialización **limita** lo que la computadora puede hacer. **Reduce** su potencial. Esto puede parecer contra-intuitivo para el no versado en la programación (e incluso para los propios programadores), pero, en realidad, todo lo que hacemos con lenguajes de programación es **reducir** lo que la máquina es **capaz de hacer** decidiendo lo que **hará en realidad**. ¿Pero trata esto sólo sobre computadoras? Si todo lo que dispusiéramos fuera [ensamblador][assembly] podría ser así. La programación no sería muy diferente al diseño de circuitos. Sin embargo, se crearon [lenguajes de programación de alto nivel][high-level-programming-languages] para acelerar el desarrollo de software y, al hacerlo, se redujo el [acoplamiento][coupling] entre el hardware y el software. Los lenguajes de programación de alto nivel reducen la carga cognitiva de los programadores. Gracias a ellos no necesitamos conocer los detalles internos de un procesador o dispositivo (al menos, [la mayor parte de las veces][meltdown]). Una vez liberados de los límites de la máquina, los programadores se encuentran con otro límite: el de su propia mente. Hay muchas formas de expresar un programa. La mayor parte incorrectas. Por tanto, la práctica de la programación evolucionó hacia herramientas cada vez más complejas constriñendo la forma en la que los programadores pueden expresar lo que tienen en mente, ayudándoles a escribir código que su mente pueda manejar. Sin embargo, como el hardware subyacente sigue estrictamente las normas de la lógica y la matemática, cualquier lenguaje de programación debe hacerlas cumplir también tarde o temprano. Esto significa que **para programar** necesitas aprender a **pensar racionalmente** y a ser capaz de explicarlo. En otras palabras, programar fuerza a las personas a describir complejas dinámicas y sistemas en constante evolución a alguien tan **tonto** como es un ordenador. Algunas [técnicas][techniques-ii] son tan cercanas a la filosofía que sus practicantes hablan más de lo que programan. El lenguaje de programación que eliges influencia también tu forma de pensar en un modo mucho más profundo que el que experimentas al aprender un lenguaje humano. Los patrones de pensamiento que aprendes programando resultan útiles en todos los aspectos de la vida. Igual que la matemática, pero con esteroides. Además, la forma clave de entender el potencial político de la informática es la **depuración del código** (proceso conocido en inglés como «debugging»). Durante el proceso de depuración **buscas un error en la elaboración cultural colectiva de miles de personas** de todo el mundo. [assembly]: https://en.wikipedia.org/wiki/Assembly_language [high-level-programming-languages]: https://en.wikipedia.org/wiki/High-level_programming_language [coupling]: https://en.wikipedia.org/wiki/Coupling_(computer_programming) [meltdown]: https://meltdownattack.com/ [techniques-ii]: https://en.wikipedia.org/wiki/Domain-driven_design ### La depuración de código entrena el pensamiento crítico No existe nada en la tierra que pueda entrenar el [pensamiento crítico][critical-thinking] tanto como un par de décadas de [depuración de software][debugging]. Ves a la computadora ejecutar billones de líneas de código y tienes que adivinar dónde ocurre el error que genera el fallo en el comportamiento del programa. Es una tarea tan difícil y tediosa que las personas y empresas intentan evitarla por todos los medios, normalmente intentando evitar el problema. Pero cuando **tienes que** arreglarlo, es una experiencia muy **educativa**. En primer lugar porque, la mayor parte de las veces, es culpa tuya. Pero otras veces es el compilador, otras el sistema operativo, otras el navegador web y otras veces ves el [efecto mariposa][butterfly-effect] ocurrir frente a tus ojos y tú tienes que encontrar (y matar) la mariposa correcta a kilómetros de distancia, sólo para parar el tornado en el que te encuentras. Comparado a esto, **destapar fake-news (noticias falsas) es un juego de niños**. ¡Comparado a esto, destapar las afirmaciones de los poderosos es un juego de niños! Esto ocurre porque estás entrenado en pensar sobre lo que miles de personas pensaron antes que tú, entender sus suposiciones, para vislumbrar no sólo lo que sabían o malentendieron, también lo que no conocían en absoluto. Lo desconocido es parte fundamental de la informática. Los buenos programadores [saben que no saben nada][socratic-method] por la propia experiencia. Y los verdaderos hackers saben que **nadie sabe nada**. ¡Por eso somos tan curiosos! [critical-thinking]:https://en.wikipedia.org/wiki/Critical_thinking [debugging]: https://en.wikipedia.org/wiki/Debugging [butterfly-effect]: https://en.wikipedia.org/wiki/Butterfly_effect [socratic-method]: https://en.wikipedia.org/wiki/Socratic_method ## Un derecho humano universal En la declaración universal de los derechos humanos[^human-rights] se recogen tres artículos que tratan accidentalmente sobre la informática. > **Artículo 12**: > > Nadie será objeto de injerencias arbitrarias en su vida privada, su familia, > su domicilio o su correspondencia, ni de ataques a su honra o a su > reputación. Toda persona tiene derecho a la protección de la ley contra tales > injerencias o ataques. > > **Artículo 19**: > > Todo individuo tiene derecho a la libertad de opinión y de expresión; este > derecho incluye el no ser molestado a causa de sus opiniones, el de > investigar y recibir informaciones y opiniones, y el de difundirlas, sin > limitación de fronteras, por cualquier medio de expresión. > > **Artículo 27**: > > 1. Toda persona tiene derecho a tomar parte libremente en la vida cultural > de la comunidad, a gozar de las artes y a participar en el progreso > científico y en los beneficios que de él resulten. > > 2. Toda persona tiene derecho a la protección de los intereses morales y > materiales que le correspondan por razón de las producciones científicas, > literarias o artísticas de que sea autora. Incluso sin considerar las grandes multinacionales que constituyen el núcleo del [Capitalismo de la Vigilancia][surveillance-capitalism] podemos ver estos artículos ser violados sistemáticamente en la mayor parte de los dispositivos que «poseemos». Quienes sean incapaces de configurar su propio servidor de correo electrónico no pueden dar por cumplido el artículo 12. Quien no sepa programar está incapacitado para «difundir \[informaciones\], sin limitación de fronteras, por cualquier medio de expresión» y por tanto no puede dar por cumplido el artículo 19. Quienes no sepan depurar una librería de criptografía no pueden dar por cumplido el artículo 19. Como los programas son cultura (y teoremas, ver [la correspondencia entre Curry y Howard][curry-howard]), las personas incapaces de programar no pueden dar por cumplido el 27.1. Así que **saber informática es un derecho humano**. [^human-rights]: La declaración completa puede leerse aquí: [surveillance-capitalism]: https://thebaffler.com/latest/capitalisms-new-clothes-morozov [curry-howard]: https://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence ## Un derecho fundamental ¿Quieres vivir en un mundo donde necesites un escriba para leer y enviar **tu** correo? Sí, asumamos que son profesionales bien entrenados. Asumamos que tienen un Código de Conducta, un juramento y todo eso. Asumamos que es un servicio **gratuito**, como Gmail, Facebook o WeChat, y que todos los escribas tienen trabajos bien pagados. ¿Qué puede ir mal? ### Libertad como en el Software Libre Vivimos en una distopía que hemos sido entrenados para ignorar. Nunca deberíamos aceptar que un extraño leyera o escribiera nuestro correo. Ni siquiera gratuitamente. Pero aceptamos que, sin ninguna supervisión, un software escrito por extraños controle nuestros dispositivos. Que actúe por nosotros. Pueden leer lo que escribimos. Escuchar lo que decimos. Ver lo que hacemos. Deciden lo que debemos o no debemos saber. A principios de [los años ochenta][talking-to-the-mailman] del pasado siglo, Richard Stallman de algún modo previó lo que ocurriría y fundó el movimiento [político][political-movement] del Software Libre para combatirlo. Concibió las [cuatro libertades del software libre][four-freedoms] para: usar, **estudiar**, compartir y **mejorar** el software que recibes. Más tarde, la iniciativa Open Source convirtió esos valores en [herramientas de marketing][open-source]. [Vaciadas de sus valores éticos][emptied-of-values], las cuatro libertades se convirtieron en una herramienta para ganar participación en el mercado y valor para los accionistas. Google fue probablemente el primero en darse cuenta de que es posible publicar software que cumple **formalmente** las cuatro libertades mientras se mantiene total control del mismo. El truco es aumentar **la complejidad técnica** hasta tal punto que nadie es capaz de poner en cuestión tu control del proyecto. Así que te disfrazas de cumplir los valores de los hackers mientras que los **marginas**. Mediante esos valores consigues que los usuarios confíen en ti. Usuarios que usan tu software **gratis** pero a cambio de **su propia [libertad][mass-surveillance] y [seguridad][safety]**. Hoy en día hasta Microsoft[^linux-is-cancer] distribuye [GNU/Linux][gnu-linux-in-windows]. ¿[Gano Richard Stalman][open-source-2]? [talking-to-the-mailman]: https://newleftreview.org/issues/II113/articles/richard-stallman-talking-to-the-mailman [political-movement]: https://www.gnu.org/gnu/initial-announcement.en.html [four-freedoms]: https://fsfe.org/freesoftware/basics/4freedoms.en.html [open-source]: https://thebaffler.com/salvos/the-meme-hustler [emptied-of-values]: https://www.gnu.org/philosophy/open-source-misses-the-point.en.html [mass-surveillance]: https://en.wikipedia.org/wiki/Mass_surveillance_industry [safety]: https://bugzilla.mozilla.org/show_bug.cgi?id=1487081#c16 [gnu-linux-in-windows]: https://docs.microsoft.com/en-us/windows/wsl/install-win10 [open-source-2]: https://abhas.io/open-source-still-misses-the-point/ [^linux-is-cancer]: En 2001, el entonces CEO de Microsoft, Steve Ballmer, declaró que «Linux es un cáncer» y «contamina todo el software con su basura hippie GPL». [Consultado 16-08-2019] ### Más allá de la libertad para unos pocos ¿Podemos llamar «libertad» a un derecho que pocos pueden practicar? ¿No deberíamos, en su lugar, llamarlo «privilegio»? Como la mayor parte de las personas no es capaz de programar y depurar programas son incapaces de leer y modificar Software Libre. No pueden practicar dos de las Cuatro Libertades. Están forzadas a **confiar** en otras. Y no tienen forma de saber si los demás son confiables. La disponibilidad del código fuente hace que el software libre sea **teóricamente** más seguro que el software privativo, pero su complejidad puede contrarrestar esto en gran medida. Una pieza de código maliciosa puede mantenerse oculta durante meses[^malicious-piece] a pesar de la retórica Open Source[^os-rethoric] del número de ojos. Los usuarios **están obligados** a confiar en el sistema. No tienen opción. No tienen libertad. Entonces tenemos que ir más allá del Software libre. Tenemos que convertir sus libertades en derechos **universales**. [^malicious-piece]: el 23 de marzo de 2016 The Register publicó: «Cómo un programador ha roto Node.js, Babel y miles de proyectos con al retirar de NPM 11 líneas de JavaScript que todo el mundo estaba usando» [Consultado 16-08-2019] [^os-rethoric]: El autor enlaza aquí al capítulo quinto del texto «La catedral y el bazar» escrito por Eric S. Raymond, impulsor del concepto Open Source, a finales de los años 90. Pueden encontrarse traducciones del texto a otros idiomas con relativa facilidad. Éste es el texto original, publicado en la web de Eric S. Raymond: ## La tecnología de la información debe progresar Para convertir la informática de una herramienta de poder a una herramienta de libertad tenemos que mejorarla drásticamente. Tal y como los escribas hicieron con los jeroglíficos en el antiguo Egipto, los programadores ganan su poder usando herramientas **primitivas** que lleva años aprender a manejar. E, igual que los escribas, no son conscientes de su propio poder y siguen sirviendo al faraón[^capitalism] que los oprime. Al entender que la informática es sobre información y la información reside dentro de sus propias cabezas, los programadores se darán cuenta de que son *únicos*[^2] en la historia de la economía. [^2]: En la versión original, debido a la influencia del italiano, el autor usa el término latino «unicum» que, a pesar de que la palabra latina se traduce como «único» al español, en italiano este término hace referencia a piezas únicas de colecciones o eventos históricos que son irrepetibles. **Los programadores son los primeros trabajadores que controlan los medios de producción**. Los tienen sólidamente unidos a su cuello y no pueden eliminárselos sin destruir el Capital. Si tu trabajo es programar, piensa en ello. No es tu IDE el que escribe el programa. No es tu escritorio. No es tu jefe. Eso sólo son herramientas que «facilitan» lo que haces. Son útiles, pero secundarias. Aun así: ¿Quién decide lo que haces? Ahora piensa lo que podrías hacer por este mundo en lugar de [aumentar el valor de los accionistas][shareholders-value]. [^capitalism]: En el texto original en la palabra «faraón» se encuentra, como en otros casos, un enlace a la Wikipedia, la enciclopedia libre. En este caso, para la sorpresa del lector, el enlace no es a la página «faraón» sino a «capitalismo». [shareholders-value]: https://puri.sm/posts/the-future-of-computing-and-why-you-should-care/ ### Evita el moralismo Desde [hace años][years-moralism], ha habido mucho ruido acerca ~~del moralismo~~ la ética en la tecnología de la información. En el campo de la [inteligencia artificial][ia-desilusion],tras varias muertes causadas porque los [coches autónomos][self-driving-car] son incapaces de resolver un [«dilema del tranvía»][trolley-problem] [que no debería estar ahí][shouldnt-be-there], los investigadores [tratan de enseñar ética a las máquinas][machine-morality]. Es muy inteligente, si lo piensas. Desde la perspectiva práctica es como enseñar sexo a los condones. Deberías empezar por las personas. Pero desde el punto de vista político es un intento sutil de [reducir la responsabilidad corporativa][corporate-acountability] del daño causado por sus productos «autónomos». No es ética, es moralismo: una perversión de la moralidad para servir los intereses individuales. Debemos rechazar esta hipocresía como la cortina de humo que es. [years-moralism]: https://theconversation.com/a-code-of-ethics-in-it-just-lip-service-or-something-with-bite-32807 [ia-desilusion]: http://www.tesio.it/documents/2018_Milano_The-Delusions-of-Neural-Networks.pdf [self-driving-cars]: http://www.tesio.it/2018/10/06/the-intelligent-symbiosis.html [trolley-problem]: http://moralmachine.mit.edu/ [shouldnt-be-there]: https://github.com/daviddao/awful-ai/issues/14 [machine-morality]: https://en.wikipedia.org/wiki/Machine_morality [corporate-acountability]: https://en.wikipedia.org/wiki/Death_of_Elaine_Herzberg ### Sé humano Los programadores suelen mirar a los usuarios desde la limitada perspectiva de la aplicación que están desarrollando. Quien programa decide con gran grado de libertad lo que los usuarios de la aplicación resultante pueden o no pueden hacer. De esta forma, los programadores deciden lo que los usuarios deben entender y lo que no. Lo que probablemente pensarán y lo que no. Esto va más allá que los problemas de la vigilancia y es la base de la interacción humano-máquina[^human-machine-interaction] y es... **inevitable**. Pero en lugar de pensar en el usuario desde la limitada perspectiva del ámbito de nuestra aplicación, debemos considerarlos seres humanos, debemos considerarlos personas. Si piensas en el software como en una carta que le envías a otra persona en lugar de en una herramienta para ganar dinero, empiezas a fijarte en sus problemas de otra forma. ¿Y si las personas al otro lado están cansadas? ¿Y si necesitan resolver problemas inesperados con nuestro programa? ¿Realmente entienden lo que hacen con tu software? ¿Realmente entienden los riesgos de seguridad a los que se exponen? ¿Les da miedo el software? ¿Pueden configurarlo para cumplir sus necesidades? **Llamar a la gente «usuario» es una forma de usarlos sin remordimiento**. No hagas eso. [^human-machine-interaction]: La **interacción persona-computadora o interacción persona-ordenador (IPO)** se podría definir formalmente como: "La disciplina dedicada a diseñar, evaluar e implementar sistemas informáticos interactivos para el uso humano, y a estudiar los fenómenos relacionados más significativos" —*Interacción persona-computadora^`W`^ [28-07-2019]* ### Sé político Siendo la tecnología una persecución de la política por medios que **tenemos bajo control**, debemos considerar qué responsabilidad viene con ellos. Como programadores liberados debemos manifestar qué objetivos políticos queremos conseguir con cada programa que hacemos. Desde ahora, todos mis programas de Software Libre contendrán un nuevo archivo, junto al `LICENSE.txt` y al `README.txt`: **`POLITICS.txt`** **`POLITICS.txt`** debe ser un manifiesto **corto** pero **inequívoco** sobre los efectos políticos que el autor del proyecto pretende conseguir con su software. Esa descripción **no** incluye una bonita lista de principios éticos[^google-principles] que los autores quieren seguir en el fondo de su corazón simplemente para evitar el riesgo de caer en la hipocresía. Debe ser una lista de **efectos sociales** específicos que los autores quieren producir **en la sociedad** con **este software en particular**. Y debe listar también los efectos sociales que pretende evitar o minimizar. Pueden ser de alto nivel o muy específicos, pero la gente debe ser capaz de decir si el software es un **fracaso político o un éxito** sólo leyendo esos objetivos y comparándolos con el efecto del software producido. El éxito político puede ser un fracaso tecnológico y viceversa. Y el documento `POLITICS.txt` puede evolucionar con el proyecto. Y los proyectos pueden bifurcarse (fork) por desacuerdos sobre éste. Y no pasa nada. Pero el hecho de **tener un `POLITICS.txt` significa que te haces responsable** de los demonios que invocas. [^google-principles]: El autor hace burla de la reciente moda de que las grandes corporaciones tengan una carta de principios éticos que sólo se utilizan como herramienta de marketing. En este caso enlaza a la de google: ### Sé educativo La ética hacker que subyace al Software Libre está erigida sobre la curiosidad. Todo trata sobre el deseo de aprender, explorar nuevas soluciones y poner a prueba suposiciones generalmente aceptadas por válidas. Pero nuestro tiempo es limitado y también lo es nuestra mente. Por lo que una estrategia muy efectiva para conseguir nuevo conocimiento es maximizar el número de personas buscándolo. Escribir buen código no es tan efectivo como escribir código simple[^simple-code]. Leer el código fuente no debería de requerir una licenciatura o años de experiencia en el sector. Es necesario que reorientemos la investigación en los lenguajes de programación hacia la **simpleza**. Las lecciones del profesor Niklaus Wirth[^wirth] aún están esperando a una nueva vida[^wirth-lessons]. Necesitamos herramientas simples que encajen fácilmente en lugar de herramientas complejas que puedan hacerlo todo. No será fácil, ya que **la informática es aún un campo muy primitivo**. Igual que los antiguos egipcios vivieron sin número cero durante cientos de años, aún nos faltan muchos conceptos fundamentales. Pero tenemos que descubriros. Tenemos que crear un alfabeto de la informática. Con este alfabeto debemos liberar a la siguiente generación de esclavos. [^simple-code]: Referencia a un projecto que él mismo mantiene llamado Jehanne, un sistema operativo *simple* y a un texto que describe el funcionamiento de Jehanne para demostrar su simpleza: [^wirth]: El profesor Niklaus Emil Wirth es un informático nacido en Winterthur, Suiza, en 1934, que diseñó muchos lenguajes de programación, entre ellos Pascal. En 1984 obtuvo el premio Turing, premio otorgado por la ACM que se considera el premio más prestigioso de la informática. Se puede saber más sobre él y acceder libremente a sus publicaciones en su página web: [^wirth-lessons]: El profesor Wirth aún tiene disponibles unas lecciones sobre el lenguaje de programación Oberon, en cuyo diseño participó activamente, así como en el de sus predecesores Modula y Pascal. Las lecciones pueden visitarse en el siguiente enlace: Pero Oberon es algo más que un lenguaje de programación, es el diseño completo de una computadora de escritorio pensado para que cualquier persona pueda implementar el sistema completo y mantenerlo en un entorno de producción. En su página web puede encontrarse más información: ## La humanidad debe evolucionar Esto no trata sólo de desarrolladores de software. Un médico no puede curar a un enfermo que se niega a ser tratado. Si queremos preservar la democracia **tenemos** que hacerla evolucionar. No es la democracia la que debe ser [automatizada][automated-democracy], la gente debe ser educada. Las personas deben darse cuenta de que son marionetas en las manos de grupos de poder que deciden qué deben saber y pensar. Algunos rechazarán ganar esa conciencia ya que muchas veces los oprimidos interiorizan la opresión como parte de su propia identidad[^oppression-as-identity]. Pero si les damos la oportunidad, puede que permitan a sus hijos descubrir su camino hacia la libertad. Otros verán la realidad tal y como es, y lucharán... Estudiando. Independientemente de lo que hagamos, la informática va a ser una revolución[^revolution] de todas formas. [automated-democracy]: https://motherboard.vice.com/en_us/article/yw84q7/darpa-is-building-a-dollar10-million-open-source-secure-voting-system [^oppression-as-identity]: «Pedagogía del Oprimido» Paulo Freire, 1970. [^revolution]: Una **revolución** (del latín *revolutio*, "una vuelta") es un cambio social fundamental en la estructura de poder o la organización que toma lugar en un periodo relativamente corto o largo dependiendo la estructura de la misma —*Revolución^`W`^ [30-07-2019]* > **Morfeo**: Matrix nos rodea, está por todas partes. Incluso ahora en esta > misma habitación. Puedes verla si miras por la ventana, o al encender la > televisión. Puedes sentirla cuando vas a trabajar, cuando vas a la iglesia, > cuando pagas tus impuestos. Es el mundo que ha sido puesto ante tus ojos para > ocultarte la verdad. > > **Neo**: ¿Qué verdad? > > **Morfeo**: Que eres un esclavo, Neo. Igual que los demás naciste en > cautiverio. Naciste en una prisión que no puedes ni saborear, ni oler, ni > tocar. Una prisión para tu mente. **La informática** es la pastilla roja[^matrix]. [^matrix]: Referencia a la película «Matrix», dirigida por las Hermanas Wachowski, en 1999. Esta conversación Morfeo ofrece a Neo dos pastillas, con la azul vuelve a su vida normal y se olvida de lo que sabe sobre Matrix, con la roja sigue en su búsqueda de la verdad y la libertad.