Programador tonto, inteligencia artificial tonta

Ayer se publicó en el periódico El País el artículo Estupidez artificial: el problema que nadie vio venir. Muy interesante los ejemplos que pone, algunos son similares a los que yo he puesto en alguna de mis conferencias.

En junio de 2018 impartí una conferencia titulada ¿Qué significa ser un buen programador?

En el minuto 19:00 empiezo a hablar de “Programador tonto, inteligencia artificial tonta”.

¿Por qué son importantes los comentarios en el código?

Muy interesante la explicación que he encontrado en ¿Qué es una máquina?:

El punto clave es que no hay ningún experimento imaginable que sirva para determinar cuál de estas hipótesis es la correcta. La única forma de saber con certeza cuál era la intención del fabricante, y por tanto para qué sirve el artefacto, es preguntar al propio fabricante (una forma de preguntarle es leer el manual de instrucciones o atender a otras manifestaciones públicas de su intención). Puede ocurrir, incluso, que la finalidad del artefacto fuera ser regalado como motivo decorativo, por tanto su exactitud para medir el tiempo sería irrelevante.

No es posible determinar la función prevista y deseada de un artefacto a partir de la observación de su funcionamiento efectivo, precisamente porque la mera observación no puede distinguir el funcionamiento defectuoso del correcto. Es decir, el control de calidad, que es otra de las tareas primordiales de la ingeniería, solo tiene sentido una vez conocida la finalidad del artefacto en cuestión. Una máquina solo se entiende desde su finalidad –aunque no la cumpla–, y solo desde su finalidad se puede juzgar si funciona bien o mal. ¿Qué es un abrelatas que no funciona? Para conocerlo como abrelatas no basta examinar su funcionamiento, puesto que, precisamente, no funciona bien…

[…]

Otro ejemplo bastante claro lo tenemos en el software. Si los comentarios en un programa son tan importantes, es porque declaran la intención del programador con respecto a un fragmento de código, algo que a menudo no es tan fácil de comprender examinando el código del programa en sí, ni observando la ejecución del programa.

De todo esto podemos concluir que el método científico-experimental, en sentido estricto, es insuficiente para averiguar para qué sirve un artefacto, es decir, para hacer ingeniería inversa, por mucho que la ingeniería inversa sea una parte habitual del trabajo de un ingeniero. El método científico-experimental es, por sí mismo, insuficiente para definir, comprender y construir cualquier máquina.

Diferencias entre diseño adaptativo y adaptable

En español es difícil hablar de estos dos tipos de diseño porque nos “faltan palabras”, pero en inglés se distingue responsive design y adaptive design.

Tres artículos que explican las diferencias:

Y un par de imágenes que lo aclaran de forma visual:

Tim Berners-Lee: El amanecer de la Web

En El amanecer de la World Wide Web nos cuentan:

Es innegable que la Web ha cambiado nuestras vidas en muy poco tiempo gracias a la insistencia de un personaje en particular: Sir Tim Berners-Lee. En este episodio recorremos la historia del más reciente premio Turing de la mano del profesor Álvaro Prieto, quien nos desentrañará de dónde surgen las ideas seminales de la World Wide Web, su difícil camino para convencer al mundo de su visión y finalmente el reconocimiento de toda la comunidad científica.

El artículo incluye un audio de 45 minutos sobre el tema.

Intersection Observer API

El Intersection Observer API permite detectar los cambios en la visualización de los elementos de una página web. Con esta interfaz se pueden implementar muchas cosas que antes era muy complicado de lograr:

  • Lazy-loading of images or other content as a page is scrolled.
  • Implementing “infinite scrolling” web sites, where more and more content is loaded and rendered as you scroll, so that the user doesn’t have to flip through pages.
  • Reporting of visibility of advertisements in order to calculate ad revenues.
  • Deciding whether or not to perform tasks or animation processes based on whether or not the user will see the result.