Los desarrolladores a menudo consideran las abstracciones como "cuanto más cerca del metal, mejor", lo que significa que a medida que las abstracciones se alejan del nivel más bajo posible, más se sacrifica en términos de rendimiento y características. Pero las abstracciones también funcionan como un espectro. Veremos cómo podemos ajustar nuestra visión de las abstracciones y qué ejemplos podemos usar para comprender mejor que las abstracciones tienen menos que ver con la programación y más con el lugar donde las implementamos.
Un Nuevo Tipo de Abstracción
Video Summary and Transcription
Las abstracciones en el desarrollo de software se construyen sobre otras cosas y proporcionan utilidad o facilitan el desarrollo. Pueden ser de bajo nivel o de alto nivel, y cuanto más pequeña sea la abstracción, más cerca estará del nivel inferior. Las abstracciones pueden operar en diferentes entornos y su nivel determina cómo funciona y se aborda el código. Es importante evaluar las abstracciones utilizadas, su portabilidad y su distancia del nivel inferior.
1. Introducción a las Abstracciones
Tomemos un descanso de los temas técnicos y hablemos de ideas y abstracciones. Una abstracción se construye sobre otra cosa, como una biblioteca o API de bajo nivel. Proporciona utilidad o una biblioteca que facilita el desarrollo. Las abstracciones pueden ser de bajo nivel o de alto nivel, y cuanto más pequeña sea la abstracción, más cerca estará del nivel inferior. También pueden proporcionar salidas de emergencia hacia el nivel inferior, como importar módulos de C en Python o devolver objetos JavaScript válidos en bibliotecas de JavaScript.
Hola a todos. Soy Mike Huggington. Ya hemos tenido un día completo de muchos temas técnicos. Hagamos un descanso de eso y hablemos de ideas y abstracciones.
Como alguien que proviene de un campo no técnico, me enseñaron que una abstracción es algo que se construye sobre otra cosa. El ejemplo más simple es tener esta biblioteca de bajo nivel o esta API de bajo nivel, y simplemente tener todas estas implementaciones aproximadas de cómo hacer las cosas. Esto podría ser ensamblador. Esto podría ser C para usted. Esto podría ser una API DOM sin procesar.
Bueno, las personas se reúnen y se dan cuenta de que eso no va a ser muy productivo. Se quedarán atrapados teniendo que mantener los matices de una API de bajo nivel. Así que siguen adelante y crean una abstracción. Se construyen sobre ella. Proporcionan alguna utilidad o alguna biblioteca que puede sentarse encima de la API y facilitarte el desarrollo. Luego, más adelante, las personas se dan cuenta de que ese es un punto de partida bastante bueno. Vamos a seguir adelante y hacer algo más. Vamos a hacer esto un poco más fácil. Vamos a eliminar este método porque no se usa muy a menudo. Hay muchas trampas en eso. Te vamos a dar algo que sea más simple, más fácil de entender y te permita construir lo que quieras.
Estamos en este nivel de abstracciones, donde las vemos como muy, muy de bajo nivel o muy de alto nivel, y el espectro de muy alto nivel a bajo nivel, y este enfoque jerárquico es cómo las miramos típicamente. Ahora, con este enfoque jerárquico, también tenemos que considerar que lo que está en el nivel alto también puede incluir más código, ya sea en tiempo de ejecución o simplemente como una biblioteca. Puede incluir un conjunto de características limitado pero aún manejar casos extremos. Entonces, cuanto más pequeña sea la abstracción, más cerca estará del nivel inferior, tal vez, tal vez no. Además, la abstracción también puede proporcionar salidas de emergencia hacia el nivel inferior. Un ejemplo perfecto, no en JavaScript, pero en Python, puedes importar módulos de C. Puedes escribir algo de C, importarlo en tu programa y tener acceso cuando necesites esa salida de emergencia. Lua ofrece lo mismo. Puede haber bibliotecas de JavaScript que, en lugar de devolver su propio objeto personalizado, devuelven un objeto JavaScript válido, ya sea una fecha o algo más. Estas son las formas en que me enseñaron a pensar en las abstracciones y a medida que ha pasado el tiempo, me he dado cuenta de que hay otra forma.
2. Comprensión de las Abstracciones de Código y su Impacto
Debemos considerar dónde vivirá nuestro código y su objetivo de ejecución. Las abstracciones pueden operar en diferentes entornos, como el navegador, el servidor o las Funciones en la Nube. El nivel de abstracción determina cómo opera y se aborda el código. Es importante entender que las abstracciones no son inherentemente mejores o peores, sino que ofrecen diferentes opciones y consideraciones. Como desarrolladores, debemos evaluar las abstracciones que utilizamos, su portabilidad y qué tan alejadas están del nivel inferior.
Podríamos pensar en ellas como un espectro. No se trata solo de cuán alejados estamos de esa API de bajo nivel en la que estamos operando, sino dónde va a vivir este código. ¿Cuál es su objetivo de ejecución? ¿Será el navegador, el servidor? ¿Vamos a utilizar Funciones en la Nube? Un ejemplo perfecto es Node, Deno y el navegador. ¿Este código va a funcionar tanto en el navegador como en Node? Tal vez. ¿Va a funcionar en Node y Deno? Probablemente no. Cómo opera ese código y cómo se aborda es simplemente otro nivel de abstracción.
Si usamos una biblioteca que funciona muy bien en el navegador, es probable que pueda ejecutarse en Deno, pero no lo sabemos. Entonces, ¿qué tan alejada está del objetivo? Uno con el que estoy muy familiarizado es la idea de la plataforma cruzada. Tenemos por un lado la web y por otro lado lo nativo. Ahora, dependiendo de dónde estés, de dónde se encuentre tu equipo, podrías elegir abstracciones que están a un grado de distancia del nativo puro o podrías elegir abstracciones que están a un grado de distancia de la web pura. No importa si son mejores o peores. Míralas como extremos opuestos del espectro.
Esto es algo en lo que pensamos a diario en Ionic, donde creemos que nuestras abstracciones se encuentran justo en el medio. Te brindamos acceso a la web, pero también te brindamos acceso a lo nativo. ¿Es eso un punto intermedio? ¿Es mejor? ¿Es peor? La respuesta depende de ti, pero es simplemente una forma diferente de ver qué es ese código. No necesariamente es mejor o peor. Simplemente te dará opciones. Comprender que el código y las abstracciones se tratan menos del impacto en el rendimiento, del nivel real alejado del nivel inferior. Se trata realmente de tu código, del tamaño del rendimiento y de dónde va a vivir. Podríamos tener código que funcione en todos nuestros dispositivos en este momento, pero en unos años, ¿podrá funcionar allí? ¿Habrá más plataformas donde este código no pueda ejecutarse porque está utilizando la abstracción incorrecta? Como equipo, evalúa qué abstracciones estás utilizando, cuál es su portabilidad y también qué tan alejadas están del nivel inferior. Sin descartar la jerarquía. Solo digo, evalúa más en el espectro. Y con eso, gracias.