Tuesday, March 27, 2007

Búsquedas hiperrápidas...

El mundo del cómputo se mueve a velocidades cada vez más rápidas. Por una parte tenemos máquinas que año con año prácticamente duplican su velocidad. Los costos por otro lado bajan y vemos más gente con computadora personal, con todo lo que eso implica, incluyendo Internet y multimedia. Y aunque muchos de estos usuarios quizás se consigan máquinas a las que difícilmente le sacarán todo el jugo posible, es claro que muchas de estos procesadores se usarán sólo en casa, para las tareas escolares de los hijos, para la hoja de cálculo de la economía familiar, o cualquier otra labor que cae en el calificativo de tarea casera.

Pero un buen número de personas que hoy día se hacen de una flamante computadora personal piensan en sus respectivos negocios. Seguramente quieren llevar la nómina y quizás la base de datos de empleados. Tal vez algunas empresas tienen todo un sistema administrativo: contabilidad, inventarios, etc., el cual puede ser llevado casi siempre por una poderosa PC de al menos 1.5 Ghz. Eso más los programas adecuados hacen que la computadora pase a ser una herramienta más en la oficina, como lo pueden ser las máquinas de escribir, los teléfonos y los faxes.

Este último grupo muchas veces es el nicho de los programadores. Algunos microempresarios no tienen en sus máquinas los programas necesarios para sacar verdadero provecho a este posmoderno juguete. O tal vez los programas genéricos (procesadores de palabras, hojas de cálculo, programas de presentaciones), no satisfacen las necesidades particulares de ellos. Y entonces entran, los que creemos que se puede vivir de escribir código, con las posibles respuestas.

Cuando nos apersonamos a una entrevista de trabajo porque nos han hablado para encargarnos un programa en específico, casi siempre las cosas ocurren por el siguiente derrotero: El empleador explica su problema y considera que es automatizable y por ende nosotros somos los elegidos para pasarlo a código ejecutable, a un programa de computadora. De acuerdo a la magnitud y características del problema le indicamos a nuestro interlocutor lo que se puede y lo que no se puede hacer. A veces se nos quedan viendo como sospechando un engaño o que simplemente es algo que cuesta mucho trabajo hacer y que le estamos dando la vuelta. Pero no es así. Muchas veces la gente pide maravillas porque simplemente no entiende qué significa escribir un programa específico y pasar a un lenguaje las ideas, a veces extravagantes, de quien nos ha contratado.

Pero hay otro tipo de gente que pide trabajos de cómputo. Hablamos de personas que saben programar pero que su tiempo no lo tienen disponible para perder unos días para crear un software específico. Este tipo de personas son más realistas en sus peticiones y además incluso dan ideas sobre cómo debiese hacerse, porque de alguna manera tienen información sobre qué son las estructuras de datos, los algoritmos más comunes, etc. Es una delicia platicar y entenderse con individuos así, porque la comunicación es fluida y en última instancia estamos hablando “el mismo lenguaje”.

Pues bien, hace unos días una estupenda bióloga y mejor amiga de la UNAM me pidió un programa para buscar secuencias de ADN. Es claro que tales búsquedas se hacen sobre archivos con largas cadenas de aminoácidos adenina (A), tiamina (T), guanina (G), and citosina (C): TCGATTCCTTAAGTGGGTT… Aquí la tarea es buscar por ejemplo la cadena siguiente: TTCGCG??AA?????T, en donde las ‘?’ son cualquiera de estas bases proteicas. Aquí se requiere entonces un programa que busque mediante uso de “comodines” (wildcards), cosa que por ejemplo, Word no puede hacer hasta donde entiendo.

Y entonces, una vez definido el problema, esa misma tarde me senté a escribir un programa que hiciese este tipo de búsquedas. Claramente el desarrollar toda la rutina de búsqueda de cadenas con comodines puede ser una labor de días y además, para que funcione rápidamente debe ser escrita de forma optimizada, quizás en ensamblador. Eso sale fuera de las posibilidades para entregar un programa pronto. Así que me di a la tarea de buscar la rutina en cuestión en Internet. Encontré una que hace precisamente lo que quiero (he aquí la liga). La bajé de la red, la instalé en Delphi sin problema alguno y simplemente me apliqué a generar las estructuras de datos necesarias que sirven para hacer estas búsquedas. Como mi amiga no me dio el archivo de datos en donde debo buscar, para mis ejemplos tomé a pi, número trascendente, del cual tengo un archivo con las 10,000 primeras cifras. Finalmente le agregué la ayuda de cómo usar los comodines y una forma en poder continuar la búsqueda en caso de haber encontrado ya una cadena específica. Ya teniendo el programa funcionando lo pulí, lo puse “bonito”, le quité código de prueba y listo. Todo esto me llevó unas tres horas gracias a la red de redes y a la estupenda herramienta de Borland. Eso es rapidez, uno de los signos de nuestro tiempo.


Por cierto, si quiere escuchar una canción basada en los números de Pi, entre aquí. Cabe señalar que este artículo ha sido modificado del que escribí en el año 2000 para un sitio que ya desapareció: Cibersivo.

No comments: