jueves, 29 de septiembre de 2022

Recolector de Basura, cosas de las que las que no estamos pendientes.

Buenas programadores/as que disfrutáis la programación. 


Esto de escribir, la verdad es que me está empezando a gustar, y hoy quisiera hablaros de un concepto de programación que me resulta de especial curiosidad, y es sobre el Recolector de Basuras (Garbaje Collector), es un concepto del cual la gente que programa a alto nivel no se suele dar cuenta por que ya te lo dan hecho, pero básicamente este concepto tiene que ver con la gestión de memoria de un programa, con esto de que todas las cosas que se vayan creando en la memoria y más tarde no se vayan a usar, se tienen que destruir por que ocupa espacio, en definitiva, es un proceso que va comprobando constantemente cuales son las cosas que están en la memoria, las cuales no se están usando o no se van a usar en un futuro, y en cuanto las encuentra, entonces las desecha con el fin de liberar espacio para futuras creaciones que se vayan a necesitar.

Este proceso en los lenguajes modernos es bastante chulo por que quita al programador de la carga que supone liberar memoria que vamos creando, y además es un proceso que ya viene incorporado en dichos lenguajes y que ejecuta su lógica por detrás sin que nadie se tenga que preocupar de nada, es básicamente lo mismo que le pasa a una persona cuando va guardando cosas en la habitación que va a usar y que luego no usa y que alguien nos dice que tenemos que tirarlas porque no solo no las usamos sino que además nos ocupan espacio y entonces tenemos que aproximarnos a un cubo de basura o a un punto limpio en caso de que se tengan que reciclar de otra forma, pues este recolector lo que hace es que cuando ve una cosa que no se está usando la tira el directamente por nosotros, ahorrándonos la tarea de buscar en nuestra habitación lo que no nos sirve, e incluso nos ahorra el transporte.

Por dar una explicación un poco más técnica de lo que es recolector, cuando nosotros creamos un objeto en nuestro programa, lo que estamos es creando un espacio en memoria donde se almacena la información de ese objeto (porque al final el objeto no deja de ser una instancia de una clase, y esa clase tiene sus atributos y sus métodos, es decir, su información) y además de una referencia a ese espacio creado, que será nuestro puntero. Imagínense que tenemos creada nuestra clase Cosa, indiferentemente de cuál sea el lenguaje moderno en el que estemos, con las características, tipo y descripción, y me creo dos objetos de la misma clase, es decir, dos con sus tipos y sus descripciones.





Como podemos ver en la foto, los objetos están creados, ocupando un pequeño espacio de la memoria, y cada una está referenciada por su puntero (objeto1 y objeto2), eso significa que cada vez que queramos acceder al espacio de memoria apuntado por el objeto1, vamos a obtener el coche, y en el otro caso obtendríamos la consola, es decir, que el único seguro que tenemos para poder siempre acceder al coche es que haya siempre alguien apuntando a ese espacio. 

Ahora imagínense que el objeto1 se cambia de referencia y pasa a apuntar al espacio de memoria apuntado por el objeto2, es decir, que el objeto1 y el objeto2 apunten al mismo espacio de memoria que es donde se encuentra la consola, hemos podido apuntar a ese espacio con el objeto1 por que recuerden que tenemos otra referencia apuntando a eso (objeto2) y lo único que habríamos hecho sería igualar la referencia del objeto1 a la del objeto2. 



Ponte que luego quieres volver a recuperar el coche por que lo quieres usar para lo que sea, ya te digo yo lo que va a pasar, que simplemente no vas a poder, porque no hay nadie apuntando a ese sitio, no tenemos una referencia de donde está el coche, se ha perdido en la memoria, es decir, sabemos que está ahí pero no donde, es cuando entra al rescate nuestro recolector de basura salvándonos de que estemos desperdiciando espacio en memoria de manera innecesaria, por que pasa que el coche sabemos que está ahí, pero no donde, y lo mejor de todo es que nos está ocupando espacio que de ninguna manera vamos a poder usar porque no sabemos ni donde se encuentra, ahí es cuando el recolector de basura comprueba que cosas no se están usando, y entonces libera el espacio ocupado por esa cosa.

¿A que es muy chulo el recolector de basuras? Usando un símil, hemos comprado un par de cosas (objeto1 y objeto2) y las hemos metido en la habitación (memoria), yo estaba usando el coche, y mi colega la consola, y ha habido un momento en que no me he podido resistir a jugar a la consola, y nos hemos puesto a echar unas partidas, pero es que además dejé el coche por ahí, y claro, ahora cuando preguntamos donde está el coche, nadie sabe dónde está, y automáticamente cuando el recolector ve eso, coge y lo tira, porque sabe que aparte de que no lo estoy usando, posiblemente no lo use en un futuro y entonces lo deshecha para dejar espacio por si el día de mañana compro otra cosa que vaya a usar, la única manera de haber resuelto esto sería de haber dejado a alguien a cargo del coche, pero fui tan despistado que no lo hice, y ahora lo he perdido y me lo han tirado a la basura.

En conclusión, la verdad es que el recolector de basuras es muy útil para cuando tienes programas lo suficientemente grandes como para perder el control de todos los objetos que vas creando en la memoria, ya que es muy común que se te olvide liberar ese espacio, entonces como ya está todo pensado porque con muchas cosas a nuestro alrededor solemos ser más despistados, así que, lo mejor es ser cuidadoso con los objetos que se crean y tener claro que se van a usar, porque este proceso tiene una lógica por detrás que es fácil de entender pero lenta si tiene mucho volumen de cosas, y esta gestión nos puede penalizar en tiempo de ejecución a las aplicaciones que tengamos, puede que sea curioso tratar otro día como el recolector realiza esa gestión y por qué puede ser catastrófico si tenemos muchas cosas y no tenemos control sobre ellas, así que ya sabéis, no seáis despistados, incluso si hay alguien detrás que lo hace todo por vosotros.


¡Saludos Programadores!


martes, 27 de septiembre de 2022

¿Por qué el buen programador se hace así mismo desde el bajo/medio nivel?

Buenas programadores que disfrutáis de la programación

Hoy os quería hablar sobre como un buen programador se construye así mismo empezando por lenguajes de bajo/medio nivel.

Uno de los momentos más bonitos que tuve en mi vida fue cuando empecé a interactuar con un lenguaje de programación, haciendo programas simples de calculadora de estos que pides al usuario introducir dos números y sacas un resultado a partir de la suma de los mismos, y demás programas por el estilo, y es por todo esto que una de las mayores decisiones que tiene que afrontar uno en la vida cuando empieza a programar es la de elegir en lenguaje de programación con el que comenzará su aventura por este mundo tan mágico, yo en su día lo tuve fácil, ya que empecé a programar en la carrera de Ingeniería del Software, y en el plan de estudios nos especificaba que teníamos que empezar por Pascal, también en el mismo año de carrera, llegamos a usar el lenguaje ensamblador, como podéis comprobar, lenguajes de alto nivel (aunque Pascal maneja conceptos de medio nivel) y bajo nivel.

Un lenguaje es considerado de bajo nivel cuando tienes que pensar en instrucciones que requieran un control sobre el hardware y por lo tanto estás condicionado por la computadora que lo vaya a soportar, entonces en este caso programar en Ensamblador fue algo bastante difícil debido a que tenía que pensar a nivel de registro, de memoria, literalmente cuando programas en Ensamblador, tienes que imaginarte que tu eres la memoria y solo así lograrás entenderlo, luego es bastante entretenido por que es como un rompecabezas, aunque posteriormente vas a Pascal que es considerado de alto nivel aunque con características y conceptos que te hacen pensar en la memoria del programa y ya las cosas se vuelven un poco más sencillitas, por que ya se acerca un poco a la forma de pensar de las personas, pero aun así tienes que pensar en cosas tan importantes como en las direcciones de memoria donde se guarda la información que quieras usar para resolver un problema.

A lo que quiero llegar con por que es tan importante comenzar con un lenguaje de estas características, es por que pelearte con la memoria te hace comprender como operan las estructuras de datos que se usan en todas las aplicaciones que conoces, el como son esos procesos internos de inserción y borrado de elementos en dichas estructuras de datos, como por ejemplo, en las listas, por que al final en los lenguajes de alto nivel como Java, Python, Javascript, etc... Todos estas funcionalidades nos vienen ya hechas, y nosotros solo tenemos que invocarlas y realizan la función que nosotros queremos, pero no sabemos como operan por detrás estas funciones, y ahí es donde entran estos lenguajes que están un poco más cercanos a la memoria, los que te proporcionan estos conceptos como los punteros, los que te permiten irte moviendo por la memoria accediendo a los contenidos de las direcciones de memoria que apuntas, por que al final una lista no deja de ser un puntero al primer elemento de la misma, que a su vez guarda la dirección de memoria del siguiente elemento de la lista y que puede ser accesible. Definitivamente, al final el hecho de usar estos conceptos a estos niveles de la programación te ayudan a entender cosas muy curiosas que no sabes cuando programas a alto nivel, en mi experiencia personal, cuando más lo he visto, ha sido a la hora de usar estructuras de datos y colecciones como el ejemplo que acabo de poner ahora mismo, y de hecho cada vez que alguien me pide consejo para aprender a programar, siempre le digo que empiece por lenguajes como C o Pascal, y que luego vaya escalando a lenguajes como Java y similares, que al final manejan ya conceptos como los de clases, herencias, etc... que se acercan a la forma de pensar de la persona, en resumidas cuentas, de los lenguajes de programación orientados a objetos.

En conclusión, cada quien que empiece por el lenguaje que más le guste, por que al final lo importante es que amemos este mundo tan mágico como es el de la programación, disfrutemos con ello y queramos aprender todos los días más, aunque yo soy de los frikis que les gusta saber un poco de todo, que toca un poco los diferentes ensambladores, que aunque en alto nivel las estructuras de datos se nos vengan dadas, siempre mola mucho programarse una propia y aprender un poco lo que se esconde por detrás, todavía me acuerdo como fue mi paso desde Pascal a Java, cuando tuve que programar mi primer borrar elemento de una lista, programando un método de decenas de líneas en el que tenía que contemplar varios casos e ir todo el rato pensando en los punteros a la hora de moverme por la memoria hasta encontrar el elemento que quería, para borrarlo de forma segura sin perder información del resto de la colección, sin embargo, cuando llegué a Java, coger y en una línea de código, e invocar una sentencia con el objeto lista correspondiente del tipo remove o algo por el estilo, y hacer toda la magia, fue un golpe de realidad, pero al menos me llevé aprendido el funcionamiento que hay por detrás de las estructuras de datos, siempre serás capaz de ver más allá cuando quieras crear dichas colecciones.

Este es mi primer artículo, ya se que doy la chapa y me emociono mucho, a si que sed buenos conmigo y seguid disfrutando de la programación.


¡Saludos Programadores!




jueves, 22 de septiembre de 2022

Presentación

Buenas programadores

Esto va a ser un blog donde voy a compartir con vosotros/as la parte más bonita y más apasionante del mundo de la programación, de como una persona empieza a dar sus primeros pasos por este mundillo tan mágico, la aventura de aprender un nuevo lenguaje de programación sin saber lo que te va a deparar cada una de las funcionalidades que tiene, en pocas palabras, de vivir la programación como una aventura y de aprender una nueva tecnología por simple y llana curiosidad, sin pensar si se está usando actualmente o si nos va a dar dinero o no, aprenderla solo por las ganas de conocer y de saber. Por supuesto también hablaremos un poco sobre la actualidad tecnológica y de desarrollo de software.

Saludos

Recolector de Basura, cosas de las que las que no estamos pendientes.

Buenas programadores/as que disfrutáis la programación.  Esto de escribir, la verdad es que me está empezando a gustar, y hoy quisiera habla...