Desarrollo Web

El proceso creativo en el desarrollo de software

¿Alguna vez has pensado que para crear un nuevo software es necesario seguir un proceso creativo y técnico que lleve desde la idea hasta su finalización?

Publicado el 03 de Agosto de 2022
Compartir

El desarrollo como proceso creativo

Al igual que un artista comienza de la nada, con una idea y un pincel, el desarrollador comienza en una pantalla vacía, a solas con un objetivo y unos conocimientos sobre cómo resolver problemas concretos.

Pero para crear una nueva pieza de software, algo que pueda satisfacer la necesidad del programador, y al igual que en el caso del artista, es necesario seguir un proceso técnico y creativo que lleve desde la idea hasta su realización y posterior finalización y retocado. Y al igual que en el arte, el programador que busca nuevas soluciones a nuevos problemas, o incluso nuevas soluciones a problemas previamente existentes, tiende a seguir una simple filosofía: “Si la solución funciona y es efectiva, entonces es una solución válida”.

La psicología de la creatividad

La creatividad es la capacidad humana de crear nuevas ideas o conceptos, partiendo de asociaciones no exploradas de otros conceptos e ideas previas, que llamamos comúnmente “referencias” o “fuentes de inspiración”. Esta habilidad por tanto es innata al ser humano y a su proceso cognitivo.

Muchos artistas buscan un estado de claridad mental a la hora de crear, este estado es bien conocido por la investigación en psicología desde 1975 y es denominado flujo, o más popularmente, “la zona”). En este estado mental el artista se encuentra relajado y con una visión puramente centrada en su obra, los requisitos para llevarla a cabo y los obstáculos que puede encontrar, desarrollando secuencialmente los pasos necesarios para llevarla a término. Además, este estado se caracteriza por la absorción en la tarea y la pérdida total o parcial del sentido del paso del tiempo.

Para muchos programadores la existencia de “la zona” es bien conocida, ya conocieran o no previamente el término, y generalmente suele forzarse buscando un entorno calmado para desarrollar o utilizando un tipo de música que ayude a introducirse progresivamente en este estado mental. Este fenómeno, aplicado al desarrollo, también ha sido estudiado ampliamente y podemos encontrar publicaciones científicas que entran en el fenómeno en mayor profundidad.

La necesidad como madre de la creatividad

Es conocido de manera popular el dicho que reza: “Es la necesidad la madre de la creatividad”. Esto es referido a que cuando carecemos de las herramientas necesarias, o los conocimientos pertinentes, tendemos a actuar con ingenuidad y buscar soluciones donde antes no habríamos pensado en buscarlas.

En el mundo del software muchos de los avances y logros han sido debidos a la necesidad del momento de crear un cierto producto o de alcanzar un cierto punto para el que, por limitaciones técnicas del momento o de los equipos, esto no era posible. A continuación, veremos dos ejemplos, uno relacionado con el impulso de la técnica debido a las limitaciones del momento y otro con la búsqueda de las limitaciones del pasado para buscar de nuevo esa misma chispa de creatividad.

Elite (1984)

Durante la década de los 80 el mundo del computador personal acababa de comenzar, e inicialmente se veían como herramientas de cálculo con unas posibilidades muy limitadas y como una rareza disponible sólo para unos cuantos aficionados que estuvieran dispuestos a enfrentarse a lo que todavía no era un mundo amigable para el usuario medio.

En 1981 Acorn Computers decidió lanzar al mercado uno de los primeros microcomputadores, llamado BBC Micro, basado en la idea de acercar la computación de propósito general a un mayor público que el entonces disponible, que se limitaba a grandes empresas y oficinas. Este computador tenía unas revolucionarias especificaciones para la época, con hasta 32Kb de memoria RAM, 48Kb de disco y una velocidad de reloj de 4Mhz, lo que sin duda a día de hoy significa hasta 500 veces menos potencia que el móvil menos potente del mercado.

En 1984 Ian Bell y David Braben, dos ingenieros informáticos que se conocieron en Cambridge, lanzan al mercado un juego para este microcomputador que contenía una premisa muy arriesgada: Un universo 3D virtualmente infinito lleno de planetas, estaciones y enemigos.

No es de extrañar que los mayores despliegues de creatividad en el desarrollo hayan surgido con frecuencia debido a las limitaciones técnicas, dado que cuando se carece de la capacidad para hacer algo de una manera “veraz”, muchas veces es necesario reproducir dichas funcionalidades de una manera “creíble”. Y, como es natural, por las especificaciones del propio computador, realizar una proeza como la que estos dos desarrolladores pretendían implicaba muchos problemas a un nivel técnico que parecían completamente insalvables y a la vez la necesidad de unas soluciones lo suficientemente creativas:

  • La tecnología para renderizar 3D y llevar su gestión de manera consistente no existía aún en esta escala, es decir, para llevar a la práctica esta visión tuvieron que pensar en alguna manera de renderizar 3D utilizando vectores (gráficos vectoriales), de forma que el 3D fuera una simple colección de líneas en dos dimensiones que aumentara en escala o disminuyera teniendo en cuenta la distancia del jugador a los objetos, dando un aspecto de wireframe o jaula a todos los modelos del juego.

  • Era imposible almacenar un universo tan vasto con un almacenamiento tan escaso, por esto los creadores decidieron utilizar un innovador sistema de generación de contenido mediante generación por procedimientos o generación procedural, esto es, que en vez de llenar el disco con el contenido posible, se generan una serie de algoritmos que dados un número cualquiera, y de forma consistente y repetible para cada uno, genera un contenido en forma de planetas, soles, naves…etc con todos los requisitos necesarios. De esta forma no pensaban en cómo almacenar un universo, sino en cuales serían las reglas lógicas y matemáticas que pudieran crear un universo coherente para cualquier persona y desde cero cada vez que el juego fuera ejecutado.

Consolas de fantasía

Las consolas de fantasía son emuladores de videoconsolas que nunca existieron, pero que proporcionan unas limitaciones similares a consolas retro existentes (NES, Super NES…), y su objetivo es inspirar a los desarrolladores a crear juegos, piezas visuales y herramientas basadas en las limitaciones técnicas y en el conocimiento del funcionamiento interno de consolas que son hoy en día consideradas arcaicas, a la vez que se suministra una forma más sencilla y moderna (Y funcional en sistemas actuales) de desarrollar y ejecutar dichos juegos.

El ejemplo más conocido es la consola PICO-8, basada de forma evidente en las limitaciones de la clásica Nintendo Entertainment System (NES), de forma que todos los juegos creados con ella tengan las siguientes limitaciones:

  • Una visualización de únicamente 200x200 píxeles
  • Tamaños de archivo, o cartuchos, de un máximo de 32Kb de tamaño
  • Programación usando el lenguaje de scripting LUA
  • Un máximo de 256 sprites, o imágenes, de 8x8 píxeles (Pudiendo combinar varios para obtener 16x16, 32x32…etc)
  • Y una memoria para mapa de juego de hasta 128x32 celdillas (de 8x8 píxeles)
  • Paleta de color limitada a 8 colores fijos

El desarrollo se realiza dentro de la propia consola y el resultado puede ejecutarse de forma inmediata, de forma que se facilita llevar las ideas a su realización con mucha rapidez.

Y lo más atractivo de estas limitaciones es el uso de la creatividad y organización propia del desarrollador para lograr introducir ideas modernas o impensables en especificaciones tan humildes. De esta forma un gran número de desarrolladores simplemente desarrolla para estas consolas para traer conceptos únicos o existentes a un mundo donde los múltiples núcleos, las increíbles cantidades de RAM y especificaciones actuales que damos por sentado son simplemente inexistentes, llevando a crear proyectos tan interesantes como un AutoCAD que genera modelos 3D de proyecciones 2D en el editor, o simplemente la creación de pequeñas piezas visuales en formato gif utilizando un código que pueda caber en un Tweet.

Ademád de PICO-8, los desarrolladores disponemos de otras consolas de fantasía para desatar nuestra creatividad, incluyendo algunas de código abierto como TIC-80 (Que emula aproximadamente las limitaciones de una SNES, de más capacidad que la NES) o Bitmelo, que además se programa usando JavaScript.

La creatividad en el desarrollo de productos a medida

Una de las tareas más frecuentes del programador en el papel de analista, y uno de los trabajos más habituales, es el de consultoría y desarrollo de productos a medida para clientes de diferentes campos y áreas de trabajo. En estos casos el desarrollador tiene que hacer una labor donde la técnica acompaña en gran medida a la creatividad, ya que la resolución de problemas requiere tanto de un conocimiento técnico como de un acercamiento ingenuo y original a las necesidades que el producto debe de ser capaz de resolver.

Entrevistas y formación específica

La primera parte de cualquier desarrollo es sin duda el proceso llamado “toma de requisitos”, donde el cliente expone su problema, soluciones existentes al mismo y cuáles serían las características esenciales de una buena solución al problema expuesto.

Este proceso, en algunos casos no siempre atendido como es necesario, es probablemente la parte más importante de cualquier desarrollo, pues las entrevistas con perfiles técnicos distintos al nuestro (como desarrolladores) nos proporcionan una forma siempre distinta de entender el flujo de trabajo y cómo otros profesionales atacan en su día a día los problemas que puedan surgirles. En este punto no es sólo necesario escuchar las necesidades del cliente, sino ser capaz de hacerse con su terminología, su flujo de trabajo y entender las limitaciones a las que se enfrentan; pues una solución, por muy creativa que sea, si no tiene en cuenta las limitaciones existentes nunca podrá ser satisfactoria para el cliente.

La solución ingenua

A la hora de buscar una posible solución a medida para un cliente, y a la hora de cualquier otro desarrollo, recibí hace un tiempo un consejo de un ingeniero e investigador que siempre he considerado muy importante antes de empezar a plantear el problema de una manera técnica:

Antes incluso de buscar cualquier referencia, producto que solucione una necesidad similar o de pensar en el stack técnico, intenta buscar la solución ingenua: Aquella solución que en principio pienses que puede solucionar todas las necesidades, sin pensar excesivamente a priori en sus limitaciones.

Este ejercicio mental tiene como objetivo no dejarse influenciar, antes de tiempo, por las imposiciones, las modas o soluciones “oficialmente” aceptadas. Es necesario entender que la solución más extendida no tiene por qué ser necesariamente la más óptima, ni la única disponible, y la creatividad siempre se crece cuando dejamos que fluya libremente, sin más influencias que los datos con los que la hemos alimentado.

La búsqueda de referencias

Una vez hallada nuestra “solución ingenua” lo importante es ponerla a prueba, buscar los casos límites, cómo puede resistir a un usuario o cómo puede adaptarse al flujo de nuestro cliente. En este paso buscamos también otros productos que tengan soluciones a problemas similares, y no será de extrañar encontrar en ocasiones soluciones con cierta similitud (más cercana o lejana dependiendo de la calidad de nuestro análisis) a lo que hayamos pensado o incluso soluciones radicalmente distintas, pero con un enfoque paralelo al nuestro.

En este momento es cuando empezaremos a comprobar los límites de nuestra idea, será frecuente pensar “vaya, esto yo no lo había tenido en cuenta” al ver cómo las distintas implementaciones se presentan ante nosotros.

Si el proceso ha sido fructífero, finalmente tendremos mayor comprensión de las limitaciones y del por qué las soluciones han sido orientadas hacia una u otra dirección. Eso nos proporcionará también mayor capacidad para obtener una solución que, si bien posiblemente no se aparte radicalmente de las ya propuestas, tenga un cierto nivel de originalidad al haber sido capaces de importar ciertas ideas de nuestra “solución ingenua”.

El stack tecnológico

El último paso será encontrar el stack tecnológico que resuelva las necesidades del producto, esta fase siempre debería de ser la última del análisis, ya que la tecnología debería de servir a la idea y no vice-versa. En esta etapa se consideran todos los pros y contras que podríamos encontrar en un producto típico:

  • ¿Requiere la base de datos de alta disponibilidad y concurrencia o simplemente se requiere una persistencia segura?
  • ¿Cuantas conexiones concurrentes debe gestionar el backend y cuál es la potencia del servidor del que disponemos?
  • ¿El front-end, aplicación web o móvil, debe de ser rápida y eficiente o altamente accesible o adaptable a un gran número de dispositivos? (Ya que generalmente suele sacrificarse una por otra)

Responder a este tipo de preguntas basándonos en lo que ya tenemos nos proporcionará generalmente un stack tecnológico que impulsará la creatividad a la hora de implementar nuestra idea. La contrapartida sería un stack que retrasaría nuestros esfuerzos y que, en muchos casos, podría forzarnos a realizar implementaciones de formas que no nos resultaran convincentes.

El desarrollo como asistencia al arte

A día de hoy muchos campos podrían considerarse artísticos y podría hablarse de la asistencia necesaria y continuada del desarrollo en ellos, como en el caso del desarrollo de videojuegos, la composición musical o el tratamiento de efectos especiales o VFX en el cine. Sin embargo, si hablamos de un ejemplo de un campo, en el que el desarrollo sea piedra angular de dicho campo, podríamos hablar del arte generativo en el ámbito pictórico.

El arte generativo es aquel en el que el artista en vez de planear y realizar una obra pictórica, desarrolla un algoritmo informático que, usando un conjunto de reglas concreto y definido por el artista, realiza el resultado final de la obra. Por tanto, el resultado final no será producto único de la mano y la visión estética del autor, sino de una combinación de la técnica, la innovación y el conocimiento informático y matemático del mismo, un conjunto de nuevas ideas aplicadas o extraídas de otros campos de conocimiento, y el resultado producido por el código generado durante estos procesos.

Cuando en la anterior sección hablábamos de esos pequeños tweets que generaban imágenes, esas imágenes o pequeños bucles podrían ser un ejemplo de humilde arte generativo. Otros ejemplos de artistas contemporáneos podrían incluir la obra de Manolo Gamboa Naon, un artista argentino que utiliza estas técnicas para realizar sus propios cuadros:

También y gracias a que el mundo del desarrollo es un mundo profundamente matemático, y que otras ramas técnicas que pueden ser consideradas también artísticas se basan en limitaciones físicas modelables por modelos puramente matemáticos, el arte generativo también ha podido ser llevado a otros muchos campos, como por ejemplo la arquitectura. En este caso podemos ver la obra de Michael Hansmeyer, que, combinando los modelos necesarios para dar integridad a columnas estructurales, su visión creativa y los algoritmos generativos, pudo crear columnas con diseños muy originales.

Para concluir

Hoy en día técnica y creatividad se funden cada vez más y de forma indivisible en una sola cosa. El desarrollo forma parte integral, cada vez más, de las artes que en su día consideramos plenamente analógicas.

Y hoy en día, ya sea formando parte del desarrollo de las herramientas para dichas artes o como pieza integral de la generación de las obras, el mundo del desarrollo ya no puede ser considerado simplemente un campo técnico, pues el artista, el arte y el medio tienden a difuminarse y fundirse en una misma cosa, ya que al fin y al cabo el arte sólo es arte, y su origen nunca es parte indispensable para su disfrute.


Compartir este post

También te puede interesar...

Videojuegos con Python y Pyglet

Curso de Videojuegos con Python y Pyglet

2 horas y 3 minutos · Curso

Aprende con este Curso a desarrollar interfaces para aplicaciones y/o juegos en Python, profundiza conocimientos en el uso de componentes de Pyglet y conoce cómo …

  • Lenguajes de programación
Curso de desarrollo de videojuegos básicos con Phaser

Curso de desarrollo de videojuegos básicos con Phaser

3 horas y 13 minutos · Curso

Con este curso aprenderás a desarrollar videojuegos 2D HTML5 utilizando el framework Phaser y el lenguaje de programación TypeScript, además lo harás de una forma …

  • Herramientas
Protección jurídica del software

Protección jurídica del software

36 minutos y 46 segundos · Empresas

A través de este taller conocerás las posibilidades existentes para la protección jurídica de tu software, haciendo especial hincapié en las licencias de software, y …

  • Desarrollo
Artículos
Ver todos