Por qué es útil aprender ensamblador?

0 884

Este episodio surgió de una charla, que como se mencionará, estaba titulada “Assembly is not death” (Ensamblador no está muerto) provista en el marco de las jornadas en ciencias de la computación 2017 (JCC). En la misma se abordó la importancia que tenía y sus consecuencias el aprender lenguaje ensamblador en alguna instancia del proceso de instrucción a la hora de aprender las bases de la programación. Viendo la exposición como algo interesante he decidido hacer un Script Time a este respecto.

Listen to “Script Time: ¿Por qué es útil aprender ensamblador?” on Spreaker.

El ensamblador es un lenguaje que se caracteriza por ser de muy bajo nivel que le indica al procesador cuales son las instrucciones que tiene ejecutar. Esta era la forma en la que se programaba en un principio. El inconveniente que presentaba era su gran complejidad razón por la cual se crearon lenguajes de programación los cuales pueden ser compilados y ejecutarlos.

Este gran cambio implicó facilitar muchísimo la tarea de crear programas. La clave de la mejora se basa en el agregado de abstracciones. Estas como tal permiten a una persona con menos experiencia desarrollar su propio software sin la necesidad de tener en consideración, por ejemplo, el manejo directo de memoria o la noción de registros. El compilador es el encargado de generar el ensamblador que contiene las instrucciones.

Así fueron pasando los años y la complejidad de crear un software complejo se simplificó aún más. Hoy en día resulta relativamente fácil. Si no me creen invito a hacer un juego con gráficos realistas, fluido y eficiente en ensamblador, es un pain in the ass.

Pero no todo es color de rosas. El reemplazo de ensamblador como forma de programación directa trajo ciertos problemas de eficiencia lo cual con el apogeo de nuevos lenguajes empeoró mucho más. Las abstracciones brindan facilidad pero a la vez generan cosas más ineficientes. Muchas veces este factor se ignora en pos de la simpleza y un hardware que hoy en día resulta ser muy potente.

Para citar un ejemplo icónico tenemos Python vs C. Se que no estoy metiendo ensamblador aquí pero en cuestiones de rendimiento C es muchísimo más eficiente en uso de recursos y rendimiento. Mientras tanto Python, está pensado para ser más fácil de entender (parece pesudocódigo).

Código ensamblador
Código ensamblador

¿Dónde están las ventajas de aprender ensamblador?

Enfocarse en aprender a programar mediante instrucciones permite crear programas mucho más eficientes. De hecho a la hora de hacer controladores o software embebido el cual se ejecutará en entornos con pocos recursos es fundamental. Gracias a esta metodología se tiene acceso prácticamente a los componentes del ordenador y es posible ordenarles exactamente que deben hacer sin generar instrucciones basura.

Otra curiosa ventaja va mas allá de su poder y se centra en la obligación del desarrollador a ser creativo. Hacer cosas que serían simples en C en ensamblador resultan casi siempre en un gran desafío. El tiempo que toma hacerlo es muy elevado. Pero justamente allí es donde está el punto. Uno debe ser capaz de ingeniárselas para poder hacerlo. Uno quiera o no debe pensar muy bien qué es lo que va a hacer lo que se traduce en la costumbre de la planificación.

Las desventajas de la programación actual

La programación de hoy en día tiene como desventaja malacostumbrar a los programadores a probar sin pensar. Uno compila un código y lo ejecuta, falla, hace otro cambio y repite el proceso. Este ciclo se suele utilizar siempre y los resultados son aceptables. Pero debido a los cortos tiempos de compilación es algo que se puede hacer la cantidad de veces sin preocuparse por perder tiempo.

Esto no sucede todo el tiempo, de hecho, en grandes sistemas que a su vez tienen una lista de dependencias que compilar la tarea resulta muy costosa tanto en procesamiento como tiempo.

raspberry pi ensamblador

Para tener un contexto, el proyecto del cual se habló en la charla consistía en aprender ensamblador ARM para crear un programa a alumnos de universidad el cual tenía como función generar una animación que durase más de cinco segundos. Estos, sin darse cuenta, aprendieron cómo crear subrutinas, seccionar el código y utilizar los registros de forma que se pudiese desempeñar la tarea correctamente. Gracias a esto comprender y trabajar con cosas a más alto nivel les resultó mucho más sencillo.

La moraleja a llevarse de esto es que aprender el funcionamiento de las cosas permite crear mejores cosas y hacer que estas mismas sean mucho más eficientes. En el caso de un programa, saber cómo será usada la memoria permite ahorrar espacio y quitarle carga al procesador.

Espero que esta nota te haya resultado útil y haber despertado el gusanillo de la curiosidad para que investigues más sobre el tema. Recuerda que tu opinión es importante para nosotros así que no dudes en comentar y compartir. Eso nos ayudaría mucho.

Aprende a desarrollar aplicaciones para iOS 11
Mis medios de contacto

Twitter    Gmail

Contenido

Spreaker    iTunes    Ivoox    Canal de Telegram    Soundcloud    Youtube

Comentarios
Loading...

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. AcceptRead More

Privacy & Cookies Policy