Docker explicado para quien nunca tocó una terminal

Docker es una de esas herramientas que todos mencionan pero pocos explican bien desde cero. La metáfora del contenedor de carga (la de los barcos) es, de hecho, la mejor forma de entenderlo.

1. El problema que resuelve

La frase clásica de todo programador: «en mi computadora funciona». Una aplicación puede andar perfecto en tu máquina y fallar en la del compañero o en el servidor, porque cambian versiones de software, configuraciones o dependencias instaladas.

2. La solución: empaquetar todo junto

Docker mete tu aplicación, junto con TODO lo que necesita para funcionar (versión específica de un lenguaje, librerías, configuraciones) dentro de un «contenedor»: un paquete autocontenido que corre igual en cualquier computadora que tenga Docker instalado. Como un contenedor de carga real: no importa qué barco, grua o camión lo transporte, lo de adentro llega intacto.

3. Contenedor no es lo mismo que máquina virtual

Una máquina virtual simula una computadora completa (con su propio sistema operativo entero), lo que la hace pesada y lenta de iniciar. Un contenedor comparte el sistema operativo de la máquina anfitriona y solo empaqueta lo que la aplicación necesita, lo que lo hace muchísimo más liviano y rápido de levantar (segundos, en vez de minutos).

4. Por qué le importa incluso a alguien que no programa

Si trabajás con un equipo de desarrollo, Docker es la razón por la que pueden decir «levantá el proyecto con un solo comando» en vez de pasar horas instalando cosas manualmente. También es la base de cómo funcionan hoy la mayoría de los servicios en la nube a gran escala.

5. ¿Necesitás aprenderlo?

Si trabajás en desarrollo web o backend, sí, tarde o temprano te lo vas a cruzar. Los comandos básicos (levantar, bajar y ver contenedores corriendo) se aprenden en una tarde; dominarlo a fondo (redes entre contenedores, orquestación con Kubernetes) lleva más tiempo, pero no hace falta para empezar a aprovecharlo.

Cómo armar tu portfolio de programador sin experiencia laboral

«Sin experiencia laboral» no significa «sin nada para mostrar». Un portfolio bien armado puede pesar más que un año de experiencia mal comunicado.

1. Elegí 3 proyectos, no 15

Un portfolio con 15 proyectos a medio terminar comunica dispersión. Tres proyectos completos, funcionando, con código prolijo, comunican mucho más criterio que una lista larga incompleta.

2. Resolvé un problema real, no un tutorial copiado

Los reclutadores ven cientos de «clones de Netflix» y «todo list apps» hechos siguiendo un tutorial paso a paso. Destacá mucho más un proyecto que resuelva un problema específico tuyo o de alguien cercano, aunque sea chico: una calculadora de gastos compartidos, un scraper de precios, una herramienta para organizar algo que vos mismo necesitabas.

3. Documentá el proceso, no solo el resultado

Para cada proyecto, agregá un breve texto explicando qué problema resolvés, qué decisiones técnicas tomaste y por qué, y qué harías distinto si lo rehicieras hoy. Esto demuestra capacidad de reflexión técnica, que es justamente lo que buscan en un junior (nadie espera que sepas todo, pero sí que pienses).

4. Contribuí a un proyecto open source, aunque sea chico

Una contribución real a un repositorio de otra persona (aunque sea arreglar un typo en la documentación o un bug chico) demuestra que sabés trabajar con código ajeno y seguir el flujo de Git colaborativo, algo que muy pocos juniors pueden mostrar.

5. El sitio del portfolio en sí importa

No hace falta que sea complejo, pero sí que esté prolijo, cargue rápido y funcione bien en celular. Es, literalmente, tu primer proyecto público: si tiene errores o se ve descuidado, manda una señal contradictoria sobre tu atención al detalle.

Conclusión: la calidad y el criterio detrás de tres proyectos bien pensados pesan más que la cantidad. Priorizará profundidad sobre volumen.

Bases de datos SQL vs NoSQL: guía práctica para no técnicos

Es una de las primeras decisiones técnicas que hay que tomar al armar un proyecto, y elegir mal puede costarte reescribir todo más adelante. Acá la diferencia explicada sin jerga.

1. SQL (bases de datos relacionales)

Organiza los datos en tablas con filas y columnas, como una planilla de Excel bien estructurada, donde cada tabla se relaciona con otras mediante claves. Ejemplos: MySQL, PostgreSQL, SQL Server. Son ideales cuando tus datos tienen una estructura clara y estable, y necesitás que las relaciones entre ellos sean consistentes siempre (por ejemplo, un sistema de facturación, donde cada factura debe estar sí o sí asociada a un cliente válido).

2. NoSQL (bases de datos no relacionales)

Guarda los datos de formas más flexibles: documentos tipo JSON, pares clave-valor, grafos, según el tipo. Ejemplos: MongoDB, Redis, Firebase. Son ideales cuando tu estructura de datos cambia seguido, necesitás velocidad extrema en lecturas/escrituras masivas, o estás manejando datos muy variados que no encajan bien en tablas rígidas.

3. La pregunta que realmente define la elección

¿Tus datos tienen relaciones estrictas que necesitan mantenerse consistentes sí o sí (como órdenes de compra, pagos, inventario)? Elegí SQL. ¿Necesitás velocidad y flexibilidad por sobre estructura rígida (como registros de actividad, contenido de redes sociales, caché de sesiones)? Elegí NoSQL.

4. El error más común de principiantes

Elegir NoSQL solo porque «suena más moderno» sin necesitarlo realmente. La mayoría de las aplicaciones de negocio (tiendas online, sistemas de gestión, CRMs) funcionan perfectamente bien, y a veces mejor, con una base de datos SQL tradicional.

En la práctica: muchos proyectos grandes usan ambas a la vez, cada una para lo que mejor resuelve. No es una decisión de «para siempre»: elegí según el problema específico que tenés hoy.

Cómo elegir tu primer lenguaje de programación en 2026

Es la pregunta que más repiten quienes recién empiezan: ¿por dónde arranco? La respuesta correcta depende menos de «cuál es el mejor lenguaje» y más de qué querés construir.

1. Si tu objetivo es conseguir trabajo rápido

Python y JavaScript siguen siendo la puerta de entrada más pedida en ofertas laborales de nivel junior. Python por su sintaxis simple y su uso en backend, datos y automatización; JavaScript porque es el único lenguaje que corre nativo en el navegador, lo que lo hace imprescindible para cualquier cosa de frontend.

2. Si te interesa el desarrollo de apps móviles

Empezá directamente con Kotlin (Android) o Swift (iOS), o si querés cubrir ambas plataformas con un solo código, Dart con Flutter. No hace falta pasar primero por otro lenguaje «más fácil»: estos ya están diseñados para ser accesibles.

3. Si te atrae la ciencia de datos o la IA

Python, sin vueltas. Es el estándar de facto en el ecosistema de datos e inteligencia artificial, con la mayor cantidad de librerías y comunidad para resolver problemas ya armados.

4. El error más común al elegir

Cambiar de lenguaje cada dos semanas persiguiendo «el que está de moda». La lógica de programar (variables, condicionales, bucles, funciones) es la misma en casi todos los lenguajes populares; una vez que la entendés en uno, aprender el siguiente lenguaje te lleva semanas, no meses. Mejor invertir seis meses serios en uno solo que dispersarte.

Conclusión: elegí según lo que querés construir, no según rankings genéricos de internet. El mejor lenguaje para empezar es el que te mantiene motivado para seguir practicando todos los días.

¿La IA reemplaza al programador junior? Lo que dicen los datos (no el miedo)

Es una de las preguntas que más ansiedad genera en quienes están empezando en programación. La respuesta honesta es que no hay consenso, y ambos lados del debate tienen argumentos de peso.

1. El argumento de que sí hay impacto real

Es cierto que algunas empresas de tecnología redujeron contrataciones de perfiles junior en los últimos años, y parte de esa reducción coincide con la adopción de asistentes de IA para tareas que antes se delegaban a programadores recién egresados (escribir código repetitivo, tests básicos, documentación). Si una IA puede hacer en minutos una tarea que antes le llevaba días a un junior, la lógica de «necesito más gente junior para escalar» cambia.

2. El argumento de que el miedo está exagerado

Investigaciones del MIT sobre pilotos de IA generativa en empresas encontraron que una proporción muy alta de esos proyectos no logra escalar más allá de la etapa piloto, lo que sugiere que el reemplazo masivo y rápido de personal técnico es más difícil en la práctica de lo que se anuncia en los titulares. Además, alguien tiene que revisar, corregir y hacerse responsable del código que genera una IA: ese trabajo de supervisión sigue siendo humano, y hoy no hay suficiente gente senior para hacerlo sin formar nuevos perfiles.

3. Lo que sí parece estar cambiando (más allá del debate)

Lo que cambia no es tanto «cuánta gente junior se contrata», sino «qué se espera de un junior». Cada vez se valora menos escribir código repetitivo desde cero, y cada vez más la capacidad de revisar, corregir y entender código generado por una IA, además de saber cuándo esa IA se equivocó.

4. Qué hacer con esta incertidumbre

Independientemente de qué lado del debate resulte más acertado, invertir tiempo en entender cómo funciona el código que generás con IA (y no solo copiarlo) es una apuesta segura en cualquier escenario: te hace útil tanto si las empresas siguen contratando junior como antes, como si el rol de junior termina pareciéndose más al de un revisor de código asistido por IA.

No hay una respuesta única todavía, y cualquiera que te la dé con total certeza probablemente esté simplificando un tema que sigue en movimiento.

Ranking: los lenguajes de programación mejor pagos en Uruguay (2026)

Nota sobre los datos: no existe un relevamiento oficial público que desglose sueldos de Uruguay por lenguaje de programación específico. Lo que sigue combina datos de referencia de plataformas educativas y de empleo (como Coderhouse) para el rol de Full Stack, con tendencias generales del mercado IT regional. Tomálo como una guía orientativa, no como una tabla salarial exacta.

1. Lo que sí sabemos con datos concretos

Según datos de referencia para Desarrolladores Full Stack en Uruguay en 2026: un perfil junior (0-2 años) ronda los UYU 55.000–70.000 mensuales (≈ USD 1.400–1.800); un semi senior (2-5 años), UYU 80.000–115.000 (≈ USD 2.000–2.900); y un senior (5+ años), UYU 130.000+ (≈ USD 3.300+), con contratos en dólares para clientes del exterior llegando a tarifas de USD 25 a 40 por hora.

2. Qué perfiles tienden a pagar más (no «qué lenguaje»)

La tendencia general del mercado no es que un lenguaje pague más por sí solo, sino que ciertos roles pagan más independientemente del lenguaje: Data Science/Data Engineering, Cloud/DevOps y Backend de alto tráfico suelen estar en la banda superior frente a roles de Frontend puro o UX/UI, según la misma fuente.

3. Entonces, ¿qué lenguaje conviene aprender?

Python domina en Data Science y automatización; TypeScript/JavaScript en Backend y Frontend moderno con Node.js y React; y Java/C# siguen fuertes en sistemas empresariales grandes. Ninguno de los tres «gana» en abstracto: gana el que te acerca al rol (Data, Cloud, cliente exterior) que efectivamente paga más, según tu interés y el tipo de empresa donde querés trabajar.

4. El factor que pesa más que el lenguaje

El inglés y la posibilidad de facturarle a clientes del exterior abren el mercado a sueldos en dólares, que suelen superar ampliamente la banda local en pesos. Dominar cloud, arquitectura y liderazgo técnico tiene más impacto en el sueldo final que el lenguaje específico que uses.

Fuente de referencia salarial: Coderhouse, datos 2026 para Desarrollador Full Stack en Uruguay.

Copilot vs Cursor vs Windsurf: ¿cuál IDE con IA rinde más en 2026?

La generación de asistentes que solo te sugieren una línea de código quedó chica. Los tres editores/extensiones más comentados hoy encaran la IA de forma distinta. Acá las diferencias que importan en el día a día.

1. GitHub Copilot

Se integra como extensión dentro de VS Code, Visual Studio y otros editores que ya usás. Su fuerte es la integración profunda con el ecosistema de GitHub (issues, pull requests, revisiones de código). Es la opción con menor fricción si tu equipo ya vive en VS Code y no quiere cambiar de editor.

2. Cursor

Es un editor completo (un fork de VS Code) pensado desde cero alrededor de la IA: podés pedirle que edite varios archivos a la vez, que entienda todo el proyecto, y chatear con el código como contexto permanente. La curva de adopción es baja porque se siente como VS Code, pero migrar implica dejar tu editor actual.

3. Windsurf

También es un editor propio, con un enfoque fuerte en el modo «agente»: le pedís una tarea de varios pasos (por ejemplo, «agregá un endpoint nuevo y sus tests») y el editor encadena las acciones necesarias con menos intervención manual que sus competidores.

4. ¿Cuál conviene según tu caso?

Si no querés cambiar de editor: Copilot como extensión es el camino de menor resistencia.

Si querés la experiencia más pulida de «chatear con todo tu proyecto»: Cursor suele ser el más mencionado por equipos que migraron completos.

Si tu prioridad es delegar tareas completas de varios pasos: Windsurf apunta directo a eso.

Los tres tienen planes pagos con distintos límites de uso mensual (cantidad de solicitudes o de tokens), así que antes de comprometerte con uno, probá el plan gratuito o de prueba con una tarea real de tu proyecto, no un ejemplo de demo.

¿Vale la pena aprender Rust en 2026? Guía honesta para devs de Python

Cada tanto vuelve la pregunta: ¿aprendo Rust o sigo profundizando en Python? Acá una respuesta sin vender humo.

1. Lo que Rust hace mejor que Python

Rendimiento cercano a C/C++ sin sacrificar seguridad de memoria (el compilador te obliga a manejar los casos límite antes de que el programa corra). Es la elección natural para sistemas donde la velocidad y el consumo de recursos importan de verdad: motores de bases de datos, herramientas de línea de comandos pesadas, componentes críticos de infraestructura, y cada vez más, módulos que se compilan a WebAssembly.

2. Lo que Python sigue haciendo mejor

Velocidad de desarrollo. Escribís una idea y la probás en minutos, no en horas peleando con el compilador. Para prototipos, ciencia de datos, automatización, scripts y la gran mayoría de backends de negocio, Python sigue siendo más productivo día a día.

3. La curva de aprendizaje, sin endulzarla

El «borrow checker» de Rust (el sistema que verifica quién es dueño de cada dato en memoria) es difícil al principio, incluso para gente con experiencia en otros lenguajes de bajo nivel. Contá con varias semanas de frustración antes de que empiece a sentirse natural. No es un fin de semana de tutorial.

4. ¿Suma para conseguir trabajo?

Rust aparece cada vez más en ofertas de infraestructura, blockchain y herramientas de desarrollador, pero la demanda total sigue siendo muchísimo menor que la de Python. No es un lenguaje para «reemplazar» a Python en tu CV, es un complemento que te distingue en nichos específicos.

5. Nuestra recomendación

Si tu trabajo diario es Python y te va bien, no hay urgencia de migrar. Aprendé Rust si: (a) te interesa un problema concreto donde el rendimiento es crítico, (b) querés escribir extensiones nativas para acelerar código Python (una combinación cada vez más común), o (c) te atrae el paradigma en sí mismo como ejercicio mental. Si buscás el lenguaje que te dé más oportunidades por hora invertida en 2026, Python sigue ganando.

IA gratis para programar en 2026: las 5 mejores herramientas

No hace falta pagar una suscripción para empezar a programar con IA. Acá van 5 opciones con plan gratuito genuino en 2026, con sus límites reales para que no te lleves sorpresas.

1. ChatGPT (plan gratuito)

Ideal para consultas puntuales, explicar errores y generar snippets cortos. El límite principal es la cantidad de mensajes y el acceso a los modelos más nuevos, que suele estar restringido a los planes pagos.

2. Claude (plan gratuito)

Buena opción cuando necesitás pegar un archivo grande o varios archivos para que la IA entienda el contexto completo antes de sugerir cambios. El plan gratuito tiene límite de mensajes por período de tiempo.

3. Gemini en Google AI Studio

Tiene una capa gratuita pensada para desarrolladores que quieren probar la API sin pagar, útil si querés integrar IA en tus propios proyectos y no solo usarla como chat.

4. GitHub Copilot (plan gratuito individual)

Incluye una cantidad limitada de sugerencias y consultas de chat por mes, sin costo. Se integra directo en VS Code, que es donde más se aprovecha, porque completa código mientras escribís en vez de tener que copiar y pegar.

5. Continue (open source)

Una extensión de código abierto para VS Code y JetBrains que te permite conectar el modelo que quieras (incluidos modelos locales) sin depender de un solo proveedor. Requiere un poco más de configuración inicial, pero da más control y, si usás un modelo local, cero costo de API.

¿Cuál elegís?

Si recién empezás: ChatGPT o Claude gratuitos alcanzan de sobra. Si ya programás en serio y querés autocompletado dentro del editor: Copilot gratuito. Si querés máxima flexibilidad sin atarte a un proveedor: Continue con un modelo open source.

Los planes gratuitos cambian seguido en límites y funciones, así que confirmá las condiciones vigentes antes de armar tu flujo de trabajo alrededor de una sola herramienta.

7 errores que cometen los devs junior con Git (y cómo evitarlos)

Casi todos los que empezamos con Git rompimos un repositorio al menos una vez. La diferencia entre un junior y un senior no es que no se equivoquen, es que ya saben cómo salir del lío. Acá van los errores más comunes y cómo evitarlos.

1. Mensajes de commit sin sentido

«fix», «cambios», «asd». Un mensaje de commit debería explicar el por qué, no solo el qué. Convención simple: tipo: descripción corta (ej. fix: corrige validación de email en registro).

2. Trabajar directo sobre main

Sin darse cuenta, muchos junior programan y commitean directo en la rama principal. Un error ahí puede romper el código que todo el equipo usa. Solución: crear una rama por feature o fix, por chica que sea la tarea.

3. Hacer git push --force sin entender qué hace

Sobreescribe el historial remoto y puede borrar el trabajo de otros. Si necesitás forzar un push, usa --force-with-lease, que al menos verifica que no estés pisando cambios ajenos.

4. No hacer pull antes de empezar a trabajar

Empezar a programar sobre una versión vieja del código genera conflictos innecesarios. Hábito simple: git pull apenas te sentás a trabajar, siempre.

5. Resolver conflictos borrando el código del otro

Ante un conflicto, la tentación es quedarse con «tu» versión y borrar la otra sin leerla. Eso puede eliminar lógica importante. Leé ambas versiones, entendé qué hace cada una, y combiná si hace falta.

6. No usar .gitignore

Subir carpetas como node_modules, archivos .env con credenciales, o binarios pesados infla el repositorio y puede filtrar secretos. Configurá el .gitignore desde el primer commit del proyecto.

7. No entender la diferencia entre merge y rebase

Usarlos sin saber qué hace cada uno genera historiales confusos o duplicados. Regla simple para empezar: merge para integrar ramas compartidas, rebase solo en tu rama personal antes de compartirla.

La buena noticia: ningún error de esta lista es irreversible si lo detectás a tiempo. Git guarda casi todo en su historial interno (git reflog es tu mejor amigo en un momento de pánico).