sábado 2 de agosto de 2008

¿Qué es GH Freebrary?

Una soleada tarde de 1991, después de clases, me dirigí a la librería La Prensa que en aquel entonces se encontraba en la calle Libertad, en Chihuahua. Estaba ansioso por buscar un libro de Turbo Pascal que me explicara una inquietante relevación hecha por mi profesor de Lógica de Programación.

Durante la mañana de ese día, en los pasillos de la escuela, le había planteado lo siguiente:

—Profe’, verá, en varios de los programas que hacemos utilizamos algunos procedimientos y funciones que creamos desde las primeras lecciones. Yo mismo he ido creando algunos procedimientos adicionales para cosas que hago con frecuencia en mis programas. El problema es que cada vez que creo un programa, tengo que hacerlo a partir de uno anterior para tener siempre disponibles todas mis rutinas de utilería. Sé que puedo marcar en el editor de Turbo Pascal un bloque de texto y guardarlo con Ctrl+K+W y luego cargarlo en otro archivo con Ctrl+K+R, pero finalmente no dejamos de repetir código. ¿Hay alguna forma de que no tengamos que repetir el código de las rutinas de utilería en cada programa que hagamos?

—La hay, en Pascal existe algo llamado unidades, es la solución para eso que planteas —respondió el profesor cuyo apellido lamentablemente no recuerdo.

Las manos me sudaban al entrar al establecimiento, la ansiedad por descubrir el secreto de las unidades aumentaba conforme me acercaba al área de publicaciones informáticas. Y ahí estaba un libro, no recuerdo el título, pero hablaba de Turbo Pascal y sus bondades; entre ellas, el uso de las palabras reservadas Unit y Uses. No disponía de dinero para comprarlo —habría de transcurrir un año más para comprar el único libro de programación que he adquirido en mi vida—. En esta ocasión me limité a hojearlo frente al estante; más que eso, me puse a leerlo ahí mismo, como quien mira un televisor a través del cristal de la tienda donde lo exhiben. Estaba haciendo uso de una librería como si fuese una biblioteca (lo sé, ¡olímpica ironía mutante!). Estuve alrededor de una hora con las pupilas devorando texto, tratando de memorizar cada concepto, técnica y ejemplo que leía acerca de las unidades del Turbo. El lector debe tener en cuenta que la Internet no era una cosa muy popular que digamos en 1991, así que la mayor parte del conocimiento técnico lo adquiríamos en la escuela y a través de los libros, dos medios poco accesibles en aquél lugar y en aquella época para un estudiante de bajos recursos.

De ahí surgieron, en alguna computadora del laboratorio de cómputo de la escuela, dos semillas llamadas MTR.PAS y MAR.PAS, mis dos primeras unidades de funciones reutilizables. ¿Quieren ver algo de ese antiguo código? Aquí unas muestras:

¡Misericordia, tan sólo era un muchacho de 16 años!

El siguiente semestre vimos más acerca de Pascal, y en las lecciones el empleo de la cláusula Uses para referirse a unidades propias era algo más cotidiano. Los profesores les llamaban “librerías”, así que también yo comencé a llamarles de esa equivocada manera. Pero los mejores momentos estaban por venir. Para el último año en el CONALEP, cuando mi obsesión por el desarrollo de software (si es que hacer programas donde jugaba con los caracteres ASCII podía llamarse desarrollo de software) alcanzaba el grado de hacerme faltar a las clases de Historia, Cobol y Contabilidad, y privarme de comprender a plenitud el cálculo integral en las clases de Matemáticas, mi “librería” de funciones alcanzaba varias decenas de rutinas que entonces me eran muy útiles en la versión 6 del lenguaje. Una mañana de gran inspiración, durante vacaciones de invierno, entré en hipotermia mientras aporreaba teclas en una máquina del laboratorio de cómputo. Pero aún así me sentía afortunado de que el profesor a cargo me hubiera confiado las llaves por varios días en los que fui sin falta a la desolada escuela, a pesar del terrible viento de hielo que cortaba la piel y que formaba estalactitas en las orillas de los techos. Las instalaciones se encontraban en un descampado típico de las llanuras norteamericanas, en lo que entonces era casi la orilla norte de la ciudad de Chihuahua, zona que siempre ha sido más fría que el acogedor centro.

Terminé mis estudios como Profesional Técnico en Programación y Análisis de Sistemas, mas no hice el trabajo de fin de cursos. Salvé mediante exámenes extraordinarios las materias que había reprobado, como Cobol y Contabilidad y no sé qué otra, pero no me titulé ni mucho menos asistí a las ceremonias y al baile de graduación. Las cosas no andaban bien en casa como para gastar más dinero en mí, lo rechazaba. Además la rebeldía y aparente autosuficiencia de mi carácter ahuyentaban a quienes se interesaban en apoyarme de algún modo, y por si fuera poco atravesaba por una profunda depresión emocional que casi me lleva a darme de baja en los últimos meses de la carrera.

Pero quería seguir programando en Turbo Pascal, así que cuando ya no estudiaba en aulas comencé a estudiar en casa, practicando el uso de Turbo Vision con la versión 7. Ahí fueron mis primeros encuentros reales con la POO. Pasé muchas horas en la habitación que ahora es de mi madre escribiendo y probando código, mucho código, con la primera computadora que tuve, una 8088 de segunda mano que mi hermano Antonio había comprado...¡adivinen donde!: en la tienda que hace un mes me contactó para solicitar el desarrollo de un sistema de software, motivo por el cual vine en esta ocasión a mi tierra natal —¡el mundo y sus vueltas!—. Y mucho de ese código iba a parar a funciones reutilizables y muy atomizadas (la atomicidad dispara al máximo tal reusabilidad) dentro de mi joven biblioteca de rutinas. No recuerdo con precisión si fue en esta época o hasta entrar en el mundo Delphi, cuando me enteré con sorpresa que el término correcto para denominar a estas colecciones de rutinas es biblioteca (library) y no librería (book store). Hoy en día hay menos dudas al respecto, los autores más respetados, y que a su vez se dignan en respetar el idioma español, emplean en sus publicaciones el término biblioteca. Viéndose, por el contrario, el uso del término librería como una falta de cultura.

A finales de 1997 convertí mi biblioteca a Delphi 1, retirando a un gran número de procedimientos y funciones que eran obsoletos para la plataforma Windows, y seguí alimentándola con nuevas rutinas de código que escribía durante los desarrollos que hacía. Para entonces el estilo de mi código fuente había mejorado mucho y se parecía más al que hoy día manejo; durante años fui perfeccionándolo. Lo interesante es que todas esas funciones surgieron de necesidades reales durante los proyectos de software donde participaba. Ya desde el siglo pasado quería compartir mis rutinas con otros programadores para que las emplearan en sus aplicaciones y se facilitaran el trabajo de construir éstas. Pero me creé una estúpida barrera yo mismo al negarles acceso al código fuente, entregándoles solamente los archivos .dcu (mi estimado amigo Emilio Muñoz tal vez recuerde un breve desencuentro al respecto). Entonces pasaba por mi mente la idea de que mi código era tan bueno que nadie o casi nadie más merecía tocarlo —típico signo de inmadurez en algunos desarrolladores jóvenes—.

Pero desde que establecí el foro Web PDM (cuyo objetivo, por cierto, parece haberse cumplido ya), en el verano boreal de 2002, decidí distribuir con todo y código fuente mi vasta, nada documentada y amada biblioteca de funciones Delphi, bajo el nombre de Interfaz GH. Con más de mil rutinas de propósito general, estimo que a la fecha es utilizada por varias decenas de desarrolladores, principalmente de América; aunque la gran mayoría de ellos utiliza sólo unas cuantas de las funciones, por la aún carente documentación. No obstante, me provoca orgullo saber que he puesto en manos de muchos estudiantes y profesionistas una herramienta que es cuando menos útil en sus labores, contribuyendo de paso al fortalecimiento de Delphi. Un diamante diminuto en el arenal de buenas acciones.

El punto crucial de esta historia es que hace tres años decidí hacerle una reforma importante a Interfaz GH: cambiar los nombres de todos sus elementos por identificadores más amigables, ya que hasta entonces empleaba a rajatabla un estricto y fatal estilo de cuatro letras por palabra en los identificadores (cinco cuando se trataba de la primera palabra del nombre de una rutina). Lo sé, andaba yo muy robotizado. Llevar a cabo este cambio con cientos de funciones y sus variables representaba todo un reto. Pero ahí no para la cosa. Unos cuantos meses después de iniciar esa reforma terminé de convencerme de una gran verdad dentro del desarrollo de software: el código fuente de todas las bibliotecas de programación públicas del universo debe estar en un único idioma (y de hecho algún día estarán en un único lenguaje de programación, pero no quiero adelantarme al futuro ;)). Así que detuve la reforma, o mejor dicho, la redefiní, para considerar en estas modificaciones el uso del idioma universal de la programación: el inglés. Es por ello que también cambié su nombre a GH Freebrary, pensando que con él será mayor su difusión internacional.

Actualmente GH Freebrary es un producto relativamente maduro, pero el proceso de humanización que le estoy haciendo va apenas en un 30% o 40%, considerando que no solo estoy cambiando el idioma y el estilo de nombres, sino también revisando algoritmos para detectar aquellos que pueden tener una mejora sustancial, además de eliminar uno que otro procedimiento medio fumado. Sin embargo, podría pasar otro año afinando mi biblioteca antes de dejarla como realmente quiero que esté para ofrecerla en grande, y podría decirse que hasta entonces sería prudente comenzar a promocionarla con el nuevo nombre. ¡Pero llevo toda mi vida adulta gestando esta preciada colección! ¿Por qué no invitar a la gente a emplearla, aprovechando sus bondades desde ahora? Después de todo varias decenas de funciones ya están más que revisadas, convertidas al inglés y las utilizo con éxito todos los días en mis propios proyectos. ¿Por qué privar al público de utilizar dichas funciones hasta que toda la biblioteca esté “perfecta”? El cien por ciento del código es funcional y está probado, su tasa de defectos de operación —bugs— es bajísima (en buena medida gracias a la atomicidad), así que si el único problema es el idioma y el estilo de nombres de un grupo de funciones, ¿por qué no promover al resto de ellas?

Esta positiva reflexión me llevó a colocar un enlace para su libre descarga en la página de mi empresa hace tan solo unas semanas. Y, mientras la gran reforma de GH Freebrary continúa, la recomendación para mis amigos programadores es simple: usar sólo las funciones y otros elementos que ya están en inglés y llevan el prefijo gh, tales elementos se mantienen y se respetarán. Cuando termine con la reforma, el siguiente paso será crear la tan solicitada documentación.

Siéntanse libres para descargarla y usarla en sus proyectos Delphi. Compila en Delphi 7 sin problemas, aunque se aconseja tenerlo actualizado a 7.1 por un pequeño defecto del compilador. Y, como incluye el código fuente, pueden intentar adaptarla a otras versiones si se les presenta esa necesidad. De cualquier manera, en mis planes de corto plazo está el adaptarla a las versiones 2007 y 2009 (Tiburón), y posiblemente a versiones anteriores si el público así lo pide.

Respondiendo a la pregunta con que intitulo a esta histórica entrada, GH Freebrary es literalmente la obra de mi vida, la cual comparto ahora con mucho gusto con todos los programadores Delphi del mundo.

Un abrazo de 17 años.

Al González.