martes, 19 de junio de 2012

Autitos, píxeles, y cucarachas

"The Big Bang Theory" es una gran serie, llena de diálogos picantes e ingeniosos, pero hay uno en particular que me gustó mucho. Entra Leonard en el departamento y ve a Sheldon con su laptop muy enfrascado en algo. Sheldon lo mira y dice:
- Encontré un emulador en linea que me permite jugar los clásicos juegos de texto de los 80s.
A lo que Leonard responde algo como:
- Eso está muy bueno.
Y Sheldon remata con:
- Oh, sí. Esto corre en la placa gráfica más poderosa del mundo: la imaginación.

(...dejo un blanco para que reflexiones...)

Esta frase va más allá del chiste y es para muchos toda una declaración de principios y un grito de añoranza a los viejos buenos tiempos, donde la computación estaba más verde, donde mucho quedaba por descubrir, donde los grandes saltos en la entonces insipiente industria de los videojuegos aún no se habían dado. No es que ya no queden cosas por descubrir ni brincos que pegar, pero las escalas son otras, y para un niño/adolescente, los 80s eran una oda a la imaginación. Está claro que yo no hice mis primeros pasos en la informática en los primero años de la misma, sino más bien en los 90s (muuucho más tarde). Pero las circunstancias (especialmente no disponer de una conexión a Internet ni nada parecido por ejemplo), hicieron que se sintiera así, y estoy muy agradecido por eso (aunque siempre dije que me hubiese gustado mucho nacer diez años antes).

jueves, 14 de junio de 2012

Programación Extrema

¿Sabían que el XP de "Windows XP" deriva de una metodología de desarrollo conocida como eXtreme Programming? Cuando lo escuché por primera vez me lo imaginé de una forma bastante graciosa, más al comenzar a leer sobre el tema, dado que esto de las metodologías ágiles, si bien tiene su costado serio y muy útil, también da pie para encuadrar como metodología cosas ridículas, o a veces simples cuestiones de sentido común, que no ameritan la denominación de una metodología si no es más que para parecer elegante hablando con ilegítima propiedad. En fin, no vengo a cuestionar ni a defender las metodologías ágiles, ni la programación extrema, ya dije que hay muy buenas y muy malos, y yo no soy particularmente especialista en esto, más allá de mi experiencia de programar durante años sin metodología para descubrir después que lo que hacía podía encuadrarse en alguna de estas, probablemente de las malas. Sólo traigo el título a colación porque planeo malinterpretar uno sus postulados fundamentales, que según wikipedia es:
"Programación en parejas: se recomienda que las tareas de desarrollo se lleven a cabo por dos personas en un mismo puesto. Se supone que la mayor calidad del código escrito de esta manera -el código es revisado y discutido mientras se escribe- es más importante que la posible pérdida de productividad inmediata."
Es obvio que apunta a dos programadores discutiendo los algoritmos e implementaciones, pero vamos a hacer el ejercicio de omitir la palabra "persona" de la definición. ¿Que tal un programador y un robot?... Si el robot va revisando lo que escribe el programador, haciendo pequeños cambios, marcando errores, sugiriendo algunas mejoras, o hasta escribiendo algo de código, ¿no cuenta como programación en pareja? Si esto contara, la cantidad de gente que aplica este postulado ascendería notablemente.

jueves, 7 de junio de 2012

Sobre Dibujos y Bibliotecas

El fin de semana pasado me puse a escribir un graficador de de diagramas de Gantt. Mi hermano está trabajando en el modelado de problemas de de planificación y me había comentado que necesitaba algo para visualizar mejor los resultados que le daba el solver. En principio dibujar un diagrama de Gantt no debería requerir de mucha magia, son solo rectangulitos de colores agrupados con algún criterio por fila. Pero otra vez se me apareció la misma pregunta que me hago cada vez que tengo que hacer un programa de esta naturaleza. Por un programa de esta naturaleza entiéndase un programa con gráficos armados a pata (donde dibujo lineas, rectángulos, puntos uno por uno), lo cual implica una API gráfica con funciones de un nivel relativamente bajo, pero donde hay cosas que configurar, que ingresar, que elegir, y entonces donde también quiero tener alguna que otra facilidad de más alto nivel, como la posibilidad de hacer menúes, botones, y demás controles y cuadros de diálogo estándar.

El problema de como dibujar lo enfrenté muchas veces desde que entré en la universidad y lo solucioné de formas muy diferentes. La primera vez necesitaba ver una simulación de una colonia de hormigas para un contest, donde el objetivo era "programar" una hormiga, pero los organizadores no nos facilitaban el simulador. Como la cosa era contra-reloj, no tenía tiempo de aprender algo nuevo, así que fui por el viejo y querido QBasic y sus comandos de dibujo en los modos gráficos de una ventana de DOS. Muy poco elegante, pero sirvió para salir del paso. La segunda vez tenía que simular la planificación de tareas de un sistema operativo para un práctico de la materia Sistemas Operativos, y para verlo usé OpenGL, sin saber mucho y copiando pedazos de código que encontré en Internet. Antes de la tercera vez pasé por la materia Captura y Procesamiento de Imágenes, donde nos enseñaron a utilizar la biblioteca CImg.