Archivos de la categoría Divulgación

El turco

Reconstrucción de la legendaria máquina que logró vencer a personajes como Napoleón

Imaginemos que nos encontramos a finales del siglo XVIII. Es un periodo en el que el mundo es sorprendido por grandes avances tecnológicos: la revolución industrial. Las máquinas comenzaban a remplazar al hombre en una gran cantidad de procesos productivos. ¿Hasta dónde iban las máquinas a reemplazar al hombre? ¿Podrían las máquinas remplazar también la inteligencia humana?

En el año de 1770, un personaje de nacionalidad húngara, Wolfgang Von Kempelen, presentó por primera vez al mundo una máquina capaz de jugar una competida partida de ajedrez contra un humano, juego que se ha relacionado desde hace mucho tiempo con la inteligencia. Además de jugar ajedrez, la máquina era capaz de resolver el “Recorrido del caballo”, un reto que consiste en mover un caballo por todas las celdas del tablero de ajedrez sin repetir ninguna y respetando los movimientos de esta pieza.

Esta impresionante máquina consistía de un modelo de torso y cabeza humanos con dimensiones reales, cuyo rostro barbado, expresión seria y una contundente mirada de ojos verdes, retaba a quien se sentara del otro lado de la mesa a la que estaba unido. En la superficie de la mesa había dibujado un tablero de ajedrez  y al frente, tres puertas, que al abrirlas, permitían apreciar toda la maquinaria que daba vida a este personaje vestido con ropas turcas y un turbante a quien posteriormente se le conocería como “El turco”.

El turco fue una atracción muy popular que se exhibió en diferentes lugares de Europa y América, venciendo en su recorrido a importantes y conocidos personajes como Benjamin Franklin y Napoleón Bonaparte y despertando el interés de muchos escépticos como Edgar Allan Poe.

Como muchos pueden haberlo intuido ya, si nos situamos en la época y con la dificultad del problema a resolver (hacer que una máquina juegue ajedrez), no es tan factible creer que dicha máquina pudiera existir, o al menos no, sin alguna especie de truco. En efecto, esta máquina tenía un secreto:  dependía de un experto jugador de ajedrez escondido en el interior de la mesa que, moviendo una maquinaria tipo pantógrafo, generaba la ilusión de que era la máquina la que jugaba.

Aunque podemos pensar que esta máquina fue básicamente un fraude, es interesante el hecho de que la emulación de la inteligencia humana o inteligencia artificial no es solo un campo de investigación de las ciencias modernas, sino un deseo o inquietud del hombre desde hace muchos años. Es además un problema tan complicado que es difícil concebir, sin bases sólidas, que una máquina lo pueda realizar.

No solamente El turco despertó sospechas en las personas, según el documental “Game Over: Kasparov and the Machine“, el mismo Kasparov acusó a IBM de hacer trampa, creyendo que detrás de Deep Blue había estado un humano que le ayudaba a la computadora a incrementar su capacidad de razonamiento, pues Kasparov conocía estrategias en las que fallaban las computadoras contra las que había jugado con anterioridad y el hecho de que no funcionaran contra Deep Blue le causó desconcierto.

La inteligencia artificial es un campo en el que se tienen avances impresionantes, pero, al mismo tiempo, nos encontramos todavía bastante lejos de poder decir que es posible replicar la inteligencia humana, siendo que, de entrada, desconocemos los mecanismos que hacen funcionar el cerebro humano y los procesos automáticos de aprendizaje y conciencia de nosotros y el entorno.

Este retraso ha fomentado la interacción entre computadoras y personas, pues cada uno tiene sus propias fortalezas y debilidades, desembocando en técnicas como el cómputo humano (human-based computation), en donde la resolución de un problema se divide en tareas asignadas a la computadora y tareas asignadas a una persona o grupo de personas, permitiendo obtener resultados que de otra forma no serían posibles.

Este tipo de interacción se ha facilitado con tecnologías de comunicación como Internet, gracias al cual, el cómputo humano se ha beneficiado de la participación de una gran cantidad de personas en lo que ahora conocemos como crowdsourcing, es decir, la asignación de diferentes actividades a un grupo remoto de personas.

Justamente es en el crowdsourcing que aparece nuevamente el personaje del que estábamos hablando y es porque este personaje presta su nombre a uno de los sitios pioneros en crowdsourcing y que vio la luz por el año 2005: Amazon Mechanical Turk.

Este sitio permite abstraer a la gran cantidad de personas que realizan tareas sencillas para los humanos y difíciles para las computadoras presentando los resultados a sus clientes como si se tratase de el resultado de un proceso de cómputo que será recogido por un grupo de desarrolladores que completarán la resolución del problema general que tratan de resolver.

Aunque El turco no sobrevivió hasta nuestros días, pues después de la muerte de sus dueños terminó siendo donado a un museo en donde fue victima de un incendio, esta máquina es una curiosa muestra del ingenio humano, así como de un deseo por explorar y replicar la inteligencia humana.

Finalmente, la imagen que aparece al principio de esta entrada, corresponde a una reconstrucción existente de esta curiosa máquina, la cual fue realizada por pedido de John Gaughan, un ilusionista y vendedor de productos para magos de Estados Unidos.

¿Qué hace hoy un matemático?

Una buena parte de los intereses de los Hackers y definitivamente una gran parte de su formación son las matemáticas. Simplemente en su origen, por poner un ejemplo, las Ciencias de la Computación nacieron como una rama de las matemáticas con representantes como Alonzo Church, Alan Turing o Kurt Gödel.

La computación es al final de cuentas una aplicación muy tangible de las matemáticas, así como muchas otras aplicaciones que los ingenieros, físicos, biólogos y economistas, por mencionar algunos, utilizan en su profesión. Pero, ¿a qué se dedica un matemático?

A través del tuiter encontré un interesante video (una disculpa, pero ya no encuentro la referencia de quién lo publicó) que trata de introducir a los estudiantes de nivel medio a interesarse por el estudio de las matemáticas como profesión.

El video fue realizado por el Instituto de Matemáticas de la UNAM y decidí compartirlo aquí para divulgar un poco más la actividad profesional de los matemáticos, de la que muchas veces se tiene una concepción errada, y porque me trae recuerdos muy agradables de la Facultad de Ciencias en donde se imparte la carrera de Matemáticas.

Primera parte



Segunda parte



Tercera parte



Códigos cooperativos


Este año 2012 es el año internacional de las cooperativas. ¿Qué es una cooperativa? De forma muy breve es otro tipo de organización laboral en la que, a diferencia de las empresas tradicionales, los trabajadores son socios y por tanto dividen las responsabilidades y las ganancias de manera equitativa.El fenómeno del cooperativismo no es nada nuevo, sin embargo no se ha impulsado de la misma forma en todo el mundo.

La entrada del día de hoy es muy breve. Simplemente quiero compartir un video realizado por una cooperativa de software argentina en la que se describe esta idea de uso de software libre y su inclusión en el movimiento cooperativista.

En una entrada posterior hablaré un poco más sobre la idea del desarrollo de cooperativas de software en México y cómo estas podrían ayudar a contrarestar la figura de las consultorías de software sin valor agregado además de impulsar la profesionalización del sector del desarrollo de software.

 

 

Lenguajes de programación esotéricos

Imagen usada únicamente para atraer a los curiosos.

Probablemente el título de esta entrada suena un poco a titulares que pensaríamos para diarios como “La Prensa” o algún otro de tantos amarillistas. Algunos seguramente pensaron en algún lenguaje extraño llamado Voodoo.js o Ouijaskell, pero aunque el nombre suene a esotérico, no tienen ninguna relación con cuestiones ocultistas ni mucho menos demoníacas. En esta entrada explicaremos brevemente qué son los lenguajes de programación esotéricos y algunos ejemplos curiosos de lenguajes que pertenecen a esta categoría.

Uno de los significados de la palabra esotérico, y que es el que nos interesa, es: “Que es impenetrable o de difícil acceso para la mente”. Los lenguajes de programación esotéricos son aquellos lenguajes que fueron diseñados únicamente para probar los límites del diseño de los lenguajes, como pruebas de concepto o en algunos casos simplemente como una broma o pasatiempo. Lo que tienen en común estos lenguajes y lo que les da su denominación de esotéricos es el hecho de que son muy difíciles de entender y es casi imposible programar algo útil con ellos, pero eso sí, tienen todo el poder de cualquier otro lenguaje de programación al ser Turing completos.

INTERCAL

El mas antiguo de estos lenguajes se llama INTERCAL, creado en 1972 por Don Woods y James M. Lyon, simplemente para hacer una parodia de los lenguajes de programación existentes en la época y al mismo tiempo crear uno diferente a todos los habidos. El clásico “HelloWorld!” en este lenguaje se ve así:

DO ,1
PLEASE DO ,1
SUB #1 DO ,1
SUB #2 DO ,1
SUB #3 DO ,1
SUB #4 DO ,1
SUB #5 DO ,1
SUB #6 DO ,1
SUB #7 PLEASE DO ,1
SUB #8 DO ,1
SUB #9 DO ,1
SUB #10 DO ,1
SUB #11 DO ,1
SUB #12 DO ,1
SUB #13 PLEASE READ OUT ,1
PLEASE GIVE UP

Un detalle interesante de este lenguaje es que no únicamente hubo un esfuerzo para crearlo, sino que también se dedicaron arduamente a la creación de un manual de referencia que, aunque lleno de irracionalidades y excentricidades, se distribuye bajo licencia GPL.

Brainfuck

Creado en 1993 por Urban Müller, este lenguaje, como su nombre lo indica, fue diseñado para dar unos cuantos dolores de cabeza a quien intente usarlo. Y no es para menos, aquí el tradicional “Hello World”:

+++++ +++++             initialize counter (cell #0) to 10
[                       use loop to set the next four cells to 70/100/30/10
    > +++++ ++              add  7 to cell #1
    > +++++ +++++           add 10 to cell #2
    > +++                   add  3 to cell #3
    > +                     add  1 to cell #4
    <<<< -                  decrement counter (cell #0)
]     > ++ .                print 'H'
> + .                   print 'e'
+++++ ++ .              print 'l'
.                       print 'l'
+++ .                   print 'o'
> ++ .                  print ' '
<< +++++ +++++ +++++ .  print 'W'
> .                     print 'o'
+++ .                   print 'r'
----- - .               print 'l'
----- --- .             print 'd'
> + .                   print '!'
> .                     print '\n'

Todo lo que ven a la derecha de este código son meros comentarios que tratan de explicar qué es lo que hace el programa. Lo interesante de Brainfuck es su minimalismo, pues el lenguaje está conformado únicamente por 8 instrucciones y 8 respectivos carácteres que las representan. Al ser un lenguaje tan complicado, hay quienes lo han tomado como un reto personal y han escrito código útil con este lenguaje. Se cuenta con una versión del algoritmo de descifrado DeCSS (el que se utiliza para la lectura de DVD’s) en este lenguaje.

Befunge

Este lenguaje, nacido en el mismo año que Brainfuck y cuyo autor es Chris Pressey, tomó como meta el ser el lenguaje más complicado de compilar. La idea de Befunge es tomar el código como un arreglo bidimencional y comenzar a vaciar instrucciones que serán ejecutadas de acuerdo a la guía dada por carácteres específicos (<,v,>,^). Para los que estén familiarizados un poco con lenguajes de ensamblador, befunge es también un lenguaje que se basa en pilas (stack). Aquí dos ejemplos de “Hello World!” en este lenguaje:

>              v
v  ,,,,,"Hello"< >48*,v
v,,,,,,"World!"< >25*,@
>25*"!dlrow ,olleH":v
                 v:,_@
                 >  ^

Este lenguaje tiene toda una familia de variantes, a las que se les conoce como Funges. Estas variantes retoman la idea de apuntar a la siguiente instrucción en diferentes sistemas coordenados.

Malbolge

Esta malévola invención de Ben Olmstead surgió en el año de 1998. Tiene este nombre en honor de “el octavo círculo del infierno” en “La divina comedia”. De infernal tiene bastante, pues el propósito de este lenguaje era el de ser uno en el que fuera imposible escribir algo útil. El “Hello World!” se consiguió con ayuda de un algoritmo de búsqueda implementado en LISP y es algo como esto:

('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"`CB]V?Tx

No voy a ahondar en detalles sobre este lenguaje. Creo que el ejemplo deja en claro lo difícil que es. Como nota adicional, este lenguaje tiene una limitación en la cantidad de memoria que puede manejar, por lo que no es Turing completo.

Después de estos lenguajes espero que aquellos que se quejan de Java por ser tan verboso lo valoren un poco mas. Aunque hay más lenguajes de este estilo pasemos ahora a algunos que son un tanto más artísticos.

Shakespeare

Diseñado por Jon Åslund and Karl Hasselström por el año 2001, la intención de este lenguaje es sacar al escritor que todo Hacker lleva dentro. La idea es generar código tan bello que se parezca a las obras de Shakespeare. Veamos si lo logra con el clásico ejemplo, “Hello World!”:

The Infamous Hello World Program.

Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.

                    Act I: Hamlet's insults and flattery.

                    Scene I: The insulting of Romeo.

[Enter Hamlet and Romeo]

Hamlet:
 You lying stupid fatherless big smelly half-witted coward!
 You are as stupid as the difference between a handsome rich brave
 hero and thyself! Speak your mind!

 You are as brave as the sum of your fat little stuffed misused dusty
 old rotten codpiece and a beautiful fair warm peaceful sunny summer's
 day. You are as healthy as the difference between the sum of the
 sweetest reddest rose and my father and yourself! Speak your mind!

 You are as cowardly as the sum of yourself and the difference
 between a big mighty proud kingdom and a horse. Speak your mind.

 Speak your mind!

[Exit Romeo]

                    Scene II: The praising of Juliet.

[Enter Juliet]

Hamlet:
 Thou art as sweet as the sum of the sum of Romeo and his horse and his
 black cat! Speak thy mind!

[Exit Juliet]

                    Scene III: The praising of Ophelia.

[Enter Ophelia]

Hamlet:
 Thou art as lovely as the product of a large rural town and my amazing
 bottomless embroidered purse. Speak thy mind!

 Thou art as loving as the product of the bluest clearest sweetest sky
 and the sum of a squirrel and a white horse. Thou art as beautiful as
 the difference between Juliet and thyself. Speak thy mind!

[Exeunt Ophelia and Hamlet]

                    Act II: Behind Hamlet's back.

                    Scene I: Romeo and Juliet's conversation.

[Enter Romeo and Juliet]

Romeo:
 Speak your mind. You are as worried as the sum of yourself and the
 difference between my small smooth hamster and my nose. Speak your
 mind!

Juliet:
 Speak YOUR mind! You are as bad as Hamlet! You are as small as the
 difference between the square of the difference between my little pony
 and your big hairy hound and the cube of your sorry little
 codpiece. Speak your mind!

[Exit Romeo]

                    Scene II: Juliet and Ophelia's conversation.

[Enter Ophelia]

Juliet:
 Thou art as good as the quotient between Romeo and the sum of a small
 furry animal and a leech. Speak your mind!

Ophelia:
 Thou art as disgusting as the quotient between Romeo and twice the
 difference between a mistletoe and an oozing infected blister! Speak
 your mind!

[Exeunt]

No voy a entrar en detalles de cómo funciona este lenguaje, solamente decir que utiliza aritmética básica IF y GOTO sin ningún otro tipo de estructura de control más sofisticada. Aunque no cuenta con un compilador, un programa transforma el código de Shakespeare a código en C.

Piet

Este colorido lenguaje inventado por David Morgan-Mar, debe su nombre al famoso pintor Piet Mondrian y se entiende este nombre simplemente con mirar el “Hello World!” de este lenguaje:

Aunque en vez de escribir “Hello World!” escribe “Piet”, este programa es, efectivamente, un mapa de bits cuyos colores se utilizan como instrucciones del lenguaje. Hay una paleta determinada de colores que sirven de instrucciones para que los programas escritos en Piet parezcan obras de arte abstracto.

Existen varios lenguajes de programación esotéricos además de los que brevemente se mencionaron en esta entrada. Si alguien tiene el interés de seguir explorando el mundo esotérico de los lenguajes de programación, dejo aquí el enlace para una Wiki que se dedica exclusivamente a estos lenguajes: http://esolangs.org

Biología, computación y patentes de software.

En esta entrada quiero compartir una reflexión sobre un interesante artículo. Pido una disculpa a los lectores que no entiendan el idioma inglés, pues me hubiera gustado traducir el artículo referido, pero las traducciones de artículos que antes hacía me toman mas tiempo del que puedo disponer. Además, como recomendación a todos aquellos que se dedican a alguna actividad relacionada al cómputo, el tener la capacidad de comprender textos en este idioma es casi una necesidad.

Nido de hormigas. Las que están dentro esperan por la llegada de las exploradoras anteriores.

La nota se resume en que, a través de un estudio conjunto de un computólogo y un biólogo de la universidad de Standford, se descubrió que una especie de hormigas (Pogonomyrmex barbatus) utiliza un método de búsqueda de alimento que coincide con el algoritmo usado en el protocolo de control de transmisión (TCP) en lo referente a la regulación del ancho de banda. Las hormigas regulan la cantidad de elementos que salen del nido de acuerdo al tiempo en que cada elemento regresa exitosamente, con alimento, de una exploración. Este proceso es análogo al del protocolo TCP para verificar el tiempo o latencia con la que responde un cliente al que se le hace una transferencia.

En alguna entrada anterior había publicado la traducción de una noticia sobre cómo un comportamiento biológico había llevado a la solución de un problema de redes. En el caso de esta noticia sobre las hormigas hay un detalle muy interesante. El algoritmo del comportamiento de estas hormigas fue registrado en un estudio cuya fecha es anterior a la creación del protocolo TCP, por lo que se cree que la observación de seres vivos, en particular hormigas, puede ayudar a generar nuevas soluciones a problemas de redes.

A lo largo de la historia de la humanidad el hombre ha encontrado una gran cantidad de dificultades que lo han llevado a diseñar soluciones para superarlas. Sin embargo, estas soluciones no son producto exclusivo del gran ingenio de una persona o grupo de personas. Detrás siempre existe un escrupuloso proceso de observación de la naturaleza, que tras años de evolución ha llegado a desembocar en sistemas complejos que nos dan la respuesta a una gran cantidad de problemas.

Hablando de software, un programa es la traducción a un lenguaje de máquina de un conjunto de instrucciones que queremos que la computadora realice. Gran cantidad de software está patentado en Estados Unidos porque ha resultado en un jugoso negocio para las grandes compañías de software. Como ejemplo el reciente caso de Apple vs Samsung. Pensando en el caso del protocolo TCP ¿podríamos decir que tiene un inventor? ¿Acaso las hormigas deberían cobrar regalías por toda la transmisión de datos que hacemos todos los días utilizando este protocolo de comunicación?

Así como un algoritmo puede ser pensado dos veces en la naturaleza (una por las hormigas y otra por el hombre) también hay muchas cosas que pueden ser independientemente pensadas por diferentes personas y llegarse a la misma conclusión. La escritura y el lenguaje son ejemplos muy claros de esto, así como el caso del cálculo diferencial “inventado” independientemente por Newton y Leibnitz y afortunadamente no patentado.

Si a alguno le parece que tal vez soy un exagerado y les parece ridículo pensar que alguien quiera o permita patentar cuestiones como las que antes hablaba hay una historia que cuenta James Gosling al respecto. Cuando Sun entró al juego de las patentes de software para poder defenderse de alguna infracción de patentes de las compañías rivales, se le pidió a los empleados que patentaran todo lo que pudieran patentar, derivando en un juego entre Gosling y sus compañeros para ver quién hacía la patente mas ridícula. Gosling no ganó el juego con la suya que básicamente es patentar una compuerta lógica, imaginen cuál sería la ganadora.

Afortunadamente en nuestro país, de lo poco que no le hemos copiado al vecino país del norte, aún no tenemos patentes de software. Tampoco tenemos una gran “industria” de software. Pero sí tenemos mucha gente interesada en la programación. Espero que este mismo interés nos permita preocuparnos por este tipo de políticas que afectan nuestra profesión para no permitir que algo como las patentes de software lleguen por aquí.

Cursos en línea: cómputo y mucho más

Hace ya bastante tiempo les hablamos sobre el proyecto Khan Academy, su creciente popularidad y la forma en la que intenta ser un apoyo importante en la educación.

El concepto de impartición de cursos en línea se ha seguido popularizando, llegando a importantes universidades como es el caso de Stanford que ofreció un curso sobre aprendizaje computacional y que en su momento lo difundimos en este blog.

Retomando la calidad de estos cursos, se unen varias universidades en el sitio https://www.coursera.org/
Los cursos ahora abarcan no solamente temas de computación, sino que otras áreas del conocimiento también se ven beneficiadas, tales como las humanidades, economía y matemáticas. Aunque el formato es un poco rígido, pues hay que seguir un calendario para tomar el curso, vale la pena inscribirse y atender a alguno de estos interesantes cursos.

Curso introductorio de Sociología, Universidad de Princeton


Curso de Criptografía, Universidad de Stanford

¿Qué #%&@ me salió ayer en Google?

Doodle de Turing

Lo que a ud. le salió ayer en Google es una Máquina de Turing, hoy le enseñaremos a construir su propia máquina y le explicaremos como echarla a andar.

La receta varía de cocinero a cocinero, mientras que algunos prefieren cocinar la suya en los etéreos vapores de la abstracción a otros les gusta freírla con engranes y aderezarla con mucha intuición mecánica. Nosotros usaremos un receta similar a la que usó ayer el Chef Google.

Receta para una Máquina de Turing

Usted necesitará:

  • Una cinta infinita
  • Tres símbolos: 1, 0, ▢ (uno, cero, espacio en blanco)
  • Una Cabeza Lectora© que recorrerá la cinta leyendo y escribiendo símbolos
  • Seis instrucciones simples: “muévete a la derecha”, “muévete a la izquierda”, “escribe este símbolo”, “salta a otra instrucción”, “si ves este símbolo salta a otra instrucción” y “¡deténte!”.

Procedimiento:

  1. Escriba sobre la cinta la información que quiera procesar (en binario, por favor)
  2. Coloque la Cabeza Lectora© dónde ud. guste, de preferencia sobre la información a procesar
  3. Elija concienzudamente una lista de instrucciones
  4. Introduzca sus instrucciones en la Cabeza Lectora©
  5. Prenda la Cabeza Lectora©
  6. ¡Vea como se mueve la Cabeza Lectora© sobre la cinta! ¡Vea como cambian los numeritos!
  7. Si se ejecutó una instrucción “¡deténte!” avance al paso 8, de lo contrario regrese al paso 6 (infinitamente, de ser necesario)
  8. Revise el resultado que quedó en la cinta, mire fijamente los unos y ceros, no les entienda

Muy bien, usando su flamante Máquina de Turing usted puede reproducir el funcionamiento de cualquier computadora, cualquier programa, cualquier autómata posible. Desde la comodidad de tu hogar.

¿Suena interesante la maquinita? ¿Quiere correr a la Plaza de la Computación a comprarse una? pues ¡mala suerte! las Máquinas de Turing no existen como mecanismos físicos porque, pensándolo bien, ¿de dónde fregados vamos a sacar una cinta infinita?. Eso sí, son una herramienta mental muy simple que nos permite razonar sobre problemas complejísimos y sacar conclusiones sobre los límites y las capacidades de las computadoras.

Esto puede sonarle fascinante o sumamente aburrido, el caso es que ayer a Google se le ocurrió poner un jueguito Turingniano en su página principal y enfrentar a los pobres usuarios con los esotéricos aparatejos.

No idea Turing Machine

La belleza del asunto es que aún el mismo Google, con su inmenso acervo de sitios y su inaprensible complejidad, puede ser reducido a una Máquina de Turing: una cantidad gigantesca de unos y ceros plasmados sobre la cinta cuasi-infinita de Internet, respondiendo a un conjunto de instrucciones simples.

También podríamos expresar el algoritmo de Google como los circuitos de un “robot” que contestaría nuestras preguntas, o expresarlo como una función matemática complejísima:

Fotos de Gatitos

Una función cuyos resultados podríamos obtener a mano siguiendo un procedimiento escrito y tablas impresas. Las tres cosas, el portal de internet, el robot y la función son equivalentes a una misma “máquina A(utomática)” de Turing.

Pensemos en tres herramientas distintas que, sin embargo, cumplen la misma función: una calculadora mecánica, una calculadora digital y el programa “Calculadora” de tu computadora o celular.

Como las tres herramientas realizan los mismos procedimientos el funcionamiento de las tres puede ser simulado por la misma Máquina de Turing que realiza operaciones aritméticas, se tratará de un mecanismo imaginario que resulta más poderoso que los mecanismos reales. ¿Por qué es más “poderoso” el mecanismo imaginario? bueno, las calculadoras reales están limitadas por su número de engranes o el tamaño de su memoria (una calculadora común no acepta números de más de 8 cifras), en cambio, uno puede escribir cualquier número en la cinta infinita de la Máquina de Turing y realizar cualquier operación aritmética concebible. Es el ideal platónico del cual las calculadoras reales no son más que una pálida copia.

El modelo de Turing no es el único usado por matemáticos y computólogos para estudiar lo “automáticamente calculable”, pero su elegancia lo sigue manteniendo como el favorito. Es un mecanismo simple que puede simular el funcionamiento de cualquier programa computacional posible. Es un concepto abstracto sobre el cual podemos realizar análisis matemáticos y al mismo tiempo tan concretable que puedes construirlo usando LEGOs.

Google, mi celular, el servidor donde reside este blog, el dispositivo en el que estás leyendo esto… son todos mecanismos automáticos, forman parte del infinito universo de autómatas que Turing imaginaba en 1931 mientras resolvía uno de los problemas matemáticos más difíciles del siglo XX.

Dicho problema puede expresarse así: “¿Es posible resolver todos los problemas matemáticos de forma automática?”. La respuesta que Turing encontró fue “No, hay muchos problemas matemáticos que no pueden resolverse automáticamente”. Podemos ver que se trataba de un joven matemático realmente astuto: justo cuando las computadoras comenzaban a quitarle el trabajo todo el mundo, él demostró que jamás remplazarían a los matemáticos.

Uno puede tomar la caja de herramientas mentales de míster Turing y seguir reflexionando sobre los problemas que podemos resolver de forma automática. Se descubrirán respuestas del tipo “Hay más problemas que soluciones” o “Hay problemas TAN difíciles que incluso a una máquina le daría flojera resolverlos”. Pero no todo es deprimente, después de todo hoy en día podemos preguntar “¿dónde puedo encontrar fotos de gatitos?” y Google amablemente tomará nuestro problema, lo expresará en términos matemáticos, lo resolverá de forma automática y nos dará 2.5 millones de soluciones posibles.

En fin, todo esto salió porque míster Turing hubiera cumplido cien años este 23 de junio y sus fans lo estamos festejando.

¡Feliz centenario  Alan Turing!

Alan Turing by Jin Wicked

Video de la plática de HTML5 en Telmex Hub

Puedes ver el video completo de la plática que dí en el Telmex Hub en YouTube:

Los materiales los puedes bajar del Repositorio de github.