Los mejores retos de programación para principiantes: Práctica de programación de fácil a difícil

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.

Los mejores retos de programación para principiantes

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.

Los mejores retos de programación para principiantes

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Repasa problemas antiguos. Una semana después, intenta resolver uno de memoria. Si no puedes, significa que lo memorizaste en lugar de comprenderlo.
  6. 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.

¿Alguna pregunta?

¿En serio? FizzBuzz, igual que casi todos. Solo requiere un bucle y un par de sentencias if, y se puede explicar de un tirón, pero aun así mucha gente se equivoca en el orden de las comprobaciones al primer intento. Invertir una cadena es un buen segundo paso.

Edabit es la plataforma que le recomendaría a un principiante absoluto, principalmente porque los problemas son cortos y no requiere instalación. Más adelante, Codewars se vuelve adictiva gracias a su sistema de clasificaciones y a la posibilidad de leer las soluciones de todos. Exercism ofrece mentores gratuitos, algo poco común. freeCodeCamp es ideal para quienes prefieren un camino preestablecido. LeetCode puede esperar, ya que incluso sus problemas fáciles dan por sentado que se tienen conocimientos básicos.

Para la mayoría de la gente, Python es la mejor opción, en parte porque su sintaxis es sencilla y te permite concentrarte en la lógica en lugar de en paréntesis y puntos y coma. Si ya sabes que quieres crear sitios web, JavaScript es igual de recomendable, ya que todos los navegadores lo ejecutan. Cualquiera de las dos opciones es válida para retos de programación, y sinceramente, lo más importante es mantener la elección, no la elección en sí.

De uno a tres, y lo digo como un límite máximo, no como una meta cuando eres principiante. Dos problemas al día durante un mes te enseñarán más que treinta concentrados en un solo fin de semana. Usa el tiempo restante para comprender bien cada solución y ver cómo la abordaron otras personas.

Curiosamente, sí se simplifican, aunque los problemas en sí nunca se vuelven más sencillos. Lo que cambia es que empiezas a notar con qué frecuencia se repiten los mismos patrones: bucles, condicionales, manejo de cadenas, conteo con diccionarios y recorrido de matrices. Alrededor del problema cuarenta, te sorprenderás pensando: "Ah, es uno de estos otra vez", y ahí radica el cambio.

Empieza por reescribir el problema con tus propias palabras, ya que, según mi experiencia, aproximadamente la mitad de los momentos de bloqueo se deben a errores de interpretación. El papel también ayuda. Resuelve un pequeño ejemplo a mano, anota lo que hiciste y esa lista se convertirá en tu pseudocódigo. Las instrucciones print te mostrarán qué contienen realmente tus variables. Y si pasan veinte o treinta minutos sin que lo consigas, una pista está bien, pero la respuesta completa no suele ser suficiente.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.