Programar es divertido

8 octubre, 2020
programar-videojuegos-divertido-uoc

«Tras un duro día en el trabajo como ingeniero de software y programador, finalmente vuelves a casa. Antes de ir a dormir, por fin tienes un ratito para desconectar de todo jugando a tu videojuego favorito. El objetivo es desarrollar y desplegar algoritmos en código máquina con los que automatizar procesos de complejidad creciente. «

Aunque el concepto de diversión es subjetivo y definir un juego no es trivial, es muy popular su concepción basada en el reto o desafío. Este puede adoptar muchas formas, desde sortear barreras físicas en un mundo virtual (un Super Mario) a resolver algún tipo de rompecabezas (una mazmorra del Zelda). En este grupo de los rompecabezas, existe el curioso género de los programming games, o «juegos de programación», donde el desafío a resolver se presenta como un problema de programación puro y duro. A menudo, la estética e interfaz del juego ya se basan en una metáfora interna de la computadora y el código debe escribirse explícitamente, no es solo una cuestión pensar estrategias algorítmicamente. Pero sobre todo, es interesante el hecho de que se plantean como productos orientados sobre todo al entretenimiento, no como juegos serios o formativos. ¡El hecho de programar es lo divertido!

Además, en el Máster universitario de Diseño y Programación de Videojuegos de la UOC conocemos en profundidad el diseño de la experiencia de juego y la programación.

¡Vamos a pasar un buen rato! (juego: Shenzhen I/O, by Zachatronics)

Si bien este género como tal ya lo identifica Wolf en su «The medium of the video game» en 2001, en los últimos años existe un resurgimiento, sobretodo desde 2014. A propósito del proyecto «Programar para Aprender (PROxA)» del eLearn Center, sobre como estudiar la programación, llevamos a cabo un estudio sobre la plataforma de distribución Steam para tener una idea general sobre este tipo de juegos. Si bien nos centramos en esta plataforma para el entorno PC, estos juegos también son populares en plataformas de móvil como la Play Store, pero con productos quizá más orientados a un público infantil. En total se localizaron 116 productos de este tipo a fecha de Mayo 2020. Pero no todos aplican, pues en algunos casos se trata de herramientas de desarrollo (no juegos) o de juegos que incorporan herramientas de modding, pero no son propiamente de programación. En total, quedan unos 70. Desde 2014 hasta ahora se ve una clara tendencia al alza, con entre 10 y 20 juegos nuevos cada año, y 16 juegos más anunciados como «próximamente».

Un vistazo a sus tags (en inglés) proporciona una idea más en profundidad de sus principales propiedades, más allá de la programación. Es interesante comentar antes que en la plataforma Steam, los tags los definen los propios usuarios. La mayoría resultan ser juegos Indie y con una inclinación hacia la presentación de desafíos difíciles (alrededor del 33%), si bien en algunos casos se detectan etiquetas «de broma», indicando como juegos casuales algunos que son en realidad bastante complicados. Alrededor del 18,5% todavía están en desarrollo activo, como juegos en Acceso Anticipado. Además, también es interesante ver que el ángulo educativo, aunque menor, no pasa desapercibido, y alrededor del 31% están etiquetados de este modo. Los sub-géneros más populares entre este tipo de juegos son los de Puzzle y Simulación, con algunos casos de juegos de aventuras.

Tags más populares de los «programming games» en la plataforma Steam.

Entre todos los juego de este tipo, sin duda destacan dos compañías cuyos juegos son los ejemplos de manual, y las mejores opciones para sumergirse en el género. Por una parte, está Tomorrow Corporation, con sus dos juegos «Human resource Machine» y «7 Billion Humans», donde desarrollamos programas combinando bloques de código predefinidos (tipo Scratch). No por su aspecto simplista, con dibujitos, son sencillos. Alerta que tus programas se puntúan por optimización en espacio y en tiempo. Por otra parte, tenemos a Zachatronics, quizá el desarrollador que más ha capitalizado este género, con un amplio catálogo de todo tipo. ¿Automatización de células de fabricación flexible con bloques de código? No hay problema. ¿Procesamiento paralelo de E/S en ensamblador a través de una interfaz modo texto? También. Mejor aún, dispone de un programa de licencias gratuitas para todo entorno académico sin ánimo de lucro (al que nos incorporamos 30 segundos después de saberlo).

Pero también vale la pena mencionar que hay casos especiales, donde la programación no es el propósito en si mismo, sino una herramienta en el contexto de un juego de aventuras donde la narrativa es más importante. Un ejemplo es el Else Heart.Break(). O también tenemos MMORPGs como Adventure Land (en Acceso Anticipado).

Human Resource Machine: las máquinas dan trabajo a los humanos. (by Tomorrow Corporation)

Human Resource Machine: las máquinas dan trabajo a los humanos. (by Tomorrow Corporation)

Quizá la pregunta interesante es si estos juegos sirven para aprender a programar. Hay que reiterar que no se trata de juegos creados con un objetivo puramente de aprendizaje, sinó para el entretenimento. Pero claro está, de un público objetivo que considera divertido resolver este tipo de problemas, igual que hay quien hace crucigramas o sudokus. Y los hay que rápidamente se hacen complicados (recordemos, un tercio están etiquetados como «difíciles»). A pesar de ello, tras su estudio, si que se puede considerar que algunos contemplan una pequeña parte de un temario de iniciación a la programación, o pueden ser útiles como introducción al pensamiento computacional. Partiendo del estudio de B. A. Becker y T. Fitzpatrick, “What do cs1 syllabi reveal about our expectations of introductory programming students?” (2019), y un poquito del Computer Science Curricula 2013 de la ACM, a continuación se enumeran los objetivos de aprendizaje típicos de un temario de iniciación a la programación detectados entre los distintos juegos analizados:

  • Resolución de problemas y diseño de algoritmos..
  • Escritura de código.
  • Debug y test mediante ejecución paso a paso.
  • Dominio de sentencias de selección (tipo «if»).
  • Estructuras iterativas (tipo «while», pero a menudo «goto»).
  • Uso de variables y operadores.
  • Llamada a funciones.
  • (En mucha menor medida) Uso de arrays, listas y objetos.

Pero estrictamente, solo en unos pocos realmente se llega a codificar, ya sea simplificando mediante bloques de código o con texto como en la vida real (12 y 13 casos, respectivamente). Así pues, la conclusión es que servirían en los primeros compases de una asignatura de iniciación a la programación, pero tampoco para empezar desde cero o como recurso auto-contenido. No por ello deja de ser un género muy interesante, ya sea para despertar el gusanillo por la programación, o para alguien a quién ya le va el tema y quiere un desafio. Como en todos los juegos, solo hay que buscar uno que tenga el nivel de dificultad adecuado.

Eso sí, en todos mucho «GOTO» siempre. No sé si Dijsktra estaría muy contento…

Actualización (30/10/2020): Ya ha se ha publicado en abierto el artículo de investigación asociado: https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9206214 

(Visited 103 times, 1 visits today)
Autor / Autora
Joan Arnedo Moreno
Comentarios
perito informatico13 octubre, 2020 a las 3:55 pm

Es genial contar con contenido como este en el que nos animan y motivan a aprender programar. Gracias por compartirlo. Me ha encantado la publicación

Responder
Deja un comentario