Pregúntele a La-Tecnologia: ¿Aprende a ensamblar primero, último o nunca?
HogarHogar > Blog > Pregúntele a La-Tecnologia: ¿Aprende a ensamblar primero, último o nunca?

Pregúntele a La-Tecnologia: ¿Aprende a ensamblar primero, último o nunca?

Jul 15, 2023

Hace unos días, me encontré con una publicación en línea donde alguien señalaba el libro “Aprende a programar con ensamblador” y preguntaba si alguien había aprendido alguna vez el lenguaje ensamblador como primer lenguaje de programación. Tuve que sonreír porque, si tienes cierta edad, tu primer idioma bien podría haber sido el ensamblador, aunque fuera el ensamblador para máquinas que nunca existieron.

Por supuesto, eso fue hace mucho tiempo. Es más probable que hoy en día, si tienes más de 40 años, hayas aprendido BÁSICO primero. Si te vuelves más joven, empezarás a inclinarte hacia Java, Javascript o incluso C. Sin embargo, me hizo pensar: ¿debería la gente aprender a ensamblar y, de ser así, cuándo?

No soy ajeno a los lenguajes ensambladores, pero no estoy seguro de conocer una respuesta moderna y defendible a esta pregunta. Puedes encontrar muchos tutoriales, por supuesto (incluidos algunos míos). Hay muchos casos en los que unas pocas líneas de ensamblaje integrado pueden marcar una gran diferencia en un programa. Depurar un compilador defectuoso también puede requerir habilidades de ensamblaje. Entonces parece que al menos algunas personas todavía necesitan aprender a ensamblar. Eso deja la cuestión de cuándo aprenderlo y, como corolario, quién necesita aprenderlo.

Mi respuesta tradicional sería que todo el mundo debería aprenderlo lo antes posible. Pero eso podría deberse a que así lo hacía hace años. No estoy convencido de que esa sea la respuesta correcta para todos hoy. Sin embargo, expondré mi caso.

Si está satisfecho escribiendo código para validar códigos postales en Javascript, probablemente no necesite aprender a ensamblar. Pero si realmente quieres ser un programador de primer nivel, tarde o temprano tendrás que afrontarlo. Aprenderlo temprano tiene algunos beneficios. Si comprende lo que realmente sucede a nivel de CPU, un puntero en C no parece un concepto difícil. Ser capaz de observar el resultado de un compilador y comprender lo que significa suele ser esclarecedor cuando se intenta aprender algo nuevo.

El único problema es que el lenguaje ensamblador moderno es difícil. Los conjuntos de instrucciones de la CPU son extraños y existen problemas con las CPU que realizan una ejecución desordenada. Luego está el código reubicable y otros detalles con los que es fácil tropezar y de los que no es muy útil saber mucho.

Entonces hay dos caminos a seguir. Primero, elige una CPU más antigua. Algo como el Z80, el 1802 o el 6502 no es tan difícil de aprender y hay muchos recursos disponibles. ¿No tienes ningún hardware como ese? ¿A quién le importa? Utilice un emulador. Probablemente incluso puedas encontrar algunos que se ejecuten en el navegador y tengan excelentes capacidades de depuración que no están disponibles en el hardware real. He programado en docenas de CPU y todas son bastante similares. Dada la rareza del 1802, puede que no lo recomiende aunque a mí me encanta. Es, por otra parte, muy sencillo de aprender. El PDP-8 o el PDP-11 son otros buenos candidatos, aunque algunas de las formas en que hacen las cosas las minicomputadoras rara vez se ven hoy en día.

O elija una máquina que no exista. La mayoría de ellos fueron creados para aprender, lo que es una ventaja, y muchos de ellos también tienen emuladores modernos. Si tuvieras que elegir uno, te sugeriría Mix. Los libros de Knuth son clásicos y utilizan Mix. Influyeron en todos, por lo que verás ecos de las ideas de Knuth en cada sistema informático que toques. (Esa no es una computadora cuántica, al menos).

Simplemente no retrocedas demasiado. Programar el EDSAC, TUTAC o el 4004 probablemente no sea representativo de la informática moderna en absoluto. Honestamente, ninguna de estas CPU lo es. Pero pueden ayudar a sentar las bases para abordar procesadores más avanzados si es necesario. Como dice el viejo refrán: hay que gatear antes de caminar y caminar antes de correr.

También se podría argumentar fácilmente desde el otro lado. Quizás el lenguaje ensamblador tenga más sentido una vez que comprenda por qué necesita punteros para crear listas vinculadas y por qué existe el salto condicional. Si ha estado programando por un tiempo, es posible que algunas ideas, como números hexadecimales y direcciones, ya le resulten familiares.

Sin embargo, probablemente el momento equivocado para aprenderlo sea cuando tenga un error intratable y sospeche que el compilador está optimizando su código incorrectamente. O a medianoche antes de la fecha límite, cuando necesitas recortar ese poquito extra de tu código.

Después de todo, esto es “Pregúntale a La-Tecnologia”, así que cuéntanos lo que piensas en los comentarios. Explique por qué nadie necesita aprender a ensamblar. O cuéntanos tu opinión sobre el mejor procesador para aprender. ¿Aprender en el navegador? No sugerimos WebAssembly, pero tal vez no esté de acuerdo. ¿Cuáles son los mejores recursos y libros en línea? ¿Cuál es tu historia favorita sobre aquella vez que una asamblea sabia salvó el día?

(Efecto de lluvia digital del generador de [Rezmason]).