Programando a bajo nivel

Con motivo del seminario de sistemas empotrados que recibí como parte de mi preparación de doctorado he tenido la oportunidad de iniciarme en la programación de la Game Boy Advance. Y creo que por primera vez he empezado a entender por qué hay gente a la que le encanta trabajar a tan bajo nivel.

En general, me gusta programar en alto nivel, centrarme en el problema que quiero resolver sin preocuparme por los entresijos de la máquina, delegar en el compilador o en el intérprete todos esos pequeños y complicados detalles de implementación asociados al hardware. A fin de cuentas, en eso consiste la abstracción, uno de los pilares básicos del diseño de software.

El lado negativo de esta filosofía es que, como programador, pierdo el control sobre cómo funcionan aspectos de tu programa. Yo decido el flujo general de la aplicación, pero debo confiar parte de su funcionamiento básico a la implementación que han realizado otras personas de librerías, APIs y funciones del sistema operativo. Y mientras esa llamada al sistema, esa función, esa librería, etc funciona como yo espero que funcione, las cosas van bien; cuando no lo hacen, es cuando tengo que romperme la cabeza para saber qué está pasando.

No ocurre lo mismo al programar en bajo nivel, es decir, programar cerca del lenguaje que hablan las máquinas. Aquí tengo prácticamente control total sobre el comportamiento del hardware, y mi único límite es el propio hardware en sí. Le digo a la GBA que quiero un píxel de color rosa en la esquina superior izquierda de la pantalla, y la GBA obedece. Es una sensación de poder que no había experimentado hasta ahora con ninguna máquina.

Trabajar a este nivel no es en absoluto sencillo. Primero, exige conocer con bastante minuciosidad cómo es la máquina para la que vas a programar; esto supone leer y entender bastante documentación. Por último, resulta a veces un engorro, porque tienes que saber muy bien qué es lo que estás haciendo, porque las cosas más sencillas cuestan más de lo esperado, porque al problema que quieres resolver se le suman los pequeños problemas y limitaciones del hardware.

Pero todas estas dificultades tienen su recompensa. Al final, te sientes casi como un ser todopoderoso que se pasea tranquilamente por la circuitería activando un registro aquí o allá, moviendo bits de un lado para otro, exprimiendo el potencial puro que te ofrece la máquina. Está a tu total disposición, y el resultado final sólo depende de tu habilidad.

En Tron los programadores eran considerados dioses dentro del mundo binario en el que se desarrolla la película. Hacia el final, el propio Tron, el programa que da nombre al filme, recibe un mensaje directo del programador, que en el mundo real no hace más que teclear órdenes en la línea de comandos de un ordenador. Mientras en el mundo binario, un fuerte haz de luz rodea a Tron, que recibe las órdenes de una voz como divina, y recoge un disco de datos que desciende lentamente desde el cielo. Mira tú por dónde no es una metáfora tan descabellada.

EDITO: Cambio la foto de Tron, que la han borrado.
EDITO: Elimino definitivamente la foto. Se ve que con el estreno próximo del nuevo Tron, andan pesaditos... :P

1 comentario:

Phyambre dijo...

¡Qué tiempos aquellos en los que hacíamos nuestras prácticas en el ensamblador de procesador MIPS! ¡Cómo añoro aquellos otros en los que escribíamos directamente en la dirección de memoria de la controladora gráfica para poner cosas en pantalla! ¡Qué recuerdos! Sniff, sniff.

Segmentation fault.
Core dumped.