¿Veinteañero metido en la tecnología?
¿Funcionario ya curtido?
Sigue leyendo; esto quizá te interese…
En mis tuits anteriores contaba algunas batallas programando en ensamblador en los años 90.
El lenguaje ensamblador es el Vietnam del programador de níveas sienes. Sirve para entretener a los chavales de ahora, alrededor de una fogata, con historias de bravura hexadecimal y napalm en mnemónicos. Sirve para evocar con nostalgia un tiempo de mocedad que idealizas. Sirve para decir orgulloso que estuviste allí, que luchaste. Sirve para todo eso …y poco más.
¿O quizá no?
Hoy programamos en lenguajes de alto nivel, con orientación a objetos, recolección de basura, librerías potentes, capas de abstracción… Han pasado treinta años y ahora programamos plataformas. La web, los teléfonos o los servicios en la nube o de inteligencia artificial son plataformas.
El lenguaje ensamblador es el inconveniente camino contrario: programar, directamente, las instrucciones al microprocesador. Aunque tiene y siempre tendrá su nicho, es un espacio menguante casi relegado del efervescente panorama laboral actual.
Si tienes veintitantos o treintaypico años y estás metido en la tecnología, enhorabuena: ¡estás en el sitio correcto y en el momento perfecto! Pero como mis sienes ya platean, déjame contarte, alrededor de la fogata, qué aprendí programando en ensamblador en los años 90 y viene conmigo a día de hoy. Quizá te sea útil también a ti.
Releyendo mis tuits del otro día, me fijé en esta instrucción:
En álgebra de Boole, un XOR es una disyunción exclusiva: devuelve verdadero sí y solo sí uno de los operandos es verdadero, pero no ambos.
Entonces, la instrucción XOR DX, DX almacenará siempre en el registro DX del microprocesador el valor cero, pues cuando ambos operandos son idénticos, la salida es falsa. Es una instrucción equivalente a:
MOV DX, 0
Pero, ¿acaso no es esta última más directa y legible que la otra? ¿Qué sentido tiene inicializar una variable haciendo un XOR en lugar de, simplemente, asignarle un cero como toda la vida?
Hay una razón: la eficiencia.
En la arquitectura Intel 80x86, la instrucción MOV DX, 0 se ensambla en tres bytes y consume dos ciclos de reloj:
BA 00 00
En cambio, XOR DX, DX se ensambla en dos bytes y consume un solo ciclo:
31 D2
Hay un ahorro de un byte y un ciclo, que en un 386 a 33 MHz significa 30,3 nanosegundos. Es decir, unas treinta milmillonésimas partes de un segundo.
En un bucle que inicializa un megabyte de memoria, o que apaga cientos de miles de píxeles de una pantalla o que anula un fichero en el disco… esta precaución devengaba ahorros tangibles.
Hay otra microoptimización interesante aquí:
La instrucción INC BX incrementa el valor almacenado en el registro BX. Como está duplicada, equivale a:
ADD BX, 2
Solo que el primer camino consume dos bytes, mientras que el ADD —más legible, sí— requiere del doble.
Este tipo de optimizaciones son cruciales al programar un virus informático no destructivo —que es lo que hace el código— y otras aplicaciones sensibles, pe…
—¡Ya vale de batallitas de yayo! Esto no me sirve hoy para nada —quizá digas, al escuchar todo esto sentado mirando la fogata.
¡Pues quizá sí! Y es que hay algo de este Vietnam que ha venido conmigo desde entonces, y que los programadores más jóvenes creo que están perdiendo: el valor de la eficiencia.
El cuello de botella ya no es ni la memoria ni la velocidad de tu dispositivo, sino el tráfico de red o la duración de la batería. La eficiencia nunca pasa de moda.
Cuando programábamos en los años 80 o 90, a menudo nos dábamos de bruces con los límites de la máquina. Cada byte, cada ciclo de reloj, contaba. ¡Y éramos conscientes! De esto emergió incluso un arte: la demoscene.
Muchos programadores de hoy añaden librerías y dependencias a sus proyectos con una ligereza que frunce el ceño de los yayos de níveas sienes curtidos en Saigón. Aplicaciones con cientos de kilobytes de JavaScript. Diarios digitales donde el 90 % de las peticiones HTTP son para rastrearte o invadirte de publicidad. Sitios WordPress en los que dos tercios del DOM es morralla. Una palabra lo describe: «bloatware».
Y, sí; cuando has reescrito tu código para ahorrar un byte o un ciclo de reloj, te duele tanto, tanto, cada euro que se va por el desagüe de una Administración pública ineficiente.
¿Te imaginas unos servicios públicos óptimos como programas de ensamblador? Licencias municipales tramitadas en 48 horas, una sanidad sin listas de espera, una justicia rápida y digital…
Si has llegado hasta aquí y has aprendido algo… ¡redifunde, amigo! Si te ha hecho reflexionar, dale «like» y compártelo. Es gratis. 🙃
¡Feliz semana a todos! 😃❤️
💬 Le pido al señor Puente que recapacite, que abandone las medidas experimentales y retire el nuevo carril bus de la A-5 que une Móstoles y Alcorcón.
Si realmente le importan los mostoleños, abandone este despropósito de inmediato.
https://t.co/KQ7KU9e4fc
@elpadelesasi Yo tampoco lo creo, pero sería tan bonito que se hayan arreglado y todo sea paripé para que nadie se lo esperara...
Estando bien (de mentalidad) ganarían seguro