La red social Instagram, propiedad de Facebook, ha detallado su solución para mejorar la aplicación de una manera que mejore las ventajas de Python. Y de esta manera mitigar los obstáculos del lenguaje a la productividad en proyectos a gran escala.
Por si no lo sabías, detrás de todos los selfies demasiado perfectos en Instagram web, la red social propiedad de Facebook se basa en el popular lenguaje de programación Python.
Como detallaron recientemente los ingenieros de Instagram, el servidor de esta red, el backend de la aplicación para móviles inteligentes que usan millones de millennials para compartir fotos de sus amigos y ellos mismos. Funciona casi en su totalidad con Python, el tercer lenguaje más popular detrás de Java y JavaScript.
Para aumentar la productividad del desarrollador, los ingenieros de Facebook han creado herramientas de código abierto como el verificador de tipo estático Python, Pyre. Que Instagram utiliza al iniciar sesión para analizar su base de código del servidor. Los ingenieros de Instagram también han creado herramientas de desarrollo como LibCST para analizar el código Python.
El objetivo clave de los ingenieros de Instagram es ser lo más productivos posible al usar Python en una escala masiva. Y han revelado cómo están evitando «algunos puntos débiles» cuando usan dicho lenguaje.
El gigante tecnológico también quiere atraer nuevos talentos, incluso si los programadores no son necesariamente expertos en Python. Por lo que quiere explicar a los candidatos a desarrolladores cómo está creando herramientas para ayudarlos a ser más productivos.
También quiere mantener contentos a los desarrolladores que les gusta usar Python, por lo que la compañía está empujando a Python más allá de sus límites. Es por eso que los ingenieros al entrar a Instagram han desarrollado ‘módulos estrictos’ para Python.
Instagram quiere seguir usando el lenguaje Python a gran escala
«Una idea razonable podría ser que estamos extendiendo Python más allá de lo que estaba destinado. Funciona muy bien para equipos más pequeños en bases de código más pequeñas que pueden mantener una buena disciplina sobre cómo usarlo, y deberíamos cambiar a un lenguaje menos dinámico». Afirmó el ingeniero de Instagram Carl Meyer.
«Pero ya pasamos el punto del tamaño de la base de código donde una reescritura es incluso factible. Y lo que es más importante, a pesar de estos puntos débiles, es que hay mucho más que nos gusta de Python. Y en genera, nuestros desarrolladores disfrutan trabajar en Python. Así que depende de para qué descubramos cómo podemos hacer que Python funcione a esta escala y continuar trabajando a medida que crecemos», También manifiesta Meyer.
Explica que Python es brillante para una iteración rápida porque puedes hacer cambios y ver el resultado sin necesidad de compilar el código. «Pero con unos pocos millones de líneas de código (y un gráfico de dependencia desordenado), esa ventaja comienza a desvanecerse por completo».
Del mismo modo, el servidor de Instagram Story tarda hasta un minuto en iniciarse, lo que se traduce en un retraso crítico al probar nuevas funciones. Y es lo suficientemente largo como para que un desarrollador se desvíe hacia otro trabajo diferente y no complete la tarea que se le ha encomendado.
A pesar de que Python permite tiempos de desarrollo más rápidos, existen desafíos con su uso a escala
«Debido a que las importaciones pueden tener efectos secundarios arbitrarios, no hay una manera segura de recargar nuestro servidor de forma incremental [en Python]. No importa cuán pequeño sea el cambio, tenemos que comenzar desde cero cada vez, importando todos esos módulos. Y volviendo a crear todos esas clases y funciones, recompilando todas esas expresiones regulares, etc.», manifiesta Meyer.
De igual forma, también ha manifestado que: «Por lo general, el 99% del código no ha cambiado desde la última vez que recargamos el servidor, pero de todos modos tenemos que rehacer todo ese trabajo lento».
Los desafíos de Instagram con el uso de Python a escala reflejan algunas de las dificultades que Salesforce tuvo con él para su producto Einstein Analytics. Salesforce apartó recientemente el código de Python a favor de Go, o Golang, respaldado por Google.
«Python es excelente para escribir rápidamente aplicaciones de nivel superior, pero no siempre ofrece el alto rendimiento necesario a nivel empresarial», explicó un arquitecto de Salesforce.
Python se convierte en un «killer» de productividad
En el caso de Instagram, Meyer agrega que no solo perjudica la productividad del desarrollador. Sino que causa una «cantidad significativa de cómputo desperdiciado en la producción». Y esto porque Instagram despliega y recarga continuamente el sitio en los servidores de producción a través de los smartphones.
Igualmente, Meyer describe «módulos estrictos» como la respuesta de Instagram a las debilidades de Python cuando se usa en entornos de producción a gran escala, como los móviles.
«Los módulos estrictos imponen algunas limitaciones sobre lo que puede suceder en el nivel superior del módulo. Todos los códigos de nivel de módulo, incluidos los decoradores y las funciones e inicializadores llamados a nivel de módulo. Deben ser puros (sin efectos secundarios, sin E / S). Esto se verifica estáticamente en tiempo de compilación a través del intérprete abstracto «, También afirma el ingeniero en cuestión.
«Esto significa que los módulos estrictos no tienen efectos secundarios en la importación: las malas interacciones de los efectos secundarios en el momento de la importación ya no son posibles». Concluye Meyer.