Los mejores retos de programación para principiantes: Práctica de programación de fácil a difícil
Hay algo de lo que nadie te advierte. Puedes pasarte un mes viendo tutoriales sin parar, asintiendo con la cabeza a cada vídeo, y luego abrir un archivo en blanco y no tener ni idea de qué escribir. Me ha pasado. A la mayoría de la gente que aprende a programar le ha pasado.
La solución es sencilla pero efectiva: resolver pequeños problemas por tu cuenta, aunque al principio no salga bien. Esta guía se divide en dos partes. La primera es una selección de los mejores retos de programación para principiantes (diez en total, de dificultad variable). La segunda abarca los sitios web donde encontrarás miles más una vez que hayas resuelto los míos.
Cualquier lenguaje de programación sirve. Mis ejemplos usan Python y algo de JavaScript, ya que es por donde la mayoría empieza. Si puedes, sigue el orden. Cada problema introduce una idea nueva.
Por qué los desafíos de programación desarrollan habilidades de programación reales
¿Qué se considera un reto? Algo pequeño con una respuesta obvia. «Toma una palabra y dila al revés». «Aquí tienes una lista de números, ¿cuál es el mayor?». No instalas nada ni eliges un framework. Simplemente escribes diez líneas.
Ver un tutorial implica seguir el proceso de pensamiento de otra persona. Los desafíos de programación invierten esa dinámica, y resulta incómodo de una forma útil. Intentas adivinar, algo falla, te fijas en el error y vuelves a intentarlo. Si haces esto durante unas semanas, algunas cosas se irán volviendo más fáciles poco a poco.
- Dominio de la sintaxis. Se acabó lo de buscar en Google por quinta vez cómo escribir un bucle for.
- Habilidades para resolver problemas. Empiezas a dividir una tarea imprecisa en pasos antes incluso de tocar el teclado.
- Pensamiento lógico. Una lista vacía, un número entero negativo, una palabra de una sola letra. Uno empieza a esperar esas cosas.
- Depuración. El texto de error en rojo ya no se siente como un insulto.
- Confianza. Cada problema resuelto es prueba de que puedes escribir un programa por tu cuenta.
Una vez me dijeron que la programación tiene su propia regla del 80/20, y para los problemas de principiantes es bastante acertada. La mayoría se basan en los mismos cinco pasos: bucles, condicionales (if/else), manipulación de cadenas de texto, conteo de elementos en un diccionario y recorrido de un array. Una vez que domines estos pasos, muchos problemas "nuevos" resultarán ser viejos con otro nombre.

10 desafíos de programación fáciles para principiantes.
Ninguno de estos ejemplos es original, y esa es precisamente la clave. Aparecen en casi todos los cursos para principiantes porque funcionan. Los cinco primeros solo requieren bucles, condicionales y un poco de manejo de cadenas o listas, mientras que los cinco últimos te obligan a pensar en qué estructura de datos usar antes de escribir nada. Pase lo que pase, intenta no buscar en Google durante al menos veinte minutos, aunque parezca inútil.
Desafío 1: FizzBuzz
La tarea consiste en imprimir los números del 1 al 100, pero cada múltiplo de tres aparece como "Fizz", cada múltiplo de cinco como "Buzz", y los números que son múltiplos de ambos reciben "FizzBuzz" en su lugar.
Recuerdo haber pensado que era casi insultante lo simple que sonaba. Sin embargo, no es tan simple, por eso a los entrevistadores les gustó tanto durante tanto tiempo. Las personas que han leído mucho sobre programación pero han escrito muy poco suelen tener dificultades con el orden de las comprobaciones. Mi versión en Python se ve así:
Python para n en rango(1, 101): si n % 15 == 0: imprimir("FizzBuzz") si no si n % 3 == 0: imprimir("Fizz") si no si n % 5 == 0: imprimir("Buzz") si no: imprimir(n)
Una vez que funcione, arrastra la línea % 15 hacia abajo, ejecútala y comprueba cuántos FizzBuzzes sobreviven. Spoiler: ninguno.
Desafío 2: Invertir una cadena
"hola" entra, "olleh" sale.
En casi todos los lenguajes hay un atajo, como `s[::-1]` en Python o `split("").reverse().join("")` en JavaScript, y no hay problema en escribirlo una vez solo para ver cómo funciona. Después, sinceramente, lo borraría y usaría la versión más sencilla con un bucle que añade un carácter a la vez. Ahí es donde te das cuenta de que en la mayoría de los lenguajes una cadena no se puede modificar directamente, lo que confunde a mucha gente más adelante si no lo aprenden aquí.
Desafío 3: Verificador de palíndromos
Un palíndromo es una palabra como "racecar" o "noon" que se lee igual en ambas direcciones, por lo que tu función debería decir sí a esas palabras y no a "hello".
Cuando eso funcione, es un buen momento para mejorar tus habilidades de programación introduciendo el texto "Un hombre, un plan, un canal: Panamá", que solo pasará después de convertirlo a minúsculas y eliminar los espacios y la puntuación. Puedes usar el código para invertir cadenas del desafío anterior, lo cual resulta muy útil.
Desafío 4: Secuencia de Fibonacci
Probablemente ya hayas visto esta secuencia: 0, 1, 1, 2, 3, 5, 8, 13, donde cada número es la suma de los dos anteriores. Tu función debe devolver los primeros n de ellos.
Dos variables y un bucle son suficientes. La diversión comienza al reescribirlo con recursión, de modo que la función se llama a sí misma y luego solicita n = 35. En la mayoría de los portátiles, tendrás que esperar un rato, y descubrir por qué sucede esto es una introducción sencilla a la programación dinámica. Es uno de esos pequeños momentos de "¡Ah, por eso!" que se quedan grabados en la memoria.
Desafío 5: Rotar una matriz
Toma un arreglo y un número k, luego mueve cada elemento k posiciones a la derecha, de modo que los del final se desplacen hacia adelante. Con [1, 2, 3, 4, 5] y k = 2, deberías terminar con [4, 5, 1, 2, 3].
La mayoría de los primeros intentos fallan cuando k es mayor que la lista. Rotar cinco elementos en 7 posiciones es, en realidad, rotarlos en 2 posiciones, lo cual resulta obvio una vez que se observa e invisible hasta entonces.
Si lograste superar esos cinco sin demasiados problemas, ¡bien hecho! Los siguientes te exigirán un poco más.
Desafío 6: Encuentra el entero más grande en un arreglo.
Encontrar el número más grande es fácil si se permite usar `max()`, pero no es el caso. En su lugar, usa un bucle y luego encuentra también el segundo más grande sin recorrer la lista dos veces. Ahora estás gestionando dos valores y debes tener cuidado con cuál actualizas primero.
Los números duplicados y los números negativos son buenos elementos para realizar pruebas, ya que muchas soluciones iniciales fallan silenciosamente con ellos.
Desafío 7: Contar las vocales en una oración
Contar las vocales es el calentamiento. El ejercicio propiamente dicho consiste en contar cada vocal por separado y devolver algo como {"a": 3, "e": 5, "i": 1, "o": 2, "u": 0}.
Para muchos principiantes, este es el momento en que los diccionarios (o los objetos en JavaScript) finalmente cobran sentido, y eso es importante, porque probablemente sea la estructura de datos en la que más se apoyarán durante el próximo año.
Desafío 8: Verificador de anagramas
Los anagramas usan exactamente las mismas letras en un orden diferente, como "listen" y "silent", por lo que estás escribiendo una función que indica si dos cadenas cumplen con los requisitos.
Conozco dos maneras razonables. Puedes ordenar ambas cadenas y comparar los resultados, o puedes contar cuántas veces aparece cada letra y comparar esos recuentos. Escribir ambas y luego preguntarse cuál requiere menos esfuerzo es, básicamente, el primer paso para pensar en la eficiencia.
Desafío 9: Dos sumas
Con una lista como [2, 7, 11, 15] y un objetivo de 9, se devuelven las posiciones de los dos números que suman el objetivo, que en este caso es [0, 1].
La mayoría de la gente empieza con dos bucles anidados que prueban cada par, lo cual funciona bien con listas cortas, pero se vuelve lento rápidamente. El método más rápido guarda los números que ya has visto en un diccionario para que puedas consultarlos al instante. No es casualidad que LeetCode lo haya puesto en primer lugar, ya que demuestra claramente la importancia de una estructura de datos adecuada.
Desafío 10: Juego de adivinar números
Aquí, el ordenador elige un número secreto entre 1 y 100, tú sigues adivinando y te dice "demasiado alto" o "demasiado bajo" hasta que aciertas, junto con cuántos intentos te ha costado.
No se trata tanto de un simple rompecabezas de programación, sino más bien de una pequeña aplicación con entrada de usuario, un bucle while y números aleatorios. Alguien acabará escribiendo "banana" en lugar de un número, así que también tendrás que lidiar con entradas erróneas. Y a diferencia de los demás, este sí que puedes dárselo a un amigo para que juegue.
Los mejores sitios web para desafíos de programación en línea
Cuando se me acaben los diez intentos, querrás un suministro ilimitado con comprobación automática. Todos estos sitios de retos de programación online ofrecen esa función. Simplemente, son muy diferentes entre sí.
| Plataforma | Lo mejor para | Formato | Costo |
|---|---|---|---|
| Edabit | Principiantes absolutos | Desafíos de programación breves en el navegador | Nivel gratuito |
| Guerras de códigos | Práctica gamificada | "kata" clasificado con soluciones de la comunidad | Gratis |
| Ejercicio | Aprender buenos hábitos | Programas de idiomas con tutores humanos opcionales. | Gratis |
| freeCodeCamp | Aprendizaje estructurado | Plan de estudios con ejercicios y certificaciones integradas. | Gratis |
| HackerRank | Programas de desarrollo de habilidades y preparación para el empleo | Problemas temáticos con etiquetas de dificultad | Gratis para estudiantes |
| LeetCode | Preparación para la entrevista | Problemas algorítmicos etiquetados como Fácil/Medio/Difícil | Nivel gratuito |
| CodeChef | Avanzando hacia las competiciones | Rutas de práctica y concursos regulares. | Nivel gratuito |
| Proyecto Euler | amantes de las matemáticas | Rompecabezas matemáticos complejos, solo se aceptan las respuestas. | Gratis |
| La llegada del código | Diversión de temporada | Rompecabezas diarios con historias cada diciembre | Gratis |
Edabit
Si un amigo me preguntara por dónde empezar, le recomendaría Edabit. Los problemas son cortos, todo se ejecuta en el navegador y se gana experiencia. Cubre Python, JavaScript, Java, C++ y algunos lenguajes más, y la etiqueta de "muy fácil" realmente significa muy fácil.
Guerras de códigos
Codewars llama a sus problemas kata (un término de artes marciales para ejercicios). Están clasificados desde el 8.º kyu, el más fácil, hasta el 1.º kyu. La magia reside en el momento de enviar tu solución. Puedes ver las respuestas de los demás, y comparar tus diez líneas torpes con las dos líneas ingeniosas de alguien más te enseña más que la mayoría de los tutoriales.
Ejercicio
Exercism es una organización sin ánimo de lucro y completamente gratuita. Ofrece cursos para más de 80 lenguajes de programación, y mentores voluntarios revisarán tu código si se lo pides. Puedes trabajar desde el navegador o descargar los ejercicios a tu ordenador. Te recomiendo que, con el tiempo, optes por la segunda opción, ya que te ayudará a familiarizarte con Visual Studio Code y la terminal.
freeCodeCamp
No es estrictamente un sitio de desafíos. Es un programa de estudios completo, pero está compuesto por cientos de pequeños ejercicios de programación, así que encaja. Ideal si te gusta la estructura: JavaScript, Python, diseño web responsivo y más, con proyectos de certificación al final de cada ruta.
HackerRank
HackerRank clasifica los problemas por niveles de habilidad (Python, SQL, estructuras de datos, algoritmos) e indica la dificultad de cada uno y cuántas personas lo han resuelto. Muchas empresas lo utilizan para evaluar a sus candidatos. Familiarizarse con la interfaz ahora te ahorrará muchos quebraderos de cabeza más adelante.
LeetCode
Este es el lugar ideal para prepararse para entrevistas de trabajo. Los problemas están clasificados como Fáciles, Medios y Difíciles, e incluso "Fáciles" presupone que ya dominas lo básico. Considera estos desafíos de programación como un punto de partida, no como un punto de partida. Vuelve cuando mis diez problemas te resulten rutinarios.
CodeChef
CodeChef nació como un sitio web de programación competitiva. Actualmente, también ofrece rutas de práctica para principiantes junto a sus concursos habituales, así que si las competiciones cronometradas te parecen divertidas, es un buen lugar para probar una.
Proyecto Euler
Problemas matemáticos que requieren código para resolverse. No hay editor en el sitio. Escribes el programa donde quieras y solo ingresas el número final. A los matemáticos les encanta. A los demás no les suele gustar.
La llegada del código
Cada diciembre, recibes un rompecabezas de dos partes al día, unidos por una historia divertida. Recientemente, se redujo de 25 a 12 días y se eliminó la clasificación global, por lo que ahora predominan las clasificaciones privadas con amigos o compañeros de trabajo. Los rompecabezas más antiguos permanecen disponibles todo el año, y el archivo es una excelente biblioteca para practicar.
También oirás hablar de Coderbyte, que combina retos con cursos de preparación para entrevistas, y de Topcoder, que está dirigido a desarrolladores con experiencia.
Una advertencia: muchas listas antiguas todavía remiten a Google Code Jam y Kickstart. Google cerró ambas en 2023, y solo quedan los archivos con los problemas.

Cómo practicar desafíos de programación sin agotarse
Guardar diez sitios en favoritos no te hace mejor. Un hábito sí. Esto es, más o menos, lo que yo haría:
- Elige un lenguaje de programación y cíñete a él. Python suele ser la opción más común porque se lee casi como inglés. JavaScript es una buena opción si quieres crear sitios web.
- Configura un editor de código de verdad. Los editores basados en navegador son suficientes para la primera semana. Instalar Visual Studio Code cuanto antes te enseña a ejecutar archivos, leer errores en la terminal y trastear con un depurador.
- Resuelve de uno a tres problemas al día. Practicar programación a diario en pequeñas dosis es mucho mejor que estudiar durante seis horas un domingo. Los patrones se asimilan entre sesiones, y es difícil saltarse un objetivo pequeño.
- Lee otras soluciones después de terminar. En Codewars o Exercism, consulta dos o tres respuestas. Aprenderás buenas prácticas y algunos trucos realmente ingeniosos que vale la pena imitar.
- Repasa problemas antiguos. Una semana después, intenta resolver uno de memoria. Si no puedes, significa que lo memorizaste en lugar de comprenderlo.
- Pasa a proyectos pequeños. Con entre 30 y 50 problemas resueltos, crea algo: una lista de tareas, una aplicación meteorológica con una API gratuita, una aventura de texto. Ahí es donde las distintas habilidades empiezan a trabajar juntas.
Qué hacer cuando te quedas atascado en un desafío de programación.
Te quedarás atascado. Los desarrolladores sénior se quedan atascados antes del almuerzo. Lo que tienen es una rutina para desbloquearse, así que toma prestada una:
- Reformula el problema con tus propias palabras. Un número sorprendente de momentos de "No puedo resolver esto" en realidad son "Lo interpreté mal".
- Resuelve un ejemplo a mano. Usa pocos datos, lápiz y papel, y anota cada paso que des. ¡Enhorabuena, ese es tu algoritmo!
- Primero escribe pseudocódigo. "Para cada número, si es mayor que mi máximo actual, consérvalo". El lenguaje sencillo es más fácil de corregir que el código.
- Imprime todo. La mayoría de los errores se deben a una variable que contiene un valor distinto al que suponías. Imprímela y descúbrelo.
- Explícalo en voz alta. Repasa tu código línea por línea, ya sea a una persona o a un patito de goma. El error de software suele manifestarse a mitad de una frase.
- Utiliza las pistas paso a paso. Muchas plataformas ofrecen una pista antes de la respuesta completa. Sigue la pista y vuelve a intentarlo.
Bajo ninguna circunstancia copies una solución, la dejes pasar y sigue adelante. Yo lo hice durante un tiempo y no conseguí nada. Si lees una respuesta, cierra la pestaña, espera una hora y vuelve a intentarlo tú mismo.
Desafíos de programación con temática de criptomonedas para principiantes en blockchain
Quizás los pagos con criptomonedas o la tecnología blockchain sean la razón por la que quisiste aprender a programar. Entonces, practica con problemas de ese ámbito. Los fundamentos son los mismos (cadenas de caracteres, números enteros, API), pero las tareas se parecen mucho más al trabajo técnico del mundo real. No necesitas comprender los algoritmos de consenso para ninguna de ellas.
- Obtén el precio de una criptomoneda en tiempo real. Accede a una API pública gratuita de precios de criptomonedas, imprime el precio actual de Bitcoin y actualiza cada minuto. Hola, solicitudes HTTP y JSON.
- Valida el formato de una dirección de monedero. Comprueba si una cadena de texto parece una dirección plausible: longitud correcta, prefijo correcto, solo caracteres permitidos. Un excelente ejercicio con cadenas de texto y una introducción sencilla a las expresiones regulares.
- Construye un convertidor de unidades. Satoshis a BTC (1 BTC = 100 000 000 satoshis), wei a ETH (1 ETH = 10¹⁸ wei). Descubrirás rápidamente por qué los números de coma flotante y el dinero no se llevan bien, y por qué los desarrolladores usan cantidades como números enteros.
- Calcula el hash de una cadena con SHA-256. Calcula el hash de una frase con tu biblioteca estándar, cambia una letra y vuelve a calcularlo. El resultado será totalmente diferente. Esta propiedad es fundamental para la cohesión de las cadenas de bloques.
- Crea una página de pago sencilla. Una página de producto con un botón "Pagar con criptomonedas" que genere una factura de prueba a través de una API de pasarela de pago.
Ese último paso une todo lo demás: un formulario, una llamada a la API, el manejo de errores y la visualización del resultado para un usuario real. Plataformas como Plisio publican una API y documentación que puedes integrar en una tienda de prueba, lo que hace que un ejercicio para principiantes se parezca mucho a una integración de comercio electrónico real.
Comienza hoy mismo tu práctica de programación con un solo problema.
Cuando pienso en lo que realmente me ayudó a superar mis dificultades como principiante, no fue ningún problema legendario y difícil. Los mejores retos de programación para principiantes resultaron ser esos pequeños y aburridos problemas que logré resolver, generalmente a altas horas de la noche con una taza de té frío junto a la computadora portátil.
Así que abre un editor esta noche y haz funcionar FizzBuzz, con código feo y todo. Sigue con mi lista mientras te resulte divertido, y cuando deje de serlo, cambia al sitio de la tabla que te parezca más amigable. Mantén el hábito tan pequeño que saltártelo te parezca ridículo. Dentro de un mes, algunos de estos te parecerán casi aburridos, y ese aburrimiento es prácticamente lo que se siente al tener verdaderas habilidades de programación.