Abstracción
Todos hemos oído hablar de ceros y unos que, a nivel físico, se traducen en uno (1) para la presencia de corriente eléctrica y cero (0) para su ausencia. Es así de simple… incluso sabiendo que lo que hace nuestro procesador son simples operaciones aritméticas. Con estos dos valores, al final la complejidad resulta alarmante y la verdad es que realmente lo es y es más bien raro que un solo hombre conozca y entienda con detalle absolutamente todas las partes que componen esta compleja máquina. No dista tanto de cómo funciona el mundo real donde también tenemos una gran complejidad.
Un ejemplo de esto es un simple pato de goma que recibí por parte de un compañero de trabajo; si nos paramos a pensar cuánto conocimiento humano esfuerzo y cadenas de procesado son necesarias para que este pato exista. Algo similar ocurre con los ordenadores, la diferencia es que el pato es algo físico… podemos visitar la fábrica, aprender sobre cómo se obtiene el plástico o cómo funciona una cadena de montaje. En general, es mucho más fácil imaginar cómo es el proceso de fabricación de un producto físico en nuestro mundo moderno. En el caso del software, sin embargo, es bastante complejo llegar a imaginar, sobre todo para alguien no familiarizado con ciertos conceptos de computación de qué se compone Youtube, Excel o Netflix o cómo es posible que juguemos a Fornite con alguien que está del otro lado del océano.
El problema del software es que es abstracto, no es algo tangible a diferencia de un árbol.
Por ejemplo, con un árbol podemos imaginar el proceso que lleva a transformarlo en una mesa o una simple silla. Sin embargo, de ceros y unos a lo que finalmente se muestra en nuestra pantalla hay un abismo gigante y aún más si intentamos imaginar cuál es el proceso que llevan a cabo los programadores para crear esta magia negra, cuáles son las órdenes secretas que hacen que una pantalla puede mostrar una ventana. Como podrán ver, esta es una de las dudas que me atormentó desde que era un chamaquito. Siempre quise entender cómo funciona un ordenador. En particular, lo que más me llamaba la atención es ese código binario del que tanto escuchamos hablar puede convertirse en algo visual en nuestra pantalla. Intenté varias veces poner fin a todas mis dudas…
El primer intento fue con un libro de Visual Basic.NET donde explicaban específicamente cómo yo, un simple carajito que sólo sabía descargar juegos de Taringa o jugar los de Miniclip.com , crear ventanas, cómo “programarlas” y darles vida, pero honestamente me llevé una tremenda decepción ese libro. No me explicaba qué eran las ventanas, de donde salían. tan solo me decía cómo puedo crear una y personalizarla, cómo poner botones, hacer que esos botones realicen una acción determinada y otro tipo de “chulería“ (por no decirlo de otra forma), pero seguía teniendo la misma duda…
¿De dónde salen estas ventanas, quién las creó?
Tras meses (tal vez años, porque aún no estoy del todo claro) intentando entender muchos conceptos de distintas disciplinas de la informática sólo conseguir tener en la cabeza un lío aún mayor. Eventualmente, descubrí el dichoso Linux con él podía tener acceso a informaciones que un Windows cualquiera no podía brindarme. E incluso, en un momento intenté montar mi propio Linux desde cero siguiendo una guía llamada Linux From Scratch y entender mucho mejor todos los elementos que componen un Sistema Operativo. Obviamente todo ese proceso me llevó una gran cantidad de tiempo y frustración y si bien lo que aprendí no contestaba directamente a todas mis preguntas, me ayudó a entender mucho mejor cómo funciona este mundo. Hay muchas cosas que aún hoy en día simplemente se me escapan, no tengo memoria infinita, pero por lo menos he entendido de dónde proviene tal complejidad y como el ser humano ha podido llegar a crear sistemas tan complejos y sobre todo en tan poco tiempo… La respuesta a todo son Las Capas y Capas de Abstracción.
Lo bueno de las capas es que existen en nuestro mundo tangible y es mucho más fácil explicarlo. Imagina por un momento que eres un Dios de la arquitectura, alguien que no sabe qué hacer con el dinero, tienes más de 25 digitos en tú cuenta bancaria. Un buen día decides retirarte, comprar un terreno y construir tu propia casa por tu cuenta. Decides hacer este proyecto un reto personal y completas toda la obra prácticamente; no te privas de ningún lujo, los últimos materiales de construcción, grandes ventanas, buena orientación bien aislada en cuanto a temperaturas y ruidos… dedicas meses a levantar paredes block por block, tuberías de cobre, cableado eléctrico, pintura, colocas las ventanas e incluso, el parqueo…
¿Un trabajo bastante duro, no? Te dará una enorme satisfacción. Desde luego, usas una cantidad considerable de elementos prefabricados. Incluso partes a partir de un modelo de casa bastante común. Completas tú obra con un gran esfuerzo y sacrificio pero valió la pena… ¿es tu casa propia, no? tú sudor, tú apuesta a ciegas a tus capacidades para lo que tú como ente consideras tu obra maestra, tu obra final, Your Final Boss on a game that you have been playing a long time.
Puedes decir que has construido tu propia vivienda. Ahora imagina que un día un hombre de las cavernas (se llamara Pedro Picapiedras) viaja desde el pasado y aterriza justo en la puerta de tu casa. Se trata de un Homo Sapiens de la era paleolítica. El Sr.Picapiedras no conoce nada sobre nuestra cultura, tan solo conocen la “tecnología básica” basada en picar piedritas y otros objetos que consigue a su alrededor. El Sr.Picapiedras (ignorando el problema del idioma) se te presenta y te pregunta qué son estas rocas transparentes paredes con formas regulares, colores vivos… no se asemeja a nada que haya visto jamás. Tu contestarías
“Pos’ mira, se trata de mi casa. Aquí es donde vivo, la he construido yo mismo. ¿No está bonita?”
Entonces, el cavernícola que se ha saltado unos cuantos siglos de evolución humana intenta imaginar cómo has podido construir semejante obra maestra, pero simplemente se le escapa. No concibe cómo has podido levantar una pared tan perfecta y colorearla de un blanco tan homogéneo. Algo similar nos ocurre cuando intentamos imaginar cómo de todos esos ceros y unos que simplemente representan presencia o ausencia de corriente pueda salir el artículo que estás leyendo ahora mismo.
En este momento tú con el objetivo de calmar al Sr.Picapiedras, intentas explicarle que realmente no has comenzado desde la nada. Si bien es verdad que has construido tú la casa no, has fabricado los bloques de la que se compone tales como ventanas, paredes, puertas y suelos o incluso las tuberías de cobre o el cableado necesario para que la electricidad llegue a tu casa… simplemente has adquirido estos materiales y los utilizaste con tus conocimientos. Incluso utilizando conceptos tradicionales para construir la casa, Pedro Picapiedra muy extrañado te contesta…
“Entonces no has construido la casa. Simplemente has montado bloques preexistentes, bugah bugah”
No puedes decir que realmente la has construido. Tu en realidad, sí que puedes. En tu nivel de abstracción tú eres quien construyó la casa. El cavernícola lo que ve es que has contribuido con otras cientos de personas a fabricar el cemento, extraer la arena necesaria para fundir el cristal, fabricar los bloques de concreto y extraer el cobre de las mina; refinarlo para que pueda convertirse en cables, extraer el petróleo que una vez refinado se convierte en el plástico que recubrirá los cables, incluso el diseño de las ventanas y marcos o puertas. Si nos ponemos escrupulosos hay miles de personas que han contribuido a fabricar todo aquello que compone tu vivienda y realmente si lo piensas más bien, has hecho muy poco por construir tu hogar, una parte bastante pequeña mira que te digo… sin embargo tú sigues pensando que la casa ha sido fabricada por ti. Según tu punto de vista, hay muchas cosas que das por hecho que no vas a poder fabricar por tu cuenta o el esfuerzo no vale la pena ya que existen productos y servicios que te las proporcionan. Das por hecho que en la construcción de tu casa usaremos bloques tales como block. Los blocks es un concepto abstracto, para ti son un producto acabado que viene de otro nivel de fabricación; no sabes ni te importa de dónde vienen cómo se fabrican o cuánto tiempo o trabajo implica su realización… tú solo sabes cuánto cuestan y cómo tienes que usarlos. Esto amiguito, se trata de una capa de abstracción.
Para ti el block es un concepto que te viene dado de forma. No necesitas conocer todos los detalles. En tu labor, el block es un bloque básico y en la tarea de construir la casa hay muchos otros como este…
Esto en la informática y en otros campos se llama capa o nivel de abstracción. Tú vives feliz en tu mundo con tus conceptos y tus bloques básicos, construyes casas mientras que en la capa inferior tenemos ingenieros civiles (o quién sea que tenga el encargo de hacer un block) que no tienen ni idea de cómo se construye una casa pero saben unas cuantas cosas sobre blocks y en la capa que está por debajo pues tendríamos expertos en extraer materiales de las minas para que el fabricante de blocks pueda crear su producto que tampoco necesariamente sabe ni le importa como los arquitectos diseñan sus productos o como tú construyes la tuya.
Cada uno vive en su nivel apartado, o mejor dicho, cada uno se ha abstraído de cómo funcionan los demás niveles. No me malinterpreten, puedes entender cómo funcionan todos los niveles pero desde luego será mejor en tu trabajo si te dedicas a dominar a fondo tu campo y tu nivel de abstracción.
Lo mismo ocurre con los ordenadores, aunque aquí hay un concepto bastante difícil de asimilar…
Dentro de la tecnología digital antiguamente estábamos ligados a un hardware una serie de componentes que estaban específicamente diseñados para conseguir un resultado específico. Si queríamos otros resultados, pues teniamos que modificar estos circuitos físicamente para hacer que el resultado cambie. Gracias al trabajo de matemáticos y físicos como Ada Lovelace, John Von Neumann y Alan Turing así como muchos otros nace la idea de una máquina única, la máquina definitiva capaz de realizar cálculos basados en la presencia o ausencia de corriente. Aquí nace el mundo digital y la computación tal y como la conocemos hoy en día.
Dejamos de trabajar con componentes específicos a nivel de hardware, lo damos por hecho ya nace (quizás) una de las primeras capas de abstracción en la informática, nos olvidamos de los componentes físicos y empezamos a trabajar con memorias y cálculos. El valor que tienen nuestros números en estas máquinas se alejan del aspecto que tenga la máquina en sí. En otras palabras, la máquina definitiva capaz de resolver cualquier problema…una máquina universal. Realmente este no es el objetivo de este articulo tan denso y basto, el objetivo es entender cómo funciona un ordenador desde el más bajo nivel de nuestras capas, simplemente entender que cada nivel de evolución nos da una nueva capa de abstracción que nos resuelven muchos problemas con los que ya no tendremos que lidiar y podremos centrarnos en evolucionar dando muchas cosas por hecho.
Muy bien, pues tenemos una máquina que puede hacer operaciones aritméticas, un siguiente nivel sería automatizar operaciones, hacer que la máquina ya sea capaz de saber cómo realizarlas y nosotros tan solo le dijéramos [realiza esta secuencia de acciones] y fuera capaz de hacerlas sin asistencia alguna. En ese caso, lo único que necesitaríamos son unos valores de entrada y nos devolvería otros de salida; algo tan simple como una suma luego pasaríamos a la multiplicación… Si nuestra máquina tan sólo puede sumar sabiendo que una multiplicación es repetir la suma del mismo número una cierta cantidad de veces podríamos crear un procedimiento que sabiendo cuáles son los números implicados en la multiplicación simplemente realice este procedimiento para darnos el resultado de la operación sin tener que nosotros instruir las sumas una tras otra.
La máquina de ceros y unos; presencia de corriente ausencia de corriente… todas las instrucciones la recibe de esta manera suena muy complicado y contraproducente, desde luego. Pero, ¿qué tal si definimos un sistema de letras y números basados en códigos ceros y unos algo parecido al Morse?. Usando estos códigos crearíamos un simple lenguaje . La maquina obviamente no entiende este texto pero crearíamos procedimientos para que se encarguen de traducir este texto en los ceros y unos necesarios para realizar la suma y así, poco a poco, capa tras capa, llegamos a los ordenadores modernos. Esto que acabamos de ver sería el nacimiento, de los lenguajes de programación. Si nos movemos algo un poco más moderno un programador de Driver Gráfico no conoce cómo se representan los colores en tu pantalla, el tan solo envía una tabla de valores con el color que tiene cada pixel. La pantalla es la que se encargaría luego de mostrarlos, ya que sabe cómo tiene que hablar con cada componente físico para que la acción se lleva a cabo; a su vez el programador que creó la consola de texto desconoce cómo se crea esa tabla de colores, pero sabe que para mostrar texto tiene que pasar una serie de datos específicos de la misma manera el programador de programas basados en texto no sabe cómo se representan los textos en la pantalla… solo sabe qué es lo que tiene que hacer para mostrarlos. Cada uno en el nivel inferior se ha encargado de que el nivel superior lo tenga fácil para hacerlo y se ha encargado de dejar preparado el trabajo sucio. Básicamente, es una caja negra el PC o el dispositivo movil que estás usando ahora mismo…
Está repleto de cajas negras, la una con la otra cada nivel desconoce cómo funciona internamente el nivel superior o inferior. Ahora mismo estamos hablando de los niveles más bajos de nuestra gran montaña de capas pero si vamos arriba de todo podremos encontrar por ejemplo a un Programador Web que tan solo utiliza el navegador, el editor de texto y algunas otras tecnologías como las redes, protocolos como HTTP, FTP, SFTP para crear su página web y no necesita saber ni de dónde salen ni cómo funciona. Lo mismo ocurrió con aquel libro de Visual Basic .NET, en este libro nosotros ya damos por hecho que alguien se ha encargado de crear el sistema que usando una gran cantidad de capas por debajo es capaz de pintar las ventanas en la pantalla y el programador de Visual Basic .NET tan solo se encargará de configurar estas ventanas y hacerlas interactuar.
De hecho, el lenguaje de programación que usa Visual Basic antes de ejecutarse es traducido a otro lenguaje mucho más complejo que a su vez se traduce otro lenguaje aún más complejo que acaba en simples operaciones aritméticas sobre una memoria; En nuestra CPU se traduce a millones de operaciones que a mi como programador no me importa como ocurre, no me encargo de esta función. De la misma manera que el panadero no va a el campo a cosechar el trigo para hacer el pan así es como funciona el mundo de la informática y el software y realmente cualquier otro sistema extremadamente complejo de la humanidad.
Primero que para que se produzca un avance tecnológico, cada gran contribuidor coge el legado de quien le precede y lo mejora y segundo que cada programador ingeniero electrónico o industrial utiliza las herramientas y bloques básicos proporcionados por la capa inferior por lo cual se puede decir que nadie lo sabe todo. Sólo una pequeña parte esto es lo que le permite centrarse en lo que realmente es importante y hacer el mejor trabajo posible en su área. Dicho esto, nos podemos sentir identificados con aquel hombre de las cavernas que se maravilla ante una obra de gran complejidad que no es capaz de entender. Sobre todo, lo que no entiende es como un hombre fue capaz de hacer todo aquello para el este hombre es un poderoso mago que manipula la realidad, mientras que en realidad lo que tenemos es una gran trama de capas donde miles de personas técnicas y conocimientos interactúan para crear una obra maestra de ingeniería moderna tal y como lo es tu hogar o tu ordenador.
Ahora el problema para el señor Picapiedra aparece mucho menos abrumador. La verdad es que, ahora el programador ya no es un mago sino una capa más de nuestra sociedad.