La guía definitiva para desarrolladores en 2025 💻
Octubre 2025
Este blog también está disponible en inglés: The ultimate developer guide in 2025 💻
Si conoces mi estilo de escritura, sabes que no me gusta el relleno. No quiero desperdiciar tu tiempo, ni proporcionarte contenido de bajo valor. Y sin títulos clickbait - si nombro este blog "La guía definitiva para desarrolladores en 2025", es porque genuinamente creo que es la guía definitiva.
¿Para quién es esta guía?
- El principiante que busca adentrarse en el mercado tech
- El junior que se siente estancado, sin saber qué aprender o hacer a continuación
- El senior que busca refrescar sus habilidades
- Literalmente cualquiera que haya tenido la suerte de encontrarse con este blog 😅
Intro
En esta guía, hablaré sobre las habilidades meta, blandas y duras que creo que debes tener como desarrollador. Muchas habilidades son transferibles entre dominios, tanto tecnológicos como no tecnológicos, aunque las habilidades duras se enfocan principalmente en desarrollo web (tanto backend como frontend). En aras de la concisión, he decidido dividir secciones muy largas en blogs separados, para que puedas elegir si necesitas o quieres leer más sobre cualquiera de ellas.
Habilidades meta
- Inglés: Ya lo sabes. No es ningún secreto que la información más reciente y mejor está casi siempre en inglés, especialmente en tech, desde la documentación hasta interactuar con compañeros de trabajo. Sugiero apuntar a C1, o B2 como mínimo. Para prepararte, hay toneladas de videos de YouTube, blogs e incluso plataformas en línea basadas en la web donde casi gratis puedes obtener todo el conocimiento que necesitas, lo cual combinado con mucha práctica, te ayudará a alcanzar al menos B2 en aproximadamente 6 meses. Luego, intenta obtener un certificado que sea algo reconocido, por ejemplo EFSET, que es totalmente gratis y es realmente un muy buen indicador de tu nivel de inglés.
- Cómo aprender efectivamente: En tech, no solo tienes que aprender muchas cosas, sino que también tienes que mantenerte al día con los cambios, y a un ritmo increíble. Así que tiene sentido que debas entrenar "la habilidad de aprender" en sí misma. Para esto, te sugiero encarecidamente que leas el libro Ultralearning de Scott Young. No tengo ninguna afiliación con él, y genuinamente considero que fue un cambio radical con respecto a cuán productivo me volví aprendiendo nuevas habilidades y manteniendo las actuales.
- Buscar efectivamente: Siempre que tengas un bug, o estés tratando de aprender algún tema, o literalmente buscando cualquier cosa en línea, puedes ser el tipo de persona que va directo a GPT y pregunta con el prompt grande (la mayoría de las veces subóptimo y no tan claro). O puedes buscar en Google. De cualquier manera, debes saber cómo buscar efectivamente, ya que eso ocupará una cantidad considerable de tu tiempo como desarrollador y persona del siglo XXI.
- Usar tu editor de texto efectivamente: El desarrollo no es solo programar. Es principalmente pensar y resolver cosas. Pero cuando SÍ programas, debes poder hacerlo súper rápido, sin siquiera tener que pensar en ello, hasta el punto de que se vuelva natural para ti. Vuélvete confiado en tu capacidad para programar RÁPIDO. Esto requiere aprender algunos atajos y práctica pura. No vayas al extremo de aprender 200 atajos (ESPECIALMENTE TÚ, USUARIOS DE VIM 🥸), solo para darte cuenta de que todo ese tiempo, esfuerzo y espacio mental podrían haberse asignado mejor a otras cosas.
Habilidades blandas
-
Comunicación efectiva: Como desarrollador y como ser humano en general, debes poder comunicarte efectivamente. Tanto con personas técnicas como no técnicas, en múltiples idiomas (si es necesario). Nosotros como desarrolladores a veces tendemos a menospreciar mucho la importancia de la comunicación, haciendo excusas débiles como 'las habilidades duras son más importantes', o 'es mejor ser lo más conciso, lógico y objetivo posible, siempre'. Incluso yo pensaba así en un momento, tengo que admitirlo 🥲. La cosa es que antes de ser desarrollador, eres un ser humano. Esto significa que no debes ser un idiota y debes ser amable. Sé amable con los demás, ayúdalos de vez en cuando sin esperar nada a cambio, y aprende a interactuar socialmente, para entender adecuadamente a los demás y hacerte entender. Si quieres mejorar tus habilidades de comunicación, sugiero los siguientes libros:
-
Mente abierta: Nunca pienses que lo sabes todo, incluso en algo en lo que eres extremadamente competente. Siempre acepta otras perspectivas, sé abierto y dispuesto a ver y hacer las cosas de manera diferente.
-
Fortaleza mental, disciplina y ética de trabajo: Si eres algo tan apasionado como yo sobre tech y desarrollar cosas, la motivación y la pasión te ayudarán mucho. Sin embargo, no siempre tendrás ganas de sentarte y dedicar las largas horas, y trabajar duro. Cuando esos momentos sucedan, no puedes confiar en tu pasión para mantenerte en el camino - solo la disciplina y una fuerte ética de trabajo lo harán. Se trata de hacer una declaración a ti mismo: cuando las cosas se ponen difíciles, ¿quieres ser el que se rinde? ¿O quieres lograr tus metas y ser responsable de tu vida? Mi sugerencia para esos momentos: no pienses en ello, SOLO HAZLO. Tu yo futuro te lo agradecerá, y en el fondo te sentirás mejor, sabiendo que hiciste lo que tenías que hacer y no te rendiste. Si quieres leer más sobre esto, recomiendo lo siguiente:
Habilidades duras
-
Resolución de problemas: Esta será la habilidad más importante que necesitarás como desarrollador. Especialmente con el auge de la IA, los roles que dependían mucho de que alguien 'solo programara' han comenzado naturalmente a cambiar hacia ingenieros que pueden resolver el problema dado, y una vez que tienen una comprensión sólida de cómo proceder, solo usan el LLM (con buen prompting y modelos) para implementar la mayoría, si no toda, la solución.
-
Arquitectura básica de computadoras: Ten una comprensión amplia de lo que tiene una computadora y cómo usa sus recursos. Una visión muy rápida sobre la CPU, RAM, Disco, GPU, periféricos y PSU será suficiente por ahora.
-
Conocimiento sólido de lenguajes de programación: Vuélvete competente en al menos dos lenguajes de programación. Recomiendo un lenguaje de alto nivel (JavaScript, Python, Java), y uno de bajo nivel (Go, Rust, C#). Entiende los entresijos del lenguaje, debería volverse natural para ti hacer cosas con él. Luego echa un vistazo a los conceptos básicos de otros lenguajes de programación, solo para tener una idea de cómo se hacen las cosas en ellos. Por ejemplo, si tu lenguaje de programación 'competente' es JavaScript, entonces echa un vistazo a cómo se puede hacer lo mismo en Python o Java. Esto te hará pensar más en términos de 'resolver el problema' en lugar de 'tratar de usar la tecnología X para resolver el problema'.
-
Estructuras de datos y algoritmos: Esto podría ser un poco controvertido, ya que algunos creen que DSA no tiene nada que ver con lo que probablemente estarás haciendo en el 'mundo real'. Y sí, es cierto que con muy poco conocimiento de DSA puedes desenvolverte en tech (principalmente en roles de frontend). Sin embargo, estoy 100% seguro de que DSA es imprescindible para convertirse en un solucionador de problemas efectivo en programación. Comienza desde lo básico (Notación Big O, Arrays, Listas Enlazadas, Arrays Dinámicos, Hashmaps, Algoritmos de Ordenamiento, Búsqueda Binaria), hasta cosas más avanzadas (Recursión, Árboles, Grafos, Programación Dinámica). Durante la universidad, fui súper apasionado de la Programación Competitiva, que requería toneladas de DSA, y por experiencia puedo decirte que esto mejoró mis habilidades para resolver problemas diez veces, no solo en programación, sino en tech en general.
-
Redes: Aprende cómo las computadoras pueden realmente hablar entre sí. Aprende sobre el Modelo OSI (7 capas), protocolos de red (IP, TCP, UDP, HTTP), y el modelo típico cliente-servidor. Más adelante, profundiza en HTTP, SOAP, gRPC, GraphQL, WebSockets y WebRTC.
-
Concurrencia y paralelismo: Aprende sobre la teoría de concurrencia vs paralelismo, multiprocesamiento y multihilo. Lo más importante, aprende cómo implementar estos conceptos en tu lenguaje de programación. También, conoce para qué tareas tu(s) lenguaje(s) de programación son más adecuados. Por ejemplo, Go sobresale nativamente tanto en paralelismo como en concurrencia debido a goroutines ligeras y el planificador de goroutines, especialmente para cargas de trabajo ligadas a CPU; mientras que NodeJS maneja la concurrencia muy bien, especialmente cargas de trabajo ligadas a IO (como en el modelo típico cliente-servidor, donde una UI hace solicitudes a un servidor, y este servidor habla con una base de datos y tal vez un caché y luego responde al cliente), y es capaz de paralelismo con hilos de trabajo, pero simplemente no es la mejor opción cuando se requieren cargas de trabajo altamente paralelas o ligadas a CPU.
-
Git y GitHub: Familiarízate con el control de versiones. Aprende los comandos más importantes y cómo aprovecharlos para 'gitear' adecuadamente (juego de palabras intencional): add, commit, clone, fetch, pull, push, merge, stash, checkout, restore, remote, mejores prácticas de ramificación, cómo contribuir a un proyecto (ya sea privado o de código abierto), cómo hacer Pull Requests, etc.
-
Linux y scripting bash: La mayoría de los servidores y flujos de trabajo de desarrollo están en Linux, punto. Razones principales para ello:
- Rendimiento puro y eficiencia en el uso de recursos en comparación con Windows, debido a su arquitectura ligera.
- Es más rentable desde una perspectiva de devops, ya que es de código abierto, lo que significa que no hay facturas de licencias que pagar.
- Mucha mejor seguridad y privacidad: Su naturaleza de código abierto permite correcciones rápidas de vulnerabilidades, y la recopilación de datos de telemetría es mínima (muchas distribuciones ni siquiera recopilan tus datos)
En resumen: NO USES Windows (ni siquiera con WSL - a menos que absolutamente lo necesites), y usa Linux como un desarrollador real 🤓
Específico de Backend
-
Servidores: Con tu lenguaje de programación preferido, aprende cómo implementar un servidor HTTP simple que devuelva JSON. Aquí, debes profundizar en el enrutamiento, cómo manejar errores con elegancia, middlewares, servir contenido desde el servidor (ya sea servir desde el backend dependiendo de la ruta vía HTTP, o crear un servidor FTP). Luego intenta implementar al menos una vez tu propia mini-biblioteca HTTP que se encargue de crear el servidor (que es un listener TCP), manejando múltiples solicitudes de manera concurrente y eficiente. Esto te dará un poco más de claridad sobre lo que las bibliotecas HTTP realmente hacen por ti, en lugar de confiar ciegamente en ellas sin saber lo que hacen bajo el capó. Luego, implementa al menos una vez cada uno de los protocolos / tecnologías mencionados en la sección de redes: SOAP, gRPC, GraphQL, WebSockets, WebRTC, y además tRPC (en caso de que tu lenguaje de programación sea TypeScript) para que tengas una apreciación de qué es cada uno de ellos, cuándo usarlos, y una noción mental de cómo implementarlos.
-
Bases de datos: Aprende la teoría de RDBMS, una breve comparación de bases de datos SQL vs noSQL, luego aprende los conceptos básicos de consultas SQL y conceptos (consultas, índices, backups, escalado horizontal - vertical de la BD). Comienza con Postgres o MySQL, y luego aprende sobre bases de datos NoSQL (MongoDB, DynamoDB). Me refiero no solo a la teoría y usar su GUI o CLI, sino cómo usarlos en tu lenguaje de programación también con los SDKs correspondientes.
-
Conceptos básicos de Docker: No cosas avanzadas por ahora - solo aprende cómo ejecutar aplicaciones containerizadas, ya sean aplicaciones locales tuyas o imágenes públicas. En el backend estarás ejecutando servicios de terceros todo el tiempo (base de datos, caché, servidor web, brokers de mensajes, etc.). Así que en lugar de saturar tu SO, mantén todo limpio. Puedes aprender más sobre Docker, especialmente si estás interesado en DevOps (desplegar aplicaciones containerizadas), pero eso viene después. Aprende comandos clave como build, run, stop, start, ps, pull, cómo crear y administrar imágenes, cómo crear y administrar contenedores, y estarás listo. Si te encuentras con más de una aplicación containerizada en tu proyecto, aprende cómo configurar docker-compose.
-
Patrones de diseño: Hay muchos de ellos, y a veces se vuelven demasiado académicos o teóricos. Entonces, desde mi experiencia y conocimiento, estos son los más importantes que deberías conocer.
Patrones Arquitectónicos:
- MVC (Modelo Vista Controlador): Permite una separación clara de responsabilidades, donde el Modelo representa los datos del dominio y la lógica de negocio, el Controlador maneja las solicitudes y coordina entre Modelo y Vista, y la Vista es lo que se devuelve al usuario (HTML o JSON). A menudo, una capa de Acceso a Datos separada (patrón Repository) se encuentra entre el Modelo y la base de datos.
- Repository - Service: Separación similar de responsabilidades - el Repository abstrae el acceso a datos (interactúa con la BD), mientras que el Service contiene la lógica de negocio. Este patrón se usa comúnmente junto con MVC para separar aún más el acceso a datos de la lógica de negocio.
Patrones Estructurales:
- Adapter: Integra interfaces incompatibles envolviendo una clase para que coincida con la interfaz esperada por otra, permitiéndoles trabajar juntas sin modificar su código fuente.
- Decorator: Extiende el comportamiento dinámicamente envolviendo objetos con funcionalidad adicional, proporcionando una alternativa flexible a la herencia para agregar características en tiempo de ejecución.
- Facade: Simplifica subsistemas complejos proporcionando una interfaz única y unificada que oculta la complejidad de múltiples clases o módulos detrás de ella.
Patrones de Comportamiento:
- Observer: Habilita la comunicación basada en eventos a través de un mecanismo pub/sub, donde los objetos se suscriben a eventos y reciben notificaciones cuando ocurren cambios de estado, promoviendo un acoplamiento débil.
- Strategy: Permite algoritmos intercambiables encapsulándolos en clases separadas, permitiendo que el algoritmo varíe independientemente del código que lo usa.
- Middleware: Crea una canalización de procesamiento de solicitudes donde cada componente de middleware puede procesar, modificar o pasar solicitudes, comúnmente usado en frameworks web para preocupaciones transversales como autenticación, registro y manejo de errores.
Patrones Creacionales:
- Factory: Maneja la creación de objetos proporcionando un método que devuelve instancias de clases basadas en parámetros de entrada, abstrayendo el proceso de instanciación y haciendo el código más flexible.
- Singleton: Asegura que una clase tenga solo una instancia y proporciona acceso global a ella. Úsalo con moderación - a menudo es un code smell que indica acoplamiento estrecho. Considera inyección de dependencias o diseño sin estado en su lugar.
En mi opinión, todos estos pueden volverse bastante técnicos y sentirse como mucho galimatías (y en verdad, la mayoría de las veces lo son), pero es estándar de la industria, así que debes estar familiarizado con ellos. Personalmente me gusta mantener todo lo más simple posible, y si preveo mi propio dolor de cabeza tratando de refactorizar en el futuro una vez que el código comience a crecer, entonces divido el código claramente (la mayoría de las veces usando MVC) sin perder demasiado tiempo tratando de encontrar 'el patrón súper mejor definitivo para aplicar', ya que lo más probable es que termines gastando más tiempo pensando en 'cómo deberías codificar la solución' en lugar de realmente 'resolver el problema'. Resuelve primero, optimiza después si es necesario.
-
Testing: Digamos que construiste una aplicación (o al menos una pieza de funcionalidad). ¿Está lista para ser desplegada ahora? Por supuesto que no. Hasta que la hayas probado y te hayas asegurado de que funciona como se espera que funcione, en tantos escenarios como sea lógicamente posible, no tienes garantía de que construiste una solución robusta. No me malinterpretes, casi nunca crearás una solución 100% a prueba de fallos, pero siempre puedes hacer tu código más robusto haciendo pruebas adecuadas (Unitarias, de Integración y End to End), y si alguna falla, identificar y depurar el problema.
-
Caché: Genial, ahora tu aplicación ha escalado a unos pocos miles de usuarios y el equipo de análisis se da cuenta de que el 35% de los usuarios están abandonando nuestro sitio porque una consulta frecuente a la base de datos tardó demasiado en responder, ¿qué podemos hacer? Hacemos caché. Leer de RAM (caché como Redis o Memcached) es súper súper más rápido que leer de Disco (RDBMS tradicional como MySQL, o incluso una base de datos NoSQL como Mongo).
-
DevOps básico, CI/CD: Incluso si no es tu rol, debes tener una comprensión de DevOps. Aprende cómo desplegar con:
- Git (usando proveedores como Vercel), donde en cada push a alguna rama (generalmente main), el proveedor ejecuta automáticamente un flujo de trabajo de obtener el código, ejecutar algunos comandos (típicamente un pipeline de construcción), y si todo está bien, la nueva versión se despliega.
- En un VPS (con proveedores como DigitalOcean, Linode o Vultr). Esto te enseñará mucho sobre interactuar con el SO, gestionar actualizaciones, rollbacks y fallos tú mismo. A pesar de no ser tan conveniente, sugiero encarecidamente que pases por ese proceso al menos una vez - marcará una GRAN diferencia.
- Con un proveedor de nube (AWS, GCP, Cloudflare, Azure). Sugiero que pruebes al menos una vez desplegar una aplicación en una instancia EC2 gratuita de AWS, y luego hacer lo mismo pero con la aplicación containerizada equivalente a ECS.
-
Diseño de sistemas: Vuélvete confiado diseñando (y si el tiempo lo permite, implementando) todo tipo de sistemas de software. Comienza en los principios centrales de diseño de sistemas (Escalabilidad, Confiabilidad, Rendimiento y Mantenibilidad y Observabilidad). Sugiero que repases un poco lo siguiente:
-
Diseño de API: APIs RESTful y GraphQL; estructuración eficiente de recursos y versionado.
-
Diseño de Base de Datos: Domina SQL vs NoSQL, modelado de datos, indexación, replicación, particionamiento y migraciones.
-
Estrategias de Caché: Aprende por qué/cuándo usar caché, herramientas como Redis/Memcached, invalidación de caché y compensaciones de rendimiento.
-
Balanceo de Carga y Servidores: Conceptos de distribución de solicitudes, alta disponibilidad, escalado horizontal, sin estado.
-
Microservicios y Arquitectura Basada en Eventos: Diseña servicios escalables y débilmente acoplados; colas de mensajes (Kafka, RabbitMQ).
-
Seguridad: Autenticación (OAuth2, JWT, RBAC), cifrado en tránsito y en reposo, diseño de API seguro, gestionar vulnerabilidades.
-
DevOps y CI/CD: Infrastructure as Code (Terraform, Kubernetes), automatización de pipelines, despliegue, rollback, despliegues blue-green, releases canary.
-
Monitoreo y Tolerancia a Fallos: Health-checks, trazado distribuido, alertas (Prometheus, Grafana, ELK Stack), recuperación ante desastres, backups
Para aprender Diseño de Sistemas, sugiero encarecidamente Grokking the System Design Interview de Educative.io. Nuevamente, no tengo ninguna afiliación con ellos. Al momento de escribir esto, educative.io cuesta 13 dólares al mes (y estoy seguro de que puedes terminar el curso en un mes). O si simplemente no puedes permitírtelo, hay algunas buenas alternativas en YouTube. O si estás bien siendo un pirata 🏴☠️, entonces aquí está Educative.io – Deep Dive into System Design Interview gratis.
-
-
Servidores web: Tu servidor de aplicación (Express, FastAPI, etc.) maneja la lógica de negocio, pero necesitas un servidor web sentado frente a él para manejar solicitudes HTTP, servir archivos estáticos, manejar terminación SSL/TLS, balanceo de carga y proxy inverso. La razón es que los servidores web están optimizados para eso, mientras que tu servidor de aplicación podría fallar en manejar efectivamente todas estas tareas una vez que alcances cierta escala (pocos miles de usuarios concurrentes). Aquí están los tres que deberías conocer:
-
nginx: Este es el que usarás la mayoría de las veces. Es ligero, rápido y maneja alta concurrencia como un campeón. La mayoría de los despliegues en producción usan nginx como proxy inverso frente a sus servidores de aplicación. Sobresale en servir contenido estático, manejar terminación SSL y balanceo de carga en múltiples instancias backend. La sintaxis de configuración es limpia y directa (una vez que le agarres el truco), y consume recursos mínimos. Aprende lo básico: cómo configurar un proxy inverso, servir archivos estáticos, configurar certificados SSL, configurar balanceo de carga básico y manejar escenarios comunes como redirecciones y limitación de velocidad.
-
Apache HTTP Server: El caballo de batalla de la vieja escuela que ha estado por ahí para siempre. Si bien nginx generalmente se prefiere para despliegues modernos debido a su mejor rendimiento bajo alta concurrencia, Apache todavía se usa ampliamente, especialmente en entornos de hosting compartido y sistemas legacy. Es más rico en características fuera de la caja (mod_rewrite, archivos .htaccess), pero también es más pesado y no maneja conexiones concurrentes tan eficientemente como nginx. Deberías conocerlo porque lo encontrarás en muchos sistemas existentes, y entender cómo configurarlo sigue siendo valioso.
-
Caddy: La opción moderna y amigable para desarrolladores que maneja automáticamente certificados HTTPS vía Let's Encrypt. Si estás configurando un proyecto personal o servicio pequeño y no quieres lidiar con la gestión de certificados SSL, Caddy es tu amigo. Está escrito en Go, tiene un formato de configuración simple y aprovisiona y renueva automáticamente certificados SSL. Es genial para despliegues más pequeños donde quieres ponerte en marcha rápidamente sin la sobrecarga de gestionar certificados manualmente. Sin embargo, para sistemas de producción a escala, nginx sigue siendo la apuesta más segura debido a su rendimiento probado en batalla y ecosistema extenso.
-
-
Colas de mensajes: Cuando construyes sistemas distribuidos, a menudo necesitarás desacoplar servicios y manejar comunicación asíncrona. Ahí es donde entran las colas de mensajes. Permiten que los servicios envíen y reciban mensajes sin estar directamente conectados, permitiendo mejor escalabilidad, confiabilidad y tolerancia a fallos. Aquí están las principales que deberías conocer:
-
Apache Kafka: El campeón pesado para streaming de eventos y procesamiento de mensajes de alto rendimiento. Está diseñado para manejar millones de mensajes por segundo y es perfecto para construir arquitecturas basadas en eventos, agregación de logs y pipelines de datos en tiempo real. Kafka usa una arquitectura de commit log distribuido, lo que significa que los mensajes se persisten y pueden reproducirse, haciéndolo excelente para escenarios donde necesitas durabilidad y la capacidad de procesar datos históricos. Es excesivo para casos de uso simples, pero si estás construyendo microservicios a escala o necesitas análisis en tiempo real, Kafka es tu opción preferida.
-
RabbitMQ: El broker de mensajes confiable y probado en batalla que ha estado por ahí por siglos. Soporta múltiples protocolos de mensajería (AMQP, MQTT, STOMP) y proporciona características como acuses de recibo de mensajes, enrutamiento y colas de mensajes muertos fuera de la caja. RabbitMQ es genial para escenarios tradicionales de cola de mensajes donde necesitas entrega garantizada, flexibilidad de enrutamiento y patrones de mensajes complejos. Es más fácil de configurar y entender que Kafka, pero no maneja la misma escala de rendimiento. Perfecto para la mayoría de las arquitecturas de microservicios donde necesitas entrega de mensajes confiable.
-
Redis (Pub/Sub y Streams): Ya conoces Redis como caché, pero también puede funcionar como cola de mensajes. Redis Pub/Sub es ligero y perfecto para patrones pub/sub simples donde no necesitas persistencia de mensajes (si un suscriptor está fuera de línea, pierde el mensaje). Redis Streams, por otro lado, proporciona persistencia de mensajes y grupos de consumidores, haciéndolo adecuado para escenarios más complejos. No es tan rico en características como brokers de mensajes dedicados, pero si ya estás usando Redis en tu stack, es una opción conveniente para necesidades de mensajería más simples.
-
AWS SQS: El servicio de cola de mensajes gestionado de AWS. Si ya estás en el ecosistema AWS, SQS es la opción obvia. Está completamente gestionado (sin infraestructura que mantener), escala automáticamente y se integra perfectamente con otros servicios de AWS. Soporta tanto colas estándar (alto rendimiento, entrega al menos una vez) como colas FIFO (procesamiento exactamente una vez, entrega ordenada). El principal inconveniente es el vendor lock-in - una vez que estás en SQS, migrar es un dolor. Pero para aplicaciones nativas de AWS, es difícil de superar.
Entender cuándo usar cada uno es crucial. Para la mayoría de las aplicaciones que comienzan, RabbitMQ encuentra el equilibrio adecuado entre características y complejidad. A medida que escalas y necesitas streaming de eventos, Kafka se vuelve esencial. Redis es genial para pub/sub simple o cuando quieres aprovechar tu infraestructura Redis existente. Y SQS es perfecto si estás completamente en AWS.
-
-
Motores de búsqueda: Cuando tu aplicación necesita proporcionar funcionalidad de búsqueda rápida y relevante - ya sea búsqueda de productos, búsqueda de texto completo en documentos, análisis de logs, o construir características de búsqueda como servicio - una consulta regular a la base de datos simplemente no funcionará. Los motores de búsqueda están construidos específicamente para indexar, buscar y clasificar grandes volúmenes de datos de texto eficientemente. Son esenciales para aplicaciones donde la búsqueda es una característica central, no solo algo agradable de tener. Aquí están los principales que deberías conocer:
-
Elasticsearch: El motor de búsqueda moderno y distribuido que se ha convertido en el estándar de facto para búsqueda y análisis. Está construido sobre Apache Lucene y brilla cuando necesitas búsqueda en tiempo real, búsqueda de texto completo y análisis a escala. Elasticsearch es perfecto para agregación de logs (parte del stack ELK - Elasticsearch, Logstash, Kibana), búsqueda de productos en e-commerce, búsqueda de contenido, e incluso como base de datos NoSQL para ciertos casos de uso. Es escalable horizontalmente, maneja documentos JSON nativamente y proporciona una API RESTful que es fácil de integrar. El principal inconveniente es la complejidad - requiere configuración y monitoreo cuidadosos, especialmente a escala. Es excesivo para necesidades de búsqueda simples, pero si estás construyendo funcionalidad de búsqueda que necesita escalar y funcionar bien, Elasticsearch es tu opción preferida.
-
Apache Solr: La plataforma de búsqueda probada en batalla y de nivel empresarial que ha estado por ahí más tiempo que Elasticsearch. También está construido sobre Apache Lucene y comparte muchas capacidades con Elasticsearch, pero con una arquitectura y filosofía diferentes. Solr es más impulsado por XML/configuración, mientras que Elasticsearch es más impulsado por JSON/API. Solr sobresale en entornos empresariales donde necesitas características avanzadas como búsqueda facetada, corrección ortográfica y análisis de consultas complejas fuera de la caja. Es más maduro en algunas áreas y tiene mejor soporte para ciertos formatos de documentos (como PDF, Word, etc.) a través de Solr Cell (Tika). Sin embargo, Elasticsearch generalmente tiene mejor rendimiento y es más fácil comenzar para aplicaciones modernas. Solr todavía se usa ampliamente en entornos empresariales y es una opción sólida si ya estás en el ecosistema Apache o necesitas características específicas de Solr.
Tanto Elasticsearch como Solr son poderosos, pero Elasticsearch ha ganado más tracción en los últimos años debido a su facilidad de uso, mejor rendimiento y ecosistema más fuerte. Para la mayoría de las aplicaciones modernas que comienzan, Elasticsearch es la apuesta más segura. Solr todavía es valioso de conocer, especialmente si estás trabajando con sistemas legacy o necesitas características empresariales específicas.
-
-
Registro (Logging): La mayoría de las personas comienzan simplemente registrando
error con algo: ${ERR}, pero una vez que la complejidad de tu aplicación aumenta, obtener información general sobre el comportamiento de la aplicación o depurar desde los logs se vuelve imposible. Terminarás ahogándote en un mar de logs no estructurados e inbusceables sin forma de rastrear qué pasó cuándo. El registro adecuado es crucial para depurar, monitorear y entender el comportamiento de tu aplicación en producción. Aquí está cómo abordarlo en diferentes niveles:Primer paso - Usa una biblioteca de registro adecuada: Abandona el console.log y usa una biblioteca de registro adecuada para tu lenguaje de programación. Las buenas bibliotecas de registro (como Winston para Node.js, Loguru para Python, o Logback para Java) proporcionan:
- Niveles de log (DEBUG, INFO, WARN, ERROR, FATAL) para que puedas filtrar lo que importa
- Timestamps agregados automáticamente a cada entrada de log
- Registro estructurado con soporte JSON, haciendo los logs busceables y parseables
- Contexto y metadatos (IDs de solicitud, IDs de usuario, etc.) que te ayudan a rastrear problemas entre servicios
- Formatos de salida configurables
En lugar de imprimir a stdout o stderr sincrónicamente, envía logs asincrónicamente a un archivo (o servicio de agregación de logs) para que no bloquees tu hilo principal solo escribiendo logs. Esto es especialmente importante en aplicaciones de alto rendimiento donde el registro puede convertirse en un cuello de botella.
Siguiente paso - Análisis de logs (para proyectos más grandes): Una vez que tienes logs estructurados, necesitas una forma de analizarlos. Aquí es donde entran las herramientas de agregación y análisis de logs:
-
ELK Stack (Elasticsearch, Logstash, Kibana): La solución de código abierto más popular para análisis de logs. Elasticsearch almacena e indexa tus logs, Logstash los procesa y enriquece, y Kibana proporciona la visualización. Es poderoso y gratis, pero requiere configuración y mantenimiento significativos. Perfecto para equipos que necesitan control total y tienen los recursos para gestionarlo. Es excesivo para proyectos pequeños, pero esencial para sistemas de producción a escala.
-
Loki + Grafana: Una alternativa más ligera a ELK. Loki está diseñado específicamente para agregación de logs y es más eficiente en recursos que Elasticsearch. Se integra perfectamente con Grafana (que probablemente ya estés usando para métricas), haciéndolo una gran opción si quieres logs y métricas en un solo lugar. Es más fácil de configurar que ELK y encuentra un buen equilibrio entre características y complejidad.
-
Splunk: La solución comercial de nivel empresarial. Es rica en características, tiene excelente soporte y maneja escala masiva. Pero es costosa y probablemente excesiva a menos que estés trabajando en una gran empresa con requisitos complejos de cumplimiento.
-
Soluciones nativas de nube: AWS CloudWatch Logs, Google Cloud Logging o Azure Monitor Logs. Si ya estás en un ecosistema de nube, estas son las opciones obvias. Están completamente gestionadas, se integran con otros servicios de nube y escalan automáticamente. El principal inconveniente es el vendor lock-in y el costo a escala.
Siguiente paso - Streaming de logs (para sistemas distribuidos a escala): Cuando necesitas análisis de logs en tiempo real, distribuido y altamente performante, te mueves del procesamiento por lotes al streaming. En lugar de escribir logs en archivos y luego procesarlos, transmites logs directamente a una canalización de procesamiento:
-
AWS Kinesis Data Streams: Si estás en AWS, Kinesis es la opción preferida para streaming de logs. Puede manejar millones de eventos por segundo, se integra con otros servicios de AWS (Lambda, Firehose, Elasticsearch) y proporciona procesamiento en tiempo real. Perfecto para aplicaciones nativas de AWS que necesitan análisis de logs en tiempo real y alertas.
-
Elasticsearch con Beats: Parte del stack Elastic, Beats (como Filebeat) puede transmitir logs directamente a Elasticsearch en tiempo real. Esto te da el poder de Elasticsearch para análisis de logs con capacidades de streaming en tiempo real. Es genial si ya estás usando el stack ELK y necesitas procesamiento en tiempo real.
-
Kafka + Agregación de Logs: Para los escenarios más exigentes, puedes transmitir logs a través de Kafka (que aprendiste en la sección de Colas de Mensajes) y luego consumirlos para análisis. Esto te da el mayor rendimiento y procesamiento más flexible, pero agrega complejidad significativa.
La progresión es clara: comienza con una biblioteca de registro adecuada, agrega análisis de logs cuando tu proyecto crece, y muévete a streaming solo cuando necesites procesamiento de logs distribuido en tiempo real a escala masiva. Para la mayoría de las aplicaciones, una buena biblioteca de registro + stack ELK o Loki + Grafana es más que suficiente. El streaming solo es necesario cuando estás lidiando con millones de eventos por segundo en sistemas distribuidos. Y en aplicaciones de menor escala (alguna herramienta interna para una empresa, usada por no más de unos pocos cientos de usuarios; o una pieza de software extremadamente simple), incluso puedes arreglártelas solo usando tu biblioteca de registro adecuadamente. Recuerda, la simplicidad siempre vencerá a la complejidad, así que no optimices prematuramente configurando una solución de registro compleja cuando tienes 10 usuarios en tu aplicación 🥸.
-
Monitoreo e instrumentación: Saber qué está pasando en tu aplicación en tiempo real es crucial. Necesitas saber si tu servidor está a punto de fallar, si tu base de datos es lenta, si los tiempos de respuesta de tu API se están degradando, o si los usuarios están experimentando errores. Sin monitoreo adecuado, estás volando a ciegas - solo te enterarás de los problemas cuando los usuarios se quejen, y para entonces a menudo es demasiado tarde. El monitoreo se trata de recopilar métricas (CPU, memoria, tasas de solicitudes, tasas de error, latencias) y la instrumentación se trata de agregar código a tu aplicación para exponer estas métricas. Aquí están las principales herramientas que deberías conocer:
- Prometheus: El estándar de facto para recopilación y almacenamiento de métricas en el mundo cloud-native. Es una base de datos de series temporales diseñada específicamente para monitoreo, extrayendo métricas de tus aplicaciones y servicios a intervalos regulares. Prometheus usa un modelo de pull (extrae métricas de tus servicios) en lugar de un modelo push, lo que funciona genial para entornos de nube dinámicos. Almacena métricas como datos de series temporales, haciéndolo perfecto para rastrear cómo cambian las cosas con el tiempo. Prometheus sobresale en recopilar métricas de tus aplicaciones, bases de datos e infraestructura; almacenar datos de series temporales eficientemente; consultar métricas usando PromQL (Lenguaje de Consulta de Prometheus); y alertar cuando las métricas cruzan umbrales (vía Alertmanager).
Es de código abierto, probado en batalla e se integra con casi todo en el ecosistema cloud-native. El principal inconveniente es que no es genial para almacenamiento a largo plazo (está diseñado para retención a corto plazo), pero puedes integrarlo con otros sistemas para almacenamiento a largo plazo. Prometheus es la opción preferida para la mayoría de las aplicaciones modernas, especialmente si estás ejecutando contenedores o Kubernetes.
- Grafana: La capa de visualización que hace que tus métricas sean realmente útiles. Prometheus recopila y almacena métricas, pero Grafana es lo que convierte esas métricas en dashboards hermosos y accionables. No es solo para Prometheus - Grafana puede conectarse a docenas de fuentes de datos (Elasticsearch, Loki, InfluxDB, CloudWatch, etc.), haciéndolo una plataforma unificada para visualizar todos tus datos de observabilidad. Grafana sobresale en crear dashboards con gráficos, tablas y tablas; configurar alertas basadas en métricas; visualizar logs (cuando está conectado a Loki o Elasticsearch); y crear dashboards compartibles para tu equipo.
Es de código abierto, increíblemente flexible y tiene una gran comunidad creando dashboards preconstruidos para herramientas comunes (bases de datos, servidores web, colas de mensajes, etc.). La combinación de Prometheus + Grafana es el estándar de la industria para monitorear aplicaciones modernas. Grafana Cloud existe si quieres una solución gestionada, pero la mayoría de los equipos ejecutan Grafana ellos mismos.
Otras herramientas que vale la pena mencionar:
-
Datadog/New Relic/Splunk: Soluciones comerciales de monitoreo completamente gestionadas. Son más fáciles de configurar (solo instala un agente), tienen UIs excelentes y manejan todo por ti. Pero son costosas, especialmente a escala, y estás bloqueado en su ecosistema. Genial para equipos que quieren monitoreo sin la sobrecarga operacional, pero prepárate para pagar por ello.
-
Monitoreo nativo de nube: AWS CloudWatch, Google Cloud Monitoring, Azure Monitor. Si ya estás en un ecosistema de nube, estas son las opciones obvias. Se integran perfectamente con otros servicios de nube, están completamente gestionadas y funcionan bien para aplicaciones cloud-native. El principal inconveniente es el vendor lock-in y el costo a escala.
La combinación de Prometheus + Grafana encuentra el equilibrio adecuado entre poder, flexibilidad y costo. Requiere algo de configuración y mantenimiento, pero es gratis, de código abierto y te da control total. Para la mayoría de las aplicaciones, este es el camino a seguir. Las soluciones comerciales valen la pena considerar si no quieres gestionar infraestructura, pero vienen con costos significativos.
-
Analítica: Entender cómo interactúan los usuarios con tu aplicación es crucial para tomar decisiones basadas en datos. Necesitas saber qué características se están usando, dónde los usuarios abandonan, qué páginas visitan, cuánto tiempo permanecen y qué acciones toman. Sin analítica, estás construyendo a ciegas - no tienes idea si tu producto realmente está resolviendo problemas de usuarios o si los usuarios están luchando con tu interfaz. La analítica te ayuda a entender el comportamiento del usuario, optimizar embudos de conversión y tomar decisiones informadas sobre características del producto. Aquí están las principales herramientas que deberías conocer:
- Google Analytics 4 (GA4): La plataforma de analítica web gratuita y estándar de la industria de Google. Es el sucesor de Universal Analytics (que Google discontinuó en 2023) y ahora es la opción preferida para la mayoría de los sitios web y aplicaciones web. GA4 rastrea interacciones de usuarios, vistas de página, eventos, conversiones y proporciona insights detallados sobre tu audiencia, canales de adquisición y comportamiento del usuario. Es gratis (hasta límites generosos), se integra fácilmente con la mayoría de los sitios web y proporciona capacidades poderosas de segmentación e informes. GA4 sobresale en rastrear uso de sitios web y aplicaciones en múltiples plataformas; entender viajes de usuarios y embudos de conversión; analizar fuentes de tráfico y adquisición de usuarios; crear eventos y conversiones personalizados; e integrarse con otros productos de Google (Google Ads, Search Console, etc.).
El principal inconveniente es preocupaciones de privacidad - rastrea usuarios en toda la web, lo que ha llevado a problemas de cumplimiento GDPR en Europa. También, puede ser abrumador con todas sus características, y la curva de aprendizaje es empinada. Pero para la mayoría de las aplicaciones, especialmente si estás comenzando, GA4 es la opción obvia porque es gratis y cubre el 90% de lo que necesitas.
- Mixpanel: La plataforma de analítica de producto enfocada en comportamiento de usuarios y rastreo de eventos. Mientras que GA4 es genial para analítica web general, Mixpanel está diseñado específicamente para equipos de producto que quieren entender cómo los usuarios interactúan con características específicas. Está basado en eventos (rastreas acciones específicas de usuarios), lo que lo hace perfecto para aplicaciones SaaS donde te importa más el uso de características que las vistas de página. Mixpanel sobresale en rastrear acciones y eventos de usuarios en detalle; construir embudos para ver dónde los usuarios abandonan; análisis de cohortes para entender retención de usuarios; pruebas A/B y experimentación; y entender rutas de usuarios a través de tu producto.
Es más costoso que GA4 (tiene un tier gratis pero los precios escalan con eventos), pero vale la pena si estás construyendo un producto donde entender el comportamiento del usuario es crítico para tu éxito. Mixpanel es perfecto para aplicaciones SaaS, aplicaciones móviles y cualquier producto donde la analítica de uso de características importe más que el tráfico web general.
- Amplitude: Similar a Mixpanel, pero con un enfoque más fuerte en analítica de comportamiento e inteligencia de producto. Está diseñado para equipos de producto que quieren profundizar en el análisis de comportamiento de usuarios. Amplitude proporciona características poderosas como cohortes de comportamiento y segmentación de usuarios; análisis de rutas para entender viajes de usuarios; análisis de retención y analítica predictiva; experimentación de producto y pruebas A/B; e integración con almacenes de datos para análisis más profundo.
Es más costoso que Mixpanel y probablemente es excesivo a menos que seas una empresa enfocada en producto con recursos de analítica dedicados. Pero si estás serio sobre entender el comportamiento del usuario y tomar decisiones de producto basadas en datos, Amplitude es una de las mejores herramientas disponibles.
-
Adobe Analytics: La solución de analítica de nivel empresarial. Es poderosa, rica en características y maneja escala masiva. Pero es costosa, compleja y probablemente excesiva a menos que estés trabajando en una gran empresa con necesidades complejas de analítica. La mayoría de las startups y pequeñas empresas nunca necesitarán Adobe Analytics.
-
Self-hosted / Código abierto: Plausible, Matomo (anteriormente Piwik), o PostHog. Estas son alternativas enfocadas en privacidad que no rastrean usuarios en toda la web y pueden ser auto-hospedadas. Son geniales si la privacidad es una preocupación o si quieres control total sobre tus datos de analítica. La compensación es que son menos ricas en características que las soluciones comerciales y requieren que gestiones la infraestructura tú mismo.
Para la mayoría de las aplicaciones que comienzan, GA4 es el camino a seguir - es gratis, cubre la mayoría de los casos de uso y es fácil de configurar. Si estás construyendo un producto donde entender el comportamiento del usuario y el uso de características es crítico, Mixpanel o Amplitude valen la inversión. Elige basándote en tus necesidades: GA4 para analítica web general, Mixpanel/Amplitude para analítica de producto, y soluciones auto-hospedadas si la privacidad es una preocupación principal.
-
Nube: La nube se ha convertido en el estándar de facto para el despliegue de aplicaciones modernas. Se acabaron los días en que alquilabas un servidor físico y gestionabas todo tú mismo. Hoy en día, las empresas se están moviendo a plataformas de nube por buenas razones: escalabilidad (activar recursos cuando los necesitas, reducir cuando no), rentabilidad (pagar solo por lo que usas en lugar de mantener infraestructura inactiva), simplicidad de despliegue (los servicios gestionados manejan la complejidad por ti), y confiabilidad (los proveedores de nube manejan redundancia, backups y recuperación ante desastres). Ya sea que estés construyendo una startup o trabajando en una empresa, casi seguramente estarás trabajando con plataformas de nube. Aquí están las principales que deberías conocer:
-
AWS (Amazon Web Services): El líder del mercado y la plataforma de nube más ampliamente adoptada. AWS tiene la mayor cuota de mercado, más servicios (más de 200) y el ecosistema más grande. Si estás trabajando en tech, casi seguramente encontrarás AWS en algún punto. Es la opción preferida para la mayoría de las empresas, especialmente en los EE. UU. AWS sobresale en escala - impulsa todo desde startups hasta Netflix, y tiene las ofertas de servicios más maduras. El principal inconveniente es la complejidad - con tantos servicios, puede ser abrumador. Pero el lado positivo es que lo que necesites, AWS probablemente lo tiene. Si estás comenzando y no estás seguro de qué nube aprender, AWS es la apuesta más segura porque es la más común en la industria.
-
Google Cloud Platform (GCP): La oferta de nube de Google, conocida por su fortaleza en analítica de datos, aprendizaje automático y Kubernetes. GCP a menudo es preferido por empresas que ya están en el ecosistema de Google o necesitan capacidades avanzadas de procesamiento de datos. Generalmente se considera más amigable para desarrolladores con mejor documentación e interfaces más limpias, pero tiene una cuota de mercado más pequeña que AWS. GCP es popular entre startups y empresas que hacen procesamiento pesado de datos o cargas de trabajo de ML. El principal inconveniente es que es menos común en entornos empresariales en comparación con AWS, por lo que hay menos oportunidades de trabajo. Sin embargo, si estás interesado en ML/IA o ingeniería de datos, GCP vale la pena aprender.
-
Microsoft Azure: La plataforma de nube enfocada en empresas, especialmente fuerte si estás trabajando en entornos centrados en Microsoft. Azure es la opción preferida para empresas que ya usan productos de Microsoft (Office 365, Active Directory, etc.) porque se integra perfectamente. También es popular en entornos empresariales y contratos gubernamentales. Azure ha estado creciendo rápidamente y está alcanzando a AWS en términos de cuota de mercado. El principal inconveniente es que es menos común en entornos de startup y la experiencia del desarrollador no está tan pulida como AWS o GCP. Pero si estás dirigiendo roles empresariales o ya trabajas con tecnologías de Microsoft, Azure es valioso de conocer.
Mi recomendación: Certifícate en al menos una plataforma de nube. No se trata solo del certificado en sí - el proceso de estudiar para él te obligará a realmente aprender la plataforma, entender sus servicios y obtener experiencia práctica. Sugiero apuntar a certificaciones de nivel asociado (no de nivel de entrada, pero tampoco de nivel profesional):
-
AWS: Ya sea la certificación Solutions Architect Associate (SAA) o la Developer Associate (DVA). Solutions Architect se enfoca en diseñar sistemas en AWS, mientras que Developer Associate se enfoca en construir aplicaciones. Ambas son valiosas: SAA es más comúnmente reconocida y cubre temas más amplios, mientras que DVA está más enfocada en hacer las cosas que probablemente estarías haciendo como desarrollador con AWS.
-
Google Cloud: La certificación Associate Cloud Engineer, que es aproximadamente equivalente a las certificaciones de nivel asociado de AWS.
Con suficiente práctica y estudio enfocado, puedes obtener cualquiera de estas en 3 meses, o incluso menos si eres dedicado. La clave es la práctica práctica - no solo leas, realmente construye cosas en la plataforma. Usa los tiers gratis para experimentar, despliega aplicaciones reales y rompe cosas para entender cómo funcionan. La certificación validará tu conocimiento y puede ayudarte a destacar, pero más importante, te obliga a realmente aprender la plataforma adecuadamente.
-
Frontend
- JS, HTML, CSS
- Tailwind, React
- Diseño Responsivo
- Tipografía, Espaciado, Teoría del color
- Animaciones, transiciones
- Algunas otras cosas que pretendo agregar pronto ✌️
Recursos que he encontrado particularmente útiles:
-
roadmap.sh. Aquí fue el roadmap principal que seguí cuando aprendía por mi cuenta. Aunque ahora tienes esta guía como tu roadmap 😎 (pero te animo a que aún revises roadmap.sh)
-
OSSU Computer Science. Aquí aprendí por mi cuenta la mayor parte del plan de estudios de CS, mucho mejor y más efectivamente en comparación con lo que me enseñaron en mi universidad.
-
Frontend Masters. Tienen muchos cursos y contenido extremadamente bueno sobre tech que yo mismo he encontrado de primera calidad.
-
Youtube. Sí, hay mucho contenido de alta calidad gratis en youtube sobre cualquier tema que quieras.