Melhores Desafios de Programação para Iniciantes: Prática de Programação Fácil a Difícil

Melhores Desafios de Programação para Iniciantes: Prática de Programação Fácil a Difícil

Tem uma coisa que ninguém te avisa. Você pode maratonar tutoriais por um mês, concordar com tudo que é dito nos vídeos e, de repente, abrir um arquivo em branco e não ter a menor ideia do que digitar. Eu já passei por isso. A maioria das pessoas que aprendem a programar já passou.

A solução é simples, mas funciona: resolva pequenos problemas por conta própria, mesmo que no começo seja ruim. Este guia tem duas partes. A primeira é uma seleção criteriosa dos melhores desafios de programação para iniciantes (dez deles, de níveis fácil a difícil). A segunda parte apresenta os sites onde você encontrará milhares de outros desafios depois de concluir os meus.

Qualquer linguagem de programação serve. Meus exemplos usam Python e um pouco de JavaScript, já que é por aí que a maioria das pessoas começa. Siga a ordem, se possível. Cada problema introduz uma nova ideia.

Por que os desafios de programação desenvolvem habilidades reais de programação?

O que conta como um desafio? Algo pequeno com uma resposta certa óbvia. "Pegue uma palavra e diga-a ao contrário." "Aqui está uma lista de números, qual é o maior?" Você não instala nada nem escolhe uma estrutura. Você escreve, talvez, dez linhas.

Assistir a um tutorial significa acompanhar o raciocínio de outra pessoa. Os desafios de programação invertem isso, e é desconfortável de uma forma útil. Você tenta adivinhar, algo dá errado, você examina o erro com atenção e tenta novamente. Faça isso por algumas semanas e algumas coisas vão ficando mais fáceis aos poucos.

  • Domínio da sintaxe. Chega de pesquisar no Google pela quinta vez como escrever um loop for.
  • Habilidades de resolução de problemas. Você começa a dividir uma tarefa complexa em etapas antes mesmo de tocar no teclado.
  • Pensamento lógico. Uma lista vazia, um número inteiro negativo, uma palavra de uma letra. Você começa a esperar por isso.
  • Depuração. Texto de erro em vermelho deixa de parecer um insulto.
  • Confiança. Cada problema resolvido é a prova de que você consegue escrever um programa sozinho.

Uma vez me disseram que a programação tem sua própria regra 80/20, e para problemas de iniciantes, ela é bem precisa. A maioria deles se baseia nos mesmos cinco movimentos: loops, if/else, manipulação de strings, contagem de elementos em um dicionário e percorrer arrays. Domine esses movimentos e muitos problemas "novos" se revelarão apenas problemas antigos com uma nova roupagem.

Melhores desafios de programação para iniciantes

10 Desafios de Programação Fáceis para Iniciantes Resolverem Primeiro

Nenhuma dessas opções é original, e esse é justamente o objetivo. Elas aparecem em quase todos os cursos para iniciantes porque funcionam. As cinco primeiras só precisam de loops, condições e um pouco de manipulação de strings ou listas, enquanto as cinco últimas fazem você pensar em qual estrutura de dados usar antes de digitar qualquer coisa. Seja como for, tente não pesquisar no Google por pelo menos vinte minutos, mesmo que pareça inútil.

Desafio 1: FizzBuzz

A tarefa é imprimir os números de 1 a 100, mas todos os múltiplos de três aparecem como "Fizz", todos os múltiplos de cinco como "Buzz" e os números que são múltiplos de ambos aparecem como "FizzBuzz".

Lembro-me de ter achado quase insultante o quão simples parecia. Mas não é bem assim, e é por isso que os entrevistadores gostaram tanto dessa abordagem durante tanto tempo. Quem leu muito sobre programação, mas escreveu muito pouco, geralmente tropeça na ordem das verificações. Minha versão em Python é assim:

python para n em range(1, 101): se n % 15 == 0: print("FizzBuzz") senão se n % 3 == 0: print("Fizz") senão se n % 5 == 0: print("Buzz") senão: print(n)

Assim que o seu funcionar, arraste a linha de 15% até o final, execute-o e veja quantos FizzBuzzes sobrevivem. Spoiler: nenhum.

Desafio 2: Inverter uma string

"Olá" entra, "olleh" sai.

Existe um atalho em praticamente todas as linguagens, como `s[::-1]` em Python ou `split("").reverse().join("")` em JavaScript, e não há problema em escrevê-lo uma vez só para ver como funciona. Depois disso, eu sinceramente o apagaria e faria a versão mais simples com um loop que adiciona um caractere por vez. É aí que você percebe que, na maioria das linguagens, uma string não pode ser alterada diretamente, o que confunde muita gente mais tarde se não aprenderem isso aqui.

Desafio 3: Verificador de Palíndromos

Um palíndromo é uma palavra como "racecar" ou "noon" que se lê da mesma forma em ambas as direções, portanto sua função deve dizer sim para essas e não para "hello".

Quando isso funcionar, é um bom momento para aprimorar suas habilidades de programação, enviando a seguinte mensagem: "Um homem, um plano, um canal: Panamá", que só será processada depois que você converter o texto para minúsculas e remover os espaços e a pontuação. Você pode usar o código de inversão de strings do último desafio para isso, o que é ótimo.

Desafio 4: Sequência de Fibonacci

Você provavelmente já viu a sequência: 0, 1, 1, 2, 3, 5, 8, 13, onde cada número é a soma dos dois anteriores. Sua função deve retornar os primeiros n desses números.

Duas variáveis e um loop são suficientes. A diversão começa quando você reescreve o código com recursão, de forma que a função chame a si mesma e, em seguida, solicite n = 35. Na maioria dos laptops, você terá que esperar um pouco, e descobrir o porquê disso acontece é uma introdução suave à programação dinâmica. É um daqueles pequenos momentos de "ah, agora entendi" que ficam na memória.

Desafio 5: Rotacionar uma matriz

Considere um array e um número k, e então mova cada elemento k posições para a direita, com os elementos no final voltando para o início. Com [1, 2, 3, 4, 5] e k = 2, você deve terminar com [4, 5, 1, 2, 3].

A maioria das primeiras tentativas falha quando k é maior que a lista. Rotacionar cinco itens por 7 é, na verdade, rotacioná-los por 2, o que fica óbvio depois de observado, mas invisível até então.

Se você conseguiu superar esses cinco sem muita dificuldade, parabéns. Os próximos exigem um pouco mais de você.

Desafio 6: Encontre o maior número inteiro em um array

Encontrar o maior número é fácil se você puder usar a função `max()`, mas você não pode. Em vez disso, use um loop e encontre o segundo maior número sem percorrer a lista duas vezes. Agora você está controlando dois valores e precisa ter cuidado com qual deles você atualiza primeiro.

Números duplicados e negativos são bons exemplos para testes, já que muitas soluções iniciais falham silenciosamente nesses casos.

Desafio 7: Contar as vogais em uma frase

Contar as vogais é o aquecimento. O exercício em si consiste em contar cada vogal individualmente e retornar algo como {"a": 3, "e": 5, "i": 1, "o": 2, "u": 0}.

Para muitos iniciantes, este é o momento em que os dicionários (ou objetos em JavaScript) finalmente fazem sentido, e isso importa, porque provavelmente será a estrutura de dados na qual você mais se apoiará durante o próximo ano.

Desafio 8: Verificador de Anagramas

Anagramas usam exatamente as mesmas letras em uma ordem diferente, como "listen" e "silent", então você está escrevendo uma função que verifica se duas strings são anagramas.

Existem duas maneiras razoáveis que eu conheço. Você pode ordenar ambas as strings e comparar os resultados, ou pode contar quantas vezes cada letra aparece e comparar essas contagens. Escrever ambas as opções e depois se perguntar qual delas exige menos trabalho é basicamente o primeiro passo para pensar em eficiência.

Desafio 9: Soma de Dois

Com uma lista como [2, 7, 11, 15] e um alvo de 9, você retorna as posições dos dois números que somam o alvo, que aqui é [0, 1].

A maioria das pessoas começa com dois loops aninhados que tentam todos os pares, o que funciona bem para listas curtas, mas fica lento rapidamente. A abordagem mais rápida mantém os números que você já viu em um dicionário, para que você possa consultá-los instantaneamente. Não é por acaso que o LeetCode colocou essa abordagem em primeiro lugar, pois ela demonstra claramente a importância da estrutura de dados correta.

Desafio 10: Jogo de Adivinhação de Números

Nesse processo, o computador escolhe um número secreto entre 1 e 100, você tenta adivinhar e ele avisa "muito alto" ou "muito baixo" até você acertar, além de informar quantas tentativas foram necessárias.

Não se trata tanto de um simples quebra-cabeça de programação, mas sim de um pequeno aplicativo com entrada do usuário, um loop while e números aleatórios. Alguém eventualmente digitará "banana" em vez de um número, então você também terá que lidar com entradas inválidas. E, ao contrário dos outros, este você pode realmente pedir para um amigo jogar.

Melhores sites para desafios de programação online

Depois que minhas dez contas acabarem, você vai querer um suprimento infinito com verificação automática. Todos esses sites de desafios de programação online fazem isso. Só que a experiência é bem diferente.

Plataforma Ideal para Formatar Custo
Edabit Iniciantes absolutos Desafios de programação rápidos no navegador Nível gratuito
Guerras de Códigos Prática gamificada Classificado "kata" com soluções da comunidade Livre
Exercício físico Aprender bons hábitos Cursos de idiomas com tutores humanos opcionais Livre
freeCodeCamp Aprendizagem estruturada Currículo com exercícios e certificações integrados. Livre
HackerRank Cursos de capacitação e preparação para o mercado de trabalho Problemas baseados em tópicos com rótulos de dificuldade Gratuito para estudantes
LeetCode Preparação para entrevistas Problemas algorítmicos classificados como Fácil/Médio/Difícil Nível gratuito
CodeChef Caminhando rumo às competições Percursos de treino mais competições regulares Nível gratuito
Projeto Euler Amantes da matemática Quebra-cabeças com muita matemática, envio apenas da resposta. Livre
Advento do Código Diversão sazonal Quebra-cabeças diários com histórias envolventes, todos os meses de dezembro. Livre

Edabit

Se um amigo me perguntasse por onde começar, eu diria Edabit. Os problemas são curtos, tudo roda no navegador e você ganha XP. Python, JavaScript, Java, C++ e algumas outras linguagens são abordadas, e o rótulo "muito fácil" significa realmente muito fácil.

Guerras de Códigos

O Codewars chama seus problemas de kata (um termo das artes marciais para exercícios). Eles são classificados de 8 kyu, o mais fácil, até 1 kyu. A mágica acontece depois que você envia a sua resposta. Você consegue ver as respostas de todos os outros, e comparar suas dez linhas desajeitadas com a solução concisa de duas linhas de alguém te ensina mais do que a maioria dos tutoriais.

Exercício físico

O Exercism é administrado como uma organização sem fins lucrativos e é totalmente gratuito. Há trilhas de aprendizado para mais de 80 linguagens, e mentores voluntários podem revisar seu código se você solicitar. Você pode permanecer no navegador ou baixar os exercícios para o seu computador. Eu recomendo a segunda opção, pois ela ajuda a se familiarizar com o Visual Studio Code e o terminal.

freeCodeCamp

Não é exatamente um site de desafios. É um currículo completo, mas é construído a partir de centenas de pequenos exercícios de programação, então se encaixa perfeitamente. Ótimo se você gosta de estrutura: JavaScript, Python, design responsivo para web e muito mais, com projetos de certificação ao final de cada trilha.

HackerRank

O HackerRank organiza os problemas em categorias de habilidade (Python, SQL, estruturas de dados, algoritmos) e informa a dificuldade de cada um, além de quantas pessoas o resolveram. Muitas empresas usam essa plataforma para selecionar candidatos. Familiarizar-se com a interface agora evita estresse mais tarde.

LeetCode

Este é o terreno da preparação para entrevistas. Os problemas são classificados como Fáceis, Médios e Difíceis, e mesmo o "Fácil" pressupõe que você domine o básico. Eu encararia os desafios de programação como um caminho a seguir, não como o ponto de partida. Volte quando meus dez desafios parecerem rotina.

CodeChef

O CodeChef surgiu como um site de programação competitiva. Hoje em dia, ele também oferece trilhas de prática para iniciantes, além de suas competições regulares. Portanto, se competições cronometradas lhe parecem interessantes, é um ótimo lugar para experimentar.

Projeto Euler

Problemas de matemática que exigem código para serem resolvidos. Não há editor no site. Você escreve o programa onde quiser e digita apenas o número final. Os especialistas em matemática adoram. O resto tende a não gostar.

Advento do Código

Todo mês de dezembro, você recebe um quebra-cabeça em duas partes por dia, interligado por uma história divertida. Recentemente, o desafio foi reduzido de 25 para 12 dias e o ranking global foi removido, então hoje em dia são principalmente rankings privados com amigos ou colegas de trabalho. Os quebra-cabeças mais antigos ficam disponíveis o ano todo, e o arquivo é uma biblioteca fantástica para praticar.

Você também ouvirá falar da Coderbyte, que combina desafios com cursos preparatórios para entrevistas, e da Topcoder, que é voltada para desenvolvedores experientes.

Um aviso. Muitas listas antigas ainda direcionam você para o Google Code Jam e o Kickstart. O Google encerrou ambos em 2023, e restam apenas os arquivos com os problemas relatados.

Melhores desafios de programação para iniciantes

Como praticar desafios de programação sem se esgotar

Adicionar dez sites aos favoritos não te torna uma pessoa melhor. O que te torna melhor é o hábito. Eis mais ou menos o que eu faria:

  1. Escolha uma linguagem de programação e mantenha-se fiel a ela. Python é a escolha mais comum porque sua linguagem é quase como inglês. JavaScript faz sentido se você quiser criar sites.
  2. Configure um editor de código de verdade. Editores de navegador são suficientes para a primeira semana. Instalar o Visual Studio Code logo no início ensina você a executar arquivos, ler erros em um terminal e explorar o código com um depurador.
  3. Resolva de um a três problemas por dia. Praticar programação diariamente em pequenas doses é melhor do que estudar seis horas seguidas no domingo. Os padrões se consolidam entre as sessões, e um objetivo pequeno é difícil de ignorar.
  4. Depois de terminar, leia outras soluções. No Codewars ou no Exercism, dê uma olhada em duas ou três outras respostas. Você vai aprender boas práticas e alguns truques realmente inteligentes que valem a pena copiar.
  5. Relembre problemas antigos. Uma semana depois, refaça um deles de memória. Se não conseguir, é porque você o memorizou em vez de compreendê-lo.
  6. Passe para projetos menores. Por volta de 30 a 50 problemas, construa algo: uma lista de tarefas, um aplicativo de previsão do tempo usando uma API gratuita, um jogo de aventura em texto. É aí que habilidades distintas começam a trabalhar juntas.

O que fazer quando você fica preso em um desafio de programação

Você vai ficar preso em algum ponto. Até mesmo desenvolvedores experientes ficam presos antes do almoço. Mas eles têm uma rotina para sair desse impasse, então aproveite uma delas:

  • Reformule o problema com suas próprias palavras. Um número surpreendente de momentos em que pensamos "Não consigo resolver isso" são, na verdade, "Eu interpretei errado".
  • Faça um exemplo manualmente. Use apenas caneta e papel e anote cada passo que você der. Parabéns, esse é o seu algoritmo.
  • Primeiro, escreva o pseudocódigo. "Para cada número, se for maior que o meu maior número atual, mantenha-o." É mais fácil corrigir erros em linguagem simples do que em código.
  • Imprima tudo. A maioria dos erros está em uma variável que contém um valor diferente do que você esperava. Imprima-a e descubra.
  • Explique em voz alta. Analise seu código linha por linha, para uma pessoa ou um patinho de borracha. O bug de software geralmente se revela no meio de uma frase.
  • Use as dicas passo a passo. Muitas plataformas oferecem uma dica antes da resposta completa. Use a dica e tente novamente.

Seja o que for que você faça, não copie uma solução, observe-a passar e siga em frente. Eu fiz isso por um tempo e não cheguei a lugar nenhum. Se você ler uma resposta, feche a aba, espere uma hora e refaça o problema você mesmo.

Desafios de programação com temática criptográfica para iniciantes em blockchain

Talvez os pagamentos com criptomoedas ou a tecnologia blockchain sejam o motivo pelo qual você quis aprender a programar. Então, pratique resolvendo problemas desse universo. Os fundamentos são idênticos (strings, inteiros, APIs), mas as tarefas se parecem muito mais com o trabalho técnico do mundo real. Você não precisa entender algoritmos de consenso para nenhuma dessas áreas.

  • Obtenha o preço de uma criptomoeda em tempo real. Acesse uma API pública gratuita de preços de criptomoedas, imprima o preço atual do Bitcoin e atualize a cada minuto. Olá, requisições HTTP e JSON.
  • Valide o formato de um endereço de carteira. Verifique se uma string parece um endereço plausível: comprimento correto, prefixo correto, apenas caracteres permitidos. Uma ótima prática com strings e uma introdução suave a expressões regulares.
  • Crie um conversor de unidades. Satoshis para BTC (1 BTC = 100.000.000 satoshis), wei para ETH (1 ETH = 10¹⁸ wei). Você descobrirá rapidamente por que números de ponto flutuante e dinheiro não se dão bem e por que os desenvolvedores mantêm os valores como números inteiros.
  • Faça o hash de uma string com SHA-256. Faça o hash de uma frase com sua biblioteca padrão, troque uma letra e faça o hash novamente. O resultado será totalmente diferente. Essa propriedade é uma parte importante do que mantém as blockchains funcionando.
  • Crie uma página de finalização de compra simples. Uma página de produto com um botão "Pagar com criptomoeda" que gera uma fatura de teste por meio de uma API de gateway de pagamento.

Esse último elemento integra todos os outros: um formulário, uma chamada de API, tratamento de erros e a exibição do resultado para um usuário real. Plataformas como a Plisio disponibilizam uma API e documentação que você pode integrar a uma loja virtual de teste, o que faz com que um exercício para iniciantes se pareça muito com uma integração real de e-commerce.

Comece a praticar programação com um problema hoje mesmo.

Quando penso no que realmente me ajudou a sair do impasse quando era iniciante, não foi nenhum problema lendário e difícil. Os melhores desafios de programação para iniciantes acabaram sendo aqueles pequenos e tediosos que eu realmente consegui terminar, geralmente tarde da noite, com chá frio ao lado do laptop.

Então abra um editor hoje à noite e faça o FizzBuzz funcionar, com o código feio e tudo. Continue seguindo minha lista enquanto ainda for divertido, e quando deixar de ser, mude para o site que parecer mais amigável da tabela. Mantenha o hábito tão pequeno que pular essa etapa pareça um pouco ridículo. Daqui a um mês, algumas dessas tarefas parecerão quase entediantes, e esse tédio é praticamente a sensação de ter habilidades reais de programação.

Alguma pergunta?

Sinceramente? FizzBuzz, igual a quase todo mundo. Só pede um loop e algumas instruções if, e dá para explicar tudo de uma vez, mas mesmo assim muita gente erra a ordem das verificações na primeira tentativa. Inverter uma string é um bom segundo passo.

O Edabit é a plataforma que eu recomendaria para um iniciante completo, principalmente porque os problemas são curtos e você nunca precisa instalar nada. Mais tarde, o Codewars se torna viciante graças ao seu sistema de classificação e à possibilidade de ler as soluções de todos. O Exercism oferece mentores gratuitos, o que é raro. O freeCodeCamp é ideal para quem prefere um caminho mais definido. O LeetCode pode esperar, já que até mesmo os problemas mais fáceis pressupõem conhecimentos básicos.

Eu diria que Python é a melhor opção para a maioria das pessoas, em parte porque a sintaxe não atrapalha e você pode se concentrar na lógica em vez de se preocupar com parênteses e ponto e vírgula. Se você já sabe que quer criar sites, JavaScript faz tanto sentido quanto, já que é compatível com todos os navegadores. Qualquer uma das duas é boa para desafios de programação e, honestamente, manter a sua escolha é mais importante do que a escolha em si.

De um a três, e digo isso como um limite máximo, não como uma meta, quando você é iniciante. Resolver dois problemas por dia durante um mês vai te ensinar mais do que trinta em um único fim de semana. Eu usaria o tempo restante para realmente entender cada solução e observar como outras pessoas a abordaram.

Sim, por mais estranho que pareça, mesmo que os problemas em si nunca fiquem mais simples. O que muda é que você começa a perceber com que frequência os mesmos padrões se repetem, coisas como loops, condicionais, manipulação de strings, contagem com dicionários e percorrer arrays. Lá pelo quadragésimo problema, você se pega pensando "ah, é um desses de novo", e essa é a virada.

Comece reescrevendo o problema com suas próprias palavras, pois, na minha experiência, cerca de metade dos momentos de "travamento" são, na verdade, erros de interpretação. Papel também ajuda. Resolva um pequeno exemplo à mão, anote o que você fez e essa lista se tornará seu pseudocódigo. Instruções de impressão mostrarão o que suas variáveis realmente armazenam. E se vinte ou trinta minutos se passarem sem que você consiga resolver nada, uma dica é suficiente, mas a resposta completa geralmente não.

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.