Conjunto de reglas y protocolos que permiten que diferentes programas se comuniquen entre sí. Es como un "camarero" que lleva pedidos entre tu aplicación y un servidor.
Cargando aplicación...
Preparando tu experiencia meskeIA
Más de 120 términos esenciales de desarrollo web explicados en español
Conjunto de reglas y protocolos que permiten que diferentes programas se comuniquen entre sí. Es como un "camarero" que lleva pedidos entre tu aplicación y un servidor.
Estructura de datos que almacena múltiples valores en una sola variable, accesibles por su posición (índice). El primer elemento está en la posición 0.
Sintaxis moderna para manejar operaciones asíncronas (que tardan tiempo, como peticiones a servidor). "async" marca una función como asíncrona, "await" pausa la ejecución hasta que se complete una operación.
Pequeño elemento visual, generalmente circular u ovalado, que muestra información breve como contadores, estados o categorías. Suele aparecer junto a iconos o textos.
La parte de una aplicación que funciona en el servidor, invisible para el usuario. Maneja la lógica de negocio, base de datos y seguridad.
Tipo de dato que solo puede tener dos valores: true (verdadero) o false (falso). Se usa para condiciones y estados.
Línea independiente de desarrollo en Git. Permite trabajar en nuevas funcionalidades sin afectar el código principal (main/master).
Punto en el que el diseño de una página cambia según el ancho de la pantalla. Define cuándo aplicar estilos diferentes para móvil, tablet o escritorio.
Error en el código que causa un comportamiento inesperado o incorrecto en la aplicación. El proceso de encontrar y corregir bugs se llama "debugging".
Proceso de transformar el código fuente en una versión optimizada lista para producción. Incluye minificación, bundling y optimizaciones.
Elemento interactivo que el usuario puede pulsar para ejecutar una acción. Puede contener texto, iconos o ambos.
Función que se pasa como argumento a otra función y se ejecuta después de que esta termine. Es la forma clásica de manejar operaciones asíncronas.
Contenedor visual con bordes redondeados y sombra que agrupa información relacionada. Muy usado para mostrar productos, artículos o perfiles.
Control de formulario que permite seleccionar o deseleccionar una opción. A diferencia del radio button, permite selecciones múltiples independientes.
Elemento compacto que representa una entrada, atributo o acción. Similar al badge pero generalmente interactivo (se puede eliminar o seleccionar).
Plantilla para crear objetos con propiedades y métodos predefinidos. En CSS, selector que aplica estilos a elementos con ese nombre de clase.
Evento que se dispara cuando el usuario hace clic con el ratón o toca la pantalla sobre un elemento.
Se refiere al navegador del usuario, donde se ejecuta JavaScript del frontend. En Next.js, los componentes con "use client" se renderizan en el navegador.
Campo de entrada que combina un input de texto con un dropdown. Permite escribir para filtrar opciones o seleccionar de una lista.
Guardar cambios en el repositorio Git con un mensaje descriptivo. Es como un "punto de guardado" que queda en el historial.
Pieza reutilizable de interfaz en React. Puede ser una función que devuelve JSX y acepta props. Los componentes se combinan para construir la UI.
Herramienta del navegador para ver mensajes, errores y depurar código. console.log() muestra valores en la consola.
Elemento que envuelve y agrupa otros elementos. Suele tener un ancho máximo y centrarse en la página.
Archivo CSS donde las clases son locales al componente que lo importa. Evita conflictos de nombres entre componentes.
Sistema organizado para almacenar, gestionar y recuperar información de forma persistente. Puede ser SQL (tablas) o NoSQL (documentos).
Proceso de encontrar y corregir errores (bugs) en el código. Incluye usar console.log, breakpoints y herramientas de desarrollo.
Proceso de subir y publicar una aplicación en un servidor para que sea accesible públicamente.
Biblioteca o paquete externo que tu proyecto necesita para funcionar. Se instalan con npm install y se listan en package.json.
Representación en forma de árbol de la estructura HTML de una página. JavaScript puede manipular el DOM para cambiar el contenido dinámicamente.
Menú que se expande hacia abajo al hacer clic, mostrando una lista de opciones. Puede ser un select nativo o un menú personalizado.
Cada pieza individual del HTML/JSX: un div, un botón, un párrafo. Los componentes están formados por elementos.
URL específica de una API donde se puede hacer una petición. Cada endpoint suele corresponder a una operación o recurso.
Problema en el código que impide su correcta ejecución. Puede ser de sintaxis, de ejecución (runtime) o lógico.
Acción que ocurre en el navegador (clic, tecla, scroll, etc.) y puede ser detectada por JavaScript para ejecutar código.
Hacer disponible una función, variable o componente para que otros archivos puedan importarlo y usarlo.
Función nativa de JavaScript para hacer peticiones HTTP a servidores y APIs. Devuelve una Promise con la respuesta.
Sistema de diseño CSS para distribuir elementos en una dimensión (fila o columna). Facilita centrar, espaciar y alinear elementos.
Contenedor de campos de entrada que recopila datos del usuario. Incluye inputs, selects, checkboxes y un botón de envío.
Conjunto de herramientas, librerías y convenciones que proporcionan una estructura para desarrollar aplicaciones. Impone una forma de trabajar.
La parte visible de una aplicación con la que interactúa el usuario. Incluye HTML, CSS y JavaScript que se ejecuta en el navegador.
Bloque de código reutilizable que realiza una tarea específica. Puede recibir parámetros y devolver un valor.
Sistema de control de versiones que registra cambios en el código. Permite colaborar, ver historial y revertir cambios.
Sistema de diseño CSS para crear layouts bidimensionales (filas y columnas). Más potente que Flexbox para diseños complejos.
Función que se ejecuta cuando ocurre un evento. Define qué hacer cuando el usuario hace clic, escribe, etc.
Sección superior de una página o componente. Suele contener el logo, navegación principal y acciones importantes.
Función especial de React que permite usar estado y otras características en componentes funcionales. Empiezan con "use".
Estado que se activa cuando el cursor del ratón está sobre un elemento. Se usa para efectos visuales interactivos.
Imagen pequeña y simbólica que representa una acción, objeto o concepto. Puede ser SVG, emoji o de una librería de iconos.
Traer código (funciones, componentes, estilos) de otros archivos para usarlo en el archivo actual.
Posición de un elemento dentro de un array. En JavaScript, los índices empiezan en 0 (el primer elemento es índice 0).
Elemento de formulario donde el usuario puede escribir texto, números u otros datos. Hay varios tipos: text, number, email, password, etc.
En TypeScript, define la estructura (propiedades y tipos) que debe tener un objeto. Ayuda a prevenir errores y documentar el código.
Formato de texto para intercambiar datos. Estructura clave-valor fácil de leer para humanos y máquinas. Muy usado en APIs.
Extensión de sintaxis que permite escribir HTML dentro de JavaScript. Es lo que usan los componentes de React para definir la UI.
Atributo especial que React usa para identificar elementos en listas. Debe ser único entre hermanos para optimizar el renderizado.
Texto que describe un campo de formulario. Mejora la accesibilidad y usabilidad al indicar qué dato se espera.
Disposición y organización de los elementos en una página. Define la estructura general: header, sidebar, contenido, footer.
Colección de código preescrito que resuelve problemas comunes. A diferencia del framework, tú decides cuándo y cómo usarla.
Elemento que al hacer clic navega a otra página o sección. En Next.js se usa el componente Link para navegación interna.
API del navegador para guardar datos de forma persistente en el dispositivo del usuario. Los datos permanecen aunque se cierre el navegador.
Estructura que repite un bloque de código mientras se cumpla una condición. for, while y map son formas de crear bucles.
Método de array que crea un nuevo array transformando cada elemento. En React, se usa para renderizar listas de componentes.
Espacio exterior alrededor de un elemento, separándolo de otros elementos. Se define en CSS con margin.
Combinar los cambios de una rama con otra en Git. Integra el trabajo de diferentes branches.
Información sobre la información. En web, datos sobre la página: título, descripción, keywords para SEO.
Función que pertenece a un objeto. Los métodos de array (map, filter, reduce) operan sobre arrays.
Ventana emergente que aparece sobre el contenido principal, bloqueando la interacción hasta que se cierre. Usado para confirmaciones, formularios o detalles.
Archivo de código independiente con funcionalidad específica que puede ser importado en otros archivos. Promueve la organización y reutilización.
Componente horizontal o vertical con enlaces de navegación. Permite moverse entre las diferentes secciones de una web.
Herramienta para instalar, gestionar y compartir paquetes de JavaScript. Los paquetes se descargan de npmjs.com.
Valor especial que representa la ausencia intencional de valor. Diferente de undefined, que indica que algo no está definido.
Estructura de datos que almacena pares clave-valor. Las claves son strings y los valores pueden ser de cualquier tipo.
Prop de React que asigna una función a ejecutar cuando el usuario hace clic en un elemento.
Capa semitransparente que cubre el contenido de fondo. Se usa junto con modales para oscurecer y bloquear el fondo.
Espacio interior entre el contenido de un elemento y su borde. A diferencia del margin, está dentro del elemento.
Variable que una función recibe como entrada. Los valores que se pasan al llamar la función se llaman argumentos.
Texto provisional que aparece en un input vacío como pista de qué escribir. Desaparece cuando el usuario empieza a escribir.
Objeto que representa el resultado futuro de una operación asíncrona. Puede estar pendiente, resuelta o rechazada.
Datos que un componente padre pasa a un componente hijo. Son de solo lectura dentro del componente que las recibe.
Solicitud en GitHub para fusionar cambios de una rama a otra. Permite revisión de código antes de integrar.
Enviar commits locales al repositorio remoto (GitHub). Hace públicos tus cambios para que otros los vean.
Solicitud de información a una base de datos o API. En URLs, los query params son parámetros después del "?".
Control de formulario circular que permite seleccionar UNA opción de un grupo. Solo una opción puede estar seleccionada a la vez.
Hook de React (useRef) que crea una referencia mutable a un elemento DOM o valor que persiste entre renders sin causar re-renderizado.
Proceso de convertir componentes React en elementos del DOM visibles en pantalla. React re-renderiza cuando cambia el estado o props.
Carpeta que contiene tu proyecto y todo su historial de cambios en Git. Puede estar local o en remoto (GitHub).
Mensaje enviado a un servidor para obtener datos o realizar una acción. Incluye método (GET, POST), headers y opcionalmente body.
Datos que devuelve un servidor tras una petición. Incluye código de estado (200, 404, 500), headers y body.
Diseño que se adapta a diferentes tamaños de pantalla (móvil, tablet, escritorio). Se logra con media queries y unidades flexibles.
Palabra clave que indica qué valor devuelve una función. En React, return devuelve el JSX que se renderizará.
URL o camino que corresponde a una página o endpoint. En Next.js, las rutas se definen por la estructura de carpetas en /app.
Contexto donde las variables son accesibles. Las variables declaradas dentro de una función no son accesibles fuera de ella.
Elemento de formulario nativo HTML que muestra un dropdown con opciones. El usuario elige una opción de la lista.
Ordenador que almacena y sirve datos/páginas a los clientes. En Next.js, Server Components se renderizan en el servidor.
Panel vertical al lado del contenido principal. Suele contener navegación secundaria, filtros o información adicional.
Versión amigable de un título para usar en URLs. Sin espacios, minúsculas, sin caracteres especiales.
Animación circular giratoria que indica que algo está cargando. Informa al usuario que debe esperar.
Datos internos de un componente que pueden cambiar con el tiempo. Cuando el state cambia, React re-renderiza el componente.
Tipo de dato que representa texto. Se escribe entre comillas simples, dobles o backticks.
Propiedades visuales aplicadas a elementos: colores, tamaños, posiciones, animaciones. Se definen en CSS o inline.
Acción de enviar un formulario. El evento onSubmit se dispara cuando el usuario hace clic en el botón de envío o presiona Enter.
En HTML, elemento definido entre < >. En UI, etiqueta visual para categorizar contenido (similar a chip/badge).
String especial delimitado por backticks (`) que permite interpolar variables y expresiones con ${...}.
Campo de formulario para textos largos de múltiples líneas. A diferencia del input text, permite Enter para saltos de línea.
Control que alterna entre dos estados (encendido/apagado, sí/no). Visualmente suele ser un interruptor deslizable.
Pequeño texto que aparece al pasar el cursor sobre un elemento, dando información adicional o explicación.
En TypeScript, define qué clase de valor puede tener una variable: string, number, boolean, object, array, etc.
Superset de JavaScript que añade tipado estático. Ayuda a detectar errores antes de ejecutar el código.
Todo lo visual e interactivo de una aplicación: botones, formularios, textos, iconos. Lo que el usuario ve y usa.
Valor que tienen las variables declaradas pero no inicializadas. También el resultado de acceder a propiedades inexistentes.
Dirección completa de una página o recurso en internet. Incluye protocolo, dominio y ruta.
Directiva de Next.js que indica que un componente debe ejecutarse en el navegador. Necesario para usar hooks como useState.
Hook de React para ejecutar efectos secundarios: llamadas a APIs, suscripciones, manipulación del DOM. Se ejecuta después del render.
Hook de React para añadir estado a componentes funcionales. Devuelve el valor actual y una función para actualizarlo.
Cómo se siente el usuario al usar una aplicación: facilidad, satisfacción, eficiencia. Va más allá de lo visual (UI).
Proceso de verificar que los datos ingresados son correctos y completos antes de procesarlos. Puede ser en cliente y/o servidor.
El dato contenido en una variable, propiedad o campo de formulario. En inputs, value es lo que el usuario ha escrito.
Contenedor con nombre que almacena un valor. En JavaScript moderno se declaran con const (constante) o let (modificable).
Elemento contenedor que envuelve a otros elementos para agruparlos, aplicar estilos o añadir funcionalidad.
Propiedad CSS que controla el orden de apilamiento de elementos posicionados. Mayor z-index = más adelante (encima).
Este glosario está diseñado para ayudar a quienes están aprendiendo programación a entender los términos técnicos que se usan habitualmente en desarrollo web. Cada término incluye su traducción al español, una definición clara y ejemplos prácticos.
Guías prácticas, comparativas de paradigmas y errores conceptuales que frenan a los desarrolladores
Elegir el paradigma adecuado es una de las decisiones más importantes en cualquier proyecto. Esta tabla te ayuda a entender cuándo usar cada uno.
| Criterio | Procedural | OOP (Orientada a Objetos) | Funcional | Reactiva/Eventos |
|---|---|---|---|---|
| Organización del código | Funciones y procedimientos secuenciales | Clases y objetos con estado | Funciones puras sin efectos secundarios | Flujos de datos y eventos asíncronos |
| Estado del programa | Variables mutables globales/locales | Encapsulado en objetos | Inmutable (sin mutación) | Reactivo a cambios de estado |
| Reutilización | Funciones reutilizables | Herencia y composición | Composición de funciones | Operadores y streams reutilizables |
| Dificultad inicial | Baja (intuitivo) | Media (abstracción de clases) | Alta (cambio de mentalidad) | Alta (asincronía y backpressure) |
| Lenguajes típicos | C, Pascal, scripts Bash | Java, C#, Python, Ruby | Haskell, Erlang, Clojure, Scala | RxJS, Akka, Reactor |
| Ideal para | Scripts, automatización, inicio | Aplicaciones de negocio medianas-grandes | Procesamiento de datos, concurrencia | Sistemas en tiempo real, UIs reactivas |
Según tu nivel y objetivo, usarás el glosario de forma diferente. Aquí te explicamos cómo sacarle el máximo partido a cada perfil.
Uso recomendado:
Filtrar por categoría "Fundamentos" → leer variable, función, bucle, condicional → no pasar a otra categoría hasta dominar estos 20 términos básicosPor qué funciona: Los primeros 20 términos (variable, función, bucle, array, objeto, condicional, tipo de dato, scope, callback, promise) cubren el 80% de lo que necesitas para entender cualquier tutorial de programación web.
Uso recomendado:
Buscar término que aparece en code review → leer definición + ejemplo → buscar los "relacionados" para entender el contexto completoPor qué funciona: En un entorno profesional, los seniors usan términos como "refactoring", "CI/CD", "deuda técnica" o "SOLID" en reuniones. Tener la referencia rápida evita la vergüenza de preguntar por conceptos básicos y acelera la integración en el equipo.
Uso recomendado:
Filtrar categoría "Frontend" o "Backend" → mapear términos conocidos en tu stack (ej: "DOM" si vienes de móvil, "REST" si vienes de desktop)Por qué funciona: Los conceptos son similares entre stacks pero el vocabulario cambia. Un dev de Android conoce "activity" pero no "componente React". Mapear conceptos conocidos a vocabulario web acelera la transición.
Uso recomendado:
Filtrar "Testing" → revisar unit test, integration test, mock, stub, CI/CD → entender qué reportar en cada tipo de bug y qué términos usar con el equipo de desarrolloPor qué funciona: Un QA que habla el mismo lenguaje técnico que los devs reduce el tiempo de resolución de bugs en un 40%. Los términos exactos (null pointer, race condition, memory leak) evitan ambigüedad en los tickets.
El frontend es todo lo que el usuario ve y con lo que interactúa directamente: HTML (estructura), CSS (estilo) y JavaScript (comportamiento) que se ejecutan en el navegador. El backend es el servidor: recibe peticiones del frontend, procesa la lógica de negocio, accede a la base de datos y devuelve respuestas. Un sistema de login: el frontend muestra el formulario, el backend verifica las credenciales contra la base de datos.
💡 Analogía práctica: El frontend es el salón de un restaurante (lo que ve el cliente), el backend es la cocina (donde se prepara la comida), y la base de datos es la despensa (donde se guardan los ingredientes).
undefined significa que una variable existe pero no se le ha asignado ningún valor. null es un valor intencionalmente asignado que representa "sin valor". typeof null === 'object' (bug histórico de JS). typeof undefined === 'undefined'. En comparación laxa: null == undefined es true. En estricta: null === undefined es false.
💡 Regla práctica: Usa null cuando tú quieres decir "no hay valor aquí" (p.ej: usuario no encontrado). undefined aparece automáticamente cuando olvidas inicializar una variable. Comprueba siempre con === null o === undefined, nunca con == null.
var: scope de función, hoisting, evitar en código moderno. let: scope de bloque, valor puede cambiar. const: scope de bloque, referencia no puede reasignarse (pero el objeto interno sí puede mutarse). Regla de oro: usa const por defecto. Cambia a let solo si necesitas reasignar. Nunca uses var en código nuevo (ES6+).
💡 Truco para entrevistar: const obj = {}; obj.name = 'Juan'; es válido. const prohíbe reasignar la variable (obj = otro), no mutar el objeto. Este matiz se pregunta frecuentemente en entrevistas técnicas junior.
REST (Representational State Transfer) es un estilo arquitectónico para APIs web. Una API REST usa HTTP con los verbos GET (leer), POST (crear), PUT/PATCH (actualizar), DELETE (eliminar). Cada recurso tiene una URL única: GET /usuarios/123 devuelve el usuario 123. Las respuestas son típicamente JSON. "Stateless" significa que cada petición es independiente: el servidor no guarda estado de sesión.
💡 Alternativas modernas: GraphQL permite pedir exactamente los campos que necesitas (evita over-fetching). tRPC ofrece type-safety end-to-end entre frontend y backend TypeScript sin definir contratos manualmente.
Git es un sistema de control de versiones distribuido. Guarda instantáneas del código (commits) que permiten ver la historia completa, revertir cambios, trabajar en ramas paralelas (branches) sin interferir con el código principal y fusionar cambios (merge). GitHub/GitLab son plataformas que alojan repositorios Git en la nube y añaden colaboración, CI/CD y revisión de código. Sin Git, perder código por error o conflictos entre compañeros es inevitable.
💡 Los 5 comandos que usas el 90% del tiempo: git add, git commit, git push, git pull, git checkout -b nueva-rama. Domínalos antes de memorizar el resto.
SQL (PostgreSQL, MySQL): datos estructurados con relaciones complejas, transacciones ACID, integridad de datos crítica (banking, e-commerce). NoSQL (MongoDB, Redis, Cassandra): datos semiestructurados o sin esquema fijo, escala horizontal masiva, lecturas/escrituras de alta velocidad (sesiones, caché, tiempo real). El 80% de proyectos funciona perfectamente con PostgreSQL. NoSQL no es "mejor" sino diferente: úsalo cuando tengas un problema concreto que SQL no resuelva eficientemente.
💡 Mito derribado: "NoSQL es más rápido que SQL" es falso en términos generales. PostgreSQL con índices correctos supera a MongoDB en la mayoría de queries de lectura. La velocidad depende del diseño, no del tipo de base de datos.
Docker empaqueta una aplicación con todas sus dependencias en un contenedor: un entorno aislado y reproducible. Resuelve el clásico "en mi máquina funciona": si funciona en el contenedor, funciona en cualquier entorno (desarrollo, CI, producción). Un contenedor es más ligero que una máquina virtual porque comparte el kernel del sistema operativo. Lo necesitas cuando: diferentes devs tienen distintas versiones de Node/Python, el servidor de producción difiere del entorno local, o tienes múltiples microservicios.
💡 Por dónde empezar: Aprende a escribir un Dockerfile básico para tu app y usa docker-compose para orquestar tu app + base de datos. Esto cubre el 90% de los casos de uso en proyectos de equipo pequeño.
Síncrono: el código espera a que cada operación termine antes de continuar. Si leer un archivo tarda 2 segundos, el hilo se bloquea 2 segundos. Asíncrono: la operación lenta se inicia, el código sigue ejecutándose, y cuando termina se procesa el resultado (callback, Promise, async/await). JavaScript es single-threaded: la asincronía es fundamental para no bloquear la UI. Una petición a una API siempre debe ser asíncrona.
💡 Orden de aprendizaje: Callbacks → Promises → async/await. Empieza directamente con async/await para el código nuevo (es la forma más legible), pero entiende Promises para manejar errores correctamente con try/catch.
Esta guía te muestra el orden óptimo para aprender programación web desde cero hasta conseguir tu primer empleo como desarrollador.
Aprende la estructura de una página web (HTML semántico), cómo estilizarla (CSS: box model, flexbox, grid) y JavaScript básico (variables, funciones, bucles, DOM manipulation). Términos clave del glosario: elemento, etiqueta, selector, propiedad CSS, variable, función, bucle, array. No avances hasta poder hacer una página estática responsive desde cero.
Profundiza en JavaScript: ES6+ (arrow functions, destructuring, spread), Promises, async/await, fetch API, scope y closures. Términos clave: Promise, async/await, callback, closure, scope, API, JSON, fetch. Este es el mayor salto de dificultad para principiantes: dedícale el tiempo necesario antes de pasar a frameworks.
Aprende Git desde el primer día. Commit, branch, merge, pull request, resolución de conflictos. Crea una cuenta en GitHub y sube todos tus proyectos, aunque sean pequeños. Los empleadores valoran el historial de commits: demuestra consistencia y progreso. Términos clave: repositorio, commit, branch, merge, pull request, fork.
Con JavaScript sólido, aprende React (el más demandado en España: 60% de ofertas junior). Componentes, props, state, hooks (useState, useEffect), routing. Términos clave: componente, props, state, hook, renderizado, virtual DOM, SPA. Construye 2-3 proyectos completos antes de buscar empleo.
Aprende a crear APIs REST básicas con Node.js. Peticiones HTTP (GET, POST, PUT, DELETE), middleware, variables de entorno, conexión a base de datos (PostgreSQL con Prisma es la combinación más moderna y empleable). Términos clave: servidor, API REST, middleware, CRUD, ORM, variable de entorno, endpoint.
Construye 3 proyectos que muestren: un CRUD completo (frontend + backend + base de datos), un proyecto con API externa, y algo personal que demuestre motivación. Escribe README.md explicando cada proyecto. LinkedIn actualizado, CV con proyectos con links a GitHub y demos en vivo. Los bootcamps de 6 meses aceleran este proceso pero no son imprescindibles si eres autodidacta disciplinado.
Por cada hora de tutorial, pasa 2 horas escribiendo código. Leer sobre programación sin practicar es como leer sobre natación sin entrar al agua. El error es parte del aprendizaje.
Entender por qué existe un patrón (ej: por qué los closures resuelven el problema de scope) te permite aplicarlo en contextos nuevos. Memorizar sintaxis sin comprensión no escala.
MDN Web Docs (JavaScript/HTML/CSS), documentación de React, PostgreSQL y Node.js son fuentes autoritativas. Los tutoriales pueden estar desactualizados; la doc oficial siempre refleja la versión actual.
Antes de preguntar: lee el error completo, busca en Google el mensaje exacto, usa console.log estratégicamente, revisa la documentación. El 90% de errores tienen solución en Stack Overflow.
Domina JavaScript antes de aprender Python o Go. Los conceptos (funciones, bucles, objetos, async) son transferibles entre lenguajes. La profundidad en uno facilita aprender el siguiente.
Aunque el proyecto sea pequeño, crea un repositorio. El historial de commits en GitHub es tu portafolio en tiempo real. Los empleadores lo revisan antes de la entrevista técnica.