top of page

Python dev roadmap

Actualizado: 12 mar 2023

Backend, Data science, Data Engineering, Webscrapping... Vamos a explicarlo con calma y con ejemplos reales


Holaaa,

Frecuentemente las personas me preguntan qué les recomiendo para comenzar con Python, o cómo continuar teniendo ya las bases; hoy voy a tratar de guiarlos un poco según lo que les guste.

Si buscas en Google, "Python roadmap" lo primero que te saldrá es una entrada de un sitio excelente llamado roadmap.sh el cual tiene este diagrama.




Pero se ve bastante imponente, ¿no? ¿Cómo saber qué me gusta más? ¿Qué es esencial y qué no?

Y si le preguntas a ChatGPT... no te va a dar una respuesta muy útil que digamos😅.


Entonces acá te lo voy a explicar como si fuera una historia, con un par de recomendaciones 😍


Las bases

Decidiste iniciar en desarrollo de software, y un amigo te recomendó probar con Python, o lo leíste en internet. Entonces decidiste tomar un curso, de alguna Plataforma online y aprendiste las bases de programación, qué son variables, estructuras de datos, ciclos, condicionales, regex, decoradores, functiones lambda, clases, etc.

Esto es esencial, es lo primero que todos debemos aprender en cada uno de los lenguajes en los que queramos iniciarnos.

Pero, ¿y luego qué?

En este punto, para con Python puedes tomar varios caminos. Los principales son

A continuación voy a crear varias secciones, y para cada foco te iré redirigiendo a las secciones de este blog que necesites conocer.


Backend

Ya sabes hacer una aplicación en la consola que te dice tu edad o una súper calculadora en la que 1+1=11 (broma). Pero ahora quieres hacer algo que funcione como Facebook.

Entonces acá viene el primer problema, ¿cómo hacer que tu aplicación pueda accederse no solo desde tu consola? Que se pueda acceder desde tu navegador, y que lo puedan hacer varias personas al mismo tiempo.



Ahora ya sabes lo básico de frameworks, pero… ¿y luego?

Entras al maravilloso mundo de los periféricos del backend. Lo sé, mientras aprendías de frameworks tuviste que configurar alguna base de datos, por simple que haya sido (déjame adivinar… ¿SQLite?). Pero, ahora necesitas aprender más a profundidad sobre ellas



Bueno, digamos que ya fuiste y tomaste un curso de Bases de datos, o ya leiste documentación y sabes cuál usar, la configuraste en tu framework y funciona. Ahora tienes una aplicación donde guardas tus contactos telefónicos en una base de datos.

Pero, ¿y ahora qué?

Qué belleza, ya tienes tu aplicación corriendo en tu pc, y puedes acceder desde tu navegador, y consultar los endpoints que creaste… pero, todavía no se parece a Facebook 😭

Hay que exponerlo a internet, ¿cierto?

La manera más fácil y comunmente usada es la nube ☁️



Listoo, ya tienes tu aplicación corriendo en la nube, conectándose a la base de datos, guardando los logs, escalando para responder todas las peticiones de los usuarios.


¿Y eso es todo?


Nop. Eso es lo esencial, pero digamos que tu aplicación necesita que los usuarios se logueen… No es simplemente guardar sus usernames, nombres, apellidos, contraseña, etc, en una sola tabla 😅


Por ejemplo, las contraseñas se deben guardar hasheadas.

Hashear es básicamente tomar tu contraseña, aplicarle unos cálculos matemáticos y convertirla de misuperpassword a j5673#636eyt3gh&$$4, interesante, ¿no? ¿Y sabías que no se puede hacer lo inverso? Pasar de ese grupo de letras y símbolos a tu contraseña es matemáticamente imposible. En fin, hay mucha ciencia detrás de las contraseñas, incluso si lees un poco, verás que algunas tienen… sal. Sí, sal 🧂.


También respecto a criptografía podrías querer que tu aplicación se autentique contra otra, como cuando vas a iniciar sesión en un blog y te dice “iniciar sesión con Google”. Ahí se manejan tecnologías como OIDC, y JWT Tokens 😅. Lo sé, lo sé, suena a mucho, pero a medida que lo vayas necesitando lo irás aprendiendo.


También puedes necesitas protegerte de ataques de gente rara. Entonces implementarás throttling, para limitar a los usuarios a hacer cierta cantidad máxima de peticiones por minuto, hora, o día. De otro modo estarás expuesto a ataques DDoS.


Está bien, ya tienes todo lo que necesita tu aplicación, pero… Necesitas hacer un cambio 😭 y no quieres tener que volver a configurar todo a mano, o necesitas desplegar ooootro servicio y no quieres tener que configurar todo de nuevo, seleccionar el tipo de máquina, el tamaño, sus variables, etc…

Entonces aquí entra la magia ✨ de IaaC, infraestructura como código. Donde creas un archivo de JSON o YAML que se convertirá luego en una arquitectura completa. Esto es el estándar actualmente en las empresas. Ninguna buena empresa maneja su arquitectura a mano. Ir a la consola de AWS o desde la terminal lanzar comandos para cambiar la arquitectura… No es sostenible😅. Necesitas aprender de Terraform o AWS CloudFormation.

Y ya está, con esto podrás crear y mantener un backend en Python como un pro. 😍


Data Science

Interesante, eres un científico, lo sé. Para ciencia de datos, luego de saber las bases, es esencial saber un poco de matemáticas y estadística.



¿Y luego? ¿Te preguntas dónde está la inteligencia artificial acá? Inteligencia Artificial es algo inmenso, pero lo esencial y más comúnmente usados son los modelos de machine learning, de deep learning y la visión artificial 😍. O mezclar los tres 😍

Pues yeyy, en este punto puedes aprender de modelos de machine learning. ¿Y por donde comenzar?



Nice, ahora ya sabes qué usar para implementar modelos de machine learning. Pero… y cómo los despliegas? Muy bonito que corran en tu máquina, pero los usuarios necesitan usarlos ellos 😅


Para esto puedes darte una pasada por la sección de nube, pero hay una manera simple para probarlos 👀y es con un servicio serverless. Serverless significa que no necesitas tener un servidor configurado y corriendo para ejecutar tu código. En AWS Lambda o Azure Functions puedes solo poner tu código en una función y listo, lees los datos del usuario, lees tu modelo, haces la predicción y listo, retornas tu respuesta* 😍




*Obvio estoy simplificando todo un montón, puedes necesitar hacer validaciones de las entradas, organizar los datos, conectarte con otros servicios etc, etc.


Data Engineering


Adivino, aprendiste de ciencia de datos pero necesitas preparar tus datos antes de entrenar tus modelos, ¿cierto? Si sí, sigue leyendo, si no, salta a después del divisor de esta sección (o chismosea lo que sigue)


 


Data Warehouses and data modelling

Genial, ya tienes tus datos pero no sabes dónde guardarlos porque son muchos para una base de datos OLTP 😭 y no necesitas hacer queries con base en filas. Pues entonces recuerda que existen las bases de datos OLAP, las cuales permiten hacer cálculos por columnas a grandes cantidades de datos (>10mil registros/filas a modificar/crear*). Estas bases de datos tienen la ventaja de funcionar similar a Spark, entonces también puedes por ejemplo, concatenar datos de dos columnas, agregar columnas nuevas con base en las existentes, sacar promedios y demás indicadores.


Existen varios servicios para Data Warehousing, como

  • AWS Redshift

  • Azure Data Explorer

  • Azure Data Lake V2

Lee sus descripciones y elije el que más se ajuste a tus necesidades.




Ahora… Te das cuenta que no puedes estar procesando miles de datos cada vez que alguien o algún servicio necesita ciertos datos 😅 Entonces diseñas un modelado de datos, por ejemplo, de tu datawarehouse, necesitas sacar cada hora ciertos indicadores que te dicen el estado de tus servicios. Entonces creas un query o un script de spark que se corre cada cierto tiempo y guardan esos datos en una tabla adicional y te los tienen listos para cuando los requieras.

Y llegará el momento en que necesitas hacer algún procesamiento en tiempo real 😅 y te preguntarás qué usar. Por ejemplo, te llegan logs de algún servicio y necesitas ir analizándolos para ver si algo falló, para llevar un conteo, sacar algún indicador y ese guardarlo en una base de datos o enviárselo a otro servicio cada cierto tiempo. Entonces entran a jugar AWS Kinesis y Azure Stream Analytics



Con ellos puedes recibir datos en tiempo real, agruparlos y procesarlos en batches como tú prefieras, por ejemplo, cada minuto procesar los logs que te hayan llegado, contarlos, verificar si hubo algún error y enviar esos datos a alguien más.

Pero, hay más 😅 ¿qué pasa cuando tienes un grupo de tareas en batch que correr en secuencia? ¿Una detrás de la otra? Y que los resultados de una vayan fluyendo de una a otra/s.

Entonces te presento Apache Airflow. Con él puedes configurar DAGs, o flujos o pipelines, como les llames, para que todo se corra automáticamente según las reglas que quieras, si falló, que se reintente, si funcionó y se tardó mucho, que envíe alguna señal, o lo que sea que necesites.


Y creería que con todo esto estás listo para tomar un problema de ing de datos y encontrar una solución óptima 😍

*Solo doy un aproximado, obvio esto puede variar.


Web Scrapping


Jejeje, interesante que te haya interesado esta sección, probablemente trabajas o tienes tu propia startup/empresa pequeña 👀.

Webscrapping es muy importante porque mucha veces los datos no son estructurados, están distribuidos en internet, están en html, en json, incluso en imágenes, y necesitas recopilarlos para procesarlos y darles valor.

Entonces acá hay algunas herramientas muy útiles como lo son el

  • RPA (Robotic Process Automation)

  • Selenium

  • Beautiful soup

¿Cuál es la diferencia entre la primera y las dos últimas?

La primera hace que tu pc haga cosas por sí solo a apartir de bloques de tareas, o le puedes pedir que repita lo mismo que tú haces y lo pones a grabar. Entonces él aprende cómo entrar a excel, cómo navegar a una hoja de cálculo, cómo seleccionar cierta tabla y copiarla en otro lugar, hace cálculos de esos datos y luego va a una página y los inserta uno por uno. ¡Tú computador controlándose solo! Mientras las segundas son más a bajo nivel, es decir, parten de código y controllers de los navegadores para hacer búsquedas en internet. Con RPA puedes entrar a excel, con Selenium no 😅

Selenium es enfocado a navegadores, hacer búsquedas, entrar a páginas, descargarlas, etc.

¿Y beautiful soup? Te ayuda a encontrar los datos que necesitas dentro de los HTML que tengas.

Por ejemplo, quieres extraer los precios de una tienda de ropa, pero no quieres ir página por página copiando y pegando. Entonces analizas la estructura (HTML) de la página web, le dices a Selenium que navegue o haga la paginación necesaria, y con beautiful soup extraer los precios del HTML. Como magia, no? ✨


Subsections


Frameworks

Los frameworks nos ayudan a que tu aplicación se exponga a través de un puerto de tu computadora, e incluyen algo muy interesante que son las APIs, una API (Application Programming Interface) es algo intermedio entre tu aplicación y el exterior; algo que reemplaza tu consola, para que tu aplicación se accesible desde el exterior.

Existen muchos Frameworks para Python pero los más famosos son:

  • Django

  • Flask

  • FastAPI😍

Cada uno tiene sus propias ventajas y desventajas.

Por ejemplo, Django es el más robusto desde el inicio de la aplicación. Porque al crear el proyecto te carga mil cosas que cree que vas a necesitar o que son esenciales para toda aplicación web.

En su propio documentación ponen el logo así:



Es por que Django es más conservador, todo tiene su estructura bien definida y estándar desde hacer mucho tiempo.

Por otro lado, Flask es un poco más Freestyle, sin tanta cosa por defecto como Django. Esto permite que generes una API más rápido.

Pero recientemente (menos de 5 años a creación de este blog) nació FastAPI 😍 y ahora es uno de los más famosos y usados frameworks web. Debido a tres cosas:

  • La facilidad con la que creas una API. Literalmente con menos de 5 líneas ya tiene un hello world accesible desde tu navegador.

  • Asincronismo. Con este framework implementar asincronismo es muy transparente. Prácticamente agregas async y await a una función y listo, sale pa’ pintura. Si quieres aprender cómo funciona el asincronismo, en la documentación te lo explican con hamburguesas (en serio).

  • La documentación. La documentación de este Framework es de las más bonitas que conozco, todo te lo explica práctico y con ejemplos. Un problema muy común de nosotros los programadores es que no tenemos ejemplos de cómo hacer algo. Y pues no somos adivinos, entonces por esto la doc de FastAPI es una belleza.




Bases de datos

Para elegir tu base de datos necesitas saber cuáles existen y cuál es su propósito.

Let’s dig into this!

Las bases de datos se dividen principalmente en dos categorías:

  • OLAP: Online analytical processing. Enfocadas para hacer analítica, como dato curioso, algo que las identifica es que están enfocadas a procesar los datos agrupados por columnas. Útil para analítica de datos, e ingeniería de datos. Porque en estos roles es frecuente tener tareas como “Quiero que todas las edades cambien y ahora no sean enteros sino strings”.

  • OLTP: Online transactional processing. Enfocadas en transaccionalidad, son las bases de datos de toda la vida. Donde la mayoría de procesamiento se hace orientado a filas. Útil para procesos de transacciones como “Quiero traer todos los datos del cliente cuyo nombre es Juan”.

También existen los nombres SQL y NoSQL, que es algo totalmente distinto. Hay bases de datos OLTP NoSQL, como MongoDB.

Cuál es la diferencia entre estas dos te lo dejo de tarea jajaja pero en resumen, las SQL tiene una estructura de columnas definidas y las NoSQL… pues no 😂

Dentro de las SQL hay muchas como

  • MySQL

  • PostgreSQL 😍

  • Oracle DB

Y NoSQL

  • DynamoDB

  • MongoDB

  • ...


La nube


Existen muchos servidores de servicios en la nube, como AWS😍, Azure y GCP.

Puedes aprender cualquiera y eso te va a dar las bases para luego migrar a otro fácilmente, en la mayoría de casos solo cambian los nombres 😅

Por ejemplo, con AWS puedes aprender a manejar EC2 para tener una máquina en la nube y ahí montar tus aplicaciones. y luego ECS para crear grupos de máquinas corriendo al tiempo, y manejar lo que es conocido como autoscaling. Esto significa que cuando muchas personas entren a tu aplicación, tu máquina puede volverse más potente o arrancar más máquinas para que entre todas trabajen juntas y puedan responder todas las peticiones de tus usuarios.


También necesitarás aprender de almacenamiento de objetos, como AWS S3 o Azure Blob Storage, para guardar las imágenes que usa tu aplicación, o tus archivos CSS… o no me digas que los guardaste en la máquina directamente😅

También necesitarás crear una base de datos en la nube. Las nubes tiene compatibilidad para casi todas las que mencionamos previamente, probablemente incluso para algunas que ni hayas escuchado en tu vida.


Listoooo, ya tu aplicación está corriendo en la nube pero todo el mundo puede acceder y te da miedo de que vayan a atacarte o tratar de robar tus credenciales. Entonces debes aprender de redes en la nube, todos los proveedores cloud manejan una estrategia de permisos distinta, donde defines permisos de administradores, de desarrolladores, etc. También permiten definir qué puede conectarse a qué. O Por ejemplo, tienes dos aplicaciones, donde una sola debería poder conectarse a la base de datos. Entonces hay reglas como los Security Groups que permiten limitar esos accesos. Puedes configurar para que solo tú puedas acceder a tu servidor.


Ahora, cuando crees tu primer servidor notarás que su url es… una ip, un número del tipo 127.0.0.1 pero tú quieres que sea www.mi-facebook.com

Entonces necesitarás aprender de dominios, AWS Route53 es un ejemplo de servicios que te permiten configurar eso. De esta manera, cuando una personas en otro lugar del mundo ingrese a mi-facebook.com, Route53 dirigirá sus peticiones a la IP de tu servidor.


Ahora solo queda que aprendas de logs, para que no te mates la cabeza sin saber por qué nada funciona 😭 para esto hay servicios como CloudWatch, donde almacenarás todos los logs de tus aplicaciones, y así ver qué es lo que pasa dentro de ellas.


Después de esto hay muuuuchos servicios que puedes usar en la nube, para autenticar, desplegar más fácilmente, etc. Pero con estos conocimientos bases, podrás comenzar y tener una idea de lo que sigue.



Estadística


¿Qué es la probabilidad? 😅 ¿Qué es una distribución normal? ¿Distribución beta? Sip, antes de adentrarte a esto, es muy útil tener esos fundamentos matemáticos, pues de estos depende lo que debes aplicar a los datos. Con base en tus datos y esos conocimientos, sabrás si tus datos tienen una distribución u otra, si hay casos extremos (outliers) o no.

Una empresa te da un grupo de datos de las ventas de los últimos 6 meses y quiere saber cómo les está yendo, pero tú solo tienes un archivo giganteeee como esta tabla


Tienda

Artículo

Valor

...

1

Carro

1500

...

2

Moto

2000

...

...

...

...

...


Debes saber qué es la frecuencia. Qué es la media, qué es la mediana, la desviación, etc.

Ahora, ¿ya sabes todo eso? Entonces vamos a lo relacionado con Python 😎

Para hacer todo esto podemos usar librerías como Numpy, y Pandas. Que te permiten manipular datos como tablas, hacer sumatorias, sacar promedios, desviaciones, correlaciones 😮 etc.




Machine Learning

Digamos que la empresa quiere saber cuáles son las ventas esperadas para el otro año, entonces tu solución serán las regresiones.

¡Empieza por ellas! Regresiones lineales, regresiones logarítmicas, etc. Hay una muy interesante que se llama regresión lasso 👀. Échale un ojo. No es necesario complicarte un montón con modelos de machine learning si tu problema puede ser solucionado con una simple regresión 😅.

¿Y luegooo?

Ahora sí, modelos de machine learning, esta gráfica puedes verlos un poco más a detalle, pero veremos solo lo más común




Los modelos de Machine Learning se dividen principalmente en dos categorías:

  • Supervisados

  • No Supervisados


Supervisados

Son los modelos a los cuales tú tienes que enseñarles cómo deben responder, en el que tú tienes las respuestas correctas y necesitas que el modelo las aprenda tal cual.

Entre estos están los modelos

  • K-nearest neighbor

  • Support vector machines (SVM)

  • Naive bayes

  • Random forest

No supervisados

Son los modelos a los cuales tu los dejas encontrar un patrón, tú no les das las respuestas, ellos mismos tratan de encontrar similitudes, o relaciones entre los datos. Entre estos está

  • K-means clustering

Cada uno tiene una aplicación para la cual son más óptimos que los demás.

Y para implementarlos con Python tenemos varias librerías, la principal es Scikit-Learn, pero también tenemos a Pytorch.



Data Engineering for Data Science


Datos, datos y datos, tienes un montón de datos pero el procesamiento con pandas se te está demorando un montón😭 Apache será tu mejor amigo.


Necesitas cambiar de approach, no hacerlo línea por línea, sino por columnas… Ahh, ¿ya lo haces por columnas? Entonces necesitas usar algo que se llama Map Reduce. Es una manera elegante de llamarle a programación pensada para trabajo en paralelo, optimizando recursos de memoria. Por ejemplo.

Tienes 100 millones de registros de 30 columnas cada uno 😅 Pero necesitas concatenar dos columnas y luego hacer una suma entre otras dos y cambiarle el tipo de datos a una más, y además generar una columna adicional 😅

Lo que hará Map Reduce es dividir tu dataset de 100 millones entre secciones más pequeñas y trabajarlas en paralelo y a bajo nivel. Para esto te será útil Apache Spark.

Puedes buscar un curso o documentación y volverte un crack del procesamiento en batch. Dato interesante: Con Spark puedes escalar como si fuera un servidor, tener nodos esclavos y nodos maestros para dividir el trabajo y hacer todo más rápido en paralelo. 😍



Data Engineering for Backend


Espera, me dices que no llegaste acá por la ciencia de datos? Que eres backend pero estás trabajando con muchos datos y no sabes cómo manejarlos 😭

Que necesitas migrar una base de datos de un lugar a otro, o que necesitas procesar los logs de varios meses para sacar ciertas características como el promedio de errores, cuáles fueron los más comunes, los más críticos, dividirlos por el servicio que los causó, ver las horas… todo 😭

Pues Apache Spark también puede ser tu amigo. Existen servicios como AWS EMR, Databricks o Azure Synapse Analytics que te permiten crear pipelines usando clusters de Spark y luego exportar el resultado a donde quieras, ya sea que quieras guardar en una base de datos, en un data warehouse…


Ahora… ¿Qué es un data warehouse?



 

Fin. Ah, ¿quieres más? jajaja sigue mi blog :v


Autor: Jordi Neil Sánchez A, Lead Software Engineer @Southworks


Twitter: @JordiNeil

Facebook: ¿Quién usa eso todavía?😅





408 visualizaciones0 comentarios

Entradas recientes

Ver todo
Publicar: Blog2_Post
bottom of page