“Hacía que lo misterioso se volviese diáfano”
Es bien sabido que el desarrollo software no suele ser asociado con disciplinas artísticas sino técnicas; universidades de todo el planeta se plantean el reto de enseñar el software como una “ingeniería” o una “ciencia” orientada a ser exacta, cosa que inteligentemente ya ponía en manifiesto como una contradicción en sí misma Edsger Dijkstra en su EWD 1036 (Inglés) titulado “Sobre la crueldad de enseñar realmente ciencias de la computación” en 1988.
Varios de estos fenómenos se han agrupado con el nombre de “Ingeniería de software”. Como la economía se conoce como “La ciencia miserable”, la ingeniería de software debería conocerse como “La disciplina condenada”, condenada al fracaso porque ni siquiera puede acercarse a su objetivo, ya que su objetivo es contradictorio en sí mismo. La ingeniería de software, por supuesto, se presenta a sí misma como otra causa digna, pero eso es un lavado de ojos: si lees cuidadosamente su literatura y analizas lo que realmente hacen sus devotos, descubrirás que la ingeniería de software ha aceptado como su estatuto “Cómo programar si no puedes”.
Sin adentrarnos en el extenso debate que ya se ha dado sobre este tema, parto de esta hipótesis que plantea como imposible el desarrollo de software como lo haría un ingeniero civil en una obra, o un ingeniero mecánico con una pieza. El software es distinto, aunque pueden ser herramientas, las matemáticas, ciencias exactas y las prácticas naturales de la ingeniería no se pueden aplicar a la construcción del software. Entonces queda en el aire el cómo definir el desarrollo de software, esto es lo que me planteo responder hoy.
El arte utilitario
Es aquel que incorpora los ideales de composición y creatividad a objetos de uso diario como una revista, una lámpara o una taza. Es importante destacar que no todos los objetos creados son arte en sí mismos, pues requiere que sus elementos sean organizados bajo un mismo sentido estético.
En esta categorización podría entrar todo el desarrollo de interfaces gráficas y experiencia de usuario (UI/UX), que se construye regularmente sobre diseños previamente plasmados en imagen por diseñadores gráficos. Aunque los diseñadores le den un marco de trabajo artístico, es la función de los desarrolladores de experiencias de usuario quienes desarrollan las transiciones, widgets, sombras y animaciones que contiene el software (página web, aplicación de escritorio o para móviles).
La belleza en la codificación
No conforme con la utilidad escencial de cualquier producto de software, existe dentro de la misma disciplina una tendencia a simplificar modelos de abstracción, lenguajes de programación e incluso entornos de desarrollo con la única finalidad de hacer el oficio más “placentero” para el desarrollador de software.
Esta tendencia empieza a tener importancia a partir de la creación del lenguaje BCPL (Basic Combined Programming Language) diseñado por Martin Richards en la Universidad de Cambridge en la década de los 60’s intentando simplificar el lenguaje CPL(Combined Programming Language) desarrollado por el Laboratorio de Matemáticas en la Universidad de Cambridge y la Unidad Computación de la Universidad de Londres haciéndolo más elegante, ordenado y fácil de adaptar. Esta misma tendencia se siguió para la creación del lenguaje B y posteriormente para el mítico (y aún vigente) lenguaje C.
En resumen, la historia del desarrollo de lenguajes de programación va conforme a la creación de lenguajes que, no sólo puedan extender la complejidad de las abstracciones propuestas en las llamadas “ciencias de la computación” como el uso de memoria, la programación concurrente, funcional o la orientación a objetos, sino también facilitar la lectura y promover la belleza de los mismos. Dos claros ejemplos de esto son los lenguajes de programación Ruby y Python a quienes sus desarrolladores le escribieron una serie de reglas llamadas “The zen of python” en las que destacan:
- Bello es mejor que feo.
- Explícito es mejor que implícito.
- Simple es mejor que complejo.
- Complejo es mejor que complicado.
- Plano es mejor que anidado.
Y en el caso de Ruby, su diseño reflexivo y orientado a la simplicidad permite la creación de código no sólo entendible, sino con todos los componentes estéticos:
#Fibonacci sequence in Ruby
def fibonacci( n )
return n if ( 0..1 ).include? n
( fibonacci( n - 1 ) + fibonacci( n - 2 ) )
end
puts fibonacci( 5 )
Ontología como punto de partida
La ontología es una rama de la filosofía que pretende estudiar lo que existe, así como las relaciones entre los entes existentes, también es llamada “metafísica general”.
Existe un gran componente ontológico en el desarrollo del software, viniendo éste de ser un oficio en principio marginado, no relevante y relegado a las mujeres evidentemente menospreciadas en su época (que en su momento empezaban apenas a incluirse como parte de la academia y las fuerzas laborales), fue una de ellas (Ada Lovelace) la que creó formalmente el primer programa de computadora.
No es casualidad que una disciplina que fue iniciada y dominada por mujeres en su primera etapa fuera objeto de un sin fin de influencias de todas las ramas de la existencia, desde la estética hasta la científica. Las mujeres, al ser el género más asociado a las ciencias sociales1, impactaron de forma positiva y definitiva la subsecuente evolución ontológica del desarrollo de software.
La influencia de las mujeres en este sentido es invaluable, los ejemplos de esto sobran, como el de Grace Hopper siendo la creadora del primer compilador de la historia o Margaret Hamilton quien desarrolla el software de navegación “on-board” para el Programa Espacial Apolo.
Otro bonito ejemplo de la ontología aplicada a la programación, lo escriben Randall B. Smith y David Ungar en un paper titulado “La programación como experiencia: La inspiración para Self” específicamente en una sección dedicada a su motivación por escribirlo (traducida):
Los programadores son seres humanos, inmersos en un mundo de experiencia sensorial, que actúan y responden a algo más que al pensamiento racional. Por supuesto, para ser efectivos, los programadores necesitan la semántica del lenguaje lógico, pero también necesitan cosas como confianza, comodidad y satisfacción, aspectos de la experiencia que están más allá del alcance de la lógica pura.
Una mirada al futuro
En todas las áreas de la humanidad, la historia tiende a repetirse, como lo vimos en las artes plásticas pasando de las pinturas rupestres a la intensidad y precisión del arte renacentista, luego a la profundidad del barroco para llegar a la máxima expresión de la simplificación con el arte conceptual así mismo podemos reducir la historia del desarrollo de software de la incipiencia a intensidad y profundidad terminando en la máxima simplificación.
En contra del pensamiento popular, que expresa que el desarrollo de software tiene la tendencia de desaparecer con el avance de la inteligencia artificial, así como pasó en las artes plásticas, creo que el futuro del oficio está destinado a que trabajemos en conceptos más que en implementaciones. Hay varios ejemplos de lo que esto significa, siendo el más reciente y famoso Copilot de Github.
Los humanos avanzamos porque somos los únicos animales que podemos pensar en conceptos, mitos y podemos expresarlo a través del lenguaje. Todas estas abstracciones y motivaciones seguirán existiendo a pesar del desarrollo de herramientas que nos ayuden a perfeccionarnos.
Conclusiones
El desarrollo de software es un oficio orientado a la expresión artística, siendo la mejor representación de esto los videojuegos, pero también desde un punto de vista no-contemplativo sino utilitario, la programación enfoca sus esfuerzos en crear más y mejores abstracciones para más bellos resultados.
Este artículo puedes leerlo también en el blog de nuestro desarrollador Juan Pablo, donde también puedes encontrar más temas de tu interés: https://juan-pablo.net/es/software-art/
1 Según un estudio del 2015, el 66% de los investigadores en las ciencias sociales son mujeres. Fuente.