lunes, 10 de marzo de 2014

El programador es un pequeño Dios

Empieza una vez más el cursado en "mi" Universidad, y como docente de una de las comisiones de teoría de la materia "Fundamentos de Programación"  tengo la enorme responsabilidad de presentarles la programación por primera vez a muchos jóvenes ingresantes. Es una oportunidad única para que empiecen motivados y con el pie derecho, para que lo vean como algo atrapante y divertido, y no como una materia más. Y es en este contexto, donde cada año al preparar esos primeros 15 minutos de la primer clase, divago sobre la naturaleza de la programación, como lo voy a hacer en este post. Pero antes de seguir leyendo, estén advertidos de que será una ensalada de cosas muy subjetivas relacionadas de formas cuestionables.

Miles de artículos se han escrito debatiendo acerca de la naturaleza de la programación, ¿arte o ciencia? Si me preguntan a mi, es ambas cosas, pero primero digo arte, porque lo de ciencia lo doy por obvio, mientras que lo de arte es lo más discutido. De todas, formas, no es esta pregunta el eje de este post, sino que pretendo volcar en algunas lineas una visión general y motivadora de la parte que más disfruto de esta maravillosa actividad, la visión que me gustaría transmitir a mis alumnos y compañeros para alentarlos a disfrutar de los desafíos como yo lo hice cuando estaba aprendiendo, y como lo sigo haciendo en la mayoría de los casos.

Y voy a empezar robando una linea argumentativa a Pablo Amster, quien hace mucho impartió en mi universidad una charla titulada "La belleza de la matemática", porque me pareció una muy linda analogía, y porque siempre sostengo que la programación y la matemática tienen los mismos mecanismos y el mismo tipo de belleza. Pablo empezaba citando a Vicente Huidobro, un escritor que alguna vez escribió: "El poeta es un pequeño Dios". Una frase sencilla, pero interesante, que pone al poeta en el lugar de un creador que crea un mundo para darle vida a través de sus palabras y su imaginación, que decide reglas y dispone de los elementos y personajes a su antojo para trazar historias y destinos. Abstractas como son, la matemática y también la programación comparten con la literatura esa libertad para crear mundos imaginarios, donde el matemático/programador, mediante elementos diferentes, define sus reglas, juega con sus personajes, y prueba destinos para obtener resultados muchas veces asombrosos. Y el programador, como el matemático, es capaz de encontrar belleza en la simpleza de una fórmula o un algoritmo, aunque para llegar a ella requiera de una ciencia exacta y dura, porque también requiere de enorme creatividad para lograr ver las cosas desde el punto de vista adecuado. Hace poco mi director me pasó una cita de Buckminster Fuller que de alguna forma enlaza los dos mundos: "Cuando estoy trabajando en un problema nunca pienso en la belleza. Sólo pienso en cómo resolverlo. Pero cuando he terminado, si la solución no es bella, sé que está mal".


Yendo específicamente a la programación, las posibilidades de crear se multiplican y ofrecen variantes para todos los gustos. Uno puede disfrutar de crear construcciones tan abstractas como algoritmos y estructuras de datos en el aire, como también puede divertirse creando aplicaciones concretas, y hasta llegar a unirse nuevamente con el arte de la imagen y la palabra, pero esta vez presentada como un desafío técnico. Y sí, hablo de programar juegos. Que levante la mano el que pasó más tiempo programando sus propios y bizarros juegos que jugándolos una vez terminados. Se que habrá unas cuantas, porque así se empieza cuando uno aprende de chico. Porque así está claro como programación y arte se conjugan, y en pos de expresar mejor el arte convencional nos vemos motivados a resolver desafíos técnicos de formas creativas, dando lugar a esta mixtura de expresiones y motivaciones que difuma la linea entre ciencia y arte permitiendo a la primera ser materia prima de la segunda. Por eso muchos programamos en nuestros ratos libres. Más adelante, un verdadero entusiasta empezará a ver la belleza aún prescindiendo del nexo tangible que es ese mundo que propone el videojuego, y será capaz de sorprenderse con algo tan abstracto como un algoritmo elegante, o una estructura de datos realmente inteligente.

A esta altura del partido, las aguas de los lectores se habrán dividido en dos. Estarán por un lado los programadores de vocación, compartiendo cada palabra sin necesidad de mayores explicaciones, y estarán por otro lado los que aún no han descubierto este mundo y pensarán que estoy lisa y llanamente loco. Debo decirle a los del segundo grupo que tienen razón, pero que es una linda locura para tener, ya que uno disfruta de esta actividad, a la vez que ejercita el intelecto y la creatividad. Y, a diferencia de otras ciencias igualmente interesantes, aquí las posibilidades son prácticamente ilimitadas. ¿Por qué digo esto? Porque para programar algo interesante, como dijo el grandísimo Jonh Carmack, "solo necesitas suficiente pizza y bebida en la heladera, una PC barata y trabajo y dedicación para realizar tu idea". Porque en esta ciencia, experimentar no cuesta casi nada. La materia prima es simplemente el tiempo, podemos correr nuestros programas una y otra vez sin perder los recursos, sin gastar materiales, sin preparar ensayos, etc. Las cosas pueden salir muy mal y las consecuencias serán nulas luego de finalizado el programa, o en el peor de los casos, de recuperado algún backup. Y así podemos probar miles de mundos, experimentar tanto como necesitemos, dar rienda suelta a nuestra imaginación hasta donde sea necesario, sin invertir ni un peso en cada prueba.

La primer clase del mítico curso de LISP de Harold Abelson en 1986 es un excelente ejemplo
de cómo debe empezar un curso de programación. Ojala veamos muchos docentes como él.
Pocas profesiones tienen tanta libertad, pocas ofrecen esa posibilidad de experimentarlo todo desde tan temprano en la formación. Y gracias a eso, podemos llegar a hacer cosas muy grandes con recursos muy pequeños, solo hay que equilibrar la balanza con dedicación y creatividad. Sumando a esto que hoy en día el acceso a Internet nos brinda todo tipo de material, ejemplos, foros, y otras infinitas posibilidades, no queda otra que sentarse a escribir.

3 comentarios:

  1. Este año estoy empezando mi tercer año de informática en la UNL, y todavía sigo cuestionándome todos los días ese interrogante que planteas al principio del texto. Aunque muchas veces, el esfuerzo sobrehumano por hacer funcionar un código o resolver un problema matemático, la falta de tiempo, las exigencias al límite, lleven a ponerme en una situación de inconformidad con lo que estoy haciendo, siempre trato de mantener esa mística de belleza y simpleza, y tratar de transmitirlo a gente que lo ve desde otras perspectivas menos profundas. Siempre aferrándome a Saint-Exupery, "Perfección (en el diseño) se alcanza, no cuando no hay nada más que añadir, sino cuando no queda nada para sacar". Ahora incorporo la cita de Fuller.
    Gracias por tus palabras!

    ResponderEliminar
  2. Siempre he pensado en ello: Los programadores somos capaces de crear todo un mundo dentro de una computadora, algo especialmente notable en los juegos 3D como GTA San Andreas (todo un clásico).

    Bueno, pero eso sólo ocurre en los mundos virtuales y hechos a computadora, porque en mi vida real está tan enredada y ni siquiera soy capaz de saber que harán mis familiares y amigos (en un mundo virtual si podría saberlo XD).

    Gracias por el articulo, y que Dios te bendiga.

    ResponderEliminar
  3. ya todo se acabo , falsa tu vida de mentiras ya no quiero verte no me llames no me sigas

    ResponderEliminar