Un chiste que me he encontrado ya varias veces por internet es el que se cuenta en el tuit que encabeza este artículo. El chiste se basa en la intuición de que saber qué cosas son fáciles de programar y cuáles son difíciles es difícil para un profano. Una de las iteraciones más famosas de este chiste es
. Si este chiste se repite tanto es porque a nivel superficial resuena con experiencias que hemos tenido. Sin embargo, creo que puede ser interesante darle otra vuelta de tuerca. Tal vez la intuición del diseñador sobre cuánto trabajo lleva algo no está tan errada y es la respuesta del programador la que se está dejando cosas.
Vamos a centrarnos en la versión concreta del tuit con el demonio y la bufanda. Y vamos a hacer una de las cosas menos graciosas que existen en este planeta: explicar un chiste. Asumiendo un oyente programador, la gracia está en que el oyente reconoce que la tarea del demonio consiste en un script de gameplay bastante simple en el que se crea el objeto bajo tierra, se crean un par de objetos más para las partículas y y efectos de sonido de la explosión de lava y se reproduce la animación del demonio de salir de bajo tierra mientras se eleva su posición hasta dejarlo sobre el suelo. Por otro lado, se reconoce que el código necesario para la bufanda consiste en una compleja simulación física en la que la bufanda se dobla, sigue los movimientos del personaje y ondea al viento sin atravesar otros objetos. Esto crea una disonancia con lo vistosas que son ambas tareas y el trabajo que lleva programarlas. La del demonio sería un momento espectacular y memorable del juego mientras que seguramente muchos jugadores ni se den cuenta de que el jugador lleva bufanda. En esa disonancia entre percepción y cantidad de trabajo está la gracia.
Esto es cierto, hasta cierto punto. Es verdad que la tarea del demonio requiere mucho menos trabajo.
. Si miramos las dos tareas desde la cantidad de trabajo
que requieren, la del demonio es, efectivamente, muy fácil. Ahora bien, eso requeriría ignorar todo el trabajo que conlleva hacer el modelo, las texturas, las animaciones, los efectos de partículas, de luces, de sonido y de cámara, los scripts de inteligencia artificial y en general todo el resto del trabajo necesario para que en el juego haya un demonio de lava. Todas estas cosas, que son el grueso del trabajo, sí que contribuyen a formar esa intuición que tiene el diseñador de cuánto esfuerzo va a llevar la tarea. Cuanto el programador dice que la primera tarea es fácil, lo es
, si ignora todo el trabajo que el resto del equipo tiene que hacer para llevarla a cabo. Cuando se queja de la segunda, lo hace porque requiere mucho esfuerzo
.
Si cogemos la versión del xkcd, sucede algo ligeramente distinto pero similar. La tarea de saber si el usuario de la app está en un parque nacional es fácil porque solamente hay que mirar la ubicación de GPS del teléfono y compararla con la ubicación de los distintos parques nacionales de Estados Unidos. La tarea de saber si en la foto hay un pájaro es difícil porque requiere de complicada tecnología de redes neuronales para analizar y clasificar la imagen, un campo que sigue en desarrollo activo y en el que todavía no hay soluciones definitivas establecidas. Si miramos un poco, la primera tarea no es inherentemente fácil. Sólo es fácil porque otra persona ya ha resuelto gran parte antes, y al personaje del cómic sólo le falta unir los puntos. GPS es un enorme proyecto logístico del ejército de los Estados Unidos que fue muy costoso de crear y requiere mucho trabajo y dinero para mantenerlo. La parte difícil de responder a "¿estoy en un parque nacional?" es responder a la pregunta "¿dónde estoy?", uno de los retos más antiguos y duraderos de la historia de la tecnología y al que se han dedicado miles de horas para desarrollar multitud de soluciones distintas a lo largo de la historia. Convenientemente, hoy en día ese problema, la parte difícil y cara, ya ha sido resuelto por otros, por lo que la tarea es fácil. La otra pregunta difícil es "¿dónde están los parques nacionales?". El mundo no vino con mapas. La cartografía ha sido una importantísima rama de la ciencia durante siglos, especialmente en el siglo XVI. Que hoy en día ya haya sido resuelto por otros no significa que haya sido un problema fácil.
Comparando con la parte del análisis de imagen, éste es todavía un campo bastante jóven en el que la mayoría de progreso ha sucedido en los últimos 10 años y en el que para muchos problemas todavía no hay soluciones hechas que uno pueda simplemente descargarse de GitHub y usar, por lo que la tarea consiste en hacer el trabajo de verdad y no reusar el trabajo de otro. Esto la hace, efectivamente, bastante más difícil, pero tampoco cuesta tanto imaginar un futuro no tan lejano en el que una biblioteca open source sea capaz de decir con mucha fiabilidad si una imagen contiene o no un pájaro.